参考:
- https://new.laoyaoba.com/n/818718
- https://cloud.tencent.com/developer/article/2143116?areaSource=102001.13&traceId=RI5jtkhCVd53zJjFOaTSR
- https://blog.csdn.net/lamanchas/article/details/124089236
一.can
普通CAN最大速率 1MBit/s,单帧最多8字节传输,CANFD最大速度8MBit/s,单帧最多64字节传输
1.Can标准帧格式
- 帧起始位SOF
SOF 值规定为 1,标识此帧的开始。在 CAN 总线协议中约定,值 0 为显性位,值 1 为隐性位("显灵“)
- 仲裁段Arbitration field
FlexCAN 采取多主机、基于优先级的总线传输方式,总线帧的收发顺序在 Arbitration field 仲裁段确定。如果不设置使用帧的优先级进行仲裁,则使用帧的 ID 号进行仲裁比较,越小优先级越高
- ID
- RTR:帧类型
- 控制段Control filed
- IDE:帧格式
- FDF:此帧是否为 CAN FD 帧
- DLC:有效数据字节数
- 有效传输数据Data field
如果此帧为远程帧,将不携带任何数据,所以 DLC 字段对应为 0;如果此帧为数据帧,此段长度由 DLC 字段控制
- 循环冗余码段CRC field
用于在发送和接收流程中检查此帧是否出现比特错误
- ** **检测段ACK field
发送方会发送隐性位 1,然后在此段期间回读总线上信号。如果读到为显性位 0,则说明有其他 CAN 接收器接收到此帧,发送方发送成功
-
** 结束位EOF**
标识发送结束
2.Can标准帧和扩展帧格式
- **RTR:**远程发送请求位,数据帧为显性0,远程帧为隐性1。
- **SRR:**代替远程请求位(在扩展格式中在RTR位置,所以得此名),该位为隐性位。在这个地方占个位以保持标准帧和扩展帧IDE对齐,便可以判断标准帧优先于扩展帧。
- **IDE:**标识符扩展位,标准帧为显性0,扩展帧为隐性1。
- **R0、R1:**保留位。
- **DLC:**数据长度位。
- **CRC:**校验位。
- **CRC分隔符:**隐性位
- **ACK:**应答位和应答界定位。在应答域中,发送器发出两个隐性位。接收器接收到报文后,在应答位期间,用显性位填充应答位作为回应,应答界定则为保持隐性。
- **帧结束:**由7个隐性位组成。
3.FlexCan信息缓冲区结构图(4*32bit = 128bit)
EDL | |
---|---|
BRS | 速率转换, |
ESI | 发送节点错误状态指示,0主动错误/1被动错误 |
FDF | 0传统帧/1canfd帧 |
CODE | 数据缓冲区状态 |
IDE | 0标准帧/1扩展帧 |
SRR | 占位,一般为隐形1 |
RTR | 0数据帧/1远程帧,保证数据帧的优先级高于远程帧 |
DLC | 有效数据长度,最大8字节 |
PRIO | 优先级0-7,0优先级最大, |
示例:
MB0:缓冲区配置
0x0c480000 标准数据帧 数据发送8个字节
0 0 0 0 | 1 1 0 0 | 0 1 0 0 | 1 0 0 0
EDL BRS ESI FDF CODE = 0x0c SRR IDE RTR DLC
| 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0
< 时间戳 >
MB1:放置ID
0 0 0 0 | 1 1 0 0 | 0 1 0 0 | 1 0 0 0
< PRIO > < ID区域 >
| 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0
MB2:有效数据区域
0 0 0 0 | 1 1 0 0 | 0 1 0 0 | 1 0 0 0
**< 字节1 > < 字节2 > **
| 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0
< 字节3 > < 字节4 >
MB3:有效数据区域
0 0 0 0 | 1 1 0 0 | 0 1 0 0 | 1 0 0 0
< 字节5 > < 字节6 >
| 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0
< 字节7 > < 字节8 >