总线系统毫无疑问是电子电路的重要组成之一,作为电子系统与外界的桥梁,总线系统不可或缺,其中SPI、I2C和UART是常见的三大总线,但很多人认为其功能一样,区别不大,因此乱用导致系统无法正常运行,所以本文将详谈它们三者的区别及联系。
SPI:由三条信号线组成(串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI))。可以实现多个SPI设备互相连接。提供串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
I2C:总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
UART:总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
一般来说,它们的区别是:I2C线更少,功能比UART、SPI整体上更为强大,所以应用比较广泛,但同时技术研发也更加麻烦,这是由于I2CC需要双向IO的支持,并且还要配备上拉电阻,抗干扰能力较弱,所以一般用于统一板卡上芯片之间的通信,很少应用在远距离通信。UART总线需要固定的波特率(需要两维数据的间隔相等),而SPI是有时钟的协议,所以在三者中,是最简单的总线系统。