C6748_USB协议

Posted guojun-junguo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C6748_USB协议相关的知识,希望对你有一定的参考价值。

内容参考:https://wenku.baidu.com/view/d9a5b9c06137ee06eff918b5.html

1.1 USB基本概念

    USB(Universal Serial Bus)全称通用串口总线,USB为解决即插即用需求而诞生,支持热插拔。USB协议版本有USB1.0、USB1.1、USB2.0、USB3.1等,USB2.0目前比较常用,以下以2.0为主介绍。由于USB是主从模式的结构,设备与设备之间、主机与主机之间不能互连,为解决这个问题,扩大USB的应用范围,出现了USB OTG,全拼 ON The Go。USB OTG 同一个设备,在不同的场合下可行在主机和从机之间切换。

    USB体系包括"主机"、"设备"、"物理连接"三个部分,其中主机是一个提供USB接口及接口管理能力的硬件、软件及古剑的复合体,可以是PC,也可以是OTG设备。一个USB系统中仅有一个USB主机;设备包括USB功能设备和USB集线器,最多支持127个设备;物理连接指的是USB的传输线使用屏蔽的双绞线;

1.2 USB特点

    USB1.0和USB1.1支持1.5Mb/s的低速模式和12Mb/bs的全速模式。在USB2.0以上支持480Mb/s的高速模式。应用如下:

技术分享图片

1.3 USB设备供电方式:
USB设备有两种供电方式 
自供电设备:设备从外部电源获取工作电压 
总线供电设备:设备从VBUS(5v) 取电 
  对总线供电设备,区分低功耗和高功耗USB设备 
低功耗总线供电设备:最大功耗不超过100mA 
高功耗总线供电设备: 枚举时最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA 
设备在枚举过程中,通过设备的配置描述符向主机报告它的供电配置(自供电/总线供电)以及它的功耗要求

1.4 USB总线信号:

USB使用的是差分传输模式,两个数据线D+和D-

差分信号1:D+ > VOH(min) (2.8V) 且D- < VOL(max)(0.3V)

差分信号0:D- > VOH and D+ < VOL

技术分享图片

