CH32V307 EVT USBHS高速USB例程相關(guān)的一些問題

您好,

我在使用CH32V307 提供的例程學(xué)習(xí)使用這個高速usb的外設(shè)。在使用例程時我碰到了幾個問題。

1)在端點(diǎn)初始化 USBHS_Device_Endp_Init 的時候有

????USBHSD->UEP1_TX_LEN??=?512;
????USBHSD->UEP1_TX_CTRL?=?USBHS_EP_T_AUTOTOG?|?USBHS_EP_T_RES_ACK;
????USBHSD->UEP1_RX_CTRL?=?USBHS_EP_R_AUTOTOG?|?USBHS_EP_R_RES_ACK;

這里是不是應(yīng)該吧TX_LEN設(shè)為0,并且用將TX設(shè)為NAK呢?初始化時并沒有數(shù)據(jù)才對?


2)在USB_CLEAR_FEATURE這段代碼中我看到了

case?0x02:
????????????????????????????????/*?SET?Endp2?Rx?to?USBHS_EP_R_RES_ACK;USBHS_EP_R_TOG_0?*/
????????????????????????????????USBHSD->UEP2_TX_CTRL?=?USBHS_EP_R_RES_ACK?|?USBHS_EP_R_TOG_0;
????????????????????????????????break;

這里的UEP2_TX_CTRL應(yīng)該為UEP2_RX_CTRL吧,這是單純打錯了吧。抓個小蟲


3)我試著把這個例程里EP1,EP2的TX全部設(shè)為NAK,并且把原本把EP1 RX 數(shù)據(jù)轉(zhuǎn)到TX數(shù)據(jù)的代碼注釋掉后,發(fā)現(xiàn)我如果從主機(jī)請求數(shù)據(jù),每兩次中一次是timeout(正確的),但是另一次會返回空字符或者不定的字符。請問這是什么原因?在端點(diǎn)終端過后硬件會把之前設(shè)置的NAK清零成ACK嗎?代碼如下:

else?if(?end_num?==?1?)
????????{
????????????if(?rx_token?==?PID_IN?)
????????????{
????????????????USBHSD->UEP1_TX_CTRL?&=?~USBHS_EP_T_RES_MASK;
????????????????USBHSD->UEP1_TX_CTRL?|=?USBHS_EP_T_RES_NAK;
????????????}
????????????else?if(?rx_token?==?PID_OUT?)
????????????{
????????????????rx_len?=?USBHSD->RX_LEN;
????????????????for(?i=0;?iUEP1_TX_LEN??=?rx_len;
????????????????//USBHSD->UEP1_TX_CTRL?&=?~USBHS_EP_T_RES_MASK;
????????????????//USBHSD->UEP1_TX_CTRL?|=?USBHS_EP_T_RES_ACK;
????????????????USBHSD->UEP1_RX_CTRL?&=?~?USBHS_EP_R_RES_MASK;
????????????????USBHSD->UEP1_RX_CTRL?|=?USBHS_EP_R_RES_NAK;

????????????}
????????}

這部分可能是我對USB或者這個芯片理解不夠。麻煩解答一下謝謝。


關(guān)于第3點(diǎn)似乎不是單片機(jī)的問題,是我用的驅(qū)動的問題。我HOST用pyusb測試的,似乎在Windows上如果用libusbk驅(qū)動有問題。后來換用winusb,或者linux上用自帶的(應(yīng)該是libusb)就沒問題。打擾了。


您好,關(guān)于問題1,該例程是為了測試數(shù)據(jù)收發(fā)的,一有IN包來就有數(shù)據(jù)發(fā)送,因此在初始化時LEN就配置為512并配置為ACK;關(guān)于問題2,這個地方UEP2_TX_CTRL應(yīng)該為UEP2_RX_CTRL,感謝你的反饋,例程已修改。


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

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