【接口协议】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盘、声卡等

alt

硬件连接

USB 2.0协议支持3种速率:低速(Low Speed,1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)。

USB连接涉及Hub Port和USB设备,硬件连接如下:

alt

Hub端口的D+、D-都有15K的下拉电阻,平时为低电平。全速设备内部的D+有1.5K的上拉电阻,低速设备内部的D-有1.5K的上拉电阻,连接到Hub后会导致Hub的D+或D-电平变化,Hub根据变化的引脚分辨接进来的是全速设备还是低速设备。

高速设备一开始也是作为全速设备被识别的。

alt

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设备转入全速模式

alt

时序

USB协议层数据格式

alt

先发同步信号告诉设备采用的通信速率,再进行异步传输。一条线搞定传输,不过是差分线变成两条了。

  • SOP:用来表示包的起始
  • SYNC:用来同步时钟
  • PID:表示包的类型
  • 地址:在USB硬件体系中,一个Host对应多个Logical Device,那么Host发出的包,如何确定发给谁?
    • 发给所有设备:包里不含有设备地址
    • 发给某个设备:包里含有设备地址、端点号
  • 帧号、数据等跟PID相关的内容
  • CRC校验码

采用NRZI:Non Return Zero Inverted Code,反向不归零编码。NRZI的编码方位为:对于数据0,波形翻转;对于数据1,波形不变。

低速/全速的SOP和EOP

alt

完整的数据传输,需要涉及多个包:令牌包、数据包、握手包。这个完

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】三、硬件篇 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

小火柴燃烧吧:接啊,接了之后反手在咸鱼找个大学生搞一下,量大从优
点赞 评论 收藏
分享
1 4 评论
分享
牛客网
牛客企业服务