硬汉嵌入式论坛

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

USBX通过HOST_CDC_ECM驱动EC20模块

  [复制链接]

9

主题

66

回帖

108

积分

初级会员

积分
108
发表于 2024-11-26 00:47:50 | 显示全部楼层 |阅读模式
本帖最后由 egoistaw 于 2024-11-26 00:51 编辑

CubeMX里勾选所需的组件,生成即可。
因为我买的板子上通过FE1.1S拓展出来4个USB_HOST,所以我这里额外勾选一个HOST USB HUB。
勾选HOST MSC是为了测试共存性。
cubemx.png

先将EC20的USB设置成ECM模式
net.png
即AT+QCFG: "usbnet",1

之后USB接口直接插上EC20会提示枚举失败UX_DEVICE_ENUMERATION_FAILURE,调试源码会发现,EC20默认打开了6个USB 接口,USBX会给每个端口分配3个ENDPOINT,即使没驱动起来。
H743总共才16个EP,F429才6个,哪够这18个的。
所以需要EC20关闭部分接口。
使用此AT指令即可。
at.png at2.png

注意,建议先查再改。EC20 PID是0x125,移远官网上的某个文档里写成了0x120。
我被误导改成了0x120,导致windows电脑识别不出来模块了,最后在开发板上创了个CDC_ACM工程,通过USB模拟串口,才终于改回了PID。
inter.png
在EC20这五六个端口里,挑几个端口关闭后,会导致windows驱动识别混乱,如AT识别成DM,ECM口丢失等等。
我在尝试某种组合时,甚至出现了一插EC20就电脑蓝屏死机,最终还是通过开发板的ACM工程救了回来。
https://forumschinese.quectel.com/t/topic/1023
官方论坛有个FAE说不允许跳着关闭端口,可能与此有关。说明移远的这个windows驱动写的是真烂。
但是,经过我的初步测试后,发现只开启<at_port>,<rmnet>这两个接口也是可以的。
atusb.png
可以看到设置成功了,只是window把at和rmnet识别成了dm与nmea,实际上dm口就是at口,也还可以正常工作。
at_dev.png


我手里的是PCIE转接出来的,没有引出UART,所以需要保留个USB AT接口用于配置,关了就没法配置了。
因此我没测试仅开启rmnet接口(ecm口)的情况。
有条件的可以测试一下。
ping个百度还是没问题的
ping.png
我手里板子的测试工程暂时比较简陋,还是附上了,有需要的可以参考。


H743_Host_HUB_MSC_CDC_ECM.rar

11.77 MB, 下载次数: 51

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-11-26 08:19:13 | 显示全部楼层
谢谢楼主分享,非常详细
回复

使用道具 举报

19

主题

336

回帖

393

积分

高级会员

积分
393
发表于 2024-12-3 10:05:47 | 显示全部楼层
请教楼主一个问题  
[C] 纯文本查看 复制代码
57.2.3 Peripheral-mode features
The OTG_HS interface main features in peripheral-mode are the following:
&#8226; 1 bidirectional control endpoint0
&#8226; 8 IN endpoints (EPs) configurable to support bulk, interrupt or isochronous transfers
&#8226; 8 OUT endpoints configurable to support bulk, interrupt or isochronous transfers
&#8226; Management of a shared Rx FIFO and a Tx-OUT FIFO for efficient usage of the USB 
data RAM
&#8226; Management of up to 9 dedicated Tx-IN FIFOs (one for each active IN EP) to put less 
load on the application
&#8226; Support for the soft disconnect feature.


手册中说到 8个 IN 端点, 8个 OUT 端点,
假设当前设备需要使用3个端点,USBX 里面配置端点的序列号会一次是 1 2 3 这样的方式。这里根据 123 是怎么分配到对应的 IN 还是 OUT 端点呢?
回复

使用道具 举报

9

主题

66

回帖

108

积分

初级会员

积分
108
 楼主| 发表于 2024-12-3 11:15:17 | 显示全部楼层
王海靖 发表于 2024-12-3 10:05
请教楼主一个问题  
[mw_shl_code=c,true]57.2.3 Peripheral-mode features
The OTG_HS interface main f ...

我了解也不多。枚举过程中获取到设备描述符,里面应该是记录了接口类型和想要的EP数量。USBX遍历物理EP,找到没使用的,分配给它。
回复

使用道具 举报

19

主题

336

回帖

393

积分

高级会员

积分
393
发表于 2024-12-3 14:09:11 | 显示全部楼层
本帖最后由 王海靖 于 2024-12-3 14:13 编辑
egoistaw 发表于 2024-12-3 11:15
我了解也不多。枚举过程中获取到设备描述符,里面应该是记录了接口类型和想要的EP数量。USBX遍历物理EP, ...

我想的是,既然ST 的端点是区分 IN OUT ,分别有 8 个,自然也是 1 2 3 这样排下去的。
对于不同的设备,所需要的端点数量也不是一样的,STM32 能支持多少种复合设备也和端点类型和数量有关系。

如果按照1 2 3  ........  11 12 13 14 15这种顺序去使用端点的话,那么 8 9 10 11对应是什么端点呢?

例如 参考 THREADX CDC_ACM 设备,需要1个OUT 端点 ,2个 IN 端点
[C] 纯文本查看 复制代码
/* Device CDC-ACM Class */
#define USBD_CDCACM_EPINCMD_ADDR                      0x82U
#define USBD_CDCACM_EPINCMD_FS_MPS                    8U
#define USBD_CDCACM_EPINCMD_HS_MPS                    8U
#define USBD_CDCACM_EPIN_ADDR                         0x83U
#define USBD_CDCACM_EPOUT_ADDR                        0x01U
#if (USBD_CDCACM_EPIN_ADDR == (USBD_CDCACM_EPOUT_ADDR & 0x0FU))
#error Address endpoint IN shall be different form endpoint OUT.
#endif


