使用Msp430的串口中断接收一包数据

使用Msp430的串口中断接收一包数据

 

假设有一数据包,数据格式如表所示:

                                                                                                             

序号

项 目

长度(字节)

说明

1

数据包头(STX

1

常量:0x02

2

数据单元长度(Data_len

2

需传输的数据单元Data部分的长度,高字节在前,低字节在后。

例如:0x0010表示Data部分有16个字节。

3

需传输的数据单元(Data)

不定

长度由Data_len指出,数据单元头两个字节是命令码(终端发送命令到读写器)或状态码(读写器返回数据给终端),后面是其它参数。

4

冗余检验值(LRC

1

Data部分数据各字节异或值。

5

数据包尾(ETX

1

常量:0x03

数据包总长度为: Data_len + 5 字节,最长不能超过512字节。

 

程序实现如下所示:

本程序一个致命的bug就是,如果长度信息那两个字节的数据接收时出现错误,会导致不能正确组成一包数据,后面发送过来的数据包也不能正确接收。

如有一包数据(16进制):02 00 02 11 11 00 03,

如果接收过程出现错误,导致将长度的两个字节00 02在接收端变成了00 05,因此接收端会等待接收完5个字节的数据之后才认为完整的接收完一包数据,从而导致后面发送过来的完整的数据包的一部分会被拆分,周而复始的这样恶性循环下去,暂时还没想到好的解决办法!

阅读更多
上一篇Wiegand协议
下一篇crc16计算
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