SPI 从机可以在全双工模式下启动传输吗?

电器工程 微控制器 spi UART 串行
2022-01-07 22:55:21

据我所知,SPI 从机的 SPI 传输工作如下:

  1. 主机使用 SS 引脚选择从机
  2. 主机和从机同时发送数据
  3. Master同时启动时钟和数据传输(写操作前没有时钟)
  4. 主机随时停止传输(通过停止写操作和时钟生成),即使从机有更多数据要发送。

是否有任何 SPI 从机配置允许从机在未经主机许可的情况下传输数据?

我只是在大声思考。假设只有一个slave,并且master等提供一个连续的时钟。

即使假设的陈述是正确的,由于没有 SPI 的开始-停止位,主从不会丢失字节同步(即接收比特流)吗?

我问这样一个问题是因为我已经阅读了本文档中的以下部分。

2.2 SPI 示例

随附的 SPI 示例说明了 USART 在同步模式下的使用。USART1 配置为从机,而 USART2 为主机。发生以下交易:

  • 从主机到从机的数据传输。
  • 从机到主机的数据传输。
  • 从主机到从机和从机到主机的数据传输同时进行。

文档给出了 SPI 示例但使用 USART 设备实现示例。而且我知道USART从机可以在未经主机许可的情况下开始传输。

我找不到文档引用的源代码。

2个回答

不,使用 SPI,所有通信都由主设备驱动。您是正确的,主人不能简单地提供一个连续的时钟;将无法检测字节边界。

从设备通常有一个单独的输出引脚来向主设备发出信号,表明它有可用的数据。该引脚连接到微控制器的输入端,通常用作中断。

然后,设备可以断言该引脚,使微控制器启动 SPI 总线。


有关更多详细信息,请继续阅读 :) 这是对此处的解释稍作修改的版本

从设备只有在从主设备提供时钟时才能进行通信。这会使从从机的读取变得复杂,因为您必须使主机提供足够的时钟周期以供从机响应。

当您从主机发送 SPI 命令时,实际上在相同的八个时钟脉冲期间发生了两次传输。第一个是您的字节从 MOSI 线输出。但是,与此同时,数据正在通过 MISO 线输入到微控制器中。

但是由于从机直到这些事务结束才得到完整的命令,所以它不会向总线提供任何数据。这导致接收到的值为 0x00 或 0xFF。

然后您需要提供额外的八个时钟以允许从机返回实际值。在许多代码实现中,这是通过向从设备发送“虚拟字节”来完成的。

请注意,在第一次传输中,主设备忽略从从设备到达的任何内容。在第二次传输中,从机忽略主机发送的任何内容。

这描述了一般情况。可能会有额外的复杂性。例如,一些从机 IC 实际上会在它们接收来自主机的命令的同时输出某种状态字节。因此,在这种情况下,主机不应丢弃第一个接收到的字节。

不,master 是仲裁芯片选择和驱动时钟的那个。从机将始终只听时钟和片选。数据传输仍然可以是全双工的。在某些实现中,时钟可以是连续的,但这并不重要,因为无论如何都使用片选来同步字节边界。但是还有多主系统,所以基本上你可以有一些机制让设备决定谁是从属和主控。或者只是为从属设备添加一条单独的“中断”线,以向主设备发送信号,告知主设备它有一个用于主设备的数据包。