1.4.1 J态、K态、SEO态

    USB协议中是是用JKSEO状态来表示总线状态的(J状态:(LS-低速:差分0FS-全速:差分1 K状态:(LS:差分1FS:差分0),具体的状态如下: 

(1)低速设备:

  • J态: D+ ="0",D- ="1"
  • K态: D+ ="1",D- ="0"
  • SE0态:D+ ="0",D- ="0"

从J到K或者从K到J,信号翻转,说明发送的是信号0;

从J到J或者从K到K,信号保持不变,说明发送的是信号1。这就是差分信号0/1的发送。

(2)高速设备的J和K相反:

  • 低速下: D+为"0",D-为"1"是为"J"状态,"K"状态相反;
  • 全速/高速下:D+为"1",D-为"0"是为"J"状态,"K"状态相反;

1.4.2 空闲状态

  • 低速下空闲状态为"K"状态;
  • 全速下空闲状态为"J"状态;
  • 高速下空闲状态为"SE0"状态;

1.4.3 reset和suspend(挂起)状态

  • 对于全速操作,SE0表示为复位和EOP,持续时间大于2.5us表示总线复位;
  • 对于高速操作,SE0维持3ms~3.125ms,设备进入全速状态,全速后100us~875us内采样,如果继续维持SE0,则设备总线复位,开始高速握手;若变为"J"状态,则进入挂起状态"suspend。

1.4.4 高速握手条件

  • 设备处于挂起状态,若出现SE0则立即开始高速握手;
  • 设备处于全速,SE0持续2.5us,则开始高速握手;
  • 设别处于高速,SE0持续3.0ms,切继续持续,则开始高速握手。

1.4.5 信号状态电平

  • Reset信号:D+ 和D- 都是低电平并且保持10ms以上。
  • Idle状态:J状态数据发、送前后总线的状态
  • Suspend状态:3ms以上的J状态
  • SYNC: 3个KJ状态切换,后跟随2位时间的K状态(看到的波形变化是总线上发送0000 0001经过NRZI编码后的波形)
  • Resume信号:20ms的K状态+低速EOP

    主机在挂起设备后可通过翻转数据线上的极性并保持20ms来唤醒设备,并以低速EOP信号结尾,带远程唤醒功能的设备还可自己发起该唤醒信号;前提是设备已进入idle状态至少5ms,然后发出唤醒K信号,维持1ms到15ms并由主机在1ms内接管来继续驱动唤醒信号

  • SOP:从IDLE状态切换到K状态
  • EOP:持续2位时间的SE0信号,后跟随1位时间的J状态

Keep alive即低速EOP信号

技术分享图片

技术分享图片

1.5差分信号技术的特点

    传统的传输方式大多采用"正信号"或者"负信号",二进制表达机制,这些信号利用单线传输。用不同的信号电平范围来分别表示1或者0,他们之间有一个临界值,如果在数据传输过程中受到强干扰,高低电平突破临界值,那么会造成数据传输出错。差分信号技术最大的特是:必须使用两条线路才能表达一个比特位,用两条线路传输信号的压差作为判断1还是0的依据。这种做法的优点是具有极强的抗干扰性。对于外界的强烈干扰,两条线路对应的电平会出现同样的变化,这样保证了电压差值时钟相对稳定,因此数据的准确性不会因为干扰噪声而有所降低。

技术分享图片

1.6 USB插入检测和速度检测:

技术分享图片

    主机通过在设备D+或D-上的1.5K上拉电阻来检测设备的连接和断开事件,并由此判别低速和全速设备。当没有USB来连接时,由于主控器的D+和D-上的下拉电阻使得这条数据线上的电压是近地的,当连接设备时,通过检测设备上的D+和D-的电压,在D+/D-上出现大小为(Vcc*15/(15+1.5))直流高电平电压,而其他线保持接地时,就可以知道全速/低速设备了。

USB连接和断开连接:

设备连上主机时(连接)

当主机检测到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了

主机必需在驱动SE0状态以复位设备之前,立刻采样总线状态来判断设备的速度

技术分享图片

没有设备连上主机时(断开)

D+和D-数据线上的下拉电阻起作用,使得二者都在低电平;主机端看来就是个SE0状态;同样地,当数据线上的SE0状态持续一段时间了,就被主机认为是断开状态

技术分享图片

1.7 数据编解码和位填充

USB采用NRZI(非归零编码)对发送的数据包进行编码

输入数据0, 编码成"电平翻转"

输入数据1, 编码成"电平不变"

编码出来的序列,高电平:J状态;低电平:K状态

技术分享图片

位填充是为了保证发送的数据序列中有足够多的电平变化

填充的对象是(输入数据),即先填充再编码

数据流中每6个连续的"1",就要插入1个"0",从而保证编码

数据出现电平变化

接收方赋值解码NRZI码流,然后识别出填充位,并丢弃它们

1.8 主机与设备之间的通信模型

技术分享图片

    上图展示了USB主机和USB设备之间的数据传输过程。在设备端,USB设备将非USB格式的数据进行打包处理,转换成USB格式的数据包,然后传递到链路层,经过硬件处理、传递到物理层,由物理层通过PHY以数据流的形式传输到主机。

    USB主机在USB设备和USB主机之间发起的传输过程,稳为事务。每次事务以2到3个数据包的形式进行USB总线传输。每个数据包包含2到3个步骤:

1) USB主机控制器向USB设备发出命令

2) USB控制器和USB设备之间传递读写请求,其方向取决于第一部分的命令是读还是写

3) 握手信号。

    USB主机控制器向USB设备发送事务类型请求,通过分组标识符(PID)来进行识别。

2. USB传输

    USB进行一次数据传输遵循的"协议"简单来说就是:

(1)主机给从机发送数据:

①首先,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。

②其次,主机发第2个至第n个packet载有实际数据

③最后,从机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样主机就可以借此了解到这次传输情况,从而有可能来作出相应措施如决定是否重发。

