Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说CAN总线详解,希望能够帮助你!!!。
要了解报文数据帧的直接看第三点
CAN(controller area network)控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线。
其特点有:
can总线协议主要工作在osi模型中的物理层和数据链路层
ISO 11898-2 和 ISO 11898-3主要应用于物理层,两种can收发器主要是对应的茶分电压不一样。
ISO 11898-1主要应用于数据链路层。
can总线采用差分电压传输数据,分别是CANH和CANL两根总线。总线上的信号电平分为这两条线之间的差分电压。
V d i f f = V C A N H − V C A N L V_{diff} = V_{CANH} - V_{CANL} Vdiff=VCANH−VCANL
CAN总线具有两种逻辑电平:隐性电平和显性电平。
隐性电平:CANH和CANL之间的差分电压近似为0,表示逻辑1
显性电平:CANH和CANL之间的差分电压近似为2~3V,表示逻辑0
CAN总线上的逻辑是“线与”的形式,显性电平可以覆盖隐性电平,因此0可以覆盖1
CAN的报文帧可以分为标准帧和扩展帧两大类型。
7 位字段标志 CAN 帧的结束并禁用位填充,当出现显性时表示填充错误。
位填充:正常工作时,当连续出现5位相同逻辑电平时,将填充一位相反的逻辑电平到数据中。
为区别标准帧和扩展帧,将CAN2.0A标准中的r1改为扩展ID号IDE。
扩展ID位IDE位在标准帧中为显性,在扩展帧中为隐性电平。可根据IDE位电平判断帧格式。
图片来源:CSDN
如果两个节点试图同时占用总线,CAN协议协议采用非破坏性逐位仲裁来决定总线的占有权。赢得仲裁的节点只需继续处理消息,不会被其他节点破坏信息完整。
CAN总线的一个特性是为节点ID号的消息分配优先级。ID号越低,优先级越高。最高优先级ID为0。
如果两个或以上节点同时开始传输,则进入总线仲裁,由于CAN总线的特性决定显性电平可以覆盖隐性电平,在逐位仲裁的过程中,ID号高位为1的节点主动退出竞争,最终使具有最高优先级(ID号最小)的节点获得总线通信权,保留对CAN总线的控制并继续完成其消息传送。
上图显示由 CAN 控制器自动处理的 CAN 仲裁过程。
由于每个节点持续监控自己的传输状态,当节点 B 的隐性位被节点 C 的显性位覆盖时,B 检测到总线状态与自身传输的位不匹配。因此,节点 B 停止传输,而节点 C 继续发送其消息。
一旦节点 C 释放总线,节点 B 将尝试传输消息。
CAN 协议包含五种错误检查方法:三种在消息级别,两种在位级别。
消息级别错误检查
消息级别由CRC校验和 ACK 应答间隙强制执行。 还有一个帧检查,查找帧中始终为隐性的字段,即SOF、EOF、ACK界定符和CRC界定符,若检测到出现显性位则产生错误。
位级别错误检查
位级别由发送器数据监测和位填充规则执行。数据监测是在节点发送数据时会不断检测总线电平与自己发送的数据是否一致,如果发现不一致则产生一个位错误。位填充是在连续5个相同电平的位之后填充一个极性相反的位。如果下一位不是补码,则会产生错误。在将数据转发到应用程序之前,接收节点的控制器会删除填充位。
如果消息未通过任何一种错误检查,则该消息无效,接收节点生成错误帧,强制发送节点重新发送消息,直到它被正确接收。
如果故障节点通过不断重复错误而挂断总线,则在达到错误限制后,控制器将取消其传输能力。
数据帧是最常见的消息类型,包括仲裁字段、数据字段、CRC 字段和确认字段。 仲裁字段包含图 2 中的 11 位标识符和 RTR 位,该位对数据帧起主导作用。 在图 3 中,它包含 29 位标识符和 RTR 位。 接下来是包含 0 到 8 个字节数据的数据字段,以及包含用于错误检测的 16 位校验和的 CRC 字段。 最后是确认字段。
CSDN
《CAN总线协议》:Introduction to the Controller Area Network (CAN)
《网络化控制系统————现场总线技术(第2版)》 阳宪惠 主编
修改时间:2021.09.28
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章