【接口协议】10.USB
【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM
【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym
【嵌入式八股】三、硬件篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM
【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0
USB
USB2.0基础
简介
在USB系统中,有2个硬件概念:
- USB Host:它跟处理器相连,处理器通过USB Host跟各类USB设备通信。USB Host中集成有一个root hub
- USB Device:这分为两类设备
- Hub:用来扩展USB接口
- Function:就是普通的USB设备,比如U盘、声卡等
硬件连接
USB 2.0协议支持3种速率:低速(Low Speed,1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)。
USB连接涉及Hub Port和USB设备,硬件连接如下:
Hub端口的D+、D-都有15K的下拉电阻,平时为低电平。全速设备内部的D+有1.5K的上拉电阻,低速设备内部的D-有1.5K的上拉电阻,连接到Hub后会导致Hub的D+或D-电平变化,Hub根据变化的引脚分辨接进来的是全速设备还是低速设备。
高速设备一开始也是作为全速设备被识别的。
Hub端口如何监测一个新插入的USB设备能否工作于高速模式?流程如下:
-
Hub端口发出SE0信号,这就是复位信号
-
USB设备监测到SE0信号后,会发出"a high-speed detection handshake"信号表示自己能支持高速模式
USB设备维持D+的上拉电阻,发出"Chirp K "信号,表示自己能支持高速模式
-
如果Hub没监测到"Chirp K "信号,它就知道这个设备不支持高速模式
-
如果Hub监测到"Chirp K "信号后,如果Hub能支持高速模式,就发出一系列的"Chirp K"、"Chirp J"信号,这是用来通知USB设备:Hub也能支持高速模式。发出一系列的"Chirp K"、"Chirp J"信号后,Hub继续维持SE0信号直到10ms。
-
USB设备发出"Chirp K "信号后,就等待Hub回应一系列的"Chirp K"、"Chirp J"信号
- 收到一系列的"Chirp K"、"Chirp J"信号:USB设备断开端口D+的上拉电阻,使能高速模式
- 没有收到一系列的"Chirp K"、"Chirp J"信号:USB设备转入全速模式
时序
USB协议层数据格式
先发同步信号告诉设备采用的通信速率,再进行异步传输。一条线搞定传输,不过是差分线变成两条了。
- SOP:用来表示包的起始
- SYNC:用来同步时钟
- PID:表示包的类型
- 地址:在USB硬件体系中,一个Host对应多个Logical Device,那么Host发出的包,如何确定发给谁?
- 发给所有设备:包里不含有设备地址
- 发给某个设备:包里含有设备地址、端点号
- 帧号、数据等跟PID相关的内容
- CRC校验码
采用NRZI:Non Return Zero Inverted Code,反向不归零编码。NRZI的编码方位为:对于数据0,波形翻转;对于数据1,波形不变。
低速/全速的SOP和EOP
完整的数据传输,需要涉及多个包:令牌包、数据包、握手包。这个完
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)