Re: [问题] HID Endpoint跟Report Desc关系

楼主: govert ( )   2013-04-20 01:33:26
: G大说的没错 可是我MCU哪边送出去 不管InputReportLength(<=32)设多少
: 都有Padding长度到EP1长度32Byte 在1次全部送出去
: 但是目前的点卡在当我改了Report Desc的InputRepotLenth变0x10 封包长度变短
: 可是在PC哪边waitforSingle 莫名奇妙就狂Timeout掉了 加Timeout时间也没用
: 去读的封包变短做的时间反而更够才对 反而造成Process有问题??
不好意思,那我上篇文章误会了,
你这里的EP1/2 Size是Interrupt Pipe的
Interrupt In/Out的Packet Size,
不是我说的Interface Descriptor的MaxTransferSize.
如果如此,那你碰到的这个问题很正常,
因为你在HID Report Descriptor里把InputReportLength设成0x10,
所以PC会期待每次Report就是0x10,
但是你的Firmware每次Report的Size却是0x20,
会造成PC已经在Interrupt In收完0x10个Byte,
但是Firmware还想再送0x10个Byte,
结果就是PC最后会把你的Pipe Reset.
以你的状况来看,你的EP Size跟Report Size要一样才可以。
: 今天更妙了 我将二边EP1 EP2 都变成0x10 DecRepot二个长度哪边也调成0x10
: 然后把Timeout的时间加长变1ms(会掉)20ms全又收的到了 @@
: 目前我是想可能哪边的process有卡到吧 之前经验用Rs232 也用过Timer去丢command
: MCU哪边也会卡到某个鬼地方 后来PC端Tx也开thread用Event去跟Rx sync就好了
: 但是现在比较吊诡的是 收短才会出事 想不出来到底是什么问题...
: 还麻烦各位如果有想法 还不吝于指教 非常谢谢
: 测试流程为 1.PC端:每1ms秒送32byte去MCU 2.MCU端:(EP Polling time 1ms)收到资料
: 丢ACK回PC 但是PC不管MCU回什么都是定时1ms去丢资料
我猜想是你Firmware来不及处理,没办法每个 1ms都Report一次,
你可以看一下HID Interface Descriptor里的bInterVal,
(可以看一下USB的Spec, 这个值在Low Speed跟Full Speed的设定不一样。)
把那个值调大一点,这样Report Rate就不会那么高。
作者: gg1122 (99通未接来电)   2013-04-20 12:06:00
非常谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com