Re: [問題] HID Endpoint跟Report Desc關係

看板ASM作者 ( )時間11年前 (2013/04/20 01:33), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
: 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就不會那麼高。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.63.246

04/20 12:06, , 1F
非常謝謝
04/20 12:06, 1F
文章代碼(AID): #1HSN_fBZ (ASM)
文章代碼(AID): #1HSN_fBZ (ASM)