整体总结
UART:通用异步收发,Universal Asynchronous Receiver/Transmitter
SPI:Serial Peripheral Interface,串行外设接口
I2C或IIC或I2C :Inter-Integrated Circuit芯片间总线接口电路
UART:通用同步异步收发器
硬件接口含义
串行和并行通信
串行:只用一根线进行数据通信,同时伴随着一个时钟
并行通信:数据位在导线上同时通信,例如8根线同时传送一个字节的数据
串口通信(典型的例子UART)
异步通信:没有时钟信号线,以UART为例,但通过奇偶校验位和停止位等同步信号将需要传输的数据打包成一帧数据包,并且两设备设置好通信的波特率。
同步通信:速度快,但双方时钟要求允许误差小
SPI通信
独特优势就是可以无中断传输数据,可以连续地发送或接收任意数量的位。而在I2C和UART中,数据以数据包的形式发送,有着限定位数。
SPI设备中,设备分为主机与从机系统。主机是控制设备(通常是微控制器),而从机(通常是传感器,显示器或存储芯片)从主机那获取指令。
一套SPI通讯共包含四种信号线:MOSI (Master Output/Slave Input) – 信号线,主机输出,从机输入。MISO (Master Input/Slave Output) – 信号线,主机输入,从机输出。SCLK (Clock) – 时钟信号。SS/CS (Slave Select/Chip Select) – 片选信号,通俗讲选择那一片从机。
从SPI的接口可以看出这是一种全双工的串行通信,从机和主机可以同时通过各自的数据传送线传送数据。
优点
无起始位和停止位,没有像I2C这样的复杂的从站寻址系统
缺点
没有信号接收成功的确认(I2C拥有此功能),没有任何形式的错误检查(如UART中的奇偶校验位等)
UART通信
UART属于异步通讯,这意味着没有时钟信号,取而代之的是在数据包中添加开始和停止位。
接收UART检测到起始位时,它将以特定波特率的频率读取,就相当于在数据包中,以起始位为标志开始默认(并不存在)时钟(频率)的读取,这种读取的速度用波特率度量(bps),两个UART必须以大约相同的波特率工作,发送和接收UART之间的波特率只能相差约10%。
两个UART之间数据传送(整体):
两个UART之间数据传送(各部分):
发送UART将起始位,奇偶校验位和停止位添加到数据帧
一个数据包包含的内容
一个起始位,一个数据帧,记录数据针中1的数量是奇数或偶数的一位校验位,停止位
缺点
数据帧的大小最大为9位
不支持多个从属系统或多个主系统
每个UART的波特率必须在彼此的10%之内
I2C通信
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。结合了 SPI 和 UART 的优点,可以将多个从机连接到单个主机
SDA (Serial Data) – 数据线。
SCL (Serial Clock) – 时钟线。
数据传送方式
以msg为单位,msg中包含多种信息:起始位,从机地址,读写位,数据帧,ACK/NACK位(每个数据帧前后都有),
启动条件:当SCL是高电平时,SDA从高电平向低电平切换。
停止条件:当SCL是高电平时,SDA由低电平向高电平切换。
地址帧:每个从属设备唯一的7位或10位序列,用于主从设备之间的地址识别。主机将需要通信的地址发送到每一个从机,从机比较自己地址,然后判断是否动作
读/写位:一位,如果主机是向从机发送数据则为低电平,请求数据则为高电平。主机要向从机发送数据,则为低电平。如果是主机向从机请求数据,则为高电平。
ACK/NACK:消息中的每个帧后均带有一个ACK/NACK位。如果成功接收到地址帧或数据帧,接收设备会返回一个ACK位用于表示确认。主机检测到从机的ACK位(寻址从机返回的)后,就可以发送第一个数据帧
缺点
数据传输速率比SPI慢
数据帧的大小限制为8位