SPI(串行外设接口)问题

SPI (serial peripheral interface) question

如果我有一个项目包含两个控制器并使用SPI在它们之间进行通信,我将其中一个设置为主机,另一个设置为从机,然后将主机更改为从机,从机是否可以找到被自己说他要当主人了?

if changed the master to a slave can the slave find out by himself that he has to become the master ?

没有。 SPI 是一个非常简单的协议规范。或者也许“协议”太多了——它是一种如何传输位的规范。主机启动传输并提供时钟信号。没有时钟就没有通信。没有主人就没有时钟。没有主人就没有交流。两个连接的奴隶永远不会互相交谈。

can the slave find out by itself that he has to become the master?

当然可以。您可以创建自己的协议 and/or 机制来执行此操作,建立在顶部或单独使用 SPI 协议。

简单的解决方案是要求主人发出“心跳”,主人保证启动常规交易 - 这可能是真实的或一些虚拟的“保持活动”交易,甚至只是 activity 在 slave-select 行上,根本没有数据。如果当前的master想要互换角色,就直接变成slave,等待之前的slave超时,切换到master角色。

要换回,新的主设备简单地成为从设备并等待从设备超时并成为主设备。

当第一次从master切换到slave时,新的slave应该无限期地等待另一个节点超时并成为master并开始数据交换,在初始数据交换之后它应该设置超时。

超时解决方案的缺点是切换角色的必要延迟。如果您连续发送数据(即使它是虚拟数据)超时,因此切换可能会很短。

一种更优雅的方法是使用额外的 GPIO 线进行握手和仲裁。然而,这可能是不必要的。如果您要解决的问题是您需要从站启动数据传输,那么您根本不需要角色切换,您只需一个传输请求 (TXFER_REQ) 控制线,它是一个 GPIO 输出从奴隶和主人的输入或中断。当slave要发送数据时,设置TXFER_REQ信号,master通过发起数据交换来响应。这就是 SPI UART 等双向 SPI 设备的工作原理。检查此类设备的数据 sheet 以了解其工作原理并模拟该行为,而不是发明新的、更复杂且可能存在缺陷的东西。