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

    关注

    146

    文章

    17117

    浏览量

    350933
  • 以太网
    +关注

    关注

    40

    文章

    5419

    浏览量

    171564
  • 网卡
    +关注

    关注

    4

    文章

    307

    浏览量

    27373

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

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

收藏 人收藏

    评论

    相关推荐

    为什么MPLS仍是以太网传输技术的首选

    什么是运营商以太网传输技术? 运营商以太网是指在局域 (LAN) 之外使用以太网技术,特别是用于长距离、城域
    的头像 发表于 11-29 09:14 193次阅读
    为什么MPLS仍是<b class='flag-5'>以太网</b><b class='flag-5'>传输</b>技术的首选

    以太网TCP/IP的关系解析

    在现代计算机网络中,以太网TCP/IP协议栈是构建网络通信的基础。以太网定义了局域(LAN)中的数据
    的头像 发表于 11-08 09:21 510次阅读

    以太网传输介质和工作模式

    以太网是一种广泛应用的局域(LAN)技术,它通过特定的传输介质和工作模式,在多个设备之间高效地传输数据。本文将从
    的头像 发表于 10-08 10:07 741次阅读

    以太网数据采集网关:数据汇聚与传输的关键桥梁

    在数字化转型浪潮的推动下,各行各业都在积极探索如何高效、安全地处理和传输数据以太网数据采集网关作为这一过程中的重要组成部分,扮演着数据汇聚
    的头像 发表于 09-24 14:33 364次阅读
    <b class='flag-5'>以太网</b><b class='flag-5'>数据</b>采集网关:<b class='flag-5'>数据</b>汇聚与<b class='flag-5'>传输</b>的关键桥梁

    水电表集中器支持以太网传输数据吗?

    原理水电表集中器通过内置的网络适配器,将从各水电表收集的数据打包成IP数据包,利用TCP/IP协议栈进行封装,再通过
    的头像 发表于 08-13 17:42 275次阅读
    水电表集中器支持<b class='flag-5'>以太网</b><b class='flag-5'>传输</b><b class='flag-5'>数据</b>吗?

    RS485转LoRa-以太网TCP转LoRa

    可以实现以太网转LoRa、Rj45转LoRa、LoRa转以太网、RS485转以太网TCP_IP转LoRa、LoRa转网口、RS485串口转LoRa、LoRa中继器功能等通信
    的头像 发表于 06-19 10:39 551次阅读
    RS485转LoRa-<b class='flag-5'>以太网</b><b class='flag-5'>TCP</b>转LoRa

    以太网接口的数据传输原理详解

    以太网接口作为计算机网络中的关键组成部分,承担着数据传输的重要职责。在了解以太网接口的数据传输原理之前,我们首先需要明确以太网的基本概念和工
    的头像 发表于 05-29 16:47 1619次阅读

    stm32f4的以太网传输ADC采用数据,ADC采样数据会发生偏差的原因?

    stm32f4的以太网传输ADC采用数据,在通讯的时候会造成采样数据偏差,以太网采用的是lw
    发表于 05-06 09:01

    示波器分析以太网传输机制

    本文以双绞线以太网为分析对象,以混合信号示波器为分析工具,深入探秘了两类常见的双绞线以太网的编码,且实地查看并验证了以太网在物理层的信号传输情况。最后,通过一个实战例子对比了实际网络中
    的头像 发表于 04-12 08:30 775次阅读
    <b class='flag-5'>用</b>示波器分析<b class='flag-5'>以太网</b><b class='flag-5'>传输</b>机制

    STM32H743以太网与高速USB同时工作遇到的疑问求解

    的代码。 CubeMX中使用了FreeRTOS,高速USB使用的是CDC类。以太网使用的是LWIP,以太网与PC建立TCP连接。 现在的现象是:当电脑PC与STM32H743进行
    发表于 04-09 07:53

    应用场景: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

    工业以太网的基本原理及优势

    主要的工业以太网标准有以太网/IP、PROFINET、EtherCAT、Modbus/TCP等,这些标准实现了互操作性,应用于不同的工业控制领域。
    的头像 发表于 03-06 16:31 1223次阅读
    工业<b class='flag-5'>以太网</b>的基本原理及优势

    CANopen以太网网关怎么

    CANopen以太网网关怎么? CANopen以太网网关是一种连接CANopen总线和以太网的设备,它提供了在CANopen网络和以太网
    的头像 发表于 02-02 16:59 3322次阅读

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

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