单片机通信协议
现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其
中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,
包括上位机端和下位机端等。
1.自定义数据通信协议
这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我
们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软
件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全
部建立在这两个操作方法之上。
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据
。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部
分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个
数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头
和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征
字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路
中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从
而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。
通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹
配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大
多说情况下比较可靠。
地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的
通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通
信系统。
数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令
还是数据。数据长度用于指示有效数据的个数。
校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分
进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CR
C运算等等,可以根据运算速度、容错度等要求来选取。
2.上位机和下位机中的数据发送
物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据
包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方法也
有不同。
在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数。这种方法的
缺点是需要处理器在发送过程中全程参与,优点是所