1. Can帧种类
根据ISO-TP中的描述,Can帧主要分四类:单帧(Singal frame, SF),首帧(First frame, FF), 连续帧(Consecutive frame, CF), 流控帧(Flow control frame, FC);
单帧:值为0,其长度可为8个字节(value值占1个字节 + 7个表示正常地址字节,一般我们遇到主要就是类型的)或7个字节(value值占1个字节 + 6个扩展地址字节);
首帧:其值为1, 用于长的、已被分割的多帧消息包中。首帧包括整个包的数据长度,以及数据初始值;
连续帧:其值为2,包含多帧消息包后续子序列的数据帧;
流控帧:其值为3, 是由接收方在确认收到首帧(FF)后发起的响应。其约定了后续连接帧(CF)的传输参数;
2. 传输层协议控制信息(N_PCI)字段图
2.1 SequenceNumber(SN)的取值
其取值范围为:0~F;
通常,首帧的SN值为0(虽然首帧数据中没用SN,但依然将SN值当作是0)。首帧后的第一个连续帧的SN值为1,之后每遇到一个连续帧,SN值加1。当SN=15后再遇到一个连续帧时,其值变为0,依次类推。
SN的值不受流控帧(FC)的影响;
2.2 FlowStatus(FS)的取值
以下数据均为十六进制数。
0 -> 继续发送;
1 -> 等待;
2 -> 溢出;
3~F -> 保留字段;
2.3 BlockSize(BS)的取值
以下数据均为十六进制数。
0 -> 接收方向发送端告知:接收端后续将不会再发送流控帧响应,发送端也不需要等待流控帧,发送端直接发送余下的连接帧数据;
01~FF -> 接收方向发送端告知:接收端能接收的连续帧大小,单位:字节;
2.4 SeparationTime minimum(STmin)的取值
此值由接收方定义,表示接收两个连续帧的时间间隔;
00~7F -> 0~127毫秒;
80~F0 -> 保留字段;
F1~F9 -> 100~900微秒;
FA~FF -> 保留字段;
3. 示例一
以下图“密钥不正确”的操作为例说明“03 7F 27 35 AA AA AA AA”报文的含义。
以上图来进行说明:
报文:03 7F 27 35 AA AA AA AA, 其中:
A). 0表示这个是一个SF,即单帧;
B). 第二位非0,表示这是一个长度为8字节的报文;
C). 3表示,playload负载长度是3个字节;
D). 7F,是诊断负响应码标识;
E). 27表示的是诊断安全访问服务(SecuritySession);
F). 35为具体的负响应码,“非法密钥”;
G). AA 是位填充符;
因此,03 7F 27 35 AA AA AA AA报文表示就是:密钥不正确;
4. 示例二
下图为一个通过指定DID来读取相关数据的服务(诊断22服务)。
Step1:
0:表示单帧(SF);
3:表示一个长度为8字节的报文,后面的负载长度是3个字节;
22:表示诊断的22服务;
F1 B3:指定的DID值
Step2:
1:表示首帧(FF);
8:表示整个数据包的长度为8个字节;即:62 32 15 16 16 51 36 36
Step3:
3:表示流控帧(FC);
0:表示流状态是继续发送帧(FlowStatus=0);
8:表示buffer size为8个字节;
14:表示连续帧的时间间隔为20ms;
Step4:
2:表示连续帧;
1:序列号值为1(SequenceNumber=1),因为此帧是紧接首帧的连续帧;
36 36 :报文数据;
CC填充位;