STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)

article/2025/9/9 15:07:53

STM32驱动开发(二)–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解)

一、简介
  本文基于stm32 Rndis实例,github开源, 使用STM32F407单板。结合协议讲解stm32中USB虚拟网卡驱动的实现。达到外部主机(手机)通过USB接口访问物联网设备网页的功能。

二、参考资料
  目前关于USB驱动、RNDIS协议讲解的资料非常少,较多的是windows和linux中的案例,也并没有系统讲述细节。初学者可以看看《圈圈教你玩usb》,结合着书的简介结合标准英文协议来看。本人根据网上找的例子,根据HAL库重新移植实现。把这个案例梳理下来,希望对以后有相同需求的开发者提供一个借鉴的作用。总体参考的资料如下:
   1) USB 2.0标准协议
   https://usb.org/sites/default/files/usb_20_20210701.zip

  2) CDC通信设备类标准协议
   https://usb.org/sites/default/files/CDC1.2_WMC1.1_012011.zip

  3) 微软RNDIS标准协议 (3290页开始)
   https://docs.microsoft.com/en-us/windows-hardware/drivers/opbuildpdf/network/toc.pdf?branch=live

  4) STM32 usb库官方实例
https://www.st.com/content/ccc/resource/technical/document/user_manual/1c/6b/06/e6/19/6c/46/bf/CD00289278.pdf/files/CD00289278.pdf/jcr:content/translations/en.CD00289278.pdf

  5) 参考的github中实例源码(原作貌似是俄罗斯人)
   https://github.com/fetisov/lrndis

三、实现效果
  如下图,图片来源于参考的github作者的演示,可以通过手机USB连接设备,访问设备的WEB页面:
在这里插入图片描述
在这里插入图片描述
  通过手机,可以对设备进行参数设置和LED控制:
在这里插入图片描述
  通过USB自动虚拟网卡,在设备维护中,不再需要通过手提电脑网线接入,配置网络参数创建网卡等操作,实现轻松运维

四、相关概念详解
  下面进入正文,整个案例涉及的概念非常多,相比于其他基本驱动,USB驱动的确是属于较为高级的驱动。整个案例涉及的概念有:

  1)USB标准中的域、包、事务、传输(控制传输、中断传输、批量传输、定时传输,当前涉及前三种);

  2)USB标准中的描述符、设备、配置、接口、端点(控制端点、数据端点、中断端点(当前模型中用作通知端点));

  3)USB标准中的CDC通信设备类(Communications Devices Class)定义;

  4)USB标准中所有标准请求(Standard Device Requests), CDC类的特有请求(Class-Specific Request)和协议封装请求(SEND_ENCAPSULATED_COMMAND 、GET_ENCAPSULATED_RESPONSE)定义;

  5)RNDIS设备定义以及消息协议。基于CDC类基础上通过协议封装请求传输RNDIS控制消息(RNDIS Control Messages),使用自定义数据端点传输数据消息(RNDIS Data Messages)。

  6)lwip协议栈虚拟网卡与USB虚拟网卡的数据交互(透传);

  后面需要对所有概念串成一个整体来讲,比较容易理解其中的关系。

五、USB 2.0标准
  首先介绍USB标准中的定义,USB 2.0标准总共十一章正文,三章附录。与软件相关的有四、五、八、九、十章、目录如下:
在这里插入图片描述
   第四章重点内容如下:
   4.1 USB 系统描述
   整个USB系统分为USB主机,USB设备,USB集线器三部分。
   其中USB拓扑图如下:
在这里插入图片描述
   在系统中,只能有一个主机Host(主机包含硬件,固件,软件部分), Hub表示集线器(连接USB主机与设备),Func表示一个设备。

   对应原文部分:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

   4.2 物理接口
   USB线缆结构为:
