jacksimcom 发表于 2021-8-19 17:48:04

USBX驱动复合设备channel不够


目前已经在H7上完成了USBX+ThreadX+FileX+NetX的联合,其中USBX的HOST成功多Class同时驱动了U盘、鼠标键盘,这些都没问题,但是在驱动复合型设备如4G的模块时,发现无法枚举,经过仔细检查发现是在枚举时执行_ux_hcd_stm32_endpoint_create函数,返回UX_HCD_STM32_NO_CHANNEL_ASSIGNED,应该是USBX在枚举时会枚举所有的interface,H7只支持16通道,但是像一些4G模块有AT\modem\Diag\USBAUDIo等多个interface多个通道,我看了下SIM7600这种9001 PID下默认大概18个通道,就导致HOST无法枚举。现在把模块切到902B时只有12个通道这样就没问题,正常的AT是没问题的,后期会尝试移植NetX下的PPP驱动看看。

这个感觉会是个问题,因为会有一些多通道的设备存在,ST的USB我没仔细看,但是感觉他是需要那个interface就只去分配这个interface的资源,就不存在这个问题。


NO_TAG          USB Device Unplugged
NO_TAG          Waiting for device connection ...
NO_TAG          channel_index->0
NO_TAG          channel_index->1
NO_TAG          channel_index->2
NO_TAG          channel_index->3
NO_TAG          channel_index->4
NO_TAG          channel_index->5
NO_TAG          channel_index->6
NO_TAG          channel_index->7
NO_TAG          channel_index->8
NO_TAG          channel_index->9
NO_TAG          channel_index->10
NO_TAG          channel_index->11
NO_TAG          Current_class -> ux_host_class_name:ux_host_class_simcom_wireless
NO_TAG          USB Device Plugged
NO_TAG          bInterfaceClass:FF
NO_TAG          USB Modem Device Found
NO_TAG          PID: 0x9006
NO_TAG          VID: 0x1e0e
NO_TAG          Data Interface initialized
NO_TAG          modem rev size:9
NO_TAG          modem rev->AT+CCLK?
NO_TAG          Ready to send or receive data
NO_TAG          modem rev size:39
NO_TAG          modem rev->
+CCLK: "80/01/06,09:14:11+32"

OK

NO_TAG          modem rev size:9
NO_TAG          modem rev->AT+CCLK?
NO_TAG          modem rev size:39
NO_TAG          modem rev->
+CCLK: "80/01/06,09:14:11+32"

OK

NO_TAG          modem rev size:9
NO_TAG          modem rev->AT+CCLK?
NO_TAG          modem rev size:39
NO_TAG          modem rev->
+CCLK: "80/01/06,09:14:12+32"

OK

NO_TAG          modem rev size:9
NO_TAG          modem rev->AT+CCLK?
NO_TAG          modem rev size:39
NO_TAG          modem rev->
+CCLK: "80/01/06,09:14:12+32"

OK

NO_TAG          USB Device Unplugged
NO_TAG          Waiting for device connection ...


eric2013 发表于 2021-8-20 09:09:02

H7是8个输入,8个输出端点,已经很多了。

那你用的模块占用的端点有点多。

偶尔也很菜 发表于 2024-1-8 10:02:36

碰到了和楼主一样的问题,channel不够用。通过临时修改USBX代码证实SIM7600确实是18个channel。另外他的class类型都是0xFF,并不是标准的,看楼主的另一个贴子也碰到了这个问题。已放弃。

eric2013 发表于 2024-1-8 10:25:34

偶尔也很菜 发表于 2024-1-8 10:02
碰到了和楼主一样的问题,channel不够用。通过临时修改USBX代码证实SIM7600确实是18个channel。另外他的cla ...
这个占用也太多了,确实有点多。

其它能正常驱动这个模组的,有多少端点,我估计你们说的channel和USB的端点endpiont不是一 一对应的关系,应该是一个端点复用多个通道使用了。


偶尔也很菜 发表于 2024-1-9 13:35:42

USBX的端点和通道应该是一对一的关系,通道不够用的时候就没办法为端点分配资源了。SIM7600是6个interface,18个channel,

偶尔也很菜 发表于 2024-1-9 13:39:52

USBX中的端点和通道应该是一一对应关系,通道不够就没办法为端点分配资源了,创建端点的时候会返回UX_NO_ED_AVAILABLE。UX_HCD_STM32_MAX_NB_CHANNELS这个定义默认是12,手动试下改为16可以运行但是还是不够,再改多就Hardfault了。SIM7600这个模块驱动不了(之前用RL-USB驱动也失败了不过没有源码也不知道具体啥原因),换成其它的模块我再试下。看起来EC20是可以的。

eric2013 发表于 2024-1-10 08:42:12

偶尔也很菜 发表于 2024-1-9 13:39
USBX中的端点和通道应该是一一对应关系,通道不够就没办法为端点分配资源了,创建端点的时候会返回UX_NO_ED ...
那确实占用太多了,直接用完了,还不够


jacksimcom 发表于 2024-1-10 13:43:54

SIM7600可以通过修改PID的方式支持多种复合设备的组合,默认的是9001,会占用比较多的channel。

当时我调试的时候用的是902B是没问题的。你们可以根据具体需要选择PID,比如默认的9001支持NDIS(WWAN),其实这个应该没有哪个网络协议栈可以支持,不用也罢,可以试试PPP或者RNDIS\ECM的,像NetX应该有可能驱动,作为一个网卡,只不过会有NAT而已。

jacksimcom 发表于 2024-1-10 13:45:58

AT+CUSBPIDSWITCH=901B,1,1,用这个指令切换一下PID,就可以了

eric2013 发表于 2024-1-11 10:14:51

jacksimcom 发表于 2024-1-10 13:43
SIM7600可以通过修改PID的方式支持多种复合设备的组合,默认的是9001,会占用比较多的channel。

当时我 ...

原来是这样,谢谢分享。
页: [1]
查看完整版本: USBX驱动复合设备channel不够