串行通信——UART、SPI与I2C
- UART与SPI为全双工通信,I2C为半双工通信。
- SPI与I2C是同步通信,UART为异步通信。
同步通信:双方时钟要同步,通信双方除数据线外还连接一条时钟线,请求发送后,等待至结果出来。
异步通信:想发就发,发完后可以执行其他操作,请求被响应后会通知调用者。数据中增加开始和停止位。
- SPI
- 无限数据位数
- spi设备分为主从,主机一般为微控制器,从机一般为传感器,显示器,存储卡等,主机给从机下达指令,一般只有一个主机,可以有多个从机
- 四种信号线:主机输出从机输入信号线,主机输入,从机输出信号线,时钟线,片选信号 每个时钟周期传输一位数据,因此数据传输速度取决于时钟频率
- 主机通过片选信号选择从机来使能通信
优点:数据无中断传输,传输速度快,速度是I2C的两倍;可以同时发送和接受消息。
缺点:使用多根线,没有确认(I2C有),没有错误检测(UART奇偶校验)
- UART
- 没有同步时钟(双方预设波特率),数据包增加开始和停止位
- 起始位1+数据长度5-8+奇偶校验1+停止位1/2
- 起始位1+数据长度5-9+停止位1/2
优点:只需两根线就可进行通信;无需同步时钟;可以进行错误检查
缺点:数据帧长度有限;不支持一对多传输
- I2C
- 结合SPI与UART优点 支持多主机,多从机
- 有两条线路,一条双向串行数据线(SDA),一条时钟线(SCL)
- 每个从机有一个唯一的长度为7或者10b的地址,主机通过地址与从机通信 三种传输速度,100kb/s,400kb/s或者3.4Mb/s
- 实际上连接到总线的设备数量受电容限制
- 当SCL为高,SDA由高电平切换为低电平时,表示开始信号;
- 当SCL为高,SDA由低电平切换为高电平时,表示停止信号
- 每次都有主机开始通信过程,主机发送开始位,从机地址以及读写位,对应地址的从机回复ACK。写数据过程中:主机开始数据传输,每个数据帧都要等从机回复ACK,无数据发送则传输结束位;读过程中:从机传输数据到主机,主机对每一个数据帧回复ACK,无数据可读,主机发送停止位。
- 数据以字节为单位进行传输,每次传输的数据量没有限制
- 当SCL为高电平时,SDA数据有效,当SCL为低电平时,SDA进行电平切换,为下一次数据传输做好准备
优点:仅使用两根线;支持多主机;有消息确认机制
缺点:数据传输比SPI慢;数据帧大小限制为1B