CH554 HID通信超時問題

我用之前官方的這個例程添加了一下端點4上傳的功能,通過bushound測試時可以看到端點4成功接收到數(shù)據(jù)并且返回。

QQ截圖20231215224826.png

但是我使用自己編寫的上位機進行測試的時候,通過bushound可以看到數(shù)據(jù)同樣可以返回,但是我的上位機卻提示端點通信超時,上位機使用libusb進行通信,我測試了一下,上位機的程序讀寫ch573官方的HID通信例程是可以接收到信息的,但是我修改的ch554卻不能與上位機通信成功。

libusb提示超時,但是看通信像是libusb還沒有開始接收,ch554就把數(shù)據(jù)傳輸上去了,導致上位機一直接收不到消息。

QQ截圖20231215224958.png

下面這個是當時官方原來的例程,只有端點4接收的功能

icon_rar.gifEXAM_鍵盤鼠標多媒體自定義HID_V200 - 副本.zip

下面是我添加的與上傳相關的程序

void?Enp4IntIn(UINT8?len?)
{
????UEP4_T_LEN?=?len;??????????????????????????????????????????????//上傳數(shù)據(jù)長度
????UEP4_CTRL?=?UEP4_CTRL?&?~?MASK_UEP_T_RES?|?UEP_T_RES_ACK;??????????????????//有數(shù)據(jù)時上傳數(shù)據(jù)并應答ACK
}

void?hid_send_data(unsigned?char?endp,?unsigned?char*?sendData,?unsigned?char?len)??//hid端點上傳數(shù)據(jù)
{
????if(Ready)
????{
????????switch(endp)
????????{
????????????case?1:?//
????????????????Ep1FLAG?=?0;
????????????????memcpy(Ep1Buffer,?sendData,?len);
????????????????Enp1IntIn(len);
????????????????while(Ep1FLAG?==?0);
????????????????break;
????????????case?2:?//
????????????????Ep2FLAG?=?0;
????????????????memcpy(Ep2Buffer,?sendData,?len);???
????????????????Enp2IntIn(len);
????????????????while(Ep2FLAG?==?0);
????????????????break;
????????????case?3:?//
????????????????Ep3FLAG?=?0;
????????????????memcpy(Ep3Buffer,?sendData,?len);???
????????????????Enp3IntIn(len);
????????????????while(Ep3FLAG?==?0);
????????????????break;
????????????case?4:?//
????????????????Ep4FLAG?=?0;
????????????????memcpy(&Ep0Buffer[128],?sendData,?len);?
????????????????Enp4IntIn(len);
????????????????while(Ep4FLAG?==?0);
????????????????break;
????????????default:
????????????????break;
????????}
????????UEP4_CTRL?=?UEP4_CTRL?&?~?MASK_UEP_R_RES?|?UEP_R_RES_ACK;????????????//默認應答NAK??
????}
}

可以幫忙分析一下是什么地方的問題嗎,上位機應該是沒有問題,我用ch573中的HID通信的例程測試過,ch554和ch573這兩個usb中斷處理中有什么不同嗎,是不是因為ch554中沒有檢測空閑狀態(tài)

上面的程序顯示好像亂碼了


您好

上面的代碼沒有看出什么問題,USB通訊是主機主導的,上傳數(shù)據(jù)也是需要主機下發(fā)IN令牌,設備才能上傳數(shù)據(jù),因此不存在主機不讀,設備已經(jīng)上傳的情況,可以程序中添加打印,看下程序跑到哪個位置了,比如是否有可能停在了上面的

while(Ep4FLAG?==?0);

這句代碼了?是否忘了清標志位?要注意的是我們的USB中斷都是發(fā)送“完成”中斷,IN“成功了”才會進中斷!CH573也是相同的,可以對比下兩個代碼的處理有什么地方不同


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频