在传统的数据传输过程中,很多企业所用的串口都没有严格的上层应用协议,导致串口通信不是很稳定,很多有趣的现象会发生。当串口数据传输过程中发生局部丢数据现象时,会影响到整个通信过程,导致整个通信过程失败。其问题的根源在于没有在通信协议中加入同步操作,即很多上层协议没有对串行数据流进行报文的切分。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
为了解决上述问题,根据串行通信编码方法,提出了一种采用同步编码的算法,解决串行数据流在应用层的报文同步问题,实现应用层协议自动对报文进行切分。该算法的模型与串行通信的位流同步算法存在很多类似之处,算法描述如下:
2 0xAA,0x55为报文同步码,当接收方接收到连续的0xAA,0x55时,识别到新的数据报文即将到来,开始准备接收数据报文。
2 为了保证连续0xAA,0x55同步码的唯一性,不允许同步码作为数据在数据字段中出现。为了达到上述目的,引入插入码0x00。当数据字段中存在连续0xAA,0x55字段时,需要在两者中间插入0x00插入码;当数据字段中存在连续0xAA,0x00,0x55字段时,同样需要在0xAA之后插入0x00插入码。0x00起到了分割符的作用,其作用类似于C语言中的“\”。
2 在数据发送方需要对数据进行编码处理;在数据接收方需要对同步码、插入码进行丢弃处理,得到纯粹的用户数据。
算法的实现可以采用硬件,也可以采用软件的方法,在此给出一个软件的实现方法,运行在uc/os的操作系统之上(https://static.assets-stash.eet-china.com/album/old-resources/2009/11/25/168a0c81-b84c-40b7-8020-84634ad84ff8.rar),程序还没有得以测试,仅供参考。
文章评论(0条评论)
登录后参与讨论