USB笔记
本文地址:http://tongxinmao.com/Article/Detail/id/218
低速模式,D-上拉1.5k电阻,全速和高速上拉1.5k , 高速是电流传输械,要将D+上拉电阻断开,刚开始是识别成全速模式再协商成高速模式。
设备描述符--配置描述符--完整配置描述符(接口描述符--类描述符--端点描述符)--字符串描述符
配置和接口描述符是为了管理端点而提花的抽象概念,多个配置同一时刻只能有一个有效,
一个接口可以有几种描述符,由bAlternateSetting决定使用哪个,可以拥有相同的端点,
多个接口叫做USB复杂设备,(另一种是由HUB组成的复合设备)
控制传输3个过程:SETUP建立过程--可选的数据过程(数据长度为0)--STATE状态过程(确认传输是否成功)
枚举过程:
检测插入--复位设备(地址为0)
获取设备描述符(18字节,最少8字节)得知端点0最大包长度
再次复位--设置地址请求--回应0长度状态包收到ACK后启用新地址
再次获取设备描述符(用新地址)获取18字节完整描述符(如果端点长度只有8则有多次IN输入)
获取配置描述符(9字节)--得到配置集合总长度后再次获取完整长度。有些直接用最大长度获取完整配置描述符(设备返回的实际长度可以少于最大长度)
获取字符串描述符,HID报告描述符等
详细过程:
1、connection detect(注意,这里的connection指的是检测到attach/termination等开始的connection,从软件层面看来是link status chg)
在这一步,因为host/device端都可以检测到对端的termination阻抗,因此确定设备插上,VBUS开始供电。通过对端termination阻抗的检测,可以确定进入SS枚举还是HS/FS或者LS枚举。2、port stabilization debounce
在这一步,需要约200ms的debounce时间,保持插入连接的稳定性(由于很多时候在U口插入的过程中就能检测到connection了,因此需要一个debounce时间保证用户完成插入动作)3、port reset
在这一步,host先发起在总线上拉起SE0,宣布开始速度枚举。device根据自己支持的传输速度,在dp/dm上拉起JK序列表达速度能力。
HS:device保持dp上拉,同时发起chirpK,host检测到chirpK后在总线上交替发出chirpK-chirpJ,device检测到后去掉dp的上拉,速度枚举完成,速度HS
FS:device保持dp上拉,结束4、first device descriptor request
这一步仅仅用于host查询device的control endpoint支持的maximum packet size,device必须至少回复device descriptor中的前8个byte5、(only in windows)second port reset
该步骤是为了兼容早起的usb device,不支持连续两次get descriptor的命令请求,故插入一次port reset6、set usb address host为device分配device address
7、device descriptor request这一步需要获取完整的device descriptor
8、configuration descriptor request这一步需要获取device的configuration descriptor
9、(only in windows)MS OS descriptor query
MS定义了一些额外的vendor specific的descriptor,在该步骤内获取
如果device descriptor的 bcdUSB 为 0x0100 或 0x0110,则host会跳过该步骤10、serial number string descriptor如果device descriptor的serial number string index非零,则发起该步骤
11、(only in windows) MS OS extended configuration descriptor request
MS针对特定设备增加的configuration descriptor12、OS container ID descriptor query 从windows7起,windows引入了container ID的概念,可以将设备的某些功能组合在一起
13、language ID query查询device支持的language ID
14、product ID string query查询device的product ID
15、device qualifier descriptor query如果设备的bcdUSB大于等于0x200,host会发起该查询确认设备是否支持HS
16、duplicate device detection 为了确认该device是否被重复枚举过了。当usb host驱动从EHCI切换至USB1.1时,会发生该种重复枚举的情形
USB包结构:
LSB在前 位填充 NRZI编码
同步域(同步时钟)--包标识符PID--包结束符EOP
EOP:2个数据位宽度的单端0(SE0)信号 (D+ D-都为低),SE0用来表示包结束,复位设备信号(10ms)等
PID:高4位是低4位取反:
令牌包PID[1..0]=01
OUT IN SOF(帧起始包,广播) SETUP
数据包PID[1..0]=11
USB1.0只有DATA0和DATA1包 2.0增加了DATA2和MDATA包
握手包PID[1..0]=10
ACK NAK STALL(挂起) NYET(只在高速设备输出事务中)
特殊包PID[1..0]=00
PRE前导 ERR* SPLIT分裂事务* PING*测试
全速设备每毫秒产生一个帧,高速设备125us产生一个微帧
BUS HOUND只能看到成功传输的数据
USB事务由令牌包数据包和握手包组成,控制传输建立和状态分别和一个事务,数据过程则可能包含多个事务,其他传输方式每次传输一个事务
中断传输:主体保证在预设时间内传输一次,HID通常有使用。包最大长度全速64BYTE,高速1024,低速8
等时传输:数据量大,实时性高,不保证准确性,无应答包. 包最大长度全速1023BYTE,高速1024,低速不支持
批量传输:数据量大,实时性低, 包长度高速固定为512,全速8/16/32/64,低速不支持
控制传输:复杂。 低速端点最大8字节,高速64字节,全速8/16/32/64
USB芯片也分为Controller部分和PHY部分。Controller部分主要实现USB的协议和控制。内部逻辑主要有MAC层、CSR层和FIFO控制层,还有其他低功耗管理之类层次。MAC实现按USB协议进行数据包打包和解包,并把数据按照UTMI总线格式发送给PHY(USB3.0为PIPE)。CSR层进行寄存器控制,软件对USB芯片的控制就是通过CSR寄存器,这部分和CPU进行交互访问,主要作为Slave通过AXI或者AHB进行交互。FIFO控制层主要是和DDR进行数据交互,控制USB从DDR搬运数据的通道,主要作为Master通过AXI/AHB进行交互。PHY部分功能主要实现并转串的功能,把UTMI或者PIPE口的并行数据转换成串行数据,再通过差分数据线输出到芯片外部。
上一篇:CorelDraw技巧
下一篇:USB UVC 摄像头 (带MIC)