在这里插入图片描述
   其中,VBUS, GND用于供电,通常是+5V,主机可为设备供电,设备也可以自供电。
   D+,D-用于差分传输信号。总共有三种速度,高速HS(480 Mb/s.),全速FS(12 Mb/s.)和低速LS(12 Mb/s.)。USB OTG多了一根ID线,总共有五根线。

   对应原文部分:

在这里插入图片描述 在这里插入图片描述
在这里插入图片描述

  目前使用OTG全速规格实现,对应芯片引脚为PA11, PA12,芯片引脚和电路图如下:
在这里插入图片描述
在这里插入图片描述

   4.4 总线协议
   大多数传输都由三个包组成。分别是token包,data包和handshake包。必定从token开始,handshake结束。
   token包:每个事务都从token包开始。由主机发出,标识了传输类型和方向、设备地址和端点地址。所有令牌包都由主机发出。
  data包:根据token包的定义,发具体的data包(也可能没有data包);SOF令牌包没有data阶段。
  handshake包:由传输源(待定)发送完数据之后发出,表示数据传输完成。
  包的定义后面还有详解。

  原文对应如下:

在这里插入图片描述

   概念有点多,同学们照着上面给的路径看,下一篇直接结合协议进入报文分析。


http://chatgpt.dhexx.cn/article/ScmEVQ95.shtml

相关文章

LuatOS-Air AT应用指南--RNDIS

简介 RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。从而使Windows /Linux可以通过 USB 设备连接网络。 Window系统 window系统支持RNDIS直接用usb连接就可以使用&a…

首创STM32 USB主机驱动4G rndis设备

1、4G模块使用技术现状与难题 4G模块支持的对外通信接口有串口和USB接口,串口一般使用AT指令的方式,这个在MCU类产品上面使用的很多,USB接口主用于在连接APU应用处理器上面,由LINUX操作系统来驱动 ,把4G模块实现成一个…

Linux配置USB RNDIS

一台Linux即可充当USB的device端,也可以由另一台Linux来充当USB的Host端。在与以太网不同,在USB网络里各终端不是对等的,即USB Host端和USB Device端的所需要软件和硬件接口不一样。 Linux充当USB Host Linux开发板当USB Host时&#xff0c…

Air780E模块RNDIS应用开发指南

目录 简介Window系统Linux系统常见问题 简介 RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。从而使Windows /Linux可以通过 USB 设备连接网络。 Window系统 windo…

windows系统RNDIS驱动手动安装

windows系统中RNDIS自动当成串口,按网上的更新驱动的方式无法更新为RNDIS,所以采用手动更新的方式,亲测win7和win10可用 在设备管理器选择需要更新RNDIS驱动的设备 **注意:**一定要选择正确的设备,选择错误的话无法成…

指南-安卓/Linux应用指南-RNDIS

目录 Window系统Linux系统IPV6使用方法如何禁用RNDIS功能常见问题相关资料以及购买链接 Window系统 window系统支持RNDIS直接用usb连接就可以使用,模块会虚拟一个网卡。 Linux系统 目前linux大部分发行版本都已经默认支持RNDIS驱动了,只要通过USB连接…

win10安装RNDIS驱动

1. 安装RNDIS驱动 1.1 插上usb rndis device后,PC端提示: 1.2 安装RNDIS驱动 在“RNDIS”上右击选择“更新设备驱动程序”,再选择“浏览我的计算机以查找驱动程序软件”,接着选择“让我从计算机上的可用驱动程序列表中选择”,然后选择“网络适配器”,最后选择"Mic…

【usb】安卓usb网络共享(RNDIS)

一、RNDIS简介 微软官方对RNDIS的介绍说白了,就是将安卓设备作为一个网卡,通过USB连接到电脑上,供电脑上网。 二、使用指导 首先为了验证电脑上网确实走的是usb。先把你电脑上的网卡及网线拔了,wifi关了。并且确保此时电脑无法…

软件测试岗位新标准:ISTQB认证与软件测试工程师职业发展

