SPI为什么比I2C协议更快?

12

我了解I2C和SPI通信的基础知识。由于两种协议都是同步的,所以我想知道是什么使得SPI比I2C更快。如果我没记错的话,在使用I2C时我们可以达到400kbps的速度,而在SPI中我们可以达到10mbps的速度。这是因为硬件方面的变化吗?这个问题是在我的一次面试中问我的。如果我有错误,请纠正我。


5
这个问题似乎与编程无关,而是涉及到硬件,因此被认为不符合主题。 - Guntram Blohm
速度取决于您使用的板子类型以及硬件逻辑的实现方式。使用其中一种与另一种相比存在某些优缺点。选择使用哪种总线类型取决于您需要在不同外设之间进行何种类型的通信,以及您希望使用它们连接哪些外设。http://quick2wire.com/articles/i2c-and-spi/ - avlamsox
请查看以下在StackExchange上的解释:http://electronics.stackexchange.com/questions/29037/tradeoffs-when-considering-spi-or-i2c E。 - Trouble-lling
2
实际上,这主要涉及协议 - 虽然是低级别的协议,硬件人员最为熟悉,但是同样的问题也会出现在网络堆栈等方面。 - Chris Stratton
1
然而,嵌入式系统问题和硬件与软件之间的边界将在http://electronics.stackexchange.com上得到更好的回应。只要与嵌入式系统和低级编程有关,纯软件问题也始终是相关的。 - Lundin
2个回答

23

有一个重要的硬件差异会限制I2C的速度。

SPI:所有线路都由发射器驱动高低电平。这最小化了线路改变状态所需的时间。

I2C:所有线路都是开漏的,这意味着发射器仅驱动线路为低电平。当发射器释放线路时,连接到Vcc(供电电压)的电阻会将线路拉高。然而,由于电线和元件的电容,电线相对缓慢地上升到高电压。因此,时钟速度必须降低以允许线路"漂移"到高电平。


这是正确的(也是为什么它不是一个编程问题)的原因。 - artless noise
1
如果你不知道答案,假设差异在协议上是完全可以的,实际上硬件才是主要的限制因素。因此,问题是关于编程的,而答案则不是 ;) - Adam Ples

12

I2C涉及较多,支持总线上的多个主设备。这在总线协议中产生了很大的开销,每个字节都需要一个ACK和有意的延迟来仲裁总线访问。此外,原始规范中设置了最大总线速率100 kHz,今天常见的是400 kHz,另外还有10 kHz低速和3.4 MHz高速模式,2012年规范定义了5 MHz超快模式。

SPI要简单得多,只有一个主设备,除了片选信号没有其他总线协议,也没有设置最大总线速率。如果距离较短,则可以尽可能地快。在距离不到一英寸的芯片之间的互连上非常快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接