USB基本概念

目录

1. USB系统组成

2.USB拓扑结构

3.USB系统程序

4.USB速度选择

5.USB信号描述

6.USB协议

6.1 USB基本规范

6.2 信号层

6.2.1设备速度的检测

6.2.2 信号的编码

6.3 协议层

6.3.1 usb包

6.3.2 packet

7.USB 设备枚举及描述符介绍

8.例程分析


1. USB系统组成

        主机:提供USB接口和接口管理功能的硬件、软件、固件的复合体。PC机或OTG设备,一个USB系统只能有一个主机

        设备:1.集线器HUB:扩展主机接口,设备可以通过其接入主机  2.功能设备

        物理连接:即USB电缆,USB使用差分信号传输数据,全速/高速模式电缆必须外层屏蔽铜质传输线,且差分数据线双绞。一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+、D-是差分输入线,使用的是3.3V电压,而电源线与地线可向设备提供5V电压,最大电流500mA。

2.USB拓扑结构

        每个系统只允许有一个HOST(主机)。允许的最大层数为6层(出去主机);每层的电缆最大长度为5米,电缆总长度为30米;每层最大允许接5个DEVICE(设备);

3.USB系统程序

  1. 应用程序:应用程序运行与USB设备所连接的主机上。部分应用程序会由操作系统的主机提供,大部分应用程序由USB设备供应商提供。

  2. 驱动程序:驱动程序服务于特定的操作系统,为USB设备提供支持。驱动程序通常由操作系统提供,独立于特定的应用程序和USB设备。

  3. 主机端控制程序:包括硬件和软件,使USB设备能够被主机识别。

4.USB速度选择

  全速模式是在D+线上上拉1.5K的电阻。

  低速模式是在D-线上上拉1.5K的电阻。

5.USB信号描述

  

  差分信号:1:D+ > Voh(2.8V) and D- < Vol(0.3V)

            0:D- > Voh and D+ < Vol

  J状态:   Low Speed  :Differential(差分信号) 0

            Full Speed :Differential(差分信号) 1

  K状态:   Low Speed  :Differential(差分信号) 1

            Full Speed :Differential(差分信号) 0

6.USB协议

6.1 USB基本规范

  USB在逻辑上被分为三层:信号层、协议层、数据传输层。

6.2 信号层

6.2.1设备速度的检测

6.2.2 信号的编码

        USB中的数据采用反向不归零编码方式(NRZI:none-return to zero inverted),并对D+和D-线所处的不同状态定义成J和K两种状态。

数据状态D+D-
低速J状态01
低速K状态10

 数据的编码/解码(反向不归零码)

说明:遇到0的边沿进行状态改变,如果是1保持原有状态

注:在数据进行NRZI编码前,每6个连续的1信号之后都会插入一个0信号,以免丢失同步。比如,若是1000个1信号,很有可能被解析成999个1或是1001个1,这样就丢失了同步。

        所以,在没有同步时钟的背景下,usb通过编码弥补了同步这一点,通过JK状态的翻转来表示01数据。

6.3 协议层

        包是USB系统中信息传输的基本单位,所有的数据都是经过打包后再总线上传输的。

        每个包由6部分组成:同步字段(SYNC)、包标识符(PID)、地址字段(ADDR)、数据字段(DATA,包括帧号)、检验字段(CRC)、包结束(EOP)。

  

6.3.1 usb包

包的组成:

包的内容:

1、PID(Packet Identifier):

      

这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验PID
PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包

2、地址:

3、帧号:

4、数据:

5、CRC:

6.3.2 packet

Packet分四大类: 命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) 。不同类型的packet包,以上的组成部件有所不同。

1、四种Packet类型之令牌包(Token Packet):
令牌包用来启动一次USB传输。
输出(OUT)令牌包:用来通知设备将要输出一个数据包
输入(IN)令牌包:用来通知设备返回一个数据包
建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:
SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制

例子:

2、四种Packet类型之SOF Packet
帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。

例子:

 0xA5:1010 0101:对应上面PID表可知是帧起始包

3、四种Packet类型之Data Packet

例子:

4、四种Packet类型之Handshake Packet

例子:

7.USB 设备枚举及描述符介绍

当一个USB设备插入主机后,会有以下活动: 

 在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点。  

 


8.USB数据传输过程

8.1 基本概念

  • 一个【传输(Transfer)】(控制、批量、中断、等时):由多个【事务(Transaction)】组成
  • 一个【事务(Transaction)】(IN、OUT、SETUP):由一多个【Packet】组成。

USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。
 

