9、CAN报文包含帧格式
1)数据帧
2)远程帧
3)错误帧
4)过载帧
SOF:Start Of Frame,帧起始位;一个显性位,表明一帧的开始
RTR:Remote Transmission Request,远程传输请求位;
RTR = 0:数据帧
RTR = 1:远程帧
IDE:Identifier Extension,标识符扩展
IDE = 0:11 bits -> 标准CAN帧
IDE = 1:29 bits -> 扩展CAN帧
DLC:Data Length Code,数据长度代码;0 - 8 bytes。
ACK:Acknowledgement,应答
发送节点:1
接收节点:0
EOF:End Of Frame,帧结束场;连续7个隐性位,无填充位
Identifier:相当于姓名或者职务
Data:最大为8个字节
Checksum:校验和;
G(x) = x^15 + x^14 + x^10 + x^8 + x^7 + x^4 + x^3 + 1
DEL:一个隐性位
ITM:帧间空间
10、错误帧
用于标识发生了总线上出现了错误
> 主动错误和被动错误
> 无填充位
错误帧分类
> CRC错误 (CRC Error)
> 形式错误 (Form Error)
> 填充错误(Stuff Error)
> 应答错误(ACK Error)
> 位错误Bit Error)
11、过载帧
> 延缓其它节点发送报文
> 每个节点最多连续发送两条过载帧
12、总线报文检测
形式检测:在CRC分隔符、ACK分隔符、帧结束和帧间隔中不允许出现显性位
位填充检测:检查区间从SOF到CRC分隔符
应答:只有一个节点的网络无法工作
回读:所发送的位必须从总线上正确回读,否则就是个位错误;在仲裁场和应答间隙,隐性位可以被显性位重写
13、CAN控制器的3种状态
> 主动错误
> 被动错误
> BusOFF
1、在接收过程中发现一个错误,接收错误计数器加1
例外:在错误Flag或过载帧Flag发送过程中的位错误不计数
2、当接收节点发现错误帧Flag之后的第一个位为显性位,接收错误计数器加8
3、当一个发送节点发送一个错误帧,发送错误计数器加8
例外1:如果发送节点为被动错误状态,则当起没有检测到显性应答或发送错误帧时没有检测到显性位
例外2:如果发送节点发送错误顿是由于在仲裁过程中发生了位填充错误(这个填充位在RTR位之前,应该为隐性。这个填充位的确是被当作隐性发送出去的,但是通过对总线的检测发现是显性)
4、如果发送节点在发送主动错误Flag或过载Flag的过程中发现一个位错误,发送错误计数器加8
5、如果接收节点在接收主动错误Flag或过载Flag的过程中发现一个位错误,接收错误计数器加8
6、任何节点在发送主动错误Flg,被动错误Flag或过载Flag之后,最多能够容忍7个连续的显性位如果出现了第8个显性位,则发送节点的发送错误计数器加8,接收节点的接收错误计数器加8
7、当成功发送一个报文,发送错误计数器减1
8、当成功接收一个报文,接收错误计数器减1(如果接收错误计数器在1到127之间)。如果接收错误计数器大于127,则接收错误计数器被置为119到127之间的一个值。
9、当节点进入Busoff状态时,如果总线上出现128个连续的11位隐性位,发送错误计数器和接收错误,计数器被清零。
14、CAN报文各个阶段解读
1)位定时组成
> 一个位时间包含4个时间段,8-25个时间份TimeQuantum(TQ)
> 为了编程方便,许多CAN模块将传播段和相位缓冲段1合并,称为时间段1;将相位缓冲段2称为时间段2
2)同步段
一个位的输出从同步段开始
用于同步各个节点,跳变沿产生在此段内
固定长度,1个TQ
3)传播段
> 传播段用于补偿信号通过网络和节点传播的物理延迟
> 传播段长度应大于2倍于信号在总线的延迟
> 长度可编程 (1...8个时间份额或更长)
4)相位缓冲段1
> 允许通过重同步对相位缓冲段1加长
> 相位缓冲段1末端进行总线状态的采样
> 长度可编程(1···8个时间份额或更长)
5)相位缓冲段2
> 允许通过重同步对相位缓冲段2缩短
> 长度可编程(1...8个时间份额或更长)
15、同步跳转宽度
> SIW(Synchronization Jump Width)
> 相位缓冲段1可以被延长的时间份额数量
> 相位缓冲段2可以被缩短的时间份额数量
> 同步跳转宽度大小
> 最短为1个时间份额,最长为4个时间份额
> 小于相位缓冲段2