我正在设计一种嵌入式设备,希望通过串行总线与第三方外围设备进行互操作。我应该选择SPI,I²C还是其他总线?
外围设备的带宽将非常低(某些传感器通过总线通信,需要定期轮询),并且最有可能在控制器的一米或更短的距离内。控制器的唯一任务是收集传感器数据,以某种方式打包,然后通过另一条总线将其发送到无线模块(尽管传感器总线也有可能被重用)。
我正在设计一种嵌入式设备,希望通过串行总线与第三方外围设备进行互操作。我应该选择SPI,I²C还是其他总线?
外围设备的带宽将非常低(某些传感器通过总线通信,需要定期轮询),并且最有可能在控制器的一米或更短的距离内。控制器的唯一任务是收集传感器数据,以某种方式打包,然后通过另一条总线将其发送到无线模块(尽管传感器总线也有可能被重用)。
Answers:
如果您不确定,并且您的要求非常含糊,我选择I²C。
SPI和I²C之间的主要区别在于SPI需要为每个外设提供芯片选择线。I²C在通信开始时广播外设地址,因此不需要片选线。片选线在前几行之后变得很麻烦。
另一方面,SPI可能更易于实现和调试。如果您只想连接几个设备,则可能是赢家。
我会排除USB,除非您需要相对长距离(m而不是cm)的高数据速率。我也要排除RS-232,除非它仍然是1976年,并且您的外围设备需要大信号以区别于噪声。
您可能会考虑达拉斯的1线制,但是我怀疑它不像I²C那样常见,而需要2线制的“ 1-线”总线对我来说似乎总是有些麻烦。
基本上,您应该在I2C和SPI之间进行选择。
无论使用哪种总线,都应考虑传感器和第三方外围设备的电压电平。您可以通过使用两个MOSFET制作自己的转换器来实现此目的(只有一种方式-拾取/不变或下降/不变;只有在需要将传感器运行在3.3并与1.8V和5V主器件接口时,这才是问题)。参见恩智浦的AN10441 [PDF]。这也适用于SPI(只需移除上拉电阻)。您将需要在连接器上添加一条线以建立参考电压(如果尚未这样做)。
I2C的缺点之一是您只能使用总线上最慢的时钟。如果一个传感器仅能提供100kHz的频率,而您想以400kHz或1MHz(两个有效速度)与内存通信,则较慢的传感器的行为是不确定的。如果使用SPI,则芯片选择线意味着速度较慢的传感器甚至不会监听总线上的内容,并且可以为不同的传感器运行不同的速度。