通讯协议制定之数据消息传输方式介绍
1. 前言
通讯协议
又称通信规程,是指通信双方对数据传送控制的一种约定,约定中包括对数据格式
,同步方式
,传送速度
,传送步骤
,检纠错方式
以及控制字符定义
等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程
- 根据项目中的实际应用,本人总结了嵌入式开发中通讯协议制定的相关考虑因素和经验技巧,具体包含如下内容,可供参考学习了解 ( 介绍中阐述的相关术语使用了开发交流沟通中的讲法,可能存在说法不同;因本人技术水平有限,分享创作的内容可能存在不合理的地方,欢迎相互交流沟通、批评指正)
- 通讯协议制定之前言、背景介绍
- 通讯协议制定之交互方式、步骤介绍
- 通讯协议制定之数据包结构介绍
- 通讯协议制定之数据传输类型及传输规则介绍
- 通讯协议制定之数据消息传输方式介绍
- 通讯协议制定之数据包校验算法介绍
- 通讯协议制定之常见问题、注意事项总结
消息数据
是通信传输的交互数据,是整个协议数据包最核心的部分,本文详细介绍如何传输数据消息字段内容
2. 介绍2种数据消息传输方式
- 本文以一个简单示例来说明,数据包的整体结构(一个极简单的结构)规定如下:
字段定义 | 字段字节长度 | 数据段 |
---|---|---|
起始符 | 2字节 | 数据包的帧头,规定为 :0x44 0x46 |
消息编号 | 1字节 | 0~255滚动计数 |
消息业务类型 | 2字节 | 服务号,业务类型:0x2001为车辆行车电脑数据上报 |
消息长度 | 1字节 | 后续消息数据长度,n字节 |
消息数据 | n字节 | 通信传输的交互数据 |
检验码 | 2字节 | CRC检验算法结果 |
- 需要传输的车辆行车电脑数据包括如下内容,数据传输方术采用
大端模式
(高位在前):
数据定义 | 数据类型长度 |
---|---|
车速 | 2字节 |
转速 | 2字节 |
总里程 | 4字节 |
小计里程 | 4字节 |
小计平均车速 | 2字节 |
小计平均油耗 | 2字节 |
2.1 固定格式顺序传输方式
- 固定格式顺序传输方式即将需要传输的数据,按照
先后顺序依次排列
,每次传输时,按照这个固定顺序传输 - 以上述为例,传输的整包数据格式为:
字段定义 | 字段字节长度 | 数据段 |
---|---|---|
起始符 | 2字节 | 数据包的帧头,规定为 :0x44 0x46 |
消息编号 | 1字节 | 0~255滚动计数 |
消息业务类型 | 2字节 | 服务号:0x2001 |
消息长度 | 1字节 | 数据总长度16字节,固定传输0x10 |
消息数据 | 16字节 | 通信传输的交互数据,依次为: 车速 : 2字节 转速 : 2字节 总里程 : 4字节 小计里程 : 4字节 小计平均车速 : 2字节 小计平均油耗 : 2字节 |
检验码 | 2字节 | CRC检验算法结果 |
- 传输的数据包数据示例:
0x44 0x46 0x00 0x20 0x01 0x10 0x00 0x20 0x03 0xE8 0x00 0x00 0x20 0x16 0x00 0x00 0x02 0x65 0x00 0x23 0x12 0x45 0xXX 0xXX
- 根据协议规定,传输的数据内容为:
数据定义 | 数据类型长度 | 传输数据 |
---|---|---|
车速 | 2字节 | 0x0020 |
转速 | 2字节 | 0x03E8 |
总里程 | 4字节 | 0x00002016 |
小计里程 | 4字节 | 0x00000265 |
小计平均车速 | 2字节 | 0x0023 |
小计平均油耗 | 2字节 | 0x1245 |
2.2 添加signal id标记的传输方式
- 上述传输过程中,每次传输都必须将6个数据同时发送一次,如果想要一次发送单个数据,无法满足
- 为了实现单个数据的发送,为每个传输的数据,添加一个
signal id
和signal len
的规定
数据定义 | 数据类型长度 | signal id | signal len | 数据值 |
---|---|---|---|---|
车速 | 2字节 | 0xF1 | 0x02 | 0x0020 |
转速 | 2字节 | 0xF2 | 0x02 | 0x03E8 |
总里程 | 4字节 | 0xF3 | 0x04 | 0x00002016 |
小计里程 | 4字节 | 0xF4 | 0x04 | 0x00000265 |
小计平均车速 | 2字节 | 0xF5 | 0x02 | 0x0023 |
小计平均油耗 | 2字节 | 0xF6 | 0x02 | 0x1245 |
- 如要传输所有的数据,整个数据包为:
0x44 0x46 0x00 0x20 0x01 0x1c { 0xF1 0x02 0x00 0x20} { 0xF2 0x02 0x03 0xE8} { 0xF3 0x04 0x00 0x00 0x20 0x16} { 0xF4 0x04 0x00 0x00 0x02 0x65} { 0xF5 0x02 0x00 0x23 } { 0xF6 0x02 0x12 0x45 } 0xXX 0xXX
- 假如车速发送变化,仅需要发送车速单个数据即可,发送的数据包为:
0x44 0x46 0x00 0x20 0x01 0x04 { 0xF1 0x02 0x00 0x46} 0xXX 0xXX
3. 小结
固定数据格式传输的方式
,每次传输的数据长度固定,数据内容固定,但是即使其中一个单一的数据发生变化,都需要发送所有数据- 固定数据格式传输的方式常适合数据内容变化频繁的应用场景,数据发送方式基本是
周期
传输 添加signal id标记的传输方式
为每一个传输的数据添加了一个signal id
和signal len
,因此增加了需要传输的数据内容和长度,比如如果需要同时传输示例中的6个数据,添加signal id 和长度后,比固定格式多了12个字节;但是如果只需要发送单个数据,以车速为例,只需要发送4个数据,减小了12字节- 添加signal id标记的传输方式常适合数据内容变化小,更新频率较慢的应用场景,数据发送方式是
事件
传输 - 2种数据消息传输方式各有优劣,需要根据实际项目需求来选择
感谢阅读 若有错误 欢迎指正 !!!