CH32V307連接外部USB HUB 枚舉低速設(shè)備失敗

? 用CH32V307的USBHD連接外部 HUB,當(dāng)設(shè)備是全速或高速時(shí)可以正常枚舉(如u盤(pán)),如果設(shè)備是低速時(shí)連第一步獲取設(shè)備描述都沒(méi)通過(guò)(如鍵盤(pán),鼠標(biāo))。不知道是哪里不對(duì)。


?測(cè)試1:主機(jī) -> u盤(pán)或鍵盤(pán)枚舉沒(méi)問(wèn)題

?測(cè)試2:主機(jī) -> HUB -> u盤(pán)枚舉沒(méi)問(wèn)題

?測(cè)試3:主機(jī) -> HUB -> 鍵盤(pán)或鼠標(biāo)有問(wèn)題,獲取設(shè)備描述返回ERR_USB_TRANSFER


問(wèn)題出現(xiàn)在HUB連低速設(shè)備就有問(wèn)題,是不是高速主機(jī)要提前設(shè)置成低速再去請(qǐng)求設(shè)備?

我現(xiàn)在流程是:

1.枚舉HUB??

2.開(kāi)啟HUB端口電源? HubSetPortFeature(i, HUB_PORT_POWER)

3.獲取HUB端口狀態(tài)??HubGetPortStatus(i)

4.發(fā)現(xiàn)有設(shè)備連接? 清除連接標(biāo)志,端口復(fù)位,清除復(fù)位完成標(biāo)志

5.設(shè)置地址為0,獲取設(shè)備描述


到第5步高速設(shè)備正常低速設(shè)備就無(wú)法通過(guò)


請(qǐng)問(wèn)如何解決?

例子參考ch374的不過(guò)是高速和全速區(qū)別

ch374里面的HUB案例有區(qū)分設(shè)備低速或全速

Write374Byte( REG_USB_ADDR, 0x00 ); // 發(fā)現(xiàn)了新設(shè)備,地址設(shè)置0

? if( bMine == LOW_SPEED )

? ?{

????????????

????????????s = SetPortFeature( bChange, PORT_LOW_SPEED );

????????????HostSetLowSpeed( ); //設(shè)置為低速模式

? ? ? ? ? ? ??Write374Byte( REG_HUB_SETUP, BIT_HUB_DISABLE | BIT_HUB_PRE_PID );

? ? ? ? ? ? ? ?s = DeviceEnum( bAddr );

? ? ? ? ? ? ? ? Write374Byte( REG_HUB_SETUP, BIT_HUB_DISABLE );

? ? ? ? ? ? ? ? HostSetFullSpeed( ); //設(shè)置為全速模式

}

else if( bMine == FULL_SPEED ) ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? HostSetFullSpeed( ); // 設(shè)置為全速模式

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf( "GetDeviceDescr: " );

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? s = GetDeviceDescr( buf ); ?// 獲取設(shè)備描述符


}


您好,我這邊將低速鼠標(biāo)直接連307枚舉和數(shù)據(jù)傳輸都是沒(méi)有問(wèn)題的,枚舉與數(shù)據(jù)傳輸過(guò)程如圖所示:

1666669437197324.png


這邊懷疑是Hub的兼容性問(wèn)題,您可以更換其他類型的hub也可以通過(guò)抓包工具或USB分析儀看一下307與hub的數(shù)據(jù)交互過(guò)程。從而查找原因,也可通過(guò)打印信息確定程序出問(wèn)題的位置以及307與hub的數(shù)據(jù)交互過(guò)程,如遇到新的問(wèn)題可微信溝通。V:19951759326





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

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