CAN2.0A/B标准规定:总线空闲时,CAN_H和CAN_L上的电压为2.5V
在数据传输时
显性电平(逻辑0):CAN_H3.5V CAN_L 1.5V
隐性电平(逻辑 1):CAN_H 2.5V CAN_L 2.5V “显性”具有“优先”的意味
同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
所有单元必须设定成统一的通信速度,可通过发送“遥控帧” 请求其他单元发送数据。
Physical Layer 信号电平 | Data Link Layer 总线仲裁机制 位填充机制机制 can 报文帧结构 | Application Layer j1939 本质
|
总线速率
通信是通过以下5 种类型的帧进行的。 数据帧 ,遥控帧 ,错误帧 ,过载帧 ,帧间隔
数据帧 用于发送单元向接收单元传送数据的帧。
遥控帧 用于接收单元向具有相同ID 的发送单元请求数据的帧。
错误帧 用于当检测出错误时向其它单元通知错误的帧。
过载帧 用于接收单元通知其尚未做好接收准备的帧。
帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧。
数据帧的结构
帧起始:1bit 。从图中看出,在帧间隙后由逻辑1 (至少两个bit)向逻辑0 的跳变就被认为是帧起始,它的作用就是为了硬同步。
仲裁场:由29bit 的ID标示符和IDE 、SRR 、RTR 位构成。IDE 位用于标示该帧是扩展帧(29bit ID)还是标准帧(11bit ID );
控制场:包括两位保留位(必须为0),和数据长度位(DLC0~DLC3)
数据场:包括最多8个字节的数据
CRC 场:是一种算法,对数据进行CRC 校验,共15bit,其后跟了一位CRC 界定符——为1(隐性电平)
应答场:为两个1(总线电平为低电平),其中一位为应答间隙,另一位为应答界定符。成功接收到数据的节点必须发送一位显性位(总线电平为高电平)来应答该发送节点,必须注意:该显性位必须在应答间隙期间,即1bit 的时间内将总线电平拉高。
帧结尾:7个连续的1组成(隐性电平)
SRR 在扩展帧中为一隐性位;RTR位为远程帧标志位。
由上图可以看出,11bit的基本ID首先被发送(ID28~ID18),然后在发送18bit的扩展ID(ID17~ID0 )
数据帧:帧起始+仲裁段+控制段+数据段+ CRC段+ ACK段
1. 帧起始(SOF 1bit):1bit:0
2. 仲裁段:
a) :标准格式(基本ID+RTR:11bit+1bit=12bit):ID+1;(ID的高7位必须有0)
b) :扩展格式(基本ID+SRR+IDE+扩展ID+RTR:11bit+1bit+1bit+18bit+1bit=32bit);
ID+1+1+EID+1; (ID的高7位必须有0)
3. 控制段:
a) :标准格式(基本IDE+r0+DLC:1bit+1bit+4bit=6bit):1+1+DLC;(DLC:0到8)
b) :扩展格式(基本IDE+r1+r0:1bit+1bit+4bit=6bit):1+1+DLC;(DLC:0到8)
4. 数据段(0到8字节max 64):(发送时MSB开始输出);
5. CRC段(CRC+CRC界定符:15bit+1bit=16bit):CRC+1
6. ACK段(ACK槽+ACK界定符:1bit+1bit=2bit):发送方:1+1
Xxx帧结束(EOF:7bit):7个位的1。
0xxxxxxx xxxx111xxxxdata(0-64) crc(15)111
CAN总线通过如下几个方面进行错误检测
(1)当节点赢得总线发送权后,会对总线电平进行检测,当发送的电平和检测到的总线电平不一致时,认为错误
(2)出现6个连续相同的电平时,认为是填充错误
(3)CRC 错误,接收数据的节点按照与发送数据的节点相同的方法计算数据的CRC 校验值,如果接收节点的计算结果与数据包中CRC 场的数据不一致,认为是CRC 错误
(4)应答错误,在应答场如果没有监控到一个显性电平,那么就认定一个应答错误
(5)固定位错误,例如:CRC 界定符等,其电平是固定的,当监控到该电平不相符时,认定一个错误
另:总线同步机制也是CAN总线容错的一种方式
标准格式的ID 有11个位。从ID28 到ID18 被依次发送。禁止高7 位都为隐性。 (禁止设定:ID= 1111111 XXXX )
扩展格式的ID 有29个位。基本ID 从ID28 到ID18,扩展ID 由ID17 到ID0 表示。基本ID 和标准格式的ID 相同。禁止高7 位都为隐性。(禁止设定:基本ID= 1111111 XXXX )