我是靠谱客的博主 谨慎茉莉,最近开发中收集的这篇文章主要介绍通信协议定义,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

好多同学第一次定义通信协议的时候比较懵,包括我第一次搞串口通信的时候,好长时间都没想明白应该怎么进行两块开发板之间进行数据通信,如何通过一块开发板去操控另外一块开发板,因此写此文章,以供大家参考

首先明白啥是通信协议,参考百度百科 通信协议_百度百科 给出的定义,通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。其实光看这个定义绝对云里雾里的,不知所云。下面按照我的理解进行分解吧。

通信协议总共分三部分:

一:规定通信硬件接口方式,如通过串口,网络,蓝牙或者其它方式进行通信

二:规定硬件通信的语法,如:串口需要规定  波特率 数据位  停止位  奇偶校验位(比较常用的就是 115200  8 N 1  或 9600 8 N 1两种),在比如 网络规定TCP传输还是UDP传输,传输端口号为多少等

三:规定通信规则,如

帧头

(2字节)

功能码

(1字节)

参数

(1字节)

数据长度

(1字节)

数据

(N字节)

crc校验

(2字节)

帧尾

(1字节)

一帧数据的开头2字节,定义为帧头,比如为0x5A和0x54这一字节分为高低四位参数标号0x01~0x07分别表示不同的参数,例如参数1为IP地址,参数2为子网掩码,参数3为默认网关,参数4为http端口号数据长度+数据(取值1~255)要发送的数据内容,存储顺序全部为网络字节序CRC_16校验,循环冗余校验码(CRC),用来检验数据是否正确,如果数据有误则弃包。

一帧

结束

标志

0xEE

高四位为读写位:
低四位为回复位。
读取0x10*
下置0x20*
回复读取0x01*
回复下置0x02*

上面为总括规则,后面则根据上面规则进行详细的数据定义。比如:想定义一条设置IP的通信协议,则 可以如下设置

帧头

(2字节)

功能码

(1字节)

参数

(1字节)

数据长度

(1字节)

数据

(4字节)

crc校验

(2字节)

帧尾

(1字节)

0x5A,0x54设置网络参数:0x11IP地址:     0x015IP地址CRC_16校验结束0xee

上面的通信协议仅仅是举例,实际协议则根据自己的项目需求进行对应更改即可。比如帧尾变成两个字节,功能码和参数合二为一,CRC校验采用1个字节的累加校验,超过255就溢出,只保留低八位即可等等 

最后

以上就是谨慎茉莉为你收集整理的通信协议定义的全部内容,希望文章能够帮你解决通信协议定义所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部