(2)从机给主机发送数据:

①首先,从机发第1个packet给主机,声明数据传送方向,数据传输地址,数据传输类型。

②其次,从机收到主机送来的第一个packet后,再发第2个至第n个packet载有实际数据.

③最后,主机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样从机就可以借此了解到这次传输情况,从而有可能来作出相应措施如决定是否重发。

    一个传输有多个事务组成,一个事务由2/3个包组成。

    传输又分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。

注意:USB传输数据先发数据低位再发高位数据

技术分享图片

2.1 包

    包(Packet)是USB系统信息传输的基本单元,所有数据都是经过打包后在总线上传输的。数据在 USB总线上的传输以包为单位,包只能在帧内传输。高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms。

    帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。

(注意:虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mS)

    USB的包(Packet)包括五个部分组成,即同步字段(SYNC)、包标识符段(PID)、数据字段、循环冗余校验字段(SRC)和包结尾字段(EOP),包的基本格式为:

技术分享图片

技术分享图片

包的组成:

技术分享图片

包的内容:

技术分享图片

    包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成

Packet分四大类: 命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) Packet

不同类型包,以上的组成部件有所不同

1)SYNC字段:由8位组成,作为每个数据包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为00000001.

2)PID字段:用来表示数据封包的类型。包标识符的校验字段是通过对类型字段的每个位反码产生的,PID字符如下图所示:

技术分享图片

这里只用(PID0~4),PID4~7是PID0~4的取反,用来校验PID

PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包

技术分享图片

技术分享图片

3)数据字段:用来携带主机和设备之间传递的信息,其内容和长度根据包标识符、传输类型的不同而各不同。在USB包中,数据字段可以包括设备地址、端点号、帧序列号以及数据等内容。在总线传输中总是先传输字节的最低位,最后传输字节的最高位。

(1)设备地址(ADDR)数据域:ADDR数据域由7位组成,可用来寻址多达127个外围设备。

(2)端点(ENDP)数据域.:ENDP数据域由4位组成。通过4个位最多可寻址出32个端点。这个ENDP数据域仅用在IN、OUT与SETUP令牌信息包中。对于慢速设备可支持端点0以及端点1作为终端传输模式,而全速设备则可以拥有16个输入端点(IN)与16个输出端点(OUT)共32个端点。

(3)帧序列号:当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号。序列号由主机产生,且每个数据帧自动加一,最大数值为0X7FF。当帧序列号达到最大数时将自动从0开始循环。

(4)数据:它仅存在于DATA信息包中,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(实时传输)。

技术分享图片

技术分享图片

技术分享图片

4)CRC字段:由不同数目的位组成。根据不同的信息包的类型,CRC数据域由不同数目的位所组成。其中重要的数据信息包采用CRC16的数据域(16个位),而其余的信息包类型采用CRC5的数据域(5个位)。其中的循环冗余码校验CRC,是一种错误检测技术。由于数据在传输时,有时候会发生错误,因此CRC可根据数据算出一个校验值,然后依此判断数据的正确性。

技术分享图片

5)包结尾字段即发送方在包的结尾发出包结尾信号。USB主机根据EOP判断数据包的结束。

 

四种Packet类型之令牌包(Token Packet):

    在USB系统中,只有主机才能发出令牌包。令牌包定义了数据传输的类型,它是是事务处理的第一个阶段,用来启动一次USB传输。令牌包中较为重要的是SRTUP、IN和OUT这三个令牌包。他们用来在根集线器和设备端点之间建立数据传输。

输出(OUT)令牌包:用来通知设备将要输出一个数据包

输入(IN)令牌包:用来通知设备返回一个数据包

建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:

SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制。其格式如下:

技术分享图片

技术分享图片

例子:

技术分享图片

    

四种Packet类型之SOF Packet

    SOF包由Host发送给Device,在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。

    1) 对于full-speed总线,每隔1.00 ms ±0.0005 ms发送一次;

    2) 对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;

技术分享图片

技术分享图片

