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