USB-HID学习笔记

USB的概念性知识

USB的特点

USB2.0 有高速、全速和低速三种工作速度,高速是480Mbit/s,全速是12Mbit/s, 低速是1.5Mbit/s。

USB传输距离短,开发、调式难度大

http://www.usb.org/

http://group.ednchina.com/93/

USB是一种主从结构系统,主机叫HOST,从机叫Device(设备)。USB的数据交换只能发生在主机与设备之间,所有的数据传输都是由主机主动发起的,设备只是被动的负责应答,在USB OTG中,一个设备可以在从机与主机之间切换,这样就实现了设备与设备之间的连接。USB OTG增加了一种MINI USB接头,比普通的USB4线多出一条ID标识线,来表明是主机还是设备。

PC上有多个USB主控制器和多个USB口,每个控制器下有一个跟集线器,USB集线器将一个USB口扩展为多个USB口,USB1.1最多为4层,USB2.0最多为6层。理论上,一个USB主控器最多可接入127个设备:协议规定USB设备具有一个7bit的地址(0~127).

USB传输过程:USB主控器发出命令和数据,通过跟集线器→USB设备,USB设备返回信息→上一层集线器(经历每层集线器)→USB主控制器→CPU。

USB的电气特性

标准USB连接线使用4芯电缆:5V电源线Vbus;差分数据线D-;差分数据线D+;地GND。USB OTG增加了一种MINI USB接头,比普通的USB4线多出一条ID标识线。在USB的低速和全速模式下,采用的是电压传输模式,在高速模式下,采用电流传输模式。

传输速度是指总线上每秒传输的位数,实际速率要低,因为USB有甚多的协议开销。

当数据为0时,电平翻转;数据为1时,电平不翻转。

VBUS电源线,SBU2:2.0设备可悬空,CC1:主机配置上拉电阻,从机下拉。DN、DP:差分数据线。

有设备:D+或者D-接一个1.5k的上拉电阻,(D+高速;D-低俗)

没有设备:D+、D-接入15k的下拉电阻。

USB的描述符

USB1.1定义的标准描述符:设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)、字符串描述符(String Descriptor)。

USB2.0协议新增两个描述符(高速(High-Speed,480Mbps)):设备限定描述符(Device Qualifier Descriptor)、其他速度配置描述符(Other Speed Configuration Descriptor)。

特殊的描述符:类特殊描述符(HID描述符和音频接口描述符)、厂商自定义描述符。

一个USB设备只有一个设备描述符,

  • 设备描述符:设备使用的USB协议版本号、设备类型、厂商ID、产品PID、版本号等
  • 配置描述符:接口数、接口所使用的类、子类、协议等
  • 端点描述符:端点号及方向、端点的传输类型、最大包长度、查询间隔等
  • 字符串描述符:提供人们阅读的信息,不必需
  • 设备限定描述符 :用于描述设备在不同速度下的通用特性(如高速 / 全速),仅在设备支持多速度时存在,主机枚举时先读取此描述符,再获取对应速度的配置描述符。
  • 其他速度配置描述符 :与当前配置描述符一一对应,存储设备在非当前速度下的配置信息(比如设备当前工作在高速模式,此描述符则存储全速模式的配置参数)。

设备{配置{ ;配置{ };配置{接口{ };接口{ };接口{端点{ };端点{ };端点{ }}}}。

设备→配置→接口→端点。

如果一个设备的各种描述符成功返回,代表着成功一大半。(描述符不能出现错误,否则无法正常工作)

USB设备的枚举过程

枚举就是从设备读取各种描述符信息。

USB传输模式:控制传输:建立过程(都由主机发送)、可选的数据过程及状态过程。

建立过程:起始于SETUP令牌包→DATA0数据包→数据过程(读传输:输入数据,写传输:输出数据;数据长度为0:没有数据过程)→状态过程(读传输:输出数据包;写传输:输入数据包);状态过程用来确认数据是否正确传输完成。

  • 复位与获取设备描述符(0 地址阶段)
  • 设置地址:主机分配一个唯一的 7 位设备地址给该设备。设备收到新地址,必须等待主机发送ACK令牌包,才能启用新地址
  • 再次获取设备描述符:主机切换新地址发送建立过程
  • 获取配置描述符
  • HID设备:报告描述符

**USB是串行总线,**数据是一位一位进行传输的,LSB在前,最先出来的是最低位,数据传输方向:从设备到主机称为输入,主机到从设备成为输出。

USB总线传输数据以包为单位,不同类型的包包含不同类型的域,包都以同步域开始,由一个包标识符PID,和包结束符EOP来结束这个包,同步域:开始传输数据,用来同步数据时钟,

  • 同步域→标识符PID→结束符EOP

PID标识一个包的类型一共8位,其中USB协议使用的只有4位(0~3)另外4位是(0~3)的取反用来校验PID。

PID 类型 PID 名称 PID[3:0] 说明
令牌类 (Token) OUT 0001B 通知设备将要执行输出传输(主机 → 设备)
IN 1001B 通知设备将要执行输入传输(设备 → 主机)
SOF 0101B 帧起始包,用于同步 USB 总线时序(全速每 1ms、高速每 125μs 发送一次)
SETUP 1101B 通知设备启动控制传输(用于设备枚举、配置等核心流程)
数据类 (Data) DATA0 0011B 基础数据包(与 DATA1 交替,保证传输可靠性)
DATA1 1011B 基础数据包(与 DATA0 交替,用于传输同步)
DATA2* 0111B 高速 / 等时传输专用数据包
MDATA* 1111B 多字节 / 等时传输专用数据包
握手类 (Handshake) ACK 0010B 确认(数据接收成功)
NAK 1010B 不确认(设备暂时无法发送 / 接收数据)
STALL 1110B 挂起(设备端点错误 / 不支持当前请求)
特殊类 (Special) NYET* 0110B 未准备好(高速设备批量传输专用,用于流量控制)
PRE 1100B 前导令牌包(用于低速 / 全速设备在高速总线上的兼容通信)
ERR* 1100B 错误握手包(高速 / 分裂事务专用,用于错误通知)
SPLIT* 1000B 分裂事务令牌包(用于高速主机与低速 / 全速设备通信)
PING* 0100B PING 测试令牌包(用于批量传输流量控制,避免 NAK 风暴)
--- 0000B 保留,未使用

EOP大约为2个数据低位SE0,SE0:D+、D-都保持低电平状态

相关推荐
可可西里_X_back2 小时前
linux学习(一)- 环境安装
学习
LXXgalaxy2 小时前
Vue3 列表数据流:从赋值入门到进阶(独立学习版)
javascript·vue.js·学习
码农的小菜园2 小时前
提示工程学习笔记(一)
笔记·学习
四谎真好看2 小时前
Redis学习笔记(高级篇3)
redis·笔记·学习·学习笔记
十三画者2 小时前
【文献分享】TREE通过基于 Transformer 的图表示技术,在生物网络中对癌症基因进行可解释的识别学习
网络·学习·transformer
君义_noip2 小时前
信息学奥赛一本通 4164:【GESP2512七级】学习小组 | 洛谷 P14922 [GESP202512 七级] 学习小组
学习·算法·动态规划·gesp·信息学奥赛
wubba lubba dub dub7502 小时前
第四十二周 学习周报
学习
星幻元宇VR2 小时前
VR科普学习一体机|让知识触手可及的沉浸式科普新方式
科技·学习·安全·生活·vr