文章目录
前言
为了加深对通信协议的理解,方便后续使用,粗略整理了一下各种通信协议的基本特征
一、IIC通信
1.1、IIC特点:
半双工 同步 串行通信
高位先行 多主多从(谁控制时钟线的高低电平切换谁就是主设备)
1.2、不同信号时序:
·空闲模式:SDA 和 SCL 全为高电平(被上拉电阻拉高)
·开始信号:当 SCL 为高电平时,SDA 由高到低的跳变表示数据传输的开始
·停止信号:当 SCL 为高电平时,SDA 由低到高的跳变表示数据传输的结束
·应答信号:从设备在接收到 8bit 数据(先传输最高位)后,通过拉低 SDA 来进行应答。
1.3、主机指定地址写数据信号时序:
1.主机发送起始信号
2.主机发送8位数据(7位从机地址+0:主机写)
3.从机应答(主机移交SDA控制权给从机)
4.主机发送8位数据,在从及内部寻址(给一个地址指针赋值,定位到要写的地址)
5.从机应答(主机移交SDA控制权给从机)
6.重复上面4、5操作。
7.主机发出停止信号。
1.4、主机指定位置读数据信号时序:
1.主机发送起始信号。
2.主机发送8位数据(7位从机地址+0:主机写)
3.从机应答
4.主机发送8位数据(定位到要进行操作的地址)
5.从机应答
6.主机重新发送起始信号
7.主机发送8位数据(7位从机地址+1:主机读) 此时,SDA的控制权被移交给从机。
8.从机先应答,然后从当前地址读数据发送给主机。
9.主机应答,继续进行读数据 或者主机不应答,从机交还SDA控制权给主机,
10.主机发出停止信号,结束任务传输。
1.5、注意事项:
1.数据传输时,当 SCL 为高电平,SDA 的电平不允许跳变,只有当 SCL 为低电平时,SDA 电平才能跳变 。因为当SCL为高电平时,不管SDA是由低变高还是由高变低,都会被认为是发出了起始或终止信号,导致信息传输被截断。
2.从机不允许主动对 SDA 发起控制,任何时候都是主机完全掌控 SCL 线。
3.每一帧都由起始位+中间的多个数据(八位数据位+一位应答位)+停止位构成。
二、SPI
2.1、SPI特点:
全双工 同步 串行总线
高位先行 一主多从 通信速度可达几十 Mbps
2.2、组成:
输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
CS\SS :从设备使能信号
SCLK:时钟信号,由主设备产生(故读写操作都由主设备发起)
MOSI:主设备输出,从设备输入
MISO:主设备输入,从设备输出
2.3、通信操作模式:
四种模式:时钟极性和时钟相位同时决定了 4 种不同的 SPI 通信操作模式。
时钟极性:
CKP=0,时钟空闲时为低电平。
CKP=1, 时钟空闲时为高电平。
时钟相位:
CKE=0, 在时钟信号 SCK 的第一个跳变沿采样
CKE=1,在时钟信号 SCK 的第二个跳变沿采样
2.4、数据读写过程:
1.主机拉低对应的SS信号线,启动通信。
2.主机通过发送SCLK时钟信号,来告诉从机写数据或者读数据。
3.主机(Master)将要发送的数据写入发送数据缓存区,缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时将MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
4.**从机(Slave)**也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据
2.5、注意事项:
1.SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作同步完成。
2.主机要读数据,只需发送空字节来引发从机传输,
3.主机要写数据,只需忽略接收到的字节。
三、UART
3.1、UART特点:
全双工 一对一 串行/并行
异步 TTL电平
3.2、串口的组成:
由波特率发生器、UART接收器、UART发送器组成。
有 RXD、TXD两根线。
3.2、串口的参数配置:
1.波特率:9600、19200、115200等
2.起始位:发出一个逻辑“0”的信号
3.数据位:可配置传输5~8位数据
4.检验位:奇校验、偶校验、无校验
5.停止位:可配置为0.5、1、1.5、2个时钟周期的逻辑“1”
四、RS232
4.1、RS232特点:
全双工 一对一 低位先行
最长通信距离20米左右,通信速度最块20Kbps
常用 DB9 接口,最少接 TXD、RXD、GND(抑制干扰、有助于通信)三根线
电平传输方式与普通串口(TTL)不同,其采用负逻辑,-3~-15V 为逻辑 1,3~15V 为逻辑 0.
相对于 RS485,这种共地传输容易产生共模干扰。
五、RS485
5.1、RS485特点:
一对多,一般最大支持 32 个节点,若使用特制的 485 芯片,可达到 128 或 256 个节点
半双工(主设备先发送询问信息,被询问从设备返回信息) 低位先行
最长通讯距离 1200 米 最大通信速度可达 10Mbps
RS485 采用差分工作方式 使用 A(Data+)和 B(Data-)两根信号线,
A-B 在 2~6V 为逻辑 1,在-2~-6V 为逻辑 0
理想情况下 RS485 需要 2 个终端匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为 120Ω)。
六、CAN
6.1、CAN特点:
多对多 异步半双工 高位先行 传输距离可达 1000 米
CAN 收发器是用于 TTL 电平和差分电压信号相互转换的。
CAN 通信由 CAN_High 和 CAN_Low 两根线完成的。
无信号传输或传输数据 1 时,两条线的电平均为 2.5V;差分信号(H-L=0V)为逻辑 1(隐性电平)。
传输数据 0 时,H 升高为 3.5V, L 降低为 1.5V。差分信号(H-L=2V)为逻辑 0(显性电平);
显性(逻辑0)的优先级比隐性(逻辑1)高
6.2、帧的类型:
1.数据帧:用于节点向外传送数据
2.远程帧:用于向远端节点请求数据
3.错误帧:用于像远端节点通知校验错误,请求重发上一个数据
4.过载帧:用于通知远方节点,本节点尚未做好接收准备
5.帧间隔:用于将数据帧及遥控帧与前面的帧分离开来
6.3、标准数据帧(数据报、报文):
帧起始,位宽 1, 是显性逻辑“0”
仲裁段:位宽 11。 本数据帧的 ID 信息,作为优先级仲裁;
RTR: 位宽 1。 0:数据帧;1:远程帧
IDE: 位宽 1。 用于区分标准格式(显性 0)和扩展格式(隐性 1)
保留位 R0:位宽 1。 1bit 保留位,固定为显性 0
DLC:位宽 4。 表示报文中有多少个字节
数据段:位宽 0-64。 高位先行
CRC 段:位宽 15。 暗号校验。此值与接收方根据数据计算出来的相同时,数据正确
CRC 界定符:位宽 1。用于前后分隔,为固定的隐形电平 1。
ACK 槽:位宽 1. 发送端发送隐性位,接收端回发显性位以示应答。
ACK 界定符:位宽 1. 将 ACK 槽和帧结束符分隔开,为隐性位
帧结束:位宽 7. 七个隐性位表示结束。
总结
1.UART、RS232、RS485之间的关系:
1.UART、RS232和RS485之间有密切的关系,它们都涉及串行通信,但是在传输距离和标准上有所不同。
2.UART(通用异步收发传输器)是一种硬件电路,用于在计算机系统中实现串行通信。UART采用TTL电平标准,提供了对数据的基本格式和传输速率进行配置的功能。
3.RS232和RS485都是一种电平标准,定义了串行通信所需的电气信号特性和机械连接规范。
4.其中RS232使用负逻辑电平规范,并适用于短距离通信。
5.RS485则是采用差分信号电平规范,适用于远距离通信和多设备共享
6.RS232、RS485通常与UART结合使用,在计算机和外部设备之间进行串口通信。
2.归纳整理:
IIC | SPI | UART | USART | RS232 | RS485 | CAN |
---|---|---|---|---|---|---|
半双工 | 全双工 | 全双工 | 全双工 | 全双工 | 半双工 | 半双工 |
同步 | 同步 | 异步 | 异步/同步 | 异步 | 异步 | 异步 |
串行 | 串行 | 串行 | 串行 | 串行 | 串行 | 串行 |
高位先行 | 高位先行 | 低位先行 | 低位先行 | 低位先行 | 低位先行 | 高位先行 |
几米 | 几米 | 几米 | 几米 | 15~50米 | 500~1200米 | 10千米(最远) |
几百Kbps | 几十Mbps | 波特率决定 | 波特率 | 小于20Kbps | 110Kbps~10Mbps | 5Kbps~1Mbps |