Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
USB_ECM网卡
USB_RNDIS网卡
TCP/IP Over USB 用USB传输以太网数据,给你的MCU加个网卡
发布于 2019-06-10 15:20:03 浏览:8466
订阅该版
[tocm] 最近修复了一波RNDIS和ECM的热插拔问题修复了 RNDIS 和 ECM的热插拔通信异常问题,添加了通过menuconfig 配置 RNDIS delay linkup的配置选项。问题修复点如下:RNDIS:* 当存在通信链接时 热插拔 Windows会发送REMOTE_NDIS_RESET_MSG,该指令未实现,现已实现。 * 当存在通信链接时 热插拔 eth_tx线程大几率会死等传输完成的信号量通知,导致LWIP卡死。 * 当存在通信链接时 热插拔 eth_rx的接收缓冲未重置,导致接收数据异常。 ECM:* 当存在通信链接时 热插拔 eth_tx线程大几率会死等传输完成的信号量通知,导致LWIP卡死。 * 当存在通信链接时 热插拔 eth_rx的接收缓冲未重置,导致接收数据异常。 现已测试 stm32f469i-discovery / LWIP2.0.2 / Windows 10 1903下 RNDIS,iperf传输过程中反复热插拔后功能正常, delay linkup宏开启前后功能正常,连续热插拔功能正常。现已测试 stm32f469i-discovery / LWIP2.0.2 / MacOS Mojave 10.14.2下 ECM,iperf传输过程中反复热插拔后功能正常。相关Pull Request [https://github.com/RT-Thread/rt-thread/pull/2764](https://github.com/RT-Thread/rt-thread/pull/2764) --- RNDIS全称 Remote NDIS 是Microsoft定义的一种USB以太网卡模型,说到RNDIS 必须要说说另一个东西,NDIS。 NDIS(Network Driver Interface Specification)是网络驱动程序接口**规范**的简称。它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。 NDIS为网络驱动程序创建了一个完整的开发环境,只需调用NDIS函数,而不用考虑操作系统的内核以及与其他驱动程序的接口问题,从而使得网络驱动程序可以从与操作系统的复杂通讯中分离,极大地方便了网络驱动程序的编写。另外,利用NDIS的封装特性,可以专注于一层驱动的设计,减少了设计的复杂性,同时易于扩展驱动程序栈。 而RNDIS 就是NDIS这种规范基于USB的一种具体实现,RNDIS目前可以在Windows7 or later(讲道理Vista也是可以的)上自动加载驱动,无需第三方驱动。而对于Linux和MacOS来说RNDIS则需要安装第三方驱动了,部分Linux发行版内置了RNDIS的驱动(谁叫Windows用的人多了)。至于Linux Mac 下如何使用RNDIS这里不跟你多解释,因为我提供了另一种解决方案--------CDC-ECM。 CDC-ECM(Ethernet Networking Control Model)是USB联盟定义的标准USB以太网控制器模型(很遗憾,Windows下没有驱动),绝大部分Linux发行版和MacOS都支持该种USB设备的驱动。这里讲的绝大多数包括了各种pi,当然如果你自己编译的linux手动剔除了这份驱动就没办法了。 这里附上RNDIS白皮书一份![[MS-RNDIS].pdf](/uploads/201906/10/145655b1poppq4qpgq4474.attach) 这里附上ECM白皮书一份![ECM120.pdf](/uploads/201906/10/150122inujj5gpn91bnzun.attach) --- 要用这玩意 首先你的RT-Thread bsp得有usb驱动 -- 推荐大家使用下面的bsp或者仿照下面的bsp对STM32F4系列的USB驱动进行快速移植。(超简单) `bsp/stm32/stm32f469-st-disco` 有正点原子 L4 IOT Board的朋友也可以用相关的bsp。 大概的操作步骤如下: 1) 如果你的bsp的menuconfig有配置USB的驱动加载开关(比如`bsp/stm32/stm32f469-st-disco`),那么把它打开。 这里不是每一个bsp都有此配置,有些bsp直接通过usb组件是否开启来判断是否使用usb驱动 ![1.png](/uploads/201906/10/152309ozo55xh5osohq6zq.png) 2) 把LWIP打开 这里必须先打开LWIP才能在USB Device找到RNDIS/ECM ![2.png](/uploads/201906/10/152354ipa9iipmzrjcfgi9.png) 3)把RNDIS/ECM打开 RNDIS: ![3.png](/uploads/201906/10/152448rtb4eu2xzgt420hr.png) ECM: ![4.png](/uploads/201906/10/152559wa7qjpfgttpptu7g.png) 4)编译下载插USB。 然后你的Windows/Mac/Linux 上就能看到网卡了。是不是超简单。 ## FAQ: 问:为什么设备上不了网? 答:因为你只是和电脑连起来了而已,并没有路由器,甚至没有DHCP,Windows上可以使用网络共享或者网络桥接的方式,如果是用Linux的人。我估计也不用我多哔哔。hhhh 问:如果想要板子做DHCP怎么办? 答:menuconfig里面开DHCP 然后在网卡linkup后调用 dhcpd_start("u0"); ECM的代码里面做了如果开DHCP的选项就会自动启动DHCP服务器,可以做参考。 问:速度怎么样? 答:链接速度为FS 12Mbps HS 480Mbps,当然实际上是达不到这个速度的。不过延迟那是相当的低。 问:可以干嘛? 答:临时取代一些调试麻烦得网络接口(WIFI,以太网)来调试一些网络应用,也可以用来给有USB却没有以太网的芯片的芯片扩展一种上网方式,也可以内置一个web服务器用于配置设备等等等等。。发挥你的想象力。
查看更多
43
个回答
默认排序
按发布时间排序
WillianChan
2019-06-10
-
这个问题修复的很及时,帮顶!:lol
word天
2019-06-10
这家伙很懒,什么也没写!
>这个问题修复的很及时,帮顶! --- 感谢支持
whj467467222
认证专家
2019-06-10
开源,分享,交流,共同进步
膜拜大佬
WillianChan
2019-06-10
-
>感谢支持 --- 我的天!!原来你就是word天,社区大佬啊,久仰大名,加个QQ交流交流吧
word天
2019-06-10
这家伙很懒,什么也没写!
>我的天!!原来你就是word天,社区大佬啊,久仰大名,加个QQ交流交流吧 --- 私聊私聊
word天
2019-06-10
这家伙很懒,什么也没写!
[attach]9040[/attach] 补一个 mac上用ECM的图
aozima
2019-06-10
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
这个利害了
tyustli
2019-06-10
这家伙很懒,什么也没写!
mark一下
andychen
2019-06-11
这家伙很懒,什么也没写!
我的天要上天了,厉害哦
gpfrank
2019-06-11
这家伙很懒,什么也没写!
太厉害了。一直在找这个功能,终于找到了。
撰写答案
登录
注册新账号
关注者
1
被浏览
8.5k
关于作者
word天
这家伙很懒,什么也没写!
提问
1
回答
78
被采纳
2
关注TA
发私信
相关问题
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
7
次点赞
xiaorui
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部