找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 4662|回复: 5

蓝牙数据包中两个头字节的问题

[复制链接]
发表于 2012-6-15 21:16:43 | 显示全部楼层 |阅读模式
这几天一直在看NXT蓝牙开发手册,对里面蓝牙数据包不太理解,为什么加入两个字节,两个字节分别起什么作用?开发文档中这两个字节介绍很少,基本没有,希望哪个朋友指导一下。(附图)

蓝牙数据包

蓝牙数据包
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2012-6-15 22:00:50 | 显示全部楼层
包头两个字节表示命令的长度为一个16位数据,byte1为命令长度的高八位,一般为0,byte0为命令长度的低八位
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-6-15 22:46:42 | 显示全部楼层
前两个字节的数字应该就是表示从byte5开始,总共有多少个byte
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-6-16 14:20:24 | 显示全部楼层
晓舟 发表于 2012-6-15 22:46
前两个字节的数字应该就是表示从byte5开始,总共有多少个byte

首先感谢所有回答问题的朋友,论坛的力量是巨大的!
源之vb读电压程序的c#,其实差不多。
try
            {
                if (serialPort1.IsOpen)
                {
                    Byte[] outByte =new Byte[] { 0x2, 0x0, 0x0, 0xB};
                    Byte[] inByte = new Byte[6];
                    serialPort1.Write(outByte, 0, 4);//请求读电压数据
                    inByte[0] = (Byte)serialPort1.ReadByte();
                    inByte[1] = (Byte)serialPort1.ReadByte();
                   label1.Text =inByte[0].ToString();
                }
                else
                {
                    label1.Text = "端口关闭";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
按技术文档资料蓝牙返回6字节数据包,前两个是蓝牙的lsb和msb,最后两个字节是电压数据,lsb程序执行后结果是5,和晓舟的想法有出入。我再去验证其他命令,看看有什么结论。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-6-16 14:48:40 | 显示全部楼层
我接着测试了获取设备信息命令(get device info)
Byte[] OutByte =new Byte[] { 0x2, 0x0, 0x1, 0x9B};
                    Byte[] inByte = new Byte[2];
                    serialPort1.Write(OutByte, 0, 4);
                    inByte[0] = (Byte)serialPort1.ReadByte();
                    inByte[1] = (Byte)serialPort1.ReadByte();
                    label3.Text = inByte[0].ToString();
结果为33,应该可以得出结论就是nxt 通信包的长度加1,或者就是LSB字节后的字节总数。NXT通信包最大只有64个字节,按糖伯虎的说法,高位是用不着的,从侧面看,lego要扩展通信包的大小,增加传输率。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-6-16 20:26:06 | 显示全部楼层
我说的肯定没有错,如果你的结果不对,请重新思考。
接收回复报文时
先读2byte,作为命令的size
然后
bytep[] buf = new byte[size];
s.read(buf,0,size);
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-5-10 05:22 , Processed in 0.189190 second(s), 21 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表