Embedded 什么时候应该使用I2C,什么时候应该使用SPI? 我想知道出了SPI和I2C通信协议哪一个 速度快吗?我在一篇文章中读到SPI速度更快,但它们 没有解释原因吗?是不是因为少了 与I2C相比,SPI中的开销(如start、ack、stop) 两个中哪一个更好?我在ADC中看到了这一点,主要是SPI 是首选,但为什么?对于Flash,我也经常看到SPI 正在使用协议,但用于传感器SPI和I2C。现在,是什么让你 至于决定,对于一个外设,我应该使用SPI和 另一个I2C是首选

Embedded 什么时候应该使用I2C,什么时候应该使用SPI? 我想知道出了SPI和I2C通信协议哪一个 速度快吗?我在一篇文章中读到SPI速度更快,但它们 没有解释原因吗?是不是因为少了 与I2C相比,SPI中的开销(如start、ack、stop) 两个中哪一个更好?我在ADC中看到了这一点,主要是SPI 是首选,但为什么?对于Flash,我也经常看到SPI 正在使用协议,但用于传感器SPI和I2C。现在,是什么让你 至于决定,对于一个外设,我应该使用SPI和 另一个I2C是首选,embedded,microcontroller,firmware,Embedded,Microcontroller,Firmware,更好的问题是何时应该使用I2C和何时应该使用SPI。就像工程中一样,两种协议都有不同的优缺点。我在下面对它们进行了比较,以便您能够评估什么更符合您的要求 我自己的快速比较: 附加备注: SPI通常用于速度重要的从属设备,例如ADC外围设备、闪存等 I2C通常用于具有I2C速度限制的从属设备,或者是需要更长时间才能获得测量的类似于慢速传感器的设备,例如,带有I2C的流行温度和湿度传感器HTU21-D在3-16[ms]之间执行测量(此时间取决于所选的测量分辨率) PS: 最快的ADC外围

更好的问题是何时应该使用I2C和何时应该使用SPI。就像工程中一样,两种协议都有不同的优缺点。我在下面对它们进行了比较,以便您能够评估什么更符合您的要求

我自己的快速比较:

附加备注:

  • SPI通常用于速度重要的从属设备,例如ADC外围设备、闪存等
  • I2C通常用于具有I2C速度限制的从属设备,或者是需要更长时间才能获得测量的类似于慢速传感器的设备,例如,带有I2C的流行温度和湿度传感器HTU21-D在3-16[ms]之间执行测量(此时间取决于所选的测量分辨率)
PS:

  • 最快的ADC外围设备不使用I2C或SPI。它们使用并行I/O
  • 请记住,对于简单的(爱好)项目来说,这通常并不重要,你会对它们中的任何一个都满意

1米以上的I2C也很糟糕(容易出错,或者需要额外的工作来防止),我不会在超过20厘米的地方使用I2C。这一点很好。校验和或至少奇偶校验位总是有用的,甚至对更长的距离更有用。@KrystianSakowski:我曾经在一个项目中工作过,该项目在远距离使用SPI,错误被认为是系统中重电气负载的干扰,团队添加了错误检查和重试协议,但仍然不可靠。最后所有的错误都是由软件引入的;一旦SPI驱动程序中的基本错误被修复,错误检查/重试就变得多余了。所以我的观点是;在添加代码以处理信号完整性和干扰问题之前,在一个电气良好的环境中进行短距离测试。您可以“菊花链”SPI节点,使它们更具可伸缩性。但这是以通过所有节点转移所有数据为代价的,因此在实践中,每次添加新节点时都会降低速度。I2C的另一个缺点是,它使用的开放式采集器只有3mA,而SPI使用的是全推拉式采集器,这使得SPI不太容易出错。你可以通过问“有什么区别…”来避免这个问题相反,哪个更好。一点问题是,他们会不会更适合你,你似乎迷路了;对于这个问题,这是一个错误的站点;如果外设有I2C,请尝试使用I2C;如果外设有SPI,请使用SPI。如果它不是性能关键型的(比如lcd显示器),那么它可能在同一个芯片上支持这两种功能。或者有一个版本和一个版本和另一个版本。对于需要性能的设备,他们将提供spi.spi。您可以共享一些信号,尽管您会发现某些外围设备与其他外围设备不兼容。除此之外,你的芯片选择数量有限。使用i2c,您可以在同一总线上拥有更多的外围设备。