CAN与CANOpen(一)基本概念
CAN与CANOpen(二)报文格式
CAN与CANOpen(三)错误处理
CAN与CANOpen(四)CANOpen对象字典
CAN与CANOpen(五)PDO和SDO
CAN与CANOpen(六)网络管理和CAN FD
3.4位填充
图19位填充
CAN总线是串行总线,在CAN节点之间没有独立的时钟。所以接收端只能依靠CAN波形的边沿来同步接收端和发射端的时钟。为了保证有足够的边沿,CAN总线实现了位填充。对于帧起始、仲裁字段、控制字段、数据字段以及CRC字段,如果位流里有5个连续的显性位或隐性位,就会自动插入一个补码位。
3.5 CAN节点的错误状态
图20 CAN节点的错误状态转换
所有的CAN几点都会处于下面三种状态:
- 错误主动:相应的节点可以正常的参与总线通讯,发送主动错误标志
- 错误被动:相应节点发送被动错误标志,并在帧间空间有挂起传输阶段
- 总线关闭:相应的节点不能发送任何信息。
错误类型 |
作用范围 |
|
位错误 |
发送的是显性位,但检测到的是隐性位,反之亦然。 |
数据帧、远程帧、错误帧、超载帧 |
填充错误 |
出现连续6个相同的电平位
|
数据帧、远程帧 |
CRC错误
|
接收器计算的CRC与接收到的CRC不一致。错误标志在应答结束符之后传输
|
数据帧、远程帧 |
形式错误 |
固定形式的字段有非法字符 |
数据帧、远程帧、错误帧、超载帧 |
应答错误 |
应答位不为显性 |
|
表1错误类型
每个CAN节点都维护了两个错误计数器:发送错误计数器和接收错误计数器。CAN节点就是通过判断这两个计数器的计数来决定自己的错误状态的(参考图20)。
条件 |
TEC |
REC |
备注 |
接收器监测到一个错误 |
-- |
+1 |
在发送主动错误标志,和超载标志期间所检测到的错误为位错误时,接收错误计数器不加1
|
接收器发送完错误标志后,检测到第一个位为显性 |
-- |
+8 |
|
发送器发送一个错误标志 |
+8 |
-- |
例外:
1.错误被动的发送器检测到应答错误并在发送被动错误标志时没有检测到显性位
2.发送器在仲裁字段检测到填充错误,填充位在RTR之前,并且应为隐性位,但检测到的为显性 |
当发送主动错误标志或超载标志时发送器监测到一个位错误 |
+8 |
-- |
|
当发送主动错误标志或超载标志时接收器监测到一个位错误 |
-- |
+8 |
|
|
检测到14个连续的显性位
被动错误标志之后检测到第8个连续的显性位
每一个附加的8个连续的显性位
|
+8 |
+8 |
在主动错误标志、被动错误标志或者超载标志之后,任何节点最多允许7个连续的显性位 |
成功发送一条信息 |
-1 |
-- |
|
成功接收一条信息 |
-- |
-1(1<REC<127) REC=127(REC>127) |
表2错误计数器的变化条件
思考题:
- 一个被动错误节点检测到一个错误会发生什么?
- 主动错误节点与被动错误节点,谁占有总线的可能性更大?