CAN数据传输

数据传输

CAN总线传输的是CAN帧。CAN的通信帧分为五种:数据帧,远程帧,错误帧,过载帧和帧间隔

线与机制

在学习CAN数据传输前,先了解一下CAN总线的线与机制。

只要总线空闲,总线上的任何节点都可以发送报文,如果有两个以及两个以上的节点开始传送报文,那么会存在总线访问冲突的可能,CAN使用标识符的逐位仲裁(线与机制)解决了这个问题

需要知道:隐性电平对应逻辑1,显性电平逻辑0。MSB先传输。

当单节点(收发器)传输数据为 logic 1 时,节点的开关打开,即节点信号为高电平;当单节点传输数据为 logic 0 时,节点的开关闭合,即节点信号被拉低

收发器连接总线,当节点A发送 logic 0,节点B发送 logic 1,总线 = (logic 0) & logic 1,即总线电平为0,隐性电平会被显性电平覆盖,这就是线与机制。

假设节点A传送的id为0x10123456,节点B传送的id为0x14123456,节点C传送的id为0x18123456

三个节点都向总线发送数据,收发器在发送数据的同时监听总线的电平,对报文进行仲裁

  • 判断ID31-28,三个节点都相同

  • 判断ID27,节点C为隐性电平,则节点C停止发送报文,变为监听模式

  • 判断ID26,节点B为隐性电平,则节点B停止发送报文,变为监听模式

  • 节点A获得总线的优先发送权

总线的电平 = 节点A & 节点B & 节点C,即总线上的id最后是0x10123456,即通过线与机制,解决了总线冲突的可能。

所以,在CAN总线中,标识符(id)越小,优先级越高。

节点A发送完毕,各个节点发现总线的电平是连续11位的隐性电平,则判断总线空闲,如果还是多个节点同时进行数据传送,再进行仲裁。

数据帧

数据帧是使用最多的帧,帧组成如下

数据帧构成:

  • 帧起始:表示数据帧开始的段,由1位显性电平表示帧起始

  • 仲裁段:表示帧优先级段

  • 控制段:DLC表示传输数据的字节数,有效值为0-8

  • 数据段:数据的内容,一帧发送0~8个字节的数据

  • CRC段:检查帧的传输错误的段

  • ACK段:表示确认正常接收的段,接收器确认之前,总线上的ACK是2bit的隐性位(发送单元发送的),接收器正确地接收到报文,在ACK槽发送显性位

  • 帧结束:表示数据帧结束,7个隐性位组成帧结束的标志,如果出现显性位则会出现填充错误

名词:

  • PTR:标识是否是远程帧(0:数据帧,1:远程帧)

  • IDE:标识符选择位(0:标准标识符,1:扩展标识符)

  • SRR:代替标准帧的远程请求位,为隐性位

  • r0,r1:保留位,必须为显性位

仲裁段

当两个节点同时向网络上传送信息时,标识符优先级高的优先传送,具体的参考上面的线与机制

  • 数据帧根据仲裁段长度不同分为标准帧(11位)和扩展帧(29位),即标识符。

  • 帧ID(标识符)越小,优先级越高,标准帧优先级高于扩展帧。

一般外发数据涉及到标识符的仲裁,接收数据涉到收发器对标识符的过滤

数据段

数据段传送的内容是报文解析中的帧数据,一个数据帧传送的数据量为8个字节,MSB先传输

CRC段

  • CRC的值计算范围包括:帧起始、仲裁段、控制端、数据段

  • CRC界定符为隐性位

详见CRC校验

posted @ 2022-08-13 16:26  伯宁君  阅读(1993)  评论(1编辑  收藏  举报