SPI和I2C读/写访问之间的区别

时间:2018-07-29 19:50:48

标签: i2c spi

我有以下问题。使用SPI和I2C协议时,读/写操作之间有什么区别?例如,我有2个不同的传感器,一个通过SPI接口,另一个通过I2C接口。

因此,I2C读取如下:

  1. 发送7位从站地址,然后设置读取位
    可以识别正确的奴隶
  2. 发送从设备内部特定寄存器的另外7位地址,然后发送读取位。
  3. 那我们如何阅读内容?将其存储在变量中     通过在C中使用'='运算符?

对于SPI读取:

  1. 设置芯片选择引脚以启用从设备。

  2. 将读取命令发送到从属设备以表明它是读取操作。

  3. 那么我们如何阅读内容?通过使用将其存储在变量中     C中的'='运算符?

我对顺序正确吗?还是我错过了什么?请说清楚。 谢谢

1 个答案:

答案 0 :(得分:0)

I2C是半双工的。这意味着,主机需要在发送寄存器地址后侦听数据线提供8个时钟。这可以通过三种方式完成

  1. 轮询-查看驱动程序,并在发送地址后检查是否正在轮询特定的状态寄存器。如果是,则应该有一个带有Rx缓冲区地址的输入参数。您可以读取该寄存器以获取读取的值。
  2. 中断-如果驱动程序已配置Rx完成中断,则可以在ISR中读取数据
  3. DMA-在这里,驱动程序必须已将特定通道配置为Rx通道并配置了DMA完成中断。传输数据后,将击中该中断。

SPI在全双工模式下工作。但是从站仍然无法在收到地址后立即响应。通常,它需要8个周期才能再次响应。以上所述,SPI也存在3种模式。

是否可以使用=运算符读取值?这取决于驱动程序的实现。但很可能不是。通常,传递诸如RX缓冲区和传输大小之类的输入参数。如果是同步/阻塞调用,则应该能够在读取/传输调用之后读取同一缓冲区的内容。否则,您必须在ISR或稍等片刻后阅读