CH32V307连接外部USB HUB 枚举低速设备失败

  用CH32V307的USBHD连接外部 HUB,当设备是全速或高速时可以正常枚举(如u盘),如果设备是低速时连第一步获取设备描述都没通过(如键盘,鼠标)。不知道是哪里不对。


 测试1:主机 -> u盘或键盘枚举没问题

 测试2:主机 -> HUB -> u盘枚举没问题

 测试3:主机 -> HUB -> 键盘或鼠标有问题,获取设备描述返回ERR_USB_TRANSFER


问题出现在HUB连低速设备就有问题,是不是高速主机要提前设置成低速再去请求设备?

我现在流程是:

1.枚举HUB  

2.开启HUB端口电源  HubSetPortFeature(i, HUB_PORT_POWER)

3.获取HUB端口状态  HubGetPortStatus(i)

4.发现有设备连接  清除连接标志,端口复位,清除复位完成标志

5.设置地址为0,获取设备描述


到第5步高速设备正常低速设备就无法通过


请问如何解决?

例子参考ch374的不过是高速和全速区别

ch374里面的HUB案例有区分设备低速或全速

Write374Byte( REG_USB_ADDR, 0x00 ); // 发现了新设备,地址设置0

  if( bMine == LOW_SPEED )

   {

            

            s = SetPortFeature( bChange, PORT_LOW_SPEED );

            HostSetLowSpeed( ); //设置为低速模式

              Write374Byte( REG_HUB_SETUP, BIT_HUB_DISABLE | BIT_HUB_PRE_PID );

               s = DeviceEnum( bAddr );

                Write374Byte( REG_HUB_SETUP, BIT_HUB_DISABLE );

                HostSetFullSpeed( ); //设置为全速模式

}

else if( bMine == FULL_SPEED )  

                                {

                                    HostSetFullSpeed( ); // 设置为全速模式

                                    printf( "GetDeviceDescr: " );

                                    s = GetDeviceDescr( buf );  // 获取设备描述符


}


您好,我这边将低速鼠标直接连307枚举和数据传输都是没有问题的,枚举与数据传输过程如图所示:

1666669437197324.png


这边怀疑是Hub的兼容性问题,您可以更换其他类型的hub也可以通过抓包工具或USB分析仪看一下307与hub的数据交互过程。从而查找原因,也可通过打印信息确定程序出问题的位置以及307与hub的数据交互过程,如遇到新的问题可微信沟通。V:19951759326





只有登录才能回复,可以选择微信账号登录