【IoT】嵌入式Linux开发:USB设备驱动开发

简介: USB驱动开发

简介
USB(Universal Serial BUS)是“通用串行总线”英文的缩写。
USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
USB是一个使计算机周边设备连接标准化、单一化的接口 。广泛应用于日益增多的外围设备,如键盘、鼠标、调制解调器、打印机、网卡、显示器以及各种PDA等手持设备。

USB的出现
1994.11.11—USB v0.7:该版本推出响应不大
1996年—USB(LowSpeed) v1.0:1.5Mbps
1998年—USB(FullSpeed) v1.1:12Mbps
2004.04—USB(HighSpeed) v2.0:480Mbps I<500mA
2008年上半年—USB(SuperSpeed) v3.0:5Gbps I<900mA
没有USB,就不会有移动数据业务如此的迅猛发展。

USB拓扑结构
USB是一种主从结构的系统。
USB主机由USB主控制器(Host Controller)和根集线器(Root Hub)构成
USB主控制器:主要负责数据处理。
根集线器:提供一个连接主控制器与设备之间的接口和通路。
USB从机可以是各种USB设备也可以是集线器
USB集线器(USB Hub):
对原有的USB接口数量进行扩展,以获得更多的USB设备接口,但不能扩展出更多的带宽。

USB的金字塔拓扑结构图:

1680231067629.jpg

图1

集线器(USB Hub)本身就是一个USB设备。
USB协议对集线器的层数限制:
USB1.1规定最多为4层(不包括Host)
USB2.0规定最多为6层(不包括Host)
USB设备由7bit二进制表示,所以一个USB主控制器理论上可以接127个设备,但通常0地址被保留给未初始化的设备使用。

USB数据交换过程:
数据交换不能发生在主机与主机之间或设备与设备之间,只能发生在主机与设备之间。

USB On-The-Go
USB On-The-Go 是USB协议的补充版本,是USB主机嵌入式化的一种实现,可翻译为“便
携式USB”或“移动USB”简记成USB OTG USB是主从模式,设备与设备之间、主机与主机之间不能互连,为了解决这个问题,扩大USB的使用范围,就出现了USB OTG,这样,同一个USB设备在不同的场合下可以在主机和设备(从机)之间进行任意切换。

USB电气特性
USB的连线

标准USB连线使用4芯电缆:5V电源线(VBUS)、差分数据线负(D-)、差分数据线正(D+)及地线(GND)。
1680231195281.jpg

图2

USB的数据传输

USB2.0支持3种传输速度:低速(1.5Mbps)、全速(12Mbps)、高速(480Mbps)三种模式。
USB低速和全速模式中,采用的是电压传输模式;而在高速模式下,则是电流传输模式。
USB实际传输速率比理论值要低,因为有很多协议开销,例如同步、令牌、校验、位填充
和包间隙等。
USB使用的是NRZI(非归零反相编码)编码方式。具体的数据传输任务由USB控制器实现,用户不必关心

USB的插拔检测机制

在USB集线器的每个下游端口D+和D-上,都分别接有一个15K左右的下拉电阻。
对于USB设备来说,正好接有一个1.5K左右的上接电阻:
低速设备,接在端口的D-上。
全速和高速设备,接在端口的D+上
当设备与集线器端口连接时,集线器端口的下拉低电平会由于上拉分压,而变成高电平,从而识别出USB的插拔动作。

设备描述符
描述符概念

前面所描述的USB总线结构,只是一个数据通路,我们还需要一些描述设备特性的东西来
代表和区分不同的USB设备,这就是描述符。
描述符:描述了设备的各种行为和具体参数类型等,让主机明确应该加载什么样的驱动程序与设备之间进行怎样的操作。

USB2.0协议定义的描述符

设备描述符(Device Descriptor)
配置描述符(Configuration Descriptor)

接口描述符(Interface Descriptor)
端点描述符(Endpoint Descriptor)
字符串描述符(String Descriptor)
Qualifier Descriptor
Other Speed Configuration Descriptor interface_power
类特殊描述符:
HID描述符
音频接口描述符
厂商自定义描述符

USB描述符介绍

设备描述符:
设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VID)和产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数量等。

配置描述符:
反映设备对主机的配置需求,包含配置的编号、供电方式、接口数、是否支持远程唤醒、电流需求量等。

接口描述符:
接口的编号、接口的端点数、接口所使用的类、子类、协议等。

端点描述符:
端点号及方向、端点的传输类型(控制、同步、批量、中断传输)、最大包长度、查寻时间间隔等。

字符串描述符:
不是必需的,采用unicode编码,主要是提供一些方便人们阅读的厂商或设备名称等文字信息。

USB描述符的分析及模型

配置和接口是为了更方便地管理端点而抽象出来的概念:
不同的配置可以使设备发挥不同的功能。
不同的接口可以实现功能的复用。
非0端点只有在配置之后才能使用。
端点0作为默认控制管道的端点,在设备连接、上电和收到总线复位信号时就可以访问0端点。

枚举就是通过控制传输从设备读取各种描述符信息的过程。之后主机会据此加载合适的驱动程序。

USB设备的枚举过程

USB主机检测到USB设备的插入(主机通过查询集线器端口确定变化的类型 )
主机等待100ms让设备的电源变得稳定,然后对设备进行复位使设备拥用0地址和0端点,使设备处于默认状态

获取设备描述符,记录端点0的最大包大小再次对设备进行复位,通过默认通道发出输出令牌配置设备地址
主机发出输入令牌,设备成功确认回复则启用新的地址
再次通过新地址,发送多次输入令牌,获取完整的设备描述符
获取配置描述符,以及其它描述符集合单独获取字符串、报告等描述符
最后主机给设备分配一个配置,设备处于配置状态。

名片.png

相关文章
|
5月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
158 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
6月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。
|
9月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
447 32
|
11月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3001 77
|
7月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
391 0
|
9月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
340 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
10月前
|
运维 安全 Linux
试试Linux设备命令行运维工具——Wowkey
WowKey 是一款专为 Linux 设备设计的命令行运维工具,提供自动化、批量化、标准化、简单化的运维解决方案。它简单易用、高效集成且无依赖,仅需 WIS 指令剧本文件、APT 账号密码文件和 wowkey 命令即可操作。通过分离鉴权内容与执行内容,WowKey 让运维人员专注于决策,摆脱繁琐的交互与执行细节工作,大幅提升运维效率与质量。无论是健康检查、数据采集还是配置更新,WowKey 都能助您轻松应对大规模设备运维挑战。立即从官方资源了解更多信息:https://atsight.top/training。
|
10月前
|
数据采集 运维 安全
Linux设备命令行运维工具WowKey问答
WowKey 是一款用于 Linux 设备运维的工具,可通过命令行手动或自动执行指令剧本,实现批量、标准化操作,如健康检查、数据采集、配置更新等。它简单易用,只需编写 WIS 指令剧本和 APT 帐号密码表文件,学习成本极低。支持不同流派的 Linux 系统,如 RHEL、Debian、SUSE 等,只要使用通用 Shell 命令即可通吃Linux设备。
|
11月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
508 1