一个奇怪问题,帮帮看看

[复制链接]
2985|14
 楼主| hpy013 发表于 2007-11-26 20:54 | 显示全部楼层 |阅读模式
用BUS&nbsp;HOUND抓到的数据:<br />D0:00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00<br />DI:01&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF<br />明明我送给PC的全是FF啊,没有0x01,为什么会有0x01?这是有时候会出现,而且出现的都是第一个。<br />我想问BUS&nbsp;HOUND&nbsp;中DI显示出来的数据,是不是一定是我这边USB&nbsp;DEVICE送给PC的数据啊?
computer00 发表于 2007-11-26 21:11 | 显示全部楼层

不会吧?也许是你看到集线器上的数据了?没见过这样的

  
平常人 发表于 2007-11-26 21:15 | 显示全部楼层

你的USB设备是什么类型的?你看到的是哪个pipe的?

如果是HID设备的中断pipe,多出的01有可能是Report&nbsp;ID。<br /><br />设备端的程序是你自己写的吗?
computer00 发表于 2007-11-26 21:18 | 显示全部楼层

Report ID也是要自己送的呀,而楼主说自己送的ff,我晕

  
 楼主| hpy013 发表于 2007-11-26 21:20 | 显示全部楼层

我这边调试,是PC应用软件和我的低层USB通信

现在PC软件那边怀疑是我这边发错了数据。但是我检查了我的程序,没有问题,调试时,我发给PC的都是FF,为什么用BUS&nbsp;HOUND会出现0x01呢?不过0x01是在中间的传输中会有。我的协议是:<br />DO:B7&nbsp;D0&nbsp;00&nbsp;06<br />DI:B7&nbsp;D0&nbsp;00&nbsp;01<br />D0:00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00<br />DI:FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF<br />这是正常的<br />但是有时会出现<br />DO:B7&nbsp;D0&nbsp;00&nbsp;06<br />DI:B7&nbsp;D0&nbsp;00&nbsp;01<br />D0:00&nbsp;00&nbsp;00&nbsp;00&nbsp;00&nbsp;00<br />DI:01&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF&nbsp;FF<br /><br />这些都是BUS&nbsp;HOUND抓的数据,而且看的是我自己的设备。真是奇怪了。
computer00 发表于 2007-11-26 21:26 | 显示全部楼层

貌似是上面那个01遗留下来的?

  
 楼主| hpy013 发表于 2007-11-26 21:31 | 显示全部楼层

是啊,但说不过去啊,我是用两个缓冲区啊

  
平常人 发表于 2007-11-26 21:37 | 显示全部楼层

4楼computer00说的对,Report ID也应是从自己的Buffer发出去的

6楼的猜测有道理,可以试试在之前不要发01,而是发其他的数据。
computer00 发表于 2007-11-26 21:38 | 显示全部楼层

如果每次都这样,那干脆改改协议算了,哈哈,前面一个扔

不过这只是赶时间的权宜之计...不赶时间的话就先慢慢找原因吧<br /><br />发送数据时,也可以在写缓冲那里搞个串口将要写的数据扔出来看看,确认下。
 楼主| hpy013 发表于 2007-11-26 21:52 | 显示全部楼层

等明天,PC修改软件,用其他代替0x01,看会不会出现这样问题

然后再做决定。哈哈<br />谢谢~~
 楼主| hpy013 发表于 2007-11-27 17:20 | 显示全部楼层

今天调试了很多次

还是没搞定。<br />现在可以肯定的是就是上面的0x01,遗留下来,把第二次发送数据的第一个字节给覆盖了。
computer00 发表于 2007-11-27 17:26 | 显示全部楼层

是不是上位机的驱动程序没写对啊?缓冲区重叠了

另外你先确认下,写入到USB端点去的数据是不是正确的,有时你以为是正确的,<br />但是可能因为指针操作什么的,越界了...
 楼主| hpy013 发表于 2007-11-27 20:28 | 显示全部楼层

哈哈,找出原因了

是双缓冲结构搞得鬼。<br />我现在将此端点只用一个缓冲区,就没问题了。原因是:我实际要发的数据是91个字节,而单个缓冲是64字节,双缓冲是128字节,这样程序,就会利用两个缓冲区,而有时会把上次的数据覆盖进来。还是小心比较好,哈哈~~
computer00 发表于 2007-11-27 20:32 | 显示全部楼层

恭喜。俺一直用单缓冲,哈哈,处理起来容易。

  
平常人 发表于 2007-11-27 20:56 | 显示全部楼层

晕!双缓冲结构是最基本的数据结构之一,同步好读写指针

好在楼主及时找到问题所在,可以睡个好觉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

516

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部