查看原文
其他

还不知道UART、I2C、SPI协议什么时候用?一文带你彻底搞懂

混说Linux 2022-11-19
点击上方蓝色“混说Linux”,选择“设为星标
第一时间看干货文章



 1

UARTI2CSPI都是常见的低速板级通信协议,目前主流的SoC都内置了这些通讯协议的控制器,同样,各种传感器、Touch控制器、指纹模块、蓝牙模块、WIFI模块也都兼容这三种通信方式的一种或几种。


下面分别说下:

 

UART

 

UART一般由TXD、RXD、GND三根线组成,是一种异步传输协议。无论是主机还是从机,均可以自由发送数据,但是由于UART总线并没有时钟线,所以需要提前约定对应的波特率,这是一种很简单的传输协议。

 

I2C


I2C是两根线,SDA(数据)和SCL(时钟),也是一种同步传输协议。主机在发送开始信号之后,先发送7个比特的地址位和1个比特的读写位,每个从机有自己的I2C地址,当发现该条指令是发给自己的时候,拉低SDA线(即回复ACK信号),然后主机发送或接收数据,完成传输。传输完成之后,主机发送停止位,完成该次传输。


推荐阅读:IIC通信协议,搞懂这篇就够了


 

SPI

 

SPI是四根线,分别是CS(片选)、MOSI(主发从收)、MISO(从发主收)、CLK(时钟),是一种同步传输协议。主机送出CLK信号,主机到从机的数据在MOSI线上传输,从机到主机的数据在MISO线上传输。在启动传输之前,需要先拉低(一般是这样,也有各别芯片是CS高有效)对应从机的CS管脚,在传输完成之后,再拉高CS管脚,从机的SPI Slave模块进入休眠。



异同点与使用场景

 

首先,I2C和SPI都是同步协议,都有时钟信号,在一条总线上也都可以挂多个从设备,但是I2C的从设备是通过地址来区分的,SPI的从设备是通过片选线来区分的,所以SPI总线上,每多挂一个从设备,就要多用一个线作为片选线,而I2C则不用,只要地址不冲突,可以随便挂设备。


但是,I2C总线速度一般普遍慢于SPI,I2C一般的速度是100kbs、400kbps和1Mbps,而SPI的速度可以在几Mbps,也可以10+Mbps。所以看使用场合,低速的话,I2C就挺合适的,如果速度快一些,则一般都要选用SPI。另外,I2C总线的管脚都是开漏输出,必须外接上拉电阻,阻值可以根据总线速度来推算,一般我们常用400kbps传输速率,上拉电阻选用2.2K。


UART和SPI、I2C不同,他是异步传输的,一般来说传输速度比较慢,传统的传输速度一般在115200bps或以下,不过现在大部分UART控制器也能支持到4Mbps或者8Mbps了。UART目前最常用的就是调试接口,因为UART比较简单,所以CPU输出log一般都通过一个UART口来输出。


免责声明:整理文章为传播相关内容,版权归原作者所有,如有侵权,请联系删除。





关注微信公众号『混说Linux』,后台点击 关于混说 即可添加作者微信。

往期推荐

介绍一个非常有用的Linux命令,赶快用起来!

bug是如何产生的?

详解 | Linux驱动入口函数module_init如何被调用

Linux I2C驱动入门,建议收藏!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存