CAN-TP(暴力理解)

CAN-TP作用

CAN Transport Layer Protocol,是一种用于控制器区域网络(CAN)的传输层协议。CANTP为CAN提供了大容量数据的传输,可以将较大的数据分为多个小数据帧进行传输,并在发送和接收端进行重新组装。暴力一点的理解,CANTP的作用就是组包,拆包,传输超时反馈。

       我们知道CAN的一帧标准数据帧可携带8字节的数据,那么如果要传输的数据字节大于8字节要怎么传输呢?一帧明显搞不定,那就把它拆成多帧发出去就行了,每次最多传输4095字节长度报文。在此之前必须要了解网络层中一个非常重要的东西,N_PDU.

网络层协议数据单元(N_PDU,Network_Protocol Data Unit),包含以下三个部分

1)N_AI      地址信息

2)N_PCI    协议控制信息

3)N_Data   数据

       PDU的功能主要是明确四种帧的类型(用于拆包和组包)。以下是PUD的格和类型,这里简单化的来说就是四种类型帧的格式。

 

当数据长度小于8字节,一帧单帧就可以解决了,当数据长度比较大时,例如VIN17位,就需要拆包进行多帧传输数据,以下是多帧时序,这个需要理解看懂。

       当发生比较长的报文的时候,将报文拆分成首帧+连续帧。首先发生放发一帧首帧,接收方收到后会回复一帧流控帧(告诉发送方自己的接收能力以及操作指示),发送方收到流控帧继续发送的指示后,将剩余的数据以连续帧的形式发送,然后依次往复,直到所有数据传输完毕。

       简单粗暴理解四种帧类型

单帧 SF (Single Frame)  数据长度若不超过7字节,单帧一帧就可以搞定。(为什么是七个字节的数据,这里是因为第一个byte被占用了,后面只有七个byte的空位了)

例如收到:04 11 22 33 44 55 55 55  

此时第一个字节04  ,0代表这是一个单帧,4表示这一帧后面带着四字节数据。

11 22 33 44 是这一单帧携带的数据,后面的55 55 55 是填充位。

首帧FF   (First Frame)

例如收到了 10 22 22 22 22 22 22 22     第一个字节的1 代表这是一帧首帧  0 22代表数据长度,代表传输的数据一共有34个字节,首帧先传6字节,后面的用连续帧补上。后面的6个22 都是携带的数据。

流控帧 FC  (Flow Control Frame)

FS (flow state) 流状态: 用于记录当前的流量控制情况,包括发送方可以发送的数据量、接收方的处理能力等信息。暴力理解,一共三种情况。

FS=0  请继续发送(接收能力完全没问题)

FS=1  请等待(有点接受不过来了,先不要发,等通知)

FS=2  过载了(太多了,接受不了了)

BS (block size) 块大小: 接收方能够接收的最大数据块数量。

BS=0  告诉发送方再不要发流控帧了,可以一直发送(CF发送)数据。

BS=01~FF  告诉发送方在没有接受流控帧期间能发送的最大数目的连续帧

STmin (ms):  发送连续帧之间的间隔

例如收到报文 30 00 14 AA  AA AA  AA AA

3 表示是一个流控帧,0表示允许我方继续发送数据,00表示可以无限制的发连续帧

14 表示连续帧与连续帧直接的最小时间间隔是20ms。

连续帧 CF (Continue Frame)

连续帧第一包编号是1!后面到F后,第一次循环后,才从0开始!

21+数据                     20+数据                                  20+数据

22+数据                     21+数据                                        。

23+数据                     22+数据                                        。

。                                。                      。  。 。             。

。                                。

。                                。

2F加数据                    2F加数据   

直到发完最后一包结束。

  • 44
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值