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

我们在读写串口通信的时候往往要去读一些通信的协议规定。这次我碰到的是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值