硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2844|回复: 9
收起左侧

[ThreadX全家桶] USBX驱动复合设备channel不够

[复制链接]

7

主题

23

回帖

44

积分

新手上路

积分
44
发表于 2021-8-19 17:48:04 | 显示全部楼层 |阅读模式

目前已经在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          [tick:0000119068] USB Device Unplugged
NO_TAG          [tick:0000119068] Waiting for device connection ...
NO_TAG          [tick:0000120752] channel_index->0
NO_TAG          [tick:0000120813] channel_index->1
NO_TAG          [tick:0000120813] channel_index->2
NO_TAG          [tick:0000120813] channel_index->3
NO_TAG          [tick:0000120813] channel_index->4
NO_TAG          [tick:0000120813] channel_index->5
NO_TAG          [tick:0000120813] channel_index->6
NO_TAG          [tick:0000120813] channel_index->7
NO_TAG          [tick:0000120813] channel_index->8
NO_TAG          [tick:0000120813] channel_index->9
NO_TAG          [tick:0000120813] channel_index->10
NO_TAG          [tick:0000120813] channel_index->11
NO_TAG          [tick:0000120814] Current_class -> ux_host_class_name:ux_host_class_simcom_wireless
NO_TAG          [tick:0000120814] USB Device Plugged
NO_TAG          [tick:0000120814] bInterfaceClass:FF
NO_TAG          [tick:0000120814] USB Modem Device Found
NO_TAG          [tick:0000120814] PID: 0x9006
NO_TAG          [tick:0000120814] VID: 0x1e0e
NO_TAG          [tick:0000120814] Data Interface initialized
NO_TAG          [tick:0000120852] modem rev size:9
NO_TAG          [tick:0000120852] modem rev->AT+CCLK?
NO_TAG          [tick:0000120852] Ready to send or receive data
NO_TAG          [tick:0000120852] modem rev size:39
NO_TAG          [tick:0000120852] modem rev->
+CCLK: "80/01/06,09:14:11+32"

OK

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

OK

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

OK

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

OK

NO_TAG          [tick:0000122329] USB Device Unplugged
NO_TAG          [tick:0000122329] Waiting for device connection ...


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
发表于 2021-8-20 09:09:02 | 显示全部楼层
H7是8个输入,8个输出端点,已经很多了。

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

使用道具 举报

4

主题

61

回帖

73

积分

初级会员

积分
73
QQ
发表于 2024-1-8 10:02:36 | 显示全部楼层
碰到了和楼主一样的问题,channel不够用。通过临时修改USBX代码证实SIM7600确实是18个channel。另外他的class类型都是0xFF,并不是标准的,看楼主的另一个贴子也碰到了这个问题。已放弃。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
发表于 2024-1-8 10:25:34 | 显示全部楼层
偶尔也很菜 发表于 2024-1-8 10:02
碰到了和楼主一样的问题,channel不够用。通过临时修改USBX代码证实SIM7600确实是18个channel。另外他的cla ...

这个占用也太多了,确实有点多。

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

12.png
回复

使用道具 举报

4

主题

61

回帖

73

积分

初级会员

积分
73
QQ
发表于 2024-1-9 13:35:42 | 显示全部楼层
USBX的端点和通道应该是一对一的关系,通道不够用的时候就没办法为端点分配资源了。SIM7600是6个interface,18个channel,
回复

使用道具 举报

4

主题

61

回帖

73

积分

初级会员

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
发表于 2024-1-10 08:42:12 | 显示全部楼层
偶尔也很菜 发表于 2024-1-9 13:39
USBX中的端点和通道应该是一一对应关系,通道不够就没办法为端点分配资源了,创建端点的时候会返回UX_NO_ED ...

那确实占用太多了,直接用完了,还不够

12.png
回复

使用道具 举报

7

主题

23

回帖

44

积分

新手上路

积分
44
 楼主| 发表于 2024-1-10 13:43:54 | 显示全部楼层
SIM7600可以通过修改PID的方式支持多种复合设备的组合,默认的是9001,会占用比较多的channel。

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

使用道具 举报

7

主题

23

回帖

44

积分

新手上路

积分
44
 楼主| 发表于 2024-1-10 13:45:58 | 显示全部楼层
AT+CUSBPIDSWITCH=901B,1,1,用这个指令切换一下PID,就可以了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
发表于 2024-1-11 10:14:51 | 显示全部楼层
jacksimcom 发表于 2024-1-10 13:43
SIM7600可以通过修改PID的方式支持多种复合设备的组合,默认的是9001,会占用比较多的channel。

当时我 ...

原来是这样,谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 10:47 , Processed in 0.192895 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表