SPI可以安全中断吗?
电器工程
嵌入式
spi
中断
微信
2022-01-12 22:59:35
2个回答
绝大多数 SPI 设备在低于指定最大值的任何数据速率下都非常满意。一个人可以执行交易的一部分,在任何时候休息一下,几年后回来,然后完成它。如果时钟、选择或电源线上没有故障,则事务将正常完成。
需要注意三个主要警告:
- 通常,一旦 SPI 总线上的事务开始,在事务完成之前,总线上的任何线都不能用于任何其他目的。一般来说,这意味着一个中断可能不使用 SPI 总线,除非它是唯一使用总线的东西(有时中断可能会独占使用总线,而主程序在其他时间专用)。一些设备包含特殊引脚,让它们在事务处理过程中“忽略”总线,但即使有这样的功能,我也不建议尝试让中断挂起与一个设备的 SPI 事务,与其他一些设备执行事务,然后让底层代码恢复与第一个的事务。最好让中断使用单独的 SPI 总线。
- 如果交易持续时间过长,某些设备可能会出现异常行为。例如,一些实时时钟芯片不会对时间/日期寄存器进行双重缓冲,而是锁存事务期间可能发生的任何“时间提前”事件,并在事务完成后应用它们。如果事务花费的时间太长以至于第二个时间提前事件到达,则后一个事件将被忽略,导致时钟滑动该时间量。我真的看不出以这种方式设计芯片的任何借口(即使一个人不想要双缓冲数据的成本,指定软件负责确保其一致性比添加“更新延迟”逻辑更便宜,并且会最大限度地减少时钟干扰的可能性),但存在这样的芯片。
- 有一些设备使用时钟和数据信号,但使用“暂停”来表示帧。我遇到的最新示例是每个灯泡的控制器 LED 灯串。我不是特别喜欢这样的设计(也可以使用数据线上的三个连续上升沿来指示帧,而没有任何干预时钟),但同样,这样的设备确实存在。
虽然某些类型的通信需要使用特定的时序,但 SPI 设备很少有任何理由需要它们。尽管如此,人们必须注意此类设备的存在。
检查规范的副本(由于版权/ NDA 的原因我不能引用)SPI 速率从 0Hz 开始指定,这意味着静态操作很好。在 SPI 下,您只能在设备计时时取回数据,因此如果使用硬件 SPI,您只会在发送数据(即使 0 / 不关心)后收到一些东西。因此,在这方面,它与 UART 不同,您可以随时接收未经请求的数据。
其它你可能感兴趣的问题