【简介】
在汽车电子中CAN通讯的了解是不可避免的,我们今天就结合实际的数据了解下CAN通讯的数据帧的格式。在之前我们已经使用S32K3 完成了芯片的CAN 收发功能验证。
【S32K3XX】FlexCAN MB 报文发送流程代码梳理
在开始之前我们先看下CAN协议标准中对帧数据格式的说明,本地使用的CAN FD通讯方式。
标准的数据帧格式如下:

从上述图片可知,CAN 数据帧 包含帧起始/仲裁域/控制域/数据域/CRC/ACK/帧结尾 组成,首先我们抓取逻辑分析仪的数据来分析CAN 数据帧 。
本地的CAN FD 参数为 500K + 2M 本地抓取的 START OF FRAME 长度为2us 和500K的频率也是保持一致的。

帧起始位 后按照协议对应的仲裁域,CAN 总线如果同时CAN消息在往总线发送时会根据ID的来进行仲裁ID小的获取总线的使用权,仲裁失败的节点转为接收数据,以下是本地发送0x320 CAN 报文的仲裁域的数据。

本地发送到0320 的CAN 报文在ID仲裁段查看数据发现后面多了一个1

这是因为CAN标准定义如果连续6个相同的电平会被认为是错误帧,所以连续5个相同的电平会加入一个反向电平,以下是错误帧的数据格式说明。


以下是标准帧和扩展帧的数据格式说明

标准帧帧11bit 的帧ID后RTR 为代表是否为远程帧,IDE 代表为扩展帧,R0保留位为0,以下为本地发送的0X320报文的对应段的信息。

控制域后面对应的数据域本地的标准帧发送时对应的DLC 和 数据的内容。

在之后对应的CRC 域,对应的CRC 数据段如下。



CRC 域结束后会有一个位时间的隐性高电平,其他节点要在ACK Slot 窗口内进行ACK的应答。
CRC 段之后为应答场,本地的ack 和帧结束标记。


ACK 和 帧结尾的说明 如上,帧结尾为7个“隐形”电平1

本地实测一帧 500K CAN 数据帧总线的占用时间为240us 左右。

500K + 2M 的64字节的报文的总线占用时间为382 us 左右。

我要赚赏金
