STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)
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包:由传输源(待定)发送完数据之后发出,表示数据传输完成。
包的定义后面还有详解。
原文对应如下:
概念有点多,同学们照着上面给的路径看,下一篇直接结合协议进入报文分析。
STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)相关推荐
- STM32驱动开发(二)--USB Device RNDIS虚拟网卡(usb hound抓包完整数据流分析)
一.简介 抓包工具:usb hound,本例使用安卓手机作为device, 使用RNDIS功能连接电脑虚拟网卡.抓取完整数据流包按流程进行分析.数据流程熟悉之后,查看stm32或者其他厂家的USB ...
- 基于MTD的NAND驱动开发(二)
基于MTD的NAND驱动开发(二) 基于MTD的NAND驱动开发(三) http://blog.csdn.net/leibniz_zsu/article/details/4977853 http:// ...
- stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...
- ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)
参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...
- 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念
linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)
Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...
- USB虚拟总线驱动开发扩展之(利用虚拟USB总线驱动实现U盘模拟)
by fanxiushu 2020-03-25 转载或引用请注明原始作者. USB虚拟总线驱动的使用范围是非常广泛的,可以使用它来模拟各种通用的USB设备. 以前的文章阐述过基于windows平台和基 ...
- LINUX驱动开发(三)USB虚拟网卡
1. 简述 之前见过其他项目组的开发板,发现他们没有网口,但是可以通过IP进行ssh连接和scp文件传输到开发板,百度发现他们用的是USB虚拟网卡,于是我在我的开发板进行测试. 主机:windows ...
- Window XP驱动开发(二十四)虚拟串口设备驱动
转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家拍砖 在我的一篇文章<<winCE中实现虚拟串口的方法 >>中,讲到在win ...
最新文章
- DotNET企业架构应用实践-系统架构与性能-缓存技术与ORM中的缓存查询技术
- Mybatis源码:Executor 模板模式
- LeetCode 758. 字符串中的加粗单词(Trie树)
- LeetCode 1175. 质数排列
- 验证occ和vtk整合工作的demo
- 最近比较火的一款字节产品
- 记一次ZABBIX监控JMX故障
- hdu 3530 单调队列 **
- [BZOJ 3709] Bohater
- canvas应用之各种游戏转盘
- python下载安装教程-Python下载并安装图形教程[超级详细]
- workbench焊接实例_基于ANSYS Workbench平台和ANSYS经典界面的焊接仿真-工业电子-与非网...
- httpclient3与httpclient4访问的一些区别
- DiskPart-删除磁盘分区
- Python 基于BP神经网络的鸢尾花分类
- JS封装数组API push,pop,shift,unshift,sort, reverse
- 绘王DWH69智能数位板,你听说了吗?
- 如何在plsql中终止存储过程的执行
- Symbiosis(共生)和Commensalism(共栖)的区别
- 新一轮调控将把中国房地产市场带向哪
热门文章
- 那些年啊,那些事——一个程序员的奋斗史 ——69
- 晶圆检测显微镜是做什么研究才用到的?
- G1垃圾回收器详细解读
- 深入探讨大数据权限管理方案-从哲学到技术
- 优秀的汽车后市场门店应该具备的数字化能力
- 基于ERP的WMS系统解决方案
- Unixbench服务器综合性能测试方法及工具下载
- error: #79: expected a type specifier
- Java Version Mismatch
- git:remote: [session-f044bfa6] well: Incorrect username or password (access token)