【问题标题】:SPI (serial peripheral interface) questionSPI(串行外围接口)问题
【发布时间】:2021-03-16 15:25:36
【问题描述】:

如果我有一个包含两个控制器的项目并使用 SPI 在它们之间进行通信,并且我将其中一个配置为主机,另一个配置为从机,然后将主机更改为从机,从机可以通过 本身他必须成为主人?

【问题讨论】:

  • 你用什么 C 库来做 SPI?
  • 一种软件解决方案是在主设备成为从设备之前发送特定的 SPI 消息,告诉另一个芯片交换他的 SPI 外设配置成为主设备。如果您无法触摸其他控制器的软件,我会说这是不可能的,但这取决于硬件
  • 这看起来像是一个 XY 问题。你想通过角色转换来达到什么目的。很可能还有其他不涉及角色切换的解决方案。
  • @andreihondrari - 这有关系吗?他使用图书馆甚至不是一个礼物。请注意嵌入式标签 - 可能正在使用寄存器级访问。无论如何,它对 SPI 的工作方式影响不大。
  • @Clifford 可以,这取决于给定库可以做什么,这意味着它甚至可以实现您和 KamilCuk 在您的答案中提到的那种协议。这就是我问的原因。

标签: c embedded spi


【解决方案1】:

如果把主人变成奴隶,奴隶可以自己发现他必须成为主人吗?

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

奴隶自己发现他必须成为主人吗?

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

【讨论】:

    【解决方案2】:

    简单的解决方案是要求主机发出“心跳”,主机保证启动常规事务 - 这可能是真实的或一些虚拟的“保持活动”事务,甚至只是从机上的活动 -选择完全没有数据的行。如果当前的master想要交换角色,就直接变成slave,等待前一个slave超时,切换到master角色。

    要交换回来,新的主设备只需成为从设备并等待从设备超时并成为主设备。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2015-09-17
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2016-03-03
      • 2021-04-06
      相关资源
      最近更新 更多