请帮助我理解为什么 SPI 和 I2C 有时描述相同的串行/同步协议?在 Raspberry Pi 上,“端口”被“标记为”SDA / SCL - 两线(串行)协议。请不要提及“什么是 SPI /I2C?”,只是寻求对上述具体问题的澄清/评论。
PS SDA / SCL中的“S”代表串行还是同步?考虑到硬件它不能并行,那么“串行”是多余的吗?
感谢您的回复。
答案1
SPI 和 I2C 是非常不同的协议(查看维基百科的描述)。它们甚至具有不同数量的线路:I2C 的时钟和数据线,以及 SPI 的 SCLK、MISO、MOSI 和 SS。我还使用了 Raspberry Pi B 的引脚排列,如SPI_MOSI
、SPI_MOSI
和SPI_SCLK
。
有一个与 I2C 非常相似(非常相似,可以被视为一种子集)的协议,称为 SMBus。也许你的意思是那个而不是SPI?
也就是说,在嵌入式 SoC(例如 Raspberry Pi 上的 SoC)上,引脚通常具有多种用途,并且可以通过写入来重新分配给芯片的不同部分(例如 I2C 控制器与 SPI 控制器,甚至 UART ...)特殊寄存器。这就是为什么您会看到特定的引脚用于不同的角色。当然,如果您将它们用于不同但相似的角色,则以它们的目的相似的方式重新分配它们是有意义的。
我不知道 SoC 的开发人员在命名 SDA 和 SCL 引脚时是指“串行”还是“同步”,我想这并不重要……除非您通读 SoC 文档并了解幸运的是,找到一个拼出缩写的地方,它可能仍然是一个谜。