随着信息技术的飞速发展,软件测试行业也变得越来越重要。软件测试是保证软件质量的关键环节,因此,软件测试工程师的岗位也越来越受到重视。 ISTQB认证成为了衡量软件测试工程师职业能力的标准。 下面领测国际ISTQB考试认证中心就带您了解一下…

ISTQB初级认证-知识点及脑图总结

前言 此文章为本人利用课余时间进行的ISTQB初级认证知识和考点的总结。总结过程主要参考了“ISTQB测试人员认证初级大纲(2011版)”,由于作者能力与精力有限,此篇文章可能会存在纰漏,望见谅并及时指出。谢谢&#xff0…

ISTQB认证-关于ISTQB一些知识点总结

如果要转载请注明 原文链接哦! http://blog.csdn.net/maxdong24 ISTQB知识点总结: 注释: K1:表示一般理解 K2:表示一般掌握 K3:表示重点掌握并能够应用 1.导致软件缺陷的原因(K2&#xff09…

ISTQB高级国际认证试题及答案(一)

题目 #1 (3 分)选择2个答案 您是旅游信息手机应用项目的测试经理。近期该项目切换到敏捷流程和测试驱动开发(TDD)。每个开发周期持续15天,在第7天之后开始每日构建。第10天以后,不会再有新的功能加入。开发…

听说软件测试工程师们都在考ISTQB?

各位忙于测试的小伙伴们,还在为不知道怎么学习,不知道学习的方向而苦恼吗? 那就随小编一起看一看北汇信息的测试工程师们在学什么吧! 北汇信息专注于汽车电子测试,涵盖MiL、SiL、PiL、HiL、ViL等不同阶段&#xff0c…

ISTQB基础级备考攻略

ISTQB基础级备考攻略 ISTQB有用吗怎么考怎么准备 ISTQB有用吗 仁者见仁,智者见智。测试领域的证书不是太多,想拿证书撑撑场子顺便巩固下理论基础,常见的两个:ISTQB、国考软件测评师。 怎么考 直接复制的官网: 基础…

【最全】ISTQB- FL模拟题(含答案)

【注:摘于官网】 1、以下哪一项是对测试条件的最佳描述?(b) a) 需求文档明确或隐含说明的组件或系统的属性。——特性的定义 b) 测试依据的一部分,其与实现特定测试目标相关。 c) 当软件在特定条件下使用时&#xf…

2018版ISTQB FL基础级大纲全解析

2018版ISTQB基础级中英文大纲已经正式发布。根据ISTQB基础级认证考试要求,分别对采用2018版新大纲的时间做出了要求:针对英语考试,必须在2019年6月4日之前;而对于非英语的考试,其开始时间为2019年12月4日。其中考试的内…

考个ISTQB证书有用吗

考ISTQB证书有用吗? [我的回答]2018年8月22日 从2001年毕业开始,我一直从事的都是软件测试相关工作,包括软件测试、测试管理、测试能力改进和测试咨询培训等。2005年开始介入ISTQB的工作(比国内CSTQB成立时间更早)&…

1-1 ISTQB-FL基础认证证书

【前提摘要】 什么是ISTQB? 什么又是FL? 以及证书作用,这些都可百度查到 【内容概述】 同截图内容所示, 根据FL考试大纲 & 练习题对比, 梳理了考试范围内的内容。 并自行结合个人经验&其他资料汇总&…

ISTQB认证

ISTQB知识点总结: 注释: K1:表示一般理解 K2:表示一般掌握 K3:表示重点掌握并能够应用 1.导致软件缺陷的原因(K2) 缺陷是错误的结果,更精确地说,缺陷是错误的表现。当缺…

什么是ISTQB认证

什么是ISTQB认证 作者:郑文强 文章下载:什么是ISTQB认证 1.什么是ISTQB ISTQB(InternationalSoftware Testing Qualifications Board)全称国际软件测试认证委员会,是一个注册于比利时的非赢利性组织,是…