我在网上读到,要开始对 SPI 支持的设备进行 SPI 事务,SS(从选择,又名芯片选择)线必须在整个事务中设置为低电平,然后在端到端事务中设置为高电平。如果我制作一个只包含一个 SPI 设备的电路,我是否需要降低 SS 线发送命令然后每次提高 ss 线,或者我可以将 ss 线拉低并发送无限的命令?我使用的设备是ISD1700 声音芯片。
如果只使用一个 SPI 设备,SS 引脚可以拉低吗?
[@Kevin 和@akohlsmith 应该发表他们的评论作为答案。
这是为了扩展他们的评论。]
SPI 1没有规定 SS 的确切行为(从属选择线2)。此行为取决于每个单独设备的实现。我已经看到可以在 SS 永久启用的情况下运行的设备。我还看到需要 SS 上的下降沿和上升沿的设备。
虽然没有明确说明必须切换 SS,
但设计指南(第 31 页)说 SS 启动和结束 SPI 事务。谨慎的做法是假设必须切换 SS 才能使 SPI 事务通过。
1 SPI 更像是一种习惯,而不是一种标准。
2 CS(片选)是从机选择的别称。
这完全取决于从设备。
如果从设备的协议包括某种帧,无论是固定长度的数据包、开始/停止字节还是指定数据包长度的标头,那么从设备可能能够在没有芯片选择的情况下运行。我目前正在研究的板上有一个 SPI 闪存芯片,无论有没有芯片选择,它似乎都非常满意。它可以毫无问题地永久连接到 0V(启用)。
这实际上给我们带来了一些问题,因为承包商已经设置了一些低级 I/O,包括 SPI,而我们(和他们!)没有意识到他们没有让芯片选择工作。直到我不得不扩展他们的 SPI 工作以在同一总线上添加另一个 SPI 设备时,我才发现我们实际上没有芯片选择!
相反,许多从设备确实需要芯片选择来成帧数据,并且发送比预期数据包更多的位/字节而不在最后释放芯片选择将被视为无效传输并被拒绝。DAC 通常会将新值加载到片选上升沿的输出上。同样,ADC 通常会使用 SPI 传输来启动(有时是定时)转换,因此它们需要片选下降沿作为触发。
您的数据表实际上并没有说明如何通过 SPI 驱动您的特定芯片,而且我没有足够的动力去谷歌搜索它。练习留给读者... ;)
在不了解 SPI 从设备的任何具体信息的情况下,不,您不能将 SS 拉低。
许多设备使用 SS 的前沿将其内部逻辑重置为新事务的开始。例如,内存可能会将前两个字节解释为地址,然后将后续字节解释为数据。在 SS 被取消断言之前,一些内存不会执行物理写入。
对于某些具有正确协议的设备,您也许可以摆脱它。但是,它不适用于那里的大多数设备。