一、USB基础概念:
1、USB(Universal Serial Bus,通用串行总线),用于规范电脑和外部设备的连接和通讯。最后可连接127个设备
2、热插拔技术:
1)在usb集线器上的每个下游端口的D+和D-上,分别接一个15K的下拉电阻到地,即端口悬空时,被下拉电阻拉成低电平
2)usb设备端,在D+或D-上接1.5k的上拉电阻,对于全速和高速设备,上拉电阻接在D+上,对于低速设备,上拉电阻接在D-上拉电阻接在D
3、usb设备不能主动的发起任何一次传输,所有的传输都是usb主机发起的
4、USB枚举:
枚举是让HOST认得这个usb设备,并且为该设备准备资源,建立好主机和设备之间的数据传送机制。
基于Pnp机制,设备被枚举时,必须向主机报告各个断电的特性,包括端点号、通信方向、端点支持的最大包大小(数据有效负载),带宽要求等。
每个设备必须要求端点0,用于控制设备枚举和对设备进行一些基本的控制功能。
标准的枚举步骤:
1)获取设备描述符
2)复位设备
3)设置地址
4)再次获取设备描述符
5)获取配置描述符6
6)获取接口,端点描述符
7)获取字符串描述符
8)发送设备配置
5、usb数据传输 -- 小端传输
usb的数据传输首先是基于传输(transfer)的:中断传输、批量传输、同步传输、控制传输、
一次传输由一个或多个事务(transaction)构成,分为:IN事务、OUT事务、SETUP事务
一个事务由一个或多个包(packet)构成,分为:令牌包(setup)、数据包(data)、握手包(ack)和特殊包。
一个包由多个域构成,分为:同步域(sync)、标识域(PID)、地址域(ADDR)、端点域(ENDP)、帧号域(FRAM)、数据域(DATA)、校验域(CRC)
二、USB控制器驱动
驱动框架:
usb设备驱动 <-> USB Core <-> usb主控制器驱动(driver/usb/host)<-> 硬件usb主控制器
主控制器功能:
1、解析和维护URB
2、负责不同usb传输类型的调度工作
3、负责usb数据的实际传输工作
4、实现虚拟根HUB的功能
三、USB设备驱动
1、描述符类型
1)设备描述符
struct usb_device_descriptor
2)配置描述符 - 不同的配置使设备表现出不同的功能组合
struct usb_config_descriptor
3)接口描述符 - 代表一个基本的功能,是usb设备驱动程序控制的对象,每个接口需要一个驱动程序
struct usb_interface_descriptor
4)端口描述符 - usb通信的最基本单位,是一个数据缓冲区,用来存放和发送usb的各种数据
struct usb_endpoint_descritptor
2、端点endpoint
1)端点智能往一个方向传送数据,或者IN,或者OUT(端口0除外)
2)端点存在于USB设备端
3)主机和端点之间的数据传输是通过管道
3、usb传送方式
1)控制传输 - 获取、配置设备
2)中断传输 - 例如:usb鼠标(是主机控制器在保证不大于某个时间间隔内安排一次传输)
3)批量传输 - 用于大批量数据传输,没有固定的传输速率,例如:usb打印机,扫描机,U盘,大容量的存储设备
4)等时传输/同步传输 - 可以传输大批量数据,但是对数据是否达到没有要求,对实时性要求高,例如:音频设备,视频设备
4、USB请求块(usb request block,urb)
1)usb主控制器和usb外设通信协议
2)主控制发送urb的方式:
同步方式 - 等待urb提交成功
异步方式 - 只管发出去,不管成功与否
urb是usb设备驱动中用来描述与usb设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff结构体,是usb主机与设备通信的电波
urb和端点不是一一对应的关系,一个urb可以被发向多个不同 的端点
5、管道
每个端点通过管道和usb主控制器连接,包括以下几个部分
1)端点地址
2)数据传输方向
3)数据传输模式
usb内核架构 usb技术
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Linux内核的USB 框架
在Linux内核的USB框架中,还有一个重要的部分是USB协议栈,这是指协议分层模型中的USB层次。USB协议栈是一组函数库
linux 网络 运维 设备驱动程序 用户空间 -
uboot实现USB下载内核
uboot实现USB下载内核,通过usb下载linux内核,不用网卡。省去一个网卡的硬件投资。
职场 内核 休闲 uboot USB下载