目录
一,协议介绍
1,其存在的目的是为了解决ISO-11898和ISO-14229彼此之间数据长度不统一的问题
2,经典CAN数据链路层最大支持八个字节,但ISO-14229不仅仅为了CAN设计,最大容量4095字节,比如VIN码17字节,CAN总线需要传输3次
3,上层网络要想通过CAN帧来传递信息就会出现两种情况,有些消息长度很短,只需要CAN的一帧就可以解决;而有些消息长度很大,无法通过CAN的一帧来完整传输,那么就需要将该消息按照一定规则进行分割成若干个CAN帧进行传输。以上其实就是ISO15765-2中定义的最关键的部分
二,帧的格式
网络层协议数据单元的格式(N_PDU)
ISO-15765中一个PDU就是一帧CAN数据。它主要包括:帧ID和(最多8个)字节数据。

1,单帧
帧数量为1,也即数据不超过8个字节。
首字节表示长度,后面紧跟数据。
如 02 10 01 //长度为2,诊断ID为10 子服务为01
2,首帧
帧数量大于1,也即数据超过8个字节。
首字节的前4bit为1表示为多帧首帧。
首字节左移8位 再加上次字节表示数据长度,也即数据最大为4095个字节。
如 10 08 01 02 03 04 05 06 //多帧首帧,且数据长度为8,后面6个是有效数据
3,连续帧
首字节的前4bit为2表示为连续帧。
首字节的后4bit表示序号,第一包从1开始,后面顺序递增,递增超过15时从0开始。
10 08 01 02 03 04 05 06 //首帧
21 07 08 00 00 00 00 00//连续帧
4,流控帧
首字节的前4bit为3表示为多帧流控帧。
首字节的后4bit表示响应码,00表示正常,可以继续发送数据,否则应当停止后续发送。
第三个字节一般表示多帧发送延时,一般为00表示后续多帧数据帧之前发送间隔为0,为1表示要间隔1ms发送。
30 BS STmin //流控帧


三,帧的传输
1,单帧
单帧消息的传输比较简单,如下图:

示例:发送端需要给接收端发送三个字节,分别是0x22 0x10 0x20,所以需要使用单帧
2,多帧
接收端接收到首帧后,发送流控帧给接收端,告知发送端自己在发送下一帧流控帧之前能够接收最大数量的连续帧,以及两个连续帧之间的间隔,发送端接收到流控帧的要求后,按照该要求继续发送连续帧。接收端不断接收连续帧,若接收端已经收满BS数量的连续帧,且与首帧中包含的数据长度对比发现数据还没接收满,则会继续发送流控帧,发送端会接着发送连续帧,以此类推,直至所有数据发送完成。

920

被折叠的 条评论
为什么被折叠?



