請(qǐng)技術(shù)幫助:關(guān)于CH32V30x USB2.0 HS 端點(diǎn)接收與發(fā)送數(shù)據(jù)包
else?if(?end_num?==?2?)
????????{
????????????if(?rx_token?==?PID_IN?)
????????????{

????????????}
????????????else?if(?rx_token?==?PID_OUT?)
????????????{
????????????????rx_len?=?USBHS->RX_LEN;
????????????????for(?i=0;?iUEP2_CTRL?&=?0xffff0000;
????????????????USBHS->UEP2_CTRL?|=?rx_len;?//?IN?-DATAx-ACK(?len?=rx_len?)
????????????}
????????}
????????USBHS->STATUS?=?USBHS_ACT_FLAG;

在中端服務(wù)程序中,實(shí)例端口2, 接收到OUT數(shù)據(jù)包后,對(duì)接收到的數(shù)據(jù)取反,后發(fā)回給主機(jī)。有幾個(gè)問題想請(qǐng)教。


  1. 設(shè)備向主機(jī)傳回?cái)?shù)據(jù)的發(fā)送啟動(dòng)指令是否就是?USBHS->UEP2_CTRL |= rx_len,向EP2控制寄存器寫入發(fā)送長(zhǎng)度就自動(dòng)啟動(dòng)發(fā)送?

  2. 如果我暫時(shí)不想讓EP2接收OUT 數(shù)據(jù)。如何禁止?

  3. 當(dāng)前實(shí)例,EP2接收到OUT數(shù)據(jù)后,不做任何處理,不清 USBHS_ACT_FLAG標(biāo)志,主機(jī)如果再次發(fā)送,會(huì)覆蓋上次的數(shù)據(jù)嗎?


您好,

關(guān)于問題1:

并不是向EP2控制寄存器寫入發(fā)送長(zhǎng)度就自動(dòng)啟動(dòng)發(fā)送,在此處只配置端點(diǎn)2發(fā)送長(zhǎng)度主要是由于在USB2.0高速設(shè)備端點(diǎn)初始化函數(shù)(USBHS_Device_Endp_Init)中已對(duì)端點(diǎn)2控制寄存器進(jìn)行配置;

關(guān)于問題2:

如果不想讓EP2接收OUT數(shù)據(jù),需要在USBHS_Device_Endp_Init函數(shù)中將端點(diǎn)2 USBHS_EP_R_RES_ACK改成USBHS_EP_R_RES_NAK,具體如下圖:

Snipaste_2021-11-11_16-50-17.jpg

關(guān)于問題3:

若不清USBHS_ACT_FLAG標(biāo)志,主機(jī)再次發(fā)送會(huì)覆蓋上次數(shù)據(jù)

補(bǔ)充說明:

UEP2_CTRL寄存器主要由以下三個(gè)寄存器組合而成:

Snipaste_2021-11-11_16-59-16.jpg


謝謝回復(fù)。

另有一個(gè)問題:PC上位機(jī) WINUSB 發(fā)送OUT數(shù)據(jù)

使用:?WinUsb_WritePipe(hWinusb, 0x01, pBuffer, DataLen, &length, NULL); //EP1 (OUT)?

發(fā)送長(zhǎng)度是不限止的,可以是xMB. 發(fā)送時(shí),WINUSB自動(dòng)分成多個(gè)512字節(jié)的數(shù)據(jù)包。

下位機(jī)接收時(shí),應(yīng)如何應(yīng)答及重組?(重組需要時(shí)間,如果重組完成前,第2個(gè)512字節(jié)開始發(fā)送,有沒有可能產(chǎn)生數(shù)據(jù)錯(cuò)誤 )

if(?end_num?==?2?)
????????{
????????????if(?rx_token?==?PID_IN?)
????????????{
?
????????????}
????????????else?if(?rx_token?==?PID_OUT?)
????????????{

????????????????rx_len +=?USBHS->RX_LEN;


? ? ? ? ? ? ? ? ? ? //1,此處是否該暫停接收


? ? ? ? ? ? ? ? ? ? //2.比喻寫入到U盤,時(shí)間比較長(zhǎng).

? ? ? ? ? ? ? ? ? ? ? writetodisk(rxbuf,USBHS->RX_LEN)


? ? ? ? ? ? ? ? ? ? //3.重新開始端點(diǎn)2接收數(shù)據(jù)

? ? ? ? ??

? ? ? ? ? ? ? ? if(rx_len==MyPkt_LEN)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? //接收全部數(shù)據(jù)完成

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ??

? ? ? ? ? ? ?//? ?USBHS->UEP2_CTRL?&=?0xffff0000;
? ? ? ? ? ? ?//? ?USBHS->UEP2_CTRL?|=?rx_len;?//?IN?-DATAx-ACK(?len?=rx_len?)
????????????}
????????}
????????USBHS->STATUS?=?USBHS_ACT_FLAG;



你好,可以做協(xié)議握手處理,收到主機(jī)下發(fā)數(shù)據(jù)并重組完成后,給應(yīng)答信號(hào),通知上位機(jī)可以下發(fā)下一包。依次類推,完成所有數(shù)據(jù)的發(fā)送。


試了好久,終于搞明白了,實(shí)例代碼有個(gè)錯(cuò)誤,反向回轉(zhuǎn)數(shù)據(jù)到主機(jī),實(shí)際USB設(shè)備沒有啟動(dòng)發(fā)送。



?USBHS->UEP1_CTRL? = USBHS_EP_R_AUTOTOG | USBHS_EP_R_RES_ACK | USBHS_EP_R_TOG_0 | USBHS_EP_T_AUTOTOG | USBHS_EP_T_RES_ACK | USBHS_EP_T_TOG_0 | Len;


設(shè)置長(zhǎng)度時(shí)直接敷值了一下,發(fā)送正常



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

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