例子:

技术分享图片

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

 

四种Packet类型之Data Packet、

    数据包含有4个域:SYNC、PID、DATA和CRC16。有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA,且由PID来区分。DATA0和DATA1被定义为支持数据切换同步(data toggle synchronization)。

    DATA数据域的位值是根据USB设备的传输速度及传输类型而定的,且须以8字节为基本单位。也就是传输的数据不足8字节的。或是传输到最后所剩余的也不足8字节的,仍需传输8字节的数据域。格式如下:

技术分享图片

技术分享图片

例子:

技术分享图片

 

四种Packet类型之Handshake Packet 

    握手信息包是最简单的信息包类型。在这个握手信息包中仅包含一个PID数据域而已,其格式如下:

技术分享图片

技术分享图片

(注意:host从不发送NAK包)

例子:

技术分享图片

 

2.2 事务

    在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transation)。

Transaction可以分成三类 :

Setup transaction:主机用来向设备发送控制命令

Data IN transaction:主机用来从设备读取数据

Data OUT transaction:主机用来向设备发送数据

    在OUT和SETUP事务处理中,紧接在SETUP和OUT包后的是DATA包,DATA0和DATA·1包是接替地发送的,在DATA包后面,设备将回应一个握手信号,(如果设备可以接受数据,就回应ACK包;如果设备忙,则回应NAK包;如果设备出错,则回应STALL包)。

    在IN事务中,在IN包后面是设备发送的DATA包或NAK包或STALL包,(若设备忙或者出错,就发送NAK包或STALL包给主机;若设备数据准备好发送,则发送DATA包),DATA0和DATA1包也是交替发送的,紧接着DATA包后面的是主机发送给设备的握手包。

(ACK表示主机可以接收数据,NAK包代表主机忙,STALL代表主机出错)

例子:

1)输入(IN)事务处理:(USB主机从设备接收数据包)

①正常的输入事务处理

技术分享图片

②设备忙时的输入事务处理

技术分享图片

③设备出错时的输入事务处理

技术分享图片

2)输出(OUT)事务处理

①正常的输出事务处理

技术分享图片

②设备忙时的输出事务处理

技术分享图片③设备出错时的输出事务处理

技术分享图片

3)设置(SETUP)事务处理

①正常的设置事务处理

技术分享图片

②设备忙时的设置事务处理

技术分享图片

③设备出错时的设置事务处理

技术分享图片

 

2.3 传输

    USB协议定义了四种传输类型:控制传输、中断传输、批量传输以及等时传输。控制传输类型分为2~3个阶段:设置阶段、数据阶段(无数据控制没有此阶段)以及状态阶段。根据数据阶段的数据传输方向,控制传输又可分为3种类型:控制读取(读取USB描述符)、控制写入(配置USB设备)以及无数据控制。

①控制传输(Control Transfers): 非周期性,突发。用于命令和状态的传输。

②中断传输(Interrupt Transfers): 周期性,低频率,允许有限延迟的通信 如人机接口设备(HID)中的鼠标、键盘、轨迹球等

③批量(大容量数据)传输(Bulk Transfers): 非周期性,突发大容量数据的通信,数据可以占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等

④等时(同步)传输(Isochronous Transfers): 周期性、持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息 ,如音频视频设备

 

2.3.1 控制传输

    控制传输时USB传输中最重要的传输,包含3种传输类型:控制读取、控制写入以及无数据控制。这3种控制传输类型又可分为2~3个过程:(1)设置过程(2)数据过程(可选)(3)状态过程.

技术分享图片

(1)设置过程

    主机从USB获得配置信息,并设置设备的配置值。

    设置阶段的数据交换包含SETUP令牌封包,其后是DATA0数据包以及ACK握手包。它的作用是执行一个设置的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定)。

(2)数据传输过程

    该阶段用来传输主机和设备之间的数据。其数据传输过程为前面提到的事务处理过程。

    而根据数据阶段的数据传输的方向,控制传输又可分为3种类型:1) 控制读取(读取USB描述符);2) 控制写入(配置USB设备);3) 无数据控制