8.2 枚举

  • 上电状态(usb device插入host)
    插入host后,host的每个hub对应端口上都有供电,连接着的设备就进入供电状态

  • host检测到device插入
    hub检测到它的一根数据线是高电平,就认为是有设备插入,检测到设备后,hub继续给设备供电,但并不急于与设备进行USB传输。

  • Host了解连接的设备
    hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型

  • host复位设备(不是正的复位设备,是复位USB通信)
    hub通过驱动数据线到复位状态(D+和D-全为低电平 ),并持续至少10ms

  • 主机发送Get_Descriptor请求获取默认管道的最大包长度
    默认管道(Default Pipe)在设备一端来看就是端点0。主机此时发送的请求是默认地址0,端点0,设备描述符的第8字节代表设备端点0的最大包大小

  • 设置地址
    主机给设备分配一个地址,在完成这次传输之后,设备进入地址状态(Address state),之后就启用新地址继续与主机通信。

  • 获取设备配置
    主机获取设备的信息

        枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。

        一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。然后主机以控制传输(Control Transfer)的方式,通过端点0(Endpoint 0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息,进行枚举(Enumerate)操作。所有的USB设备必须支持标准请求(StandardRequests),控制传输方式(Control Transfer)和端点0(Endpoint 0)。

        在讲解枚举之前,先大概说说USB的一种传输模式——控制传输。这种传输在USB中是非常重要的,它要保证数据的正确性,在设备的枚举过程中都是使用控制传输的。控制传输分为三个阶段:①建立阶段。②数据阶段。③确认阶段。 建立(setup)阶段:都是由USB主机发起,它是一个setup数据包,里面包含一些数据请求的命令以及一些数据。如果建立阶段是输入请求,那么数据阶段就要输入数据;如果建立阶段是输出请求,那么数据阶段就要输出数据。如果在数据阶段,即便不需要传送数据,也要发一个0长度的数据包。数据阶段过后就是确认阶段。确认阶段刚好跟数据阶段相反,如果是输入请求,则它是一个输出数据包;如果是输出请求,则它是一个输入数据包。确认阶段用来确认数据的正确传输。

8.3 数据传输

        usb host与usbfunction之间采用的是一种“非对称”的传输,也就是说,无论usb接受数据还是发送数据,都是由usbhost首先发起。

        首先,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。
        其次,主机发第2个至第n个packet载有实际数据
        最后,从机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样主机就可以借此了解到这次传输情况,从而有可能来作出相应措施如决定是否重发。

控制传输
一个Usb的控制式传输分为两个或三个阶段进行传输:setup stage,data stage(视情况而定),status stage。 首先发起setup,之后发起以data0为起始的setup data,最后usb function回应ack结束一次交互
————————————————
版权声明:本文为CSDN博主「coding life」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38134493/article/details/102505259

————————————————
版权声明:本文为CSDN博主「coding life」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38134493/article/details/102505259


9.例程分析

我们插上鼠标后后出现如下的信息,我们先来分析第一个传输:

我们看到第一个是控制传输,它包含了4个事物,分别是:1个setup事务,3个in事务,1个out事务,我们先打开setup事务:

 

我们看到这个事务里包含了3个包

第一个包是令牌包,它由主控制器发送给目标设备的0号端口,用于设置目标设备的地址和端口号,我们看到后面两个包都缺省了地址与端口号。在usb系统中,所有的通信都是由主机发出相应的令牌所引起的。

第二个是数据包,由主控器发送给目标设备,其中数据的内容表示:

80:表示要求设备向主机发送信息

06:表示GET_DESCRIPTOR,即设备向主机发送设备描述符

00与01:Word-sized field that varies according to request

00与40:Word-sized field that varies according to request; typically used to pass an index or offset

00:Number of bytes to transfer if there is a:Data stage

总结一下第二个包就是向默认地址0 发送GET_DESCRIPTOR 指令包,请求设备发送设备描述符

第三个是应答包:设备接收到主机发送的数据后会给出应答

接着我们看第一个in事务

我们看到这个事务里也有三个包

第一个是in包:由主机发送给设备,表示要设备向主机发送上面请求的设备描述符

第二个是数据包:由设备发送给主机,当然是发送设备描述符,我们来分析一下:

12:表示接下来要求主机向设备发送信息

01:CLEAR_FEATURE、

第三个是应答包,由主机发送给设备

接着我们来看第二个in事务

这个事务里依旧是3个包

第一个是in包:由主机发送给设备,表示需要输入

第二个是数据包:由设备发送给主机,我们来解析一下:

6D:表示要求主机发给设备数据

04:Reserved for future use

第三个是主机给设备的应答包

最后来看out事务

 

第一个是out包:由主机发给设备

第二个是数据包:由主机发给设备,无数据

第三个包是设备给主机的应答包

————————————————
版权声明:本文为CSDN博主「浩雪峰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leho666/article/details/88532614

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值