关闭

读取传输协议与程序的有关联系问题

287人阅读 评论(0) 收藏 举报

我们在读写串口通信的时候往往要去读一些通信的协议规定。这次我碰到的是ABT公司的RFID读卡器。。具体的数据格式如下所转述:

读卡器连续输出8个字节的数据,组成一个数据帧.(8字节=8*8位 )读卡器的输出数据格式符合如下的帧格式:

 帧头AA:8位:

读卡器号:8位;

状态字:4位+类别号:4位;

卡号:24位;

效验和:8位;

尾帧:8位;

读懂这个协议真的非常重要,就像一把钥匙,通往了潘多拉。。。。

我的电脑是32位机,在linux下使用一个测试程序,

void main()

{

    printf("%d", sizeof(char));

}

得到的结果是1。。。 char型是一个字节。是8位的。。

但是我们的程序中所用的语句

read(fd, buff ,8)这个其中的8指的是什么呢。。应该是字节。。而并非是位。。这样我们先明白这个。。然后就了解这个协议的位是怎么回事。。

就是说这个是一个字节的帧头,一个字节的读卡器号,一个字节的状态字和类别号,3个字节的卡号,一个字节的校验位,一个字节的尾帧。

我们来举个我和JB昨晚上的例子,我们在将程序修改正确后,使用这个语句输出:

printf("%x/n"  buff[i]);

结果刷卡后首先我们让他接受完整个一帧数据,完整的显示出来。这个数据令我吃惊,首先他是不规律的输出(除了第一帧头的数据外)

ffffffAA..其次是一些不顾律的数字。。在不停地变化-------这证明这个读卡器坏了(我这么强烈的认为)

好了我们今天的话题引出了,就是这个帧头的数字,是八位ffffffAA...16进制的数字。这个我就有些不清楚的了。

计算机中的信息都是以2进制的0和1来表示,其中每个0和1称作一个位.但是这个帧头出现的明显就不是八位了而是32位,4个字节了!!!!!

这是为什么呢?我想了想。。我们程序是以%x格式输出,那么得到的帧头和要求的AA是一至的。。即是八位的帧头。可是ffffff是什么?难道是补码???应该不是吧,后面的读卡器号之类的明显没有按照这个帧头的输出格式来输出吗。。。这个是个问题,也许是机器的问题。。。。。这个也是我工作中所遇到的一个问题。。

我们看到协议的给出是很重要的,起初我们这样理解了这个协议,8位当成了八个字节,所以程序在读取卡号的时候都是从第23--47来循环读取卡中的卡号,,这个就很失败了!!!其实是从第3-5的读取。。。。

程序很精炼,配置很复杂。。波特率,,停止位,,校验位,, 感谢我身边的舍友对我的帮准。。。。谢谢你们。。JB。。EDTE

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13968次
    • 积分:229
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:1篇
    • 译文:0篇
    • 评论:8条
    最新评论