一、总线的标准:分为底层标准化和高层协议
其中: 2.0A是认为29位ID为错误
2.0B Passive仅支持识别11位ID数据帧
2.0B Active可支持识别11位和29位两种数据帧
二、通信机制(半双工)
报文发送:
- 节点发送报文(总线空闲且需进行回读判断是否一致)
- “线与”机制(可以理解为“与”逻辑,其通过ID号进行仲裁、显性覆盖隐性—ID越小、报文优先级越高)
- 非破坏性仲裁(退出仲裁进入“只听”,在总线空闲的时候进行报文重发)——只听模式:CAN控制器可以认为它的TX与收发器的TX已经被断开,只有RX可以接收总线上的信号)
- 报文接受过滤:通过过滤器对接收的报文进行过滤(相关-接收、不相关-过滤)
- 编码方法:NRZ编码(优点:确保报文紧凑-相同带宽下信息量更大、缺点:不能保证足够的跳变沿用于同步、带来节点间的计时器累计误差—位填充)
位填充 :作用于帧起始、仲裁场、控制场、数据场以及CRC序列
规则 | 发送方:发送5个相同电平后,自动追加相反电平的填充位 接收方:检测到填充位,自动移除填充位,恢复原始数据 |
作用 |
|
三、CAN报文帧的种类与帧格式解析
1)种类:数据帧(报文)、遥控帧(接收设备请求数据,向其他节点发出具有同一标识符的数据帧)、错误帧(某个设备测出错位向其它设备通知)、过载帧(接收设备通知其尚未做好接收准备)、帧间空间(数据帧和(远程帧)通过帧间空间与前述的各帧分开)
SOF(起始帧) | 显性位、在空闲时候发送 |
ID(报文) | 包含意义、功能 |
RTR(数据帧/遥控帧) | 数据帧(0)、遥控帧(1) |
IDE(标准/扩展) | 标准帧(0)、扩展帧(1) |
SRR(代替远程请求) | 扩展格式下代替RTR,无意义、永远(1) |
R0、R1(保留位) | |
DLC(数据长度) | 单位:字节 |
Data | 有效载荷 |
CRC(校验) | |
CRC界定符 | CRC界定符之前进行位填充 |
ACK | 确保至少有一个节点正确接受,即发送方发1,有接收方存在则发0 |
EOF | 7个连续(1) |
ITM | 3个(1)后总线进入空闲状态 |
DEL(界定符) |
|
帧格式:数据帧和遥控帧都是这种方式
当一帧发完后,怎么判断总线是否空闲准备接下一个呢?直到检测到11个1就认为总线空闲,这个时候就可以继续发数据
续:错误帧、帧间空间以及超载帧的分析以及一些仲裁在专栏继续分享