看懂CAN2.0B与CANFD数据帧解析

CAN采用的是差分信号:由两根线组成CANH和CANL。

按照定义:CANH-CANL

CANL-CANH>0.9v时为显性,逻辑电平为低。

CAN总线与IIC一样采用线与,在总线上显性电平具有优先权,当同时出现显性信号和隐性信号时,总线上为显性数据即0。

通信过程:

由于CAN通信只有两根数据线,没有时钟线所以并不知道数据

是什么时候开始发送什么时候开始接收,不像IIC有SCL时钟线,SPI有CS片选信号,那么每个ECU是怎么知道CAN总线上的数据是发给自己呢,CAN有一套复杂的协议。

空闲状态:在CAN协议中,在总线上出现连续的11位隐性电平(电压差

像前面说的CAN采用的是线与通信,当所有总线上的单元都发送隐性信号,才说明总线是空闲的。

开始数据传输:

每次数据传输前,节点都会监听总线的状态,如果说总线为空闲状态,那么就会发送自己的数据包,数据包包括本身的ID信息或者其他控制指令,也称之报文。当报文传输到其他节点时,其他节点就得按照固定格式去解读数据包。这里固定格式即整车厂会定义好CAN Communication Matrix(后续有时间会单独出一篇关于通信矩阵的应用)。

其实可以简单的理解CAN Communication Matrix就是定义报文标识符和信号值描述对每一帧数据的解析。

报文格式:起始标签、识别标签、控制标签、数据段、CRC校验标签、应答标签、结束标签。

标准帧的报文由:起始位、识别码、控制码、数据码、CRC、ACK、结束位

CAN2.0B

CAN FD:

CAN 2.0B:

起始位:信号为显性信号(0)

识别码:11位ID 表明报文的含义和优先级(标准11id,扩展29位ID)

RTR远程传送请求位(0:数据帧,1:远程帧)

SRR远程帧恒为1(CANFD的SRR刚好对上CAN2.0B的RTR)标准帧优先级高于扩展数据帧

IDE:该标志用于区分标准帧还是扩展帧(1:扩展帧,0:标准帧)标准帧优先于扩展帧

r:保留位

IDextension:扩展帧的扩展ID

FDF:用于区分普通CAN报文和CAN FD报文。CAN报文,FDF=0;CAN FD报文,FDF=1

DLC:数据长度

data field:标准帧最大8byte,扩展帧最大64 byte

CRC:循环冗余校验码,校验报文是否正确。(数据段的CRC(循环冗余校验)通常由硬件自动计算和填充。)

ACK:0为接收应答,1:未应答(当一个节点发送一帧数据后,其他节点会在一定时间内检测到这一帧,并发送一个ACK信号0,表示它已成功接收到数据。)

EOF:帧结束(7bit 连续隐性)

远程帧:

数据传输是由数据源节点(例如,传感器发出数据帧)自主完成的。但也可能存在目标节点向源节点请求发送数据的情况。要做到这一点,目标节点需发送一个远程帧,其中的标识符应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。

远程帧 与数据帧存在两点不同:

1)远程帧的 RTR 位为隐性状态;

2)远程帧没有数据字段。

位填充与错误帧

当CAN节点发送 逻辑电平(显性dominant或隐性recessive)相同的五bit时,它必须发送一bit相反电平。 CAN接收 节点会自动删除这个新增的额外bit。

当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,因为其标识符后面的 RTR 位为显性。这样,可使发送远程帧的节点立即收到所需数据。

主动错误帧

主动错误标志由 6 个连续的显性位构成,这种位序列主动打破了位填充规则,所有其他节点在识别到所生成的位填充错误后,会自行产生错误帧,称为错误反射标志。错误标志字段因此包含 6 到 12 个连续显性位 (由 1 个或多个节点产生)。错误定界字段 (8 个隐性位)为错误帧划上句号。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值