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
    +关注

    关注

    147

    文章

    19245

    浏览量

    405210
  • 以太网
    +关注

    关注

    41

    文章

    6302

    浏览量

    181948
  • 网卡
    +关注

    关注

    4

    文章

    346

    浏览量

    29121

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索DS33Z44DK以太网传输设计套件:功能、配置与应用

    探索DS33Z44DK以太网传输设计套件:功能、配置与应用 在当今数字化的时代,以太网传输技术在数据通信领域扮演着至关重要的角色。DS33Z
    的头像 发表于 05-26 16:30 77次阅读

    DPE5500/W5500—SPI 接口以太网协议栈芯片

    DPE5500是一款SPI接口的以太网协议栈芯片,适用于单片机系统实现以太网通讯。DPE5500集成了全硬件TCP/IP协议栈,10/100M以太网
    发表于 05-21 17:46

    Cosy通过USB连接PLC时如何排查USB over IP故障

    Cosy通过USB连接PLC时若USB over IP异常(未识别硬件、编程软件报端口不存在),可按三步排查:①命令行使用netstat -ano查看端口占用,结束占用进程;②检查防火
    的头像 发表于 05-19 15:46 192次阅读
    Cosy通过<b class='flag-5'>USB</b>连接PLC时如何排查<b class='flag-5'>USB</b> <b class='flag-5'>over</b> <b class='flag-5'>IP</b>故障

    CH397单芯片USB2.0/2.1转10/100M以太网高集成低功耗网卡芯片方案

    偏高、兼容性差、BOM成本较高等问题。 沁恒微电子推出的CH397,是一款单芯片集成USB2.0/2.1高速控制器+PHY+百兆以太网MAC+PHY+自研RISC-V处理器的USB网卡
    的头像 发表于 04-21 17:46 1257次阅读

    潜创微行业干货深度解析:USB转网口芯片常见类型核心特性与适配场景全梳理

    类型划分不清楚,选型时容易踩坑,本文结合行业实践,梳理相关干货内容供参考。 USB转网口芯片常见类型划分 目前行业内一般按照速率等级、应用场景两个维度划分常见类型,具体如下: 1. USB2.0转10/100M百兆
    的头像 发表于 04-10 16:02 304次阅读

    USB3.0千兆网卡芯片CH398,多平台高效联网利器

    CH398是一款高集成度的USB3.0千兆网卡芯片,采用沁恒自研青稞RISC-V处理器,芯片架构针对网络应用优化,充分释放5Gbps超高速USB和1000M以太网
    的头像 发表于 03-05 15:01 991次阅读
    <b class='flag-5'>USB</b>3.0千兆<b class='flag-5'>网卡</b>芯片CH398,多平台高效联网利器

    新品 | StamPLC PoE,以太网拓展模块 Atom DTU NB-IoT2 V1.1,可编程数据传输单元

    TCP/IP协议栈,具备8路独立硬件Socket、10/100M以太网数据链路层(MAC)及物理层(PHY),支持UDP、TCP等主流网络通
    的头像 发表于 01-16 19:06 1239次阅读
    新品 | StamPLC PoE,<b class='flag-5'>以太网</b>拓展模块 Atom DTU NB-IoT2 V1.1,可编程<b class='flag-5'>数据传输</b>单元

    Amphenol单对以太网(SPE)IP20连接器及电缆组件:工业以太网新选择

    Amphenol单对以太网(SPE)IP20连接器及电缆组件:工业以太网新选择 在工业自动化和物联网蓬勃发展的今天,高效、可靠且经济的网络连接解决方案至关重要。Amphenol的单对以太网
    的头像 发表于 12-12 10:40 1005次阅读

    TCP/UDP 三模式!远程监控以太网温湿度传感器,响应快至 1ms

    高科技POE供电以太网温湿度传感器深度解析:精准感知与智能控制的融合创新 一、核心技术架构解析 1. 网络通讯技术突破 • RJ45+TCP/IP 全栈设计 :采用 10/100M 自适应以太
    的头像 发表于 12-04 15:04 1048次阅读
    <b class='flag-5'>TCP</b>/UDP 三模式!远程监控<b class='flag-5'>以太网</b>温湿度传感器,响应快至 1ms

    以太网通讯在FPGA上的实现

    协议的载体,IP协议规定了数据传输时的基本单元和格式。其位于以太网MAC帧格式的数据段,IP协议内容由I
    发表于 10-30 07:45

    USB 扩展网卡全方位指南:从选购到使用

    在无线网络普及的当下,有线网络凭借更稳定的传输速率和更低的延迟,仍是游戏、直播、大型文件传输等场景的首选。而USB扩展网卡(又称USB千兆
    的头像 发表于 10-24 15:37 2273次阅读
    <b class='flag-5'>USB</b> 扩展<b class='flag-5'>网卡</b>全方位指南:从选购到使用

    基于FPGA的USB数据传输

    你也许会有疑问,明明有这么多通信方式和数据传输(SPI、I2C、UART、以太网)为什么偏偏使用USB呢?
    的头像 发表于 08-06 14:47 5144次阅读
    基于FPGA的<b class='flag-5'>USB</b><b class='flag-5'>数据传输</b>

    USB上网实战教程:RNDIS驱动一键配置!

     想要通过USB线快速连接网络?本文详解RNDIS驱动的安装与配置步骤。从Linux系统检测到设备虚拟网卡,仅需几个命令即可实现TCP/IP ove
    的头像 发表于 08-04 15:46 2031次阅读
    <b class='flag-5'>USB</b>上网实战教程:RNDIS驱动一键配置!

    SR9900 低功耗USB 2.0转10/100M 快速以太网数据说明书

    SR9900是一个高集成度、超低功耗、单芯片USB 2.0转10/100M以太网控制电路。为各类应用增加低成 本、小型封装、即插即用的快速以太网功能,可用于台 式电脑、笔计本电脑、超便携式电脑、平板
    发表于 07-25 17:44 4次下载

    SR9900数据手册,USB2.0网卡芯片,SR9900规格书,SR9900设计资料

    SR9900是一个高集成度、超低功耗、单芯片USB 2.0转10/100M以太网控制电路。为各类应用增加低成 本、小型封装、即插即用的快速以太网功能,可用于台 式电脑、笔计本电脑、超便携式电脑、平板电脑、托架/ 端口复制器/
    的头像 发表于 07-25 17:03 1270次阅读
    SR9900<b class='flag-5'>数据</b>手册,<b class='flag-5'>USB</b>2.0<b class='flag-5'>网卡</b>芯片,SR9900规格书,SR9900设计资料