CAN、UART、I2C通信协议详解
1. CAN(Controller Area Network )通信
1.1 协议结构组成

- 一组CAN总线由CAN_H(高)、CAN_L(低)组成,双绞线互相缠绕结构,分为闭环通信与开环通信,由于物理层的结构差异,两者使用的收发芯片各不同:

- 闭环:最高通信速度为1Mbps,并在尽头接120Ω的终端电阻。
- 开环:最高的通信速度为125Kbps,两根线不相连,每根总线上要串联一个2.2KΩ的终端电阻,通信距离可达1KM。
额定总线电平 - 采用差分信号进行数据传输,逻辑0(显性电平)跟逻辑1(隐性电平)用两根线的电压差表示:当压差>=1.5V时逻辑0;当压差0V至0.5V时为逻辑1。

- 与MCU通信需使用CAN收发器连接连接至总线,同时保持同样的波特率。
1.2 数据帧格式
数据帧由8部分组成:起始位,识别位、RTR位、控制码、数据码、CRC码、ACK码、结束位
- 起始位: (1bit) 必须为逻辑0

2. 识别位:(11bit)每组CAN通信中,每个MCU拥有由11位识别位组成的唯一识别码,同时这11位也作为仲裁段。
仲裁段:当其他设备也需要传输报文时,根据识别码(仲裁段)进行仲裁,判断识别码,当同时遇到逻辑0跟1时,总线置为逻辑0,逻辑1的数据帧不再发送。
3. RTR位: (1bit)用于区分数据帧(置0)及远程请求帧(置1)。
远程帧:没有数据码,总线单元发出远程帧,请求发送具有同一识别符的数据帧。如果相同标识符数据帧与远程帧冲突,则数据帧优先。
4. 控制码 IDE位:(1bit)用于确认标准帧(逻辑0)or扩展帧(逻辑1)
空闲位:(1bit)预留位,(具体作用未知)
DLC:(4bit)数据长度,为1时,代表后面数据长度1字节(8位)以此类推。

5.数据码: 存放数据内容,位的大小由前面的DLC(数据长度位)确定。
6.CRC码:(16bit)(循环冗余校验位)
CRC序列(校验码):(15bit) 发送方与接收方的CRC值对应上,才为通信成功;否则重新发送数据帧。
CRC界定符:(1bit)为固定的逻辑1,将后面信号界定隔离。

7.ACK码(应答场):(2bit)用于确认报文是否被接收器正确接收。

ACK: (1bit)接收了正确的报文后,向发送器发送逻辑0(显性电平),以示正确接收;否则为逻辑1(隐性电平),触发ACK错误。
注:多节点通信时,如果有接收器错误接收,但ACK仍会置为0,不过会发送错误帧,此帧丢弃处理,发送器重新发送。
DEL: (1bit)界定符,固定为逻辑1。
8. 结束位 : (7bit)为7位逻辑1,代表此帧结束。

2.UART(通用异步收发器)串口通信

2.1 协议结构组成
1. 采用两根线,RX为接收数据线,TX为发送数据线,对应的,设备1的RX 接 设备2的TX,设备1的TX 接设备2的RX 。
2. 不同设备间通信需共地(GND)。
3.RX跟TX数据互不干扰。
4.更换物理层可实现TTL、RS232、RS485通信。

5. 设备间通信需保持波特率一致才能确保数据传输的正确性。波特率:每秒传输的bit数(bps),常用有 9600bps、 19200、38400、57600 以及 115200 等,每个位(bit)的传输时间则为。
2.2 数据帧格式
数据帧由起始位、数据位、校验位、停止位组成。

1. 起始位 :(1bit) 数据不传输时保持高电平,当有数据发送时下拉为低电平,并保持一个波特率周期。
2. 数据位:(5~8bit) 需要传输的数据内容。
3.奇偶校验位:(1bit)记录数据位中为1个的个数,为0则偶数,为1则奇数,当与实际不符时则传输错误。
4.停止位:(1bit)结束标志位,电平拉高持续1~2字节。
3. I2C(Inter-Integrated Circuit)协议
3.1 协议结构组成

1. 由两条信号线组成 :SDA(Serial Data Line)数据线、SCL(Serial Clock Line)时钟线,通常为一主多从模式,主机可以发起和结束一次通信,从机只能被呼叫。
2. 总线上分别接上拉电阻,两条线默认保持高电平,数据传输过程中,除起始位外,需要在SCL(时钟线)高电平时,SDA(数据线)电平要保持稳定:
传输逻辑1时,在SCL(时钟线)高电平时,SDA(数据线)保持高电;传输逻辑0时,在SCL(时钟线)高电平时,SDA(数据线) 保持低电平。
3. 任意一个设备输出逻辑0,都能将线拉至低电平,但无法拉高(设备输出逻辑1时只会保持高阻态模式)。
3.2 数据帧格式

1.起始位(1bit):SCL(时钟)保持高电平时,捕捉到SDA(数据) 一个下降沿,视为数据帧开头。

2.设备地址位 (7bit) :由主机发送,所有从机判断是否为自己的设备地址。理论支持127个地址(7位二进制的最大值)。
3. 读写位(1bit):由主机发送,半双工通信中,读写无法同时进行,需要确定数据传输方向。
向从机读数据:逻辑1,
向从机写数据:逻辑0。
4.应答位(1bit):由从机发送,每发送一个字节数据后,主机释放SDA,此时SDA被上拉电阻拉高。当从机成功接收到数据时,向主机发送应答信号,应答(ACK)拉低,发送逻辑0,非应答(NACK)逻辑1。
5.寄存器地址位/数据位(8bit):主机向从机发送要读写的寄存器地址位。从机返回应答信号,再进行数据的读写。
- 读数据
- 再次发送起始信号。
- 再次发送设备地址。
- 发送读数据信号(逻辑1)。
- 接收从机数据,主机成功接收后返回成功应答信号(ACK)逻辑1。
- 注:这里的应答信号与从机的相反,从机返回的应答信号ACK为逻辑0;NACK为逻辑1。
- 写数据
- 向从机发送8位数据,从机成功接收后返回成功应答信号(ACK) 逻辑0。
6.停止位(1bit): 与起始信号相反,捕捉到一个上升沿信号,视为停止信号。
更多推荐

所有评论(0)