这里 OUT 端点配置的为 1,IN 用的是 2 和 3.
那么 IN 的 1号端点,是不是就未使用?

还没有对 USBX 有深入的了解,这块还是很清楚他的实现。
回复

使用道具 举报

17

主题

109

回帖

160

积分

初级会员

积分
160
发表于 2024-12-3 14:37:22 | 显示全部楼层
王海靖 发表于 2024-12-3 14:09
我想的是,既然ST 的端点是区分 IN OUT ,分别有 8 个,自然也是 1 2 3 这样排下去的。
对于不同的设备 ...

有没有可能,主机可以接很多个设备,很多个 一样的 IN 端点。而不是像你这么说的排序
回复

使用道具 举报

19

主题

336

回帖

393

积分

高级会员

积分
393
发表于 2024-12-3 16:17:44 | 显示全部楼层
初晴sama 发表于 2024-12-3 14:37
有没有可能,主机可以接很多个设备,很多个 一样的 IN 端点。而不是像你这么说的排序

cherry USB 作者来回答了,受宠若惊。

看你的说法是这里的配置是给主机看的,而不是配置 STM32 内部的端点。

如果是这样,那就是我理解错了,感谢指正。
回复

使用道具 举报

19

主题

336

回帖

393

积分

高级会员

积分
393
发表于 2024-12-4 15:18:24 | 显示全部楼层
王海靖 发表于 2024-12-3 10:05
请教楼主一个问题  
[mw_shl_code=c,true]57.2.3 Peripheral-mode features
The OTG_HS interface main f ...

感谢 cherryusb 作者的解答。

手册这里的意思是,一共只有有 8 个端点,这8个端点都是双向的。所以按照顺序去使用这 8 个端点就行了。
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2025-1-6 16:51:13 | 显示全部楼层
哦!我之前不知道这个端点关闭,当时用虽然可以挂载也可以联网,但是传输极其不稳定,很容易断,还是楼主牛!赶紧mark一下。
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2025-1-10 17:41:35 | 显示全部楼层
这个传输速度可以达到多少
回复

使用道具 举报

0

主题

26

回帖

26

积分

新手上路

积分
26
发表于 2025-2-8 11:18:20 | 显示全部楼层
hthometown 发表于 2025-1-10 17:41
这个传输速度可以达到多少

接FS/USB估计速率也上不去
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-2-8 12:10:43 | 显示全部楼层
试了下CAT1模块,TCP 传输大概  上行120KB/S   下行40KB/S
回复

使用道具 举报

2

主题

67

回帖

78

积分

初级会员

积分
78
发表于 5 天前 | 显示全部楼层
qw_yj 发表于 2025-2-8 12:10
试了下CAT1模块,TCP 传输大概  上行120KB/S   下行40KB/S

你还能接CAT1,用的哪款?ECM协议目前测试只有EC20可以,市面上的CAT1测试了都不行,因为不支持USB全速,只能上USB高速。也就是12MB每秒速率的不支持,只支持480MB每秒的高速USB接口。
回复

使用道具 举报

2

主题

67

回帖

78

积分

初级会员

积分
78
发表于 5 天前 | 显示全部楼层
hthometown 发表于 2025-1-10 17:41
这个传输速度可以达到多少

接EC20的话速率不低,几乎快达到了USB2.0全速的极限。全速是12Mbit每秒,按照8bit算的话最大估计1M字节左右。实测做到300-500K问题不大。足够使用了。如果改成USB2.0高速,也就是480Mbit接口,那速度肯定杠杠的。
回复

使用道具 举报

2

主题

67

回帖

78

积分

初级会员

积分
78
发表于 5 天前 | 显示全部楼层
现在最大的问题是:
1.单片机USB端点太少,而网卡的端点要求数量太多  
2.市面上CAT1模块不支持USB2.0全速,底层驱动有问题,这样就导致了用CAT4模块EC20性价比太低了,或者单片机USB接口弄个外部高速phy,这样感觉也不划算,最好是内置高速phy。
3.因此总的来说只适合高端项目用H7或者国产的一些顶级MCU,这样USB够强,再用ECM驱动CAT1或者CAT4模块都可以,这样性价比才够。
4.正因为单片机USB端点太少不够用,因此连CDC-ACM都用不了,简直坑的不要不要的!哪家好人做个普通联网的项目上H7?啥时候F1这种级别的单片机USB端点数量都足够用的话,在考虑单片机接虚拟网卡吧。
5.再回到正题:现在也就是H7能用虚拟网卡,CAT1模块需要H7外接高速PHY,否则只能用CDC-ACM。而只有CAT4模块EC20才支持全速模式下的ECM协议。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 4 天前 | 显示全部楼层
水水水木木木 发表于 2025-6-4 15:46
现在最大的问题是:
1.单片机USB端点太少,而网卡的端点要求数量太多  
2.市面上CAT1模块不支持USB2.0全 ...

市面上的cat1, 我试过了,展锐、移芯、高通的平台,ECM都可以。MCU:STM32F407, H7, 都可以用。USB 的DMA 打开,速度可以快很多。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 19:52 , Processed in 0.348588 second(s), 37 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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