CAN总线协议
要了解报文数据帧的直接看第三点
1. CAN简介
CAN(controller area network)控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线。
其特点有:
- 总线上节点不分主从
- 采用载波监听多路访问、逐位仲裁的非破坏性总线仲裁技术。
- 直接通信距离最远10km,速率5Kb/s
- 通信速率最高可达1Mb/s,距离40m
- 末端要有120欧终端电阻
11898协议
- iso的osi模型
- 11898-1对应controller
- 11898-2对应高速can收发器
- 11898-3对应低速can收发器
- 11898-4增加时间触发通讯机制
can总线协议主要工作在osi模型中的物理层和数据链路层
ISO 11898-2 和 ISO 11898-3主要应用于物理层,两种can收发器主要是对应的茶分电压不一样。
ISO 11898-1主要应用于数据链路层。
2. CAN总线电平
can总线采用差分电压传输数据,分别是CANH和CANL两根总线。总线上的信号电平分为这两条线之间的差分电压。
$$ V_{diff} = V_{CANH} - V_{CANL} $$
CAN总线具有两种逻辑电平:隐性电平和显性电平。
隐性电平:CANH和CANL之间的差分电压近似为0,表示逻辑1
显性电平:CANH和CANL之间的差分电压近似为2~3V,表示逻辑0
CAN总线上的逻辑是“线与”的形式,显性电平可以覆盖隐性电平,因此0可以覆盖1
3. CAN数据帧
CAN的报文帧可以分为标准帧和扩展帧两大类型。
3.1 标准帧 Standard CAN
- 帧起始:SOF仅由一个显性位构成。在总线空闲时才允许节点发SOF。
- 仲裁场:由11位ID号(标识符)和远程请求位RTR组成。ID号以高位到低位的顺序发送,其中高7位(ID.10~ID.4)不能全为隐位。RTR在数据帧中必须是显位,在远程帧中必须为隐位。当需要请求另一个节点的信息时,RTR位为显性表示远程帧,所有的节点都会收到请求并根据ID号确认响应节点。
- 控制场:由扩展标识符IDE、保留位r0和数据长度码DLC组成。IDE位为0表示改帧为标准帧。DLC为4bits,允许使用数目为0~8。r0保留显性位0。
- 数据场:最多64bits即8个字节长度数据
- CRC场:由15位CRC序列和1位界定符组成。
- 应答场:ACK由2bits组成,包括应答间隙和应答界定符。应答场中发送器发出2位隐性位,如果接受器正确接收到数据,则发送一个显性位告知正确收到有效报文。即接收节点当CRC校验结果正确时会在应答间隙内发一个显性位。第二位应答界定符必须是隐性位。
- 帧结束:EOF由7个隐位组成。当接收到EOF 字段的最后一位且全为隐性位时,该消息被认为是有效的。 若 EOF 字段中出现显性位将会使发送器重复发送信息。
7 位字段标志 CAN 帧的结束并禁用位填充,当出现显性时表示填充错误。
位填充:正常工作时,当连续出现5位相同逻辑电平时,将填充一位相反的逻辑电平到数据中。
3.2 扩展帧Extended CAN
为区别标准帧和扩展帧,将CAN2.0A标准中的r1改为扩展ID号IDE。
- SRR为替代远程请求位,用于取代标准帧中的RTR位,作为扩展帧中的占位符,同样是在数据帧中为隐性位。
- IDE为扩展标识符,隐性位表示后面有更多的标识符位(ID位),IDE位后面跟着18位扩展ID。
- r1和r0都是保留位,保留显性0。
扩展ID位IDE位在标准帧中为显性,在扩展帧中为隐性电平。可根据IDE位电平判断帧格式。
图片来源:CSDN
4. CAN总线仲裁
如果两个节点试图同时占用总线,CAN协议协议采用非破坏性逐位仲裁来决定总线的占有权。赢得仲裁的节点只需继续处理消息,不会被其他节点破坏信息完整。
CAN总线的一个特性是为节点ID号的消息分配优先级。ID号越低,优先级越高。最高优先级ID为0。
如果两个或以上节点同时开始传输,则进入总线仲裁,由于CAN总线的特性决定显性电平可以覆盖隐性电平,在逐位仲裁的过程中,ID号高位为1的节点主动退出竞争,最终使具有最高优先级(ID号最小)的节点获得总线通信权,保留对CAN总线的控制并继续完成其消息传送。
上图显示由 CAN 控制器自动处理的 CAN 仲裁过程。
由于每个节点持续监控自己的传输状态,当节点 B 的隐性位被节点 C 的显性位覆盖时,B 检测到总线状态与自身传输的位不匹配。因此,节点 B 停止传输,而节点 C 继续发送其消息。
一旦节点 C 释放总线,节点 B 将尝试传输消息。
5. 帧的有效性
CAN 协议包含五种错误检查方法:三种在消息级别,两种在位级别。
消息级别错误检查
消息级别由CRC校验和 ACK 应答间隙强制执行。 还有一个帧检查,查找帧中始终为隐性的字段,即SOF、EOF、ACK界定符和CRC界定符,若检测到出现显性位则产生错误。
位级别错误检查
位级别由发送器数据监测和位填充规则执行。数据监测是在节点发送数据时会不断检测总线电平与自己发送的数据是否一致,如果发现不一致则产生一个位错误。位填充是在连续5个相同电平的位之后填充一个极性相反的位。如果下一位不是补码,则会产生错误。在将数据转发到应用程序之前,接收节点的控制器会删除填充位。
如果消息未通过任何一种错误检查,则该消息无效,接收节点生成错误帧,强制发送节点重新发送消息,直到它被正确接收。
如果故障节点通过不断重复错误而挂断总线,则在达到错误限制后,控制器将取消其传输能力。
6. 报文帧类型简介(扩展)
6.1 数据帧
数据帧是最常见的消息类型,包括仲裁字段、数据字段、CRC 字段和确认字段。 仲裁字段包含图 2 中的 11 位标识符和 RTR 位,该位对数据帧起主导作用。 在图 3 中,它包含 29 位标识符和 RTR 位。 接下来是包含 0 到 8 个字节数据的数据字段,以及包含用于错误检测的 16 位校验和的 CRC 字段。 最后是确认字段。
6.2 远程帧
6.3 出错帧
6.4 超载帧
7. 参考资料
《CAN总线协议》:Introduction to the Controller Area Network (CAN)
《网络化控制系统————现场总线技术(第2版)》 阳宪惠 主编
修改时间:2021.09.28
标签:通信协议,总线,电平,ID,隐性,节点,显性 From: https://www.cnblogs.com/Ethan-Code/p/16783117.html