一、 CANTP功能
CANTP(CAN TransportLayer),位于通信栈的传输层,是专门服务于UDS诊断,位于PDUR与CANIF之间,实现了PDUR到CANIF的拆包发送与CANIF到PDUR的组包接收功能。对于多帧大数据支持通过流控帧控制数据发送速率并提供数据发送与接收过程中超时处理功能。
单帧:SF(Single Frame),用于发送单个CAN帧即可发送完成的数据;
首帧:FF(First Frame),用于发送较大数据情况下的第一帧;
连续帧:CF(Consecutive Frame),用于发送较大数据情况下首帧外的其余部分;
流控帧:FC(Flow Control),接收后用于调节数据发送速度。
二、组包
单帧(SF)
can
Byte1[7:4] 固定为0,表示单帧
Byte1[3:0] 表示数据长度,范围为0~7。
canfd
Byte1[7:4] 固定为0,表示单帧。
Byte1[3:0] 固定为0
Byte2[7:0] 表示数据长度,范围0~63。
首帧(FF)
can&canfd 长度<4096
Byte1[7:4] 固定为1,表示首帧。
Byte1[3:0]+Byte2[7:0] 合起来表示数据长度,最大为4095
can&canfd 长度>4096
Byte1[7:4] 固定为1,表示首帧。
Byte5[7:0]+Byte6[7:0] 合起来表示数据长度如果大于4095
流控帧(FC)
can&canfd
Byte1[7:4] 固定为3,表示流控帧。
Byte1[3:0] 表示帧状态,0(继续发送)1(等待)2(溢出)
Byte2 BlockSize(BS), 表示上位机收到流控帧后,可发送的连续帧数量。设置为0时,发送数量无限制
Byte3 STmin(ms),表示上位机发送 连续帧之间的间隔
连续帧(CF)
can&canfd
Byte1[7:4] 固定为2,表示连续帧。
Byte1[3:0] 连续帧编号,范围是0~F,循环增加。
要注意第一包连续帧编号为1,增加到F之后,后续所有的连续帧编号都是从0开始增加。
多帧时序
1. Sender ->发送首帧
2. Receiver ->回复流控帧
3. Sender-> 发送连续帧(根据流控帧确认发送连续帧的间隔和次数)
4. Receiver -> 收到指定数量的连续帧后,再次回复流控帧
5. Sender-> 发送连续帧(根据流控帧确认发送连续帧的间隔和次数)
三、时间参数
含义
● 发送方:
– N_As:从数据发送到数据被确认发送的最大间隔时间,如果超过这个时间则中断发送。
– N_Bs:从数据确认发送到收到流控帧的最大间隔数据,如果超过这个时间则中断发送。
– N_Cs:从流控帧接收或CF确认发送到数据请求发送成功的最大时间间隔,如果超过这个时间则中断发送。
● 接收方:
– N_Ar:从数据(FC)请求发送到数据发送成功的最大数据间隔,如果超过这个时间则中断接收。
– N_Br:从FF或者CF确认发送到FC请求的最大时间间隔,如果超过这个时间则中断接收。
– N_Cr:从CF接收到下一个CF接收或者FC接收的最大时间间隔,如果超过这个时间则中断接收。
一般N_As为0.07,N_Bs为0.15,N_Cs为0.05,N_Ar为0.07,N_Br为0.05,N_Cr为0.15。
Block Size
BS即块大小,收到一帧流控帧后发送连续帧的最大数量,用来限制连续发送连续帧的最大数量,如为0则没有限制可以一直发,直到数据发送完毕。
STmin
STmin即连续帧发送的最小时间间隔,代表了接收方的接收能力。