【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

相关文章
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
285 76
|
6月前
|
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
219 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
8月前
|
Linux设备驱动开发详解2
Linux设备驱动开发详解
94 6
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
7月前
|
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
基于阿里云物联网平台(IoT)的智能家居系统开发与部署
随着物联网技术的发展,智能家居成为提升生活品质的重要方向。阿里云物联网平台提供设备接入、数据管理及应用开发能力,支持亿级设备接入、高效数据管理和灵活应用开发,确保系统安全。本文通过实战案例展示如何基于该平台构建智能家居系统,涵盖设备接入、远程控制、场景联动与数据分析等功能,助力企业快速部署智能家居解决方案。
揭秘区块链技术在物联网(IoT)安全中的革新应用
揭秘区块链技术在物联网(IoT)安全中的革新应用
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
172 1
智能设备的安全隐患:物联网(IoT)安全指南
智能设备的安全隐患:物联网(IoT)安全指南
394 12
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
235 3
下一篇
oss创建bucket