CAN 通讯

Tony

CAN 是Controller Area Network 的缩写,是用于在单片机间通讯使用,在使用CAN通讯时,需要连接到CAN收发器进行数据的转写,将单片机的普通信号转写为差分信号。

SN65HVD232D 顶视图
SN65HVD232D 顶视图

上图是型号为SN65HVD232D的CAN收发器(CAN Bus Transceivers) 的示意图

  • CANH 为高电平信号线
  • CANL 为低电平信号线
  • D 为输入线
  • R 为输出线

单片机将发送信号发送到D口,再由 CANL和CANH 发出。外部信号发送到CANL和CANH,再从R口发送给单片机

信号的传输

!!图片

我们给 CAN 收发器发送数据时,它会将其转换为差分信号

  • 当我们给D 口发送 高电平 时,CANH 和 CANL 都会输出2.5V,压差为0V,是隐性电平,表示逻辑1
  • 当我们给D 口发送 低电平 时,CANH 会输出3.5V,而CANL 会输出1.5V,压差为2V,是显性电平,表示逻辑0

同样,CAN 收发器也可以将差分信号转换为数据给单片机

标准数据帧

from 爱上半导体
from 爱上半导体

  • 起始位(SOF):数据开始传输,一定为0
  • 识别码(ID):目标设备,同时决定数据发送的优先级,数字越小越优先(i.e. 先有0)
  • RTR位(Remote Transmission Request Bit):远程输入请求,数据帧为0,远程请求帧为1
  • 控制码:
    • IDE位(Identifier Extension Bit): 标识符拓展位,用于区分标准格式和拓展格式,标准格式为0(识别码有11位),拓展格式为1(识别码有29位)
    • 空闲位/预留位:为0
    • DLC位:数据长度代码,代表了后面的数据位的字节(Bytes)数
  • 数据码:数据
  • CRC位:循环冗余校验位
    • 15位CRC校验码:接收端根据前面的数据计算CRC校验码,如果计算结果于收到的不一样,则数据有误,会请求再次发送
    • 1位CRC界定符:与后续内容分隔
  • ACK确认槽:发送端为逻辑1,接收端回复逻辑0
  • ACK界定位:一定为1
  • 结束位(EOF):7位,都为1

差分信号的优势

  • 抗干扰能力强,因为两跟信号线会受到相同的干扰从而抵消掉干扰。

参考