UART,IIC,SPI均为STM32系列芯片常用通信协议,现整理三种协议基础知识如下:
@[toc]
1 UART总线协议
1.1 基础概念
- 并行通信与串行通信
- 把数据的多个位一次性发送。
- 缺点:总线多容易浪费资源,布线难度大,线间有信号干扰。
- 把数据的多个位依次发送。
- 单工通信和双工通信
- 单工通信:发送器接收器间数据单向传送。
- 双工通信:发送器接收器间数据双向传送
- 半双工:发送器和接收器不能同时发送数据。
- 全双工:发送器和接收器可以同时发送数据。
- 同步异步 通信与收信双方是否有同步时钟判断数据收发。
1.2 UART通信概述
- 通信方式
- 通用异步收发器(点对点通信),串行,异步通信总线,有两条数据线可实现全双工发送和接收,常用于主机与辅助设备间的通信。
- 数据线传递的本质是电信号。
- 波特率
- 描述UART通信时的通信速度,单位位bps(bit per second)每秒传送bit的数量。
- 串口通信过程
- 空闲位: 保持高电平。
- 起始位: 低电平//用于区分空闲位。
- 数据位: 可发5-8位防止累计误差出现,先发低位再发高位。
- 校验位: 奇偶校验//数据里有奇数个1发送0,偶数个1发送1,可有可无。
- 停止位: 高电平,1,1.5或2位
- 空闲位: 保持高电平。
- 起始位
- ...
- 硬件连接
- 发送器TXD,接收器RXD交叉接线点对点发送。
- UART控制器
- 集成在处理器中。
- UART的问题:
- 串口的电气接口不统一。
- UART一般使用处理器电平TTL,不同处理器电平不同,不同处理器不能直接连接。
- 没有连接器标准,不同器件连接不方便。
- 抗干扰能力差。
- 通信距离极短。
1.3 RS232,RS485协议原理与应用
均为电气层面协议,对电气方面进行标准化,但依然依赖于UART协议传输数据。
- RS232
- RS232协议
- 标准: 规定采用标准连接器,对连接器每个引脚的作用加以规定,还对信号的电平加以规定。
- 接口 最初25口,后IBM将其简化为DB-9 9口连接器,一般只用RXD,TXD,GND三个口。
- 信号 ‘1’的电平为-5V~-15V,‘0’的电平为+5~+15V,增加抗干扰能力提高传输距离,一般可达15米。
- 电平的转换 外部添加电路,将处理器TTL电平与RS232标准信号互相转换(MAX232芯片)。
- RS232的问题
- 接口信号电平值高,容易损坏接口电路芯片,需要转换芯片才能与TTL电路连接。
- 通信速度较低。
- 易产生共模干扰,抗噪声干扰性弱。
- 传输距离较短(15m)。
- RS232协议
- RS485协议
- 优势: 电平低不易损坏芯片,传输距离远(1500m),抗干扰强,允许连接多个收发器具有多站能力,可以建立设备网络。
- 信号: 采用差分信号(两根信号线描述一个‘0’或‘1’)进行数据传输,两线电压差+2V~+6V表示‘1’,-2V~-6V表示‘0’,可与TTL电平兼容。
- 接口:
- 两线制总线式拓扑结构,同一线上可同时存在多个节点
- 发送和接收不能同时进行,半双工。
- 电平转换 处理器UART控制器信号一般都是TTL信号,还需要再处理器外部添加电路将TTL信号转换为RS485差分信号(MAX485芯片)。
2 IIC总线协议
2.1 IIC总线概述
- IIC简介
- 串行,半双工总线,主要用于近距离,低速芯片间通信;有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟同步(空闲时为高电平);结构简单成本较低。
- IIC是多主机总线,只有主机有权发起结束通信,同时只能有一个主机发起通信,IIC具备检测仲裁功能防止错误,每个IIC上器件都有唯一通信地址(7bit)。
- 通信过程
- 主机发送起始信号启用总线。
- 主机发送1个字节数据,指明通信地址和后续字节传送方向。(0主机-从机,1从机-主机)
- 从机发送应答信号回应主机。
- 发送器发送一个字节数据。
- 接收器发送应答信号回应发送器。
- ...
- 通信完成主机发送停止信号释放总线。
- IIC寻址方式
- IIC数据包括地址和真正的数据
- 主机发送起始信号后必须发送一个字节的数据,高七位为从机地址,最低位为后续传输方向,主线上所有从机比较自身地址,若相同将自己定为发送器或接收器。
2.2 IIC总线信号实现
- IIC通信过程
- 起始信号和停止信号
- SCL高SDA高变低,起始信号
- SCL高SDA低变高,终止信号
- 起始信号,终止信号都由主机发出,起始信号产生后总线处于占用状态,终止信号产生后总线处于空闲状态。
- 字节传送与应答 每个字节为8位,先传送最高位后传送最低位,发送器发完1字节数据后接收器必须发送1位应答位作为回应(低电平),即1帧共9位。
- 同步信号
- SCL低电平期间发送器向数据线上发送一位数据,此时数据线信号允许变化;
- SCL高电平期间接收器从数据线上读取一位数据,此时数据线信号不允许变化。
- 起始信号和停止信号
2.3 典型IIC时序
- 常用时序
- 主机向从机发送数据
- 起始信号
- 从机地址,传送方向0
- 从机应答A。
- 主机发送数据,从机应答...。
- 停止发送
- 主机主动发送停止信号。
- 从机不应答,主机发送停止信号。
- 从机向主机发送数据
- 起始信号。
- 从机地址,传送方向1。
- 从机应答A。
- 从机发送数据,主机应答...。
- 停止发送
- 主机不应答。
- 主机发送停止信号。
- 主机先向从机发送数据,从机再向主机发送数据
- 起始信号
- 从机地址,传送方向0
- 从机应答A。
- 主机发送数据,从机应答...。
- 再次发送起始信号。
- 从机地址,传送方向1。
- 从机应答A。
- 从机发送数据,主机应答...。
- 停止发送
- 主机不应答。
- 主机发送停止信号。
- 主机向从机发送数据
3 SPI总线协议
3.1 SPI总线简介
- SPI总线简介
- 高速(相对UART,IIC),全双工,同步串行通信总线
- SPI采用主从方式工作,一般有一个主设备,一个或多个从设备
- SPI需要至少四根线,MISO(主设备输入从设备输出),MOSI(主设备输出从设备输入),SCLK(时钟),CS(片选)
- SPI使用引脚较少且布线方便。
- 寻址方式
- 向对应从设备片选线发送使能信号(高电平或低电平)表示选中该从设备,并向其它从设备发送相反信号表示暂停通信。
- 通信过程
- 先传送数据高位,后传送数据低位。
- 高电平表示逻辑‘1’,低电平表示逻辑‘0’.
- 一个字节传送完成无需等待应答即可开始下一字节传送。
- 采用同步方式工作,时钟线上升沿或下降沿时发送器向数据线发送数据,接下来的下降沿或上升沿接收器从数据线读取数据,完成一位数据传输,八个时钟周期可以完成一个字节数据传输。
- 极性CPOL和相位CPHA
- CPOL表示SCLK空闲时的状态
- CPOL=0,空闲时SCLK为低电平。
- CPOL=1,空闲时SCLK为高电平。
- CPHL表示采样时刻
- CPHA=0,每个周期的第一个时钟沿采样。
- CPHA=1,每个周期的第二个时钟沿采样。
- 一般需要对主设备CPOL和CPHA进行配置,保证与从设备工作模式一致,否则无法通信。
- CPOL表示SCLK空闲时的状态
- IIC和SPI异同
- 相同点
- 都是串行,同步方式。
- 都采用TTL电平,传输距离和应用场景类似。
- 都采用主从模式工作。
- 不同点
- IIC为半双工,SPI为全双工
- IIC有应答机制,SPI无应答机制
- IIC通过向总线广播从机地址寻址,SPI通过向对应从机发送使能信号寻址。
- IIC时钟极性和时钟相位固定,SPI时钟极性和时钟相位可调。
- 相同点