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加数据   

直到发完最后一包结束。

在设计一个高效且可靠的KNX TP1报文传输系统时,首先需要对TP1报文的结构和工作原理有深入的理解TP1报文是KNX协议中用于设备间通信的基础格式,它包含了总线相关数据和应用数据,以及用于错误检测的校验数据。设计时,我们可以遵循以下步骤: 参考资源链接:[KNX网络通信解析:TP1报文详解](https://wenku.csdn.net/doc/7cpbfag6dg?spm=1055.2569.3001.10343) 1. 确保报文格式正确:遵循KNX标准,正确设置TP1报文的起始标志、控制字段、目的地址、源地址、负载数据、校验字节以及结束标志。 2. 优化报文长度:根据实际需要传输的数据量,合理设计报文的长度,避免不必要的数据传输,以减少总线占用时间。 3. 使用高效的数据校验方法:选择适合的校验算法,如CRC,以确保数据传输的准确性,及时发现和纠正错误。 4. 实现确认机制:采用确认机制来确保报文被正确接收。所有被寻址的设备必须对收到的报文进行确认,以确认信息仅需一个字符,这样可以提高通信效率。 5. 考虑时间需求:根据KNX TP1报文的时间需求,合理设置报文传输速率,考虑到总线空闲时间和确认等待时间,以满足实时通信的需求。 6. 设计高效的确认过程:设计一种高效的确认过程,确保在最短的时间内完成报文的确认,减少总线等待时间,提高通信效率。 7. 关注传输速率和延迟:KNX TP1报文的传输速率为9600位/秒,设计时要确保设备能够处理这样的传输速率,并且能够在规定的时间内完成报文的发送和接收。 8. 引入重试机制:在网络出现错误时,设计合理的重试机制,保证数据能够在一定时间内被可靠地传输。 9. 使用图形工具辅助设计:利用图形工具帮助理解报文结构和时间需求,使设计过程更加直观易懂。 10. 测试和验证:设计完成后,对系统进行充分的测试,以验证通信的可靠性和效率。 为了深入理解和掌握TP1报文的这些设计要点,建议参考《KNX网络通信解析:TP1报文详解》这一资源。它详细介绍了TP1报文的结构、时间需求、确认机制等关键方面,提供了实用的示例和解决方案,对于设计高效且可靠的KNX TP1报文传输系统至关重要。 参考资源链接:[KNX网络通信解析:TP1报文详解](https://wenku.csdn.net/doc/7cpbfag6dg?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值