usb host 批量傳輸問題

以下是我的發(fā)送與接收函數(shù),不知道是哪里不對(duì),設(shè)備端始終返回NAK。我可以確定的是,設(shè)備端如果正常收到數(shù)據(jù),是不會(huì)發(fā)送NAK的。在另外一公司芯片(具體芯片就不說了,免得說我打廣告)上能正常通信,CH573不行。


請(qǐng)問,我這是什么問題呢。


uint8_t QueryRecv(uint16_t loop_value)

{

? ? uint8_t s = 0, len = 0;

? ? R8_UH_RX_CTRL = RB_UH_R_TOG | RB_UH_R_AUTO_TOG;

? ? while (loop_value--)

? ? {

? ? ? ? s = USBHostTransact((USB_PID_IN << 4) | 0x81, R8_UH_RX_CTRL, 200000/20);

? ? ? ? PRINT("IN %02x %d\r\n", s, loop_value);

? ? ? ? if (s == 0)

? ? ? ? {

? ? ? ? ? ? len = R8_USB_RX_LEN;

? ? ? ? ? ? ?PRINT("RECV>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

? ? ? ? ? ? ?printf_byte(pHOST_RX_RAM_Addr, len);

? ? ? ? ? ? ?printf_byte_str(pHOST_RX_RAM_Addr, len);

? ? ? ? ? ? ?PRINT(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");


? ? ? ? ? ? datacallback(pHOST_RX_RAM_Addr, len);

? ? ? ? ? ? return 0;

? ? ? ? }

? ? ? ? DelayMs(1);

? ? }

? ? return 1;

}


void QuerySend(uint8_t *buf, uint8_t len, uint8_t flag)

{

? ? uint8_t s = 0, i=0;


? ? memcpy(pHOST_TX_RAM_Addr, buf, len);

? ? R8_UH_TX_LEN = len;


? ? R8_UH_TX_CTRL = RB_UH_T_TOG | RB_UH_T_AUTO_TOG;

? ? s = USBHostTransact((USB_PID_OUT << 4) | 0x01, R8_UH_TX_CTRL, 200000/20);


? ? PRINT("SEND %02x %d==========================\r\n", s, flag);

? ? printf_byte(buf, len);

? ? PRINT("\r\n");

? ? printf_byte_str(buf, len);

? ? PRINT("\r\n");

? ? PRINT("====================================\r\n");


? ? if (s == 0 && flag == 0x01)

? ? {

? ? ? DelayMs(1);

? ? ? ?QueryRecv(1000);

? ? }

}


煩請(qǐng)大佬費(fèi)神了


發(fā)送和接收函數(shù)大體邏輯沒有問題,但是要注意每次調(diào)用的時(shí)候,同步標(biāo)志tog都會(huì)刷新成1,要注意和上一次調(diào)用后的同步標(biāo)志的狀態(tài)同步。

不同設(shè)備,可能會(huì)經(jīng)歷不同的枚舉過程才能夠開始正確傳輸數(shù)據(jù),CH573例程的枚舉做到了“SetUsbConfig”,針對(duì)設(shè)備類看一下是否又缺少的類命令。

可以分享一下操作的設(shè)備是什么,看我們是否有相關(guān)的操作經(jīng)驗(yàn)。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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