【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

相关文章
|
9天前
|
人工智能 安全 物联网
|
2月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
1月前
|
机器学习/深度学习 人工智能 算法
物联网(IoT)就像是一个大型派对,无数的设备都在欢快地交流着信息
【9月更文挑战第4天】在这个万物互联的时代,物联网(IoT)犹如一场盛大的派对,各类设备欢聚一堂。然而,如何让这些设备互相理解并协同工作呢?这就需要机器学习与人工智能的助力。例如,智能空调通过学习你的使用习惯来调节温度,使你更加舒适;智能安防系统则能识别异常行为并及时报警,保障家庭安全。此外,智能农业、交通等领域也因机器学习和人工智能的应用变得更加高效。下面通过一个简单的温度预测代码示例,展示机器学习在物联网中的实际应用,让我们一起感受其强大潜力。
45 0
|
2月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
141 0
|
2月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
86 1
|
5月前
|
传感器 存储 机器学习/深度学习
物联网(IoT)简介:定义、技术与应用
【5月更文挑战第30天】物联网(IoT)是将物品通过嵌入式系统、传感器及通信技术连接至互联网,实现物物、物人交互和数据共享的技术。其关键包括传感器、通信、嵌入式系统、云计算和人工智能技术。物联网应用于智能家居、智慧城市、工业自动化、农业和健康医疗等领域,通过Arduino等平台可实现简单数据传输。随着技术发展,物联网将深远影响人们生活和工作方式。
444 3
|
1月前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
【9月更文挑战第6天】随着物联网技术的发展,海量设备数据对实时存储和处理提出了更高要求。传统数据库在扩展性、性能及实时性方面面临挑战。阿里云推出的PolarDB具备高性能、高可靠及高扩展性特点,能有效应对这些挑战。它采用分布式存储架构,支持多副本写入优化、并行查询等技术,确保数据实时写入与查询;多副本存储架构和数据持久化存储机制保证了数据安全;支持动态调整数据库规模,适应设备和数据增长。通过API或SDK接入IoT设备,实现数据实时写入、分布式存储与高效查询,展现出在IoT数据存储领域的巨大潜力。
58 1
|
1月前
|
传感器 监控 安全
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
177 0
|
2月前
|
消息中间件 存储 传感器
RabbitMQ 在物联网 (IoT) 项目中的应用案例
【8月更文第28天】随着物联网技术的发展,越来越多的设备被连接到互联网上以收集和传输数据。这些设备可以是传感器、执行器或其他类型的硬件。为了有效地管理这些设备并处理它们产生的大量数据,需要一个可靠的消息传递系统。RabbitMQ 是一个流行的开源消息中间件,它提供了一种灵活的方式来处理和转发消息,非常适合用于物联网环境。
120 1
|
2月前
|
存储 传感器 监控
理解并利用物联网(IoT)数据的技术探索
【8月更文挑战第11天】物联网数据是数字化转型的重要资源。通过深入理解物联网数据的特性和价值,并采取有效的收集、处理和分析策略,我们可以更好地利用这些数据为企业决策提供支持、优化运营效率、创造新的商业模式并推动数字化转型的深入发展。