0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

干货 | TCP/IP Over USB 用USB传输以太网数据,给你的MCU加个网卡

RTThread物联网操作系统 来源:YXQ 2019-07-31 09:55 次阅读

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传输过程中反复热插拔后功能正常。

关于NDIS

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手动剔除了这份驱动就没办法了。

如何在RT-Thread上使用这个功能

要用这玩意 首先你的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驱动

2) 把LWIP打开

这里必须先打开LWIP才能在USB Device找到RNDIS/ECM

3)把RNDIS/ECM打开

RNDIS:

ECM:

4)编译下载插USB。

然后你的Windows/Mac/Linux 上就能看到网卡了。是不是超简单。

FAQ

Q

为什么设备上不了网?

因为你只是和电脑连起来了而已,并没有路由器,甚至没有DHCP,Windows上可以使用网络共享或者网络桥接的方式,如果是用Linux的人。我估计也不用我多哔哔。

Q

如果想要板子做DHCP怎么办?

menuconfig里面开DHCP 然后在网卡linkup后调用 dhcpd_start("u0"); ECM的代码里面做了如果开DHCP的选项就会自动启动DHCP服务器,可以做参考。

Q

速度怎么样?

链接速度为FS 12Mbps HS 480Mbps,当然实际上是达不到这个速度的。不过延迟那是相当的低。

Q

可以干嘛?

临时取代一些调试麻烦得网络接口(WIFI,以太网)来调试一些网络应用,也可以用来给有USB却没有以太网的芯片扩展一种上网方式,也可以内置一个web服务器用于配置设备等等等等....发挥你的想象力。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    145

    文章

    15899

    浏览量

    342786
  • 以太网
    +关注

    关注

    40

    文章

    5009

    浏览量

    165966
  • 网卡
    +关注

    关注

    2

    文章

    282

    浏览量

    27070

原文标题:TCP/IP Over USB 用USB传输以太网数据,给你的MCU加个网卡

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    应用场景:USB以太网标准模块

    本帖最后由 lockyymc 于 2024-3-25 15:59 编辑 USB以太网标准模块 AG32支持USB FS+OTG和以太网MAC,并且提供了标准例程,包括网络Lwi
    发表于 03-24 10:41

    请问STM32G4系列的MCU可以支持以太网吗?

    请问STM32G4系列的MCU可以支持以太网吗?该系列同时支持以太网USB Host或OTG接口的型号有吗?
    发表于 03-15 06:14

    创新通讯方式:了解USB5630-D的以太网USB数据传输方式带来的优势!

    产品背景介绍 USB5630-D是一款多功能数据采集卡。支持以太网USB数据传输方式,该板卡提供64路模拟量单端输入或32路差分输入,4路
    的头像 发表于 01-29 16:53 160次阅读

    USB C和USB Type C的传输性能

    USB-C和USB Type-C是同一种标准,用于连接电子设备和传输数据、音频和视频信号。USB-C是U
    的头像 发表于 01-17 09:18 438次阅读

    车载以太网总线基础培训——传输层#车载以太网

    车载以太网
    北汇信息POLELINK
    发布于 :2023年09月21日 10:57:36

    车载以太网基础培训——车载以太网的链路层#车载以太网

    车载以太网
    北汇信息POLELINK
    发布于 :2023年09月19日 16:25:21

    USB IP介绍

    ,另外一个buffer可被MCU使用• 支持USB设备的挂起和唤醒操作(写控制寄存器)• 从而停止设备时钟,以进入低功耗模式• 注意事项:• F102/103中的USB和CAN共享512字节的专用SRAM来进行
    发表于 09-12 08:24

    STM32G4系列的MCU可以支持以太网吗?

    请问STM32G4系列的MCU可以支持以太网吗?该系列同时支持以太网USB Host或OTG接口的型号有吗?
    发表于 08-05 07:06

    Renesas 入门套件以太网USB 应用板原理图

    Renesas 入门套件以太网USB 应用板原理图
    发表于 06-26 19:21 0次下载
    Renesas 入门套件<b class='flag-5'>以太网</b>和 <b class='flag-5'>USB</b> 应用板原理图

    简谈基于FPGA的千兆以太网设计

    怎么样的呢?当然,像我们常用的以太网协议有TCP/IP,UDPTCP/IP和UDP相比,TCP/IP
    发表于 06-01 18:39

    Renesas 入门套件以太网USB 应用板原理图

    Renesas 入门套件以太网USB 应用板原理图
    发表于 05-05 19:29 2次下载
    Renesas 入门套件<b class='flag-5'>以太网</b>和 <b class='flag-5'>USB</b> 应用板原理图

    瑞萨入门套件以太网USB 应用板快速入门指南

    瑞萨入门套件以太网USB 应用板快速入门指南
    发表于 04-27 20:18 0次下载
    瑞萨入门套件<b class='flag-5'>以太网</b>和 <b class='flag-5'>USB</b> 应用板快速入门指南

    Renesas 入门套件以太网USB 应用板用户手册

    Renesas 入门套件以太网USB 应用板用户手册
    发表于 04-27 20:15 0次下载
    Renesas 入门套件<b class='flag-5'>以太网</b>和 <b class='flag-5'>USB</b> 应用板用户手册

    TCP协议原理详解

    一个典型的使用TCP协议封装的数据包,包括以太网MAC头+网络层IP数据头+传输
    的头像 发表于 04-21 12:41 927次阅读
    <b class='flag-5'>TCP</b>协议原理详解

    【沁恒 CH32V208 开发板免费试用】体验低成本快速以太网连接应用

    \\EXAM\\ETH\\UdpClient\\UdpClient.wvproj以太网相关驱动以库形式提供 Mian.c中参数设置如下开发板端IP为192.168.1.10目的端IP
    发表于 04-17 21:56