简介
CAN-TP帧类型可分为 单帧和多帧。
单帧(SF) : Single Frame,数据长度小于等于7个Byte(标准CAN是7Byte,CAN-Fd是63Byte)时,使用单帧进行传输
多帧可分为 首帧(FF)/流控帧(FC)/连续帧(CF),数据长度大于等于8个Byte(标准CAN是8Byte,CAN-FD是64Byte)时,使用多帧进行传输
首帧(FF):First Frame
流控帧(FC): Flow Control
连续帧(CF): Consecutive Frame
帧格式
单帧格式
单帧比较简单,标准CAN中,
Byte1[7:4] : 固定为0,表示单帧。
Byte1[3:0] : 表示数据长度,范围为0~7。
如果是CAN-FD,数据长度最大为63,所以Byte1[3:0]不够长度表示,所以需要Byte2整个字节表示数据长度。
则 Byte1[7:4] : 固定为0,表示单帧。
Byte1[3:0] : 固定为0。
Byte2[7:0] : 表示数据长度,范围0~63。
单帧数据的长度 表示方式如下:
首帧格式
首帧中,标准CAN和CAN-FD 格式相同,
Byte1[7:4] : 固定为1,表示首帧。
Byte1[3:0]+Byte2[7:0] : 合起来表示数据长度,最大为4095
其余字节为数据段。
流控帧格式
流控帧中,标准CAN和CAN-FD 格式相同,
Byte1[7:4] : 固定为3,表示流控帧。
Byte1[3:0] : 表示帧状态
Byte2 : BlockSize(BS), 表示上位机收到流控帧后,可发送的连续帧数量。设置为0时,发送数量无限制。
Byte3 : STmin(ms),表示上位机发送 连续帧之间的间隔
连续帧格式
流控帧中,标准CAN和CAN-FD 格式相同,
Byte1[7:4] : 固定为2,表示连续帧。
Byte1[3:0] : 连续帧编号,范围是0~F,循环增加。
要注意第一包连续帧编号为1,增加到F之后,后续所有的连续帧编号都是从0开始增加。
本文中截图取自下记博客
多帧时序
如上图所示,多帧时序如下
1. Sender ->发送首帧
2. Receiver ->回复流控帧
3. Sender-> 发送连续帧(根据流控帧确认发送连续帧的间隔和次数)
4. Receiver -> 收到指定数量的连续帧后,再次回复流控帧
5. Sender-> 发送连续帧(根据流控帧确认发送连续帧的间隔和次数)