技术分享图片 技术分享图片

(3)状态过程

    状态过程用来表示整个传输的过程已完全结束。(过程类似数据传输过程,但传输方向相反,且传输的数据DATA1字节为0).

    状态传输的方向必须与数据传输方向相反,即原来是IN令牌包,则这个阶段应为OUT令牌包。对于控制读取而言,主机会发送OUT令牌包,其后为0长度的DATA1封包,此时,设备也会做出相对应的动作,送ACK、NAK或STALL握手封包。对于控制写入传输,主机会送出IN令牌包,然后设备送出表示完成阶段的0长度的DATA1封包,主机再做出相应的动作;送ACK、NAK或STALL封包。

以高速设备的最大数据包长度64字节为例

要传输250字节,拆分成4个packet

技术分享图片

要传输正好256字节,通过最后一个0字节包告诉设备传输完成

技术分享图片

技术分享图片

2.3.2 中断传输

    中断传输方式总是相对于设备查询的,以确定是否有数据需要传输,因此中断传输的方向总为从USB设备到主机。中断传输由IN或OUT事务组成。

    中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。

    主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。

    同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图(DATA0或DATA1中的包含的是中断信息,而不是中断数据)。

技术分享图片

2.3.3 批量传输

  • 用来传输大量数据,要求传输不能出错,适用于打印机、存储设备等。
  • 批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
  • USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务
  • 一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。
  • 翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转 PID,发送下一个数据包,否则会重试本次事务传输。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传。

    它通过在硬件级执行"错误检测"和"重传"来确保host与device之间"准确无误"地传输数据,即可靠传输。它由三种包组成(即IN事务或OUT事务):1) token; 2) data; 3) handshake

其传输过程如下:

①批量输出事务:(1)主机先发出一个OUT令牌包(包含设备地址,端点号),(2)然后再发送一个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握手包,(3)设备解码令牌包,数据包都准确无误,并且有足够的缓冲区来保存数据后就会使用ACK/NYET握手包来应答主机(只有高速模式才有NYET握手包,他表示本次数据成功接收,但是没有能力接收下一次传输),如果没有足够的缓冲区来保存数据,就返回NAC,告诉主机目前没有缓冲区可用,主机会在稍后时间重新该批量传输事务。如果设备检查到数据正确,但端点处于挂起状态,返回STALL。如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。

②批量输入事务:(1)主机首先发送一个IN令牌包(包含设备地址,端点号),(2)主机切换到接收数据状态等待设备返回数据。如果设备检测到错误,不做任何响应,主机等待超时。如果此时有地址和端点匹配的设备,并且没有检测到错误,则该设备作出反应:设备有数据需要返回,就将一个数据包放在总线上;如果没有数据需要返回,设备返回NAK响应主机;如果该端点处于挂起状态,设备返回STALL。如果主机收到设备发送的数据包并解码正确后,使用ACK握手包应答设备。如果主机检测到错误,则不做任何响应,设备会检测到超时。注意:USB协议规定,不允许主机使用NAK来拒绝接收数据包。主机收到NAK,知道设备暂时没有数据返回,主机会在稍后时间重新该批量输入事务。

PING令牌包,它不发送数据,直到等待设备的握手包。

技术分享图片

技术分享图片

2.3.4 等时传输

    等时(同步)传输适用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少量的数据错误是可以容忍的,主要是保证数据不能停顿,所以等时传输是不保证数据100%正确的。

    实时传输只需要令牌和数据两个信息包,没有握手应答包,故当数据错误时,不再重传操作。数据是否正确,由数据的CRC校验来确认。同步传输也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。

技术分享图片

各种传输特性比较:

技术分享图片

2.5 设备列举

2.5.1 描述符

    USB描述符类似USB外围设备的"身份证"一样,详细地记录着外围设备相关的一切信息。为了描述不同的数据,需要以不同的数据类型的USB描述符加以描述,共有以下几种类型:设备描述符,配置描述符、配置描述符、接口描述符和端点描述符,这几个描述符是必须要具有的,其他描述符如:字符串描述符、群组描述符以及报告描述符则可以根据不同设备进行选择。

(1)设备描述符

    设备描述符具有18字节的产嘀咕,并且是主机向设备请求的第一个描述符。以下列出设备描述符的范围、数值以及各个字段的意义:

技术分享图片

技术分享图片

(2)配置描述符

    配置描述符具有9字节长度,针对设备给予配置的信息。以下列出配置描述符的范例、数值以及各个字段的意义。

技术分享图片

(3)接口描述符

    接口描述符具有9字节的长度,用来描述每个设备的接口特性。以下列出配置描述符的范例、数值以及各个字段的意义。

技术分享图片

(4)端点描述符

    端点描述符具有7字节的长度,用来描述端点的属性以及各个端点的位置。该实例中有两个端点,首先介绍端点1的描述符:

技术分享图片

    接下来介绍端点2的描述符:

技术分享图片

 

3. USB标准请求

3.1 USB标准请求的数据结构

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

3.2 USB设备请求

    这里主要介绍几种常用的设备请求:

(1)清除特性(Clear Feature)

    该请求是用来取消一个特性,其格式如下:

技术分享图片

    该请求的wValue表示特性选择器,它对应的值为:0=端点,1=设备。当某个特点不允许取消,或该特性根本不存在,或者指向一个根本不存在的端点或者接口时,该请求将会导致设备请求失败。如果端点被固件设为停止状态,主机软件(总线驱动程序)也可以发送一个值为0的CLEAR_FEATURE命令清除该端点的停止状态。

(2)取得描述符(Get Descriptor)

    该请求可以取得USB设备中存在的特定的描述符,其格式如下:

技术分享图片

    该请求的wValue的高字节表示要取的描述字符类型,低字节表示描述符的索引值,描述的类型有:1=设备描述符;2=配置描述符;3=字符串描述符;4=接口描述符;5=端点描述符。wIndex的值为0或语言ID,当要取得的描述符是字符描述符时,该域的值为语言ID;当为其他的描述符时,该域为0。 wLength表示要返回的数据长度,如果SETUP阶段的地址使用的是预设地址0(ENDP字段0),这时的wLength值会大于实际描述的值(这是因为用户以预设地址0来取得设备描述符时,不管多少字节,用户最多只能取得前8字节,即在控制传输过程中只有一次数据阶段)。

(3)设置地址(Set Address)

    该请求给USB设备设置地址,从而可以对USB设备进行进一步的访问。格式如下:

技术分享图片

    该请求与其他请求有一个重要的不同,该请求下,USB设备一直不改变它的地址,直到该请求的状态阶段被成功的完成,而其他请求的操作都是在状态阶段之前完成的。若特定的设备地址大于127,或者wIndex或我Length为非0值,那么该请求不执行。

(4)设置配置

    该请求对设备进行设置。其格式如下:

技术分享图片

    该请求中的wValue域的低字节表示设置的值,该值必须为0或者域配置描述符中的配置值相匹配。如果设置值等于0,表示设备在地址状态,如果我Index或wLength为非0值,那么该请求不执行。

 

4.设备列举

    设备列举可以简单概括为这样的一个过程:主机通过USB设备请求来取得设备描述符并对该设备进行配置。该过程可以简化成以下5个步骤:

第一步:使用预设的地址0取得设备描述符。

第二步:设置设备的新地址。

第三步:使用新地址取得设备描述符。

第四步:取得配置描述符。

第五步:设置配置描述符。

    设备列举使用的是控制传输。上述5个步骤必须符合控制传输的基本架构,第一步、第三步和第四步使用的是控制读取,第二步和第五步使用的是无数据控制。

 









以上是关于C6748_USB协议的主要内容,如果未能解决你的问题,请参考以下文章

UEFI中USB协议栈的实现简介

如何与 MFI 附件的 USB 协议进行通信

usb库文件usb_desc.c分析

USB协议分析

(转)USB协议简介

USB标准协议下载地址