USB的数据格式概述
- 格式:doc
- 大小:8.12 KB
- 文档页数:3
/view/192267d8ce2f0066f5332225.html/view/339c456baf1ffc4ffe47aca0.html/view/c99688630b1c59eef8c7b4b9.html/view/57dfded126fff705cc170af8.html/view/464c5885ec3a87c24028c447.htmlUSB的一些基本概念1. 管道(Pipe) 是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。
任何USB 设备一旦上电就存在一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。
2. 端点(Endpoint)是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。
设备支持端点的数量是有限制的,除默认端点外低速设备最多支持 2 组端点(2 个输入,2个输出),高速和全速设备最多支持15 组端点。
3. 接口(Interface) 。
应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。
通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。
用在一起来对设备进行控制的若干管道称为设备的接口.4. 设备和端点之间关系: 一个USB 设备可以包括若干个端点,不同的端点以端点编号和方向区分。
不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。
除端点0 外,所有的端点只支持一个方向的数据传输。
端点0 是一个特殊的端点,它支持双向的控制传输。
管道和端点关联,和关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。
5. 描述符(Descriptor) 描述设备的属性(Attributes). 它本身是一个数据结构, 第一个字节表示描述符的大小(字节数), 第二个字节表示描述符的类型(Type). 描述符的种类有:1) 设备描述符(Device), 描述一个设备的一般信息.2) 设备修饰描述符(Device_Qualifier), 描述一个高速设备在其它速度下该如何变化的信息.3) 配置描述符(Configuration), 描述一个特定的设备配置, 如接口的数目等. 一个USB设备有一个或多个配置描述符. 每个配置有一个或多个接口并且每个接口有0个或多个端点.4) 其它速度配置描述符(Other_speed_configuration), 描述高速设备在其它可能的速度下的一个配置.5) 接口描述符(Interface), 描述一种配置中的一个特定的接口.6) 端点描述符(Endpoint), 描述主机需要的去决定端点所需带宽的信息. 这个描述符只能附加在GetDescriptor()或GetDescriptor()请求中传送, 不能单独传送. 端点0没有此描述符.7) 字符串描述符(String), 第0个字符串描述符指定设备支持的语言, 其它的描述符则各包含一个UNICODE字符串. 设备描述符, 配置描述符和接口描述符可能会包含字符串描述符.6. USB设备请求(USB Device Request) 请求是从主机通过控制管道发送到设备.标准的设备请求有:1) Clear Feature2) Get Configuration3) Get Descriptor4) Get Interface5) Get Status6) Set Address7) Set Configuration8) Set Descriptor9) Set Feature10) Set Interface11) Synch FrameUSB3.0系统拓扑结构系统是最多只能有7层的树状结构最多只能支持127个设备和HubHost+RootHub永远是在第一层复合(Compound)设备一般占两层功能设备不能作为非叶节点, 只有Hub才可以USB3.0 Hub其实包含了一个USB2的Hub和一个SuperSpeed HubUSB3.0的重要特性:1. 增加了一个重要的数据传输速率2. 点对点方式传输包, 使活动链路数目达到最少3. 异步方式的通知功能, 去除了轮询方式的必要4. 基于链路级的电源管理, 这是总线结构的基础设计5. 向后兼容USB2.0, 驱动级和物理层级别上都达到了兼容的目的USB3.0与USB2.0的区别1. 数据传输速率, 3.0是SuperSpeed 5.0Gbps,2.0是1.5Mbps, 12Mbps或480Mbps2. 数据接口,3.0是全双工,独立于USB 2.0信号的四路差分信号,支持同时双向数据传输2.0是半双工,双路差分信号, 单向数据传输, 需要事先协商好总路线的传输方向3. 信号线数目, 3.0是4路SuperSpeed数据线, 2路HighSpeed数据线和2路电源及地线2.0是2路LS/FS/HS数据线, 2路电源及地线4. 总线事务协议, 3.0是主机主导的异步方式的传输流量控制, 包传输是能显式地进行路由2.0是主机主导的轮询方式的传输流量控制, 包传输是通过广播方式到所有设备5. 电源管理, 3.0是多级别的链路电源管理, 支持Idle, sleep和suspend状态2.0是在端口级进行管理, 可以在entry/exit上有两种级别的挂机状态6. 总线电源, 3.0是和USB 2.0差不多, 只是未配置的电源有50%的增幅, 已配置的电源有80%的增幅7. 主机控制器,3.0用的是xHCI,2.0则是EHCI。
usb ncm报文格式解析-回复什么是USB NCM 报文格式?USB NCM (Network Control Model) 是USB 设备之间进行网络通信的一种协议。
NCM 协议允许USB 设备通过USB 线缆模拟网络设备,从而实现数据传输。
在USB NCM 协议中,数据传输是通过发送和接收报文来实现的。
这篇文章将会详细解析USB NCM 报文格式,从而帮助读者更好地理解和使用这种协议。
第一步:了解NCM 协议结构在开始解析USB NCM 报文格式之前,我们需要先了解NCM 协议的基本结构。
NCM 协议包含以下几个重要的部分:1. 管理器:作为控制数据传输和网络配置的主要组件。
2. 设备:通过USB 进行通信并提供网络连接的设备。
3. 端点:管理器和设备之间进行数据传输的通道。
4. 网络连接:通过管理器配置的USB 端点之间的虚拟网络连接。
第二步:USB NCM 报文格式的基本组成USB NCM 报文由两部分组成:帧头和数据内容。
帧头包含了报文的各种控制信息,而数据内容则存储了待传输的数据。
1. 帧头:帧头由多个字段组成,包括长度、索引、奇偶校验等。
这些字段有助于管理器和设备之间进行数据传输的控制和同步。
2. 数据内容:数据内容部分用于存储待传输的数据。
这可以是任意类型的数据,如文本、图像或音频等。
第三步:分析帧头字段帧头是USB NCM 报文中非常重要的一部分,它包含了用于控制数据传输和同步的各种字段。
以下是几个常见的帧头字段及其功能:1. 长度:指示整个报文的长度,包括帧头和数据内容。
2. 索引:指示当前传输报文的索引,用于标识报文的顺序。
3. 奇偶校验:用于检测数据传输中的错误,以确保数据的完整性。
4. 时间戳:用于记录报文发送或接收的时间,方便进行性能分析和故障排查。
第四步:解析数据内容数据内容部分存储着待传输的实际数据。
具体的数据格式取决于应用程序的需要。
例如,如果USB设备用于传输图像数据,那么数据内容部分可能会按照图像文件格式进行组织。
USB的描述符与命令请求详解一、描述符1.什么是描述符所谓描述符,就是用于描述设备特性的具有特定格式排列的一种数据组织结构。
2.描述符的作用描述符的作用在于设备向主机汇报自己的信息、特征,主机根据这些信息从而加载相应的驱动程序。
3.描述符的分类描述符分为三大类:标准描述符、设备类描述符、厂商描述符。
除字符串描述符可选外,任何设备都必须包含剩下的几种标准描述符。
在USB1.0中规定了5种标准的描述符:设备描述符配置描述符接口描述符端点描述符字符串描述符规定的设备类描述符有:集线器类描述符、人机接口类描述符。
下表是三种描述符的类型值:4.使用的几种类设备类DeviceClass下表是设备类值的含义。
接口类InterfaceClass下表是接口类值的含义。
类的交叉与独享在描述符中,只有设备描述符和接口描述符中会有类别之分,即只有设备和接口会分类使用,不过有些类别的使用只需经过设备或接口的区分就可彻底清楚明白,这说明在设备类别和接口类别的定义上会有共同的类别名称。
而有些类别则是设备或接口独享的,下表是与使用设备相关的类别划分交叉或共享情况:(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义)【说明:】在设备或接口分类上均可彻底分清使用的(Usage = Both),即在任一处描述符中定义即可的分清楚使用的类(Usage = Both)的基本类有:02h ------------- 通信及CDC控制类;DCh ------------ 诊断设备类;EFh ------------- 混杂设备类;FFh ------------- 厂商定义的设备类。
5.标准描述符设备描述符【说明1:】当设备类型bDeviceClass = 0时,说明类型将由接口描述符中定义的为准。
【说明2:】从设备描述符表格中可知,有3个索引值:厂商信息索引、产品信息索引、设备序列号索引,这意味着,将有3个字符串描述符为其准备。
usb ncm报文格式解析
USB NCM(USB Network Control Model)报文格式是一种用于USB通信的协议格式,用于在USB设备之间传输数据。
NCM报文格式是一种分层结构,包括传输头(NTH)、传输数据块(TDB)和传输结束标记(ETB)。
NTH(NCM传输头)用于标识NCM报文,并向接收方提供有关报文内容的基本信息。
NTH结构的字段包括:
Signature:标识NCM报文,固定为“ncm”。
HeaderLength:NTH长度(字节)。
SequenceNumber:NCM报文的序列号,用于标识报文的顺序。
BlockLength:NCM报文的数据块长度(字节)。
NDPIndex:首个NCM数据报指针(NDP)在NCM报文中的偏移位置。
TDB(传输数据块)用于承载实际的数据。
它包含一个或多个以太网数据包,这些数据包可以是IP、ARP、ICMP等协议的数据包。
TDB的长度由BlockLength字段指定。
ETB(传输结束标记)用于标识NCM报文的结束。
它是一个固定长度的标记,用于告诉接收方报文已经结束。
USB NCM报文格式解析通常涉及对NCM报文的层次结构进行解析,提取出其中的各个组成部分,并解析出其中的以太网数据包。
解析过程通常涉及到对NTH、TDB和ETB的解析,以及提取出以太网数据包中的实际数据。
解析过程可以根据具体的协议要求进行定制化处理,例如解析IP、ARP、ICMP等协议的数据包。
USB 2.0 规范USB 体系简介USB 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度可达480Mb/S。
USB 支持“总线供电”和“自供电”两种供电模式。
在总线供电模式下,设备最多可以获得500mA 的电流。
USB2.0 被设计成为向下兼容的模式,当有全速(USB 1.1)或者低速(USB 1.0)设备连接到高速(USB 2.0)主机时,主机可以通过分离传输来支持它们。
一条USB 总线上,可达到的最高传输速度等级由该总线上最慢的“设备”决定,该设备包括主机、HUB 以及USB 功能设备。
USB 体系包括“主机”、“设备”以及“物理连接”三个部分。
其中主机是一个提供USB 接口及接口管理能力的硬件、软件及固件的复合体,可以是PC,也可以是OTG 设备。
一个USB 系统中仅有一个USB 主机;设备包括USB 功能设备和USB HUB,最多支持127 个设备;物理连接即指的是USB 的传输线。
在USB 2.0 系统中,要求使用屏蔽的双绞线。
一个U S B H O S T最多可以同时支持128个地址,地址0作为默认地址,只在设备枚举期间临时使用,而不能被分配给任何一个设备,因此一个U S B H O S T最多可以同时支持127个地址,如果一个设备只占用一个地址,那么可最多支持127个U S B设备。
在实际的U S B体系中,如果要连接127个U S B 设备,必须要使用U S B H U B,而U S B H U B也是需要占用地址的,所以实际可支持的U S B功能设备的数量将小于127。
USB 体系采用分层的星型拓扑来连接所有USB 设备,如下图所示:以HOST-ROOT HUB Array为起点,最多支持7 层(Tier),也就是说任何一个USB 系统中最多可以允许5个USB HUB 级联。
一个复合设备(Compound Device)将同时占据两层或更多的层。
R OO T H U B是一个特殊的U S B H U B,它集成在主机控制器里,不占用地址。
usb ncm报文格式解析-回复USB NCM(Network Control Model)是一种用于在USB设备之间进行网络通信的协议,它通过USB接口传输数据,使设备能够在没有网络接口的情况下进行网络通信。
本文将详细解析USB NCM报文的格式,包括报文头、数据传输包等内容,以帮助读者更好地理解和应用该协议。
首先,我们需要了解USB NCM报文的基本结构。
USB NCM报文由报文头和数据传输包组成,其中报文头包含了一些必要的字段信息,数据传输包则用于携带具体的数据。
报文头的结构如下所示:1. Signature:一个4字节的字段,用于标识报文的开始部分,固定值为"NCMZ"。
2. Message Type:一个2字节的字段,用于指示报文的类型,包括Command、Data和Response。
3. Message Length:一个4字节的字段,用于表示报文的长度,包括报文头和数据传输包的长度。
4. Reserved:一个2字节的保留字段,目前仅用于填充。
5. CRC32:一个4字节的字段,用于校验报文的准确性,计算方法为对整个报文进行CRC32校验。
接下来是数据传输包的结构。
数据传输包用于携带具体的数据内容,它的格式可以根据应用的需要而变化。
在数据传输包中,通常包含以下几个字段:1. Data Length:一个2字节的字段,用于表示数据的长度,即下面Data 字段的长度。
2. Reserved:一个2字节的保留字段,目前仅用于填充。
3. Data:一个变长的字段,用于存储具体的数据内容。
除了上述字段外,USB NCM报文还可以包含一些可选的字段,如Vendor-Specific字段,用于存储厂商自定义的数据,以满足特定应用需求。
当我们了解了USB NCM报文的格式后,接下来就可以对报文进行解析和处理了。
首先,我们需要读取报文头中的Signature字段,以验证报文的有效性。
usb描述符含义USB描述符是一种定义了USB设备能力和特征的数据结构。
它通过描述设备的不同方面,例如设备的配置、接口和端点规范,为计算机系统提供了与USB设备进行通信的方法。
每个USB设备都包含一个或多个描述符,这些描述符以二进制形式存储在设备的固件中。
USB描述符的含义可以从以下几个方面来解释。
首先,设备描述符是USB设备的一个重要组成部分。
它包含了设备的厂商和产品ID、USB规范版本号、设备类别、设备能力以及设备的供电要求等信息。
通过读取设备描述符,计算机系统可以识别并与USB设备进行通信。
其次,配置描述符描述了设备的配置信息。
它包含了配置的唯一标识符、供电要求、接口数目以及所需的带宽等信息。
计算机系统在与USB设备进行通信时,会根据配置描述符来分配资源并设置设备的工作模式。
接口描述符提供了关于设备接口的详细信息。
它包含了接口类别、子类别、协议以及与接口关联的端点数目等信息。
通过读取接口描述符,计算机系统可以了解设备接口的功能和特性。
最后,端点描述符描述了设备端点的特性。
端点是USB设备和计算机系统之间进行数据传输的通道。
端点描述符包含了端点的类型、方向、最大数据包长度以及传输速率等信息。
计算机系统通过读取端点描述符,了解设备端点的能力和规范,以便进行数据的传输和控制。
总之,USB描述符作为USB设备的重要组成部分,提供了与计算机系统进行通信和操作的必要信息。
通过解读这些描述符,计算机系统可以有效地管理和控制USB设备,实现数据传输和设备控制的功能。
usb描述符含义
USB(Universal Serial Bus)描述符是在USB设备和主机之间进行通信时使用的数据结构。
USB 描述符包含有关USB设备或设备的某个接口的信息,例如设备的厂商ID、产品ID、设备类别、端点信息等。
USB描述符通常由设备在被连接到主机时发送给主机。
以下是常见的USB描述符及其含义:
1. 设备描述符(Device Descriptor):
-包含设备的基本信息,如USB规范版本、设备类别、厂商ID、产品ID、设备版本号等。
2. 配置描述符(Configuration Descriptor):
-描述设备的一个或多个配置,每个配置可能包含一个或多个接口。
3. 接口描述符(Interface Descriptor):
-描述一个配置中的一个接口,包括接口的数量、接口的类别、子类别和协议。
4. 端点描述符(Endpoint Descriptor):
-描述接口上的每个端点(endpoint),包括端点的地址、传输类型(控制、批量、等等)、最大数据包大小等信息。
5. 字符串描述符(String Descriptor):
-包含设备的可读字符串信息,例如制造商名称、产品名称等。
这些描述符是通过设备的控制端点(Control Endpoint)进行交互的,控制端点使用标准的USB控制请求(Control Requests)来获取有关设备和接口的信息。
USB描述符是为了让主机能够正确地配置和与USB设备进行通信而设计的,它们提供了有关设备和接口的重要信息,以确保设备与主机之间的兼容性。
USB介绍与应用一.USB介绍B概述USB,是英文U niversal S erial B us(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。
是应用在PC领域的接口技术。
USB接口支持设备的即插即用和热插拔功能。
USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
USB协议有两种:USB1.1和USB2.0。
USB2.0和USB1.1完全兼容。
USB1.1支持的数据传输率为12Mbps和1.5Mbps(用于慢速外设),USB2.0支持的数据传速率可达480Mbps。
在普通用户看来,USB系统就是外设通过一根USB电缆和PC机连接起来。
通常把外设称为USB 设备,把其所连接的PC机称为USB主机。
将指向USB主机的数据传输方向称为上行通信,把指向USB设备的数据传输方向称为下行通信。
USB网络采用阶梯式星形拓扑结构,如图1.1。
一个USB网络中只能有一个主机。
主机内设置了一个根集线器,提供了主机上的初始附属点。
B 系统介绍USB 的所有数据通信(不论是上行通信还是下行通信)都由USB主机启动,所以USB 主机在整个数据传输过程中占据着主导地位。
在USB 系统中只允许有一个主机。
从开发人员的角度看,USB 主机可分为三个不同的功能模块:客户软件、USB 系统软件和USB 总线接口。
(1) 客户软件 (2) USB 系统软件 (3) USB 总线接口(1) 客户软件(根阶梯) 阶梯0PC 主机(根集线器)客户软件负责和USB设备的功能单元进行通信,以实现其特定功能。
一般由开发人员自行开发。
客户软件不能直接访问USB设备,其与USB设备功能单元的通信必须经过USB系统软件和USB总线接口模块才能实现。
客户软件一般包括USB设备驱动程序和界面应用程序两部分。
USB设备驱动程序负责和USB系统软件进行通信。
通常,它向USB 总线驱动程序发出I/O请求包(IRP)以启动一次USB数据传输。
usb ncm报文格式解析-回复什么是USB NCM协议?USB(Universal Serial Bus)是一种用于连接计算机和外部设备的通信协议。
NCM(Network Control Model)则是USB协议的一种,用于在USB连接的计算机和网络设备之间传输数据。
NCM协议实现了网络适配器的功能,通过USB接口连接计算机和网络设备,使得计算机可以直接连接到互联网或者局域网。
NCM协议的主要特点包括支持IPv4和IPv6协议、支持USB 2.0和USB 3.0接口、支持高速数据传输以及有良好的扩展性。
NCM协议的报文格式包括了单个数据包和多个数据包两种类型。
单个数据包的报文格式如下:- 传输形式(Transfer Type):指明数据包的类型,包括发送(Send)、接收(Receive)和其他(Other)。
- 数据标识符(Data Identifier):用于唯一标识一个数据包。
- 源网络地址(Source Network Address):指定数据包的发送者IP地址。
- 目标网络地址(Destination Network Address):指定数据包的接收者IP地址。
- 数据包类型(Packet Type):指明数据包的类型,可以是数据(Data)、控制(Control)或保留(Reserved)。
- 数据长度(Data Length):指定数据部分的长度,以字节表示。
- 数据包(Packet):实际传输的数据部分。
多个数据包的报文格式如下:- 数据标识符(Data Identifier):用于唯一标识一个数据包。
- 传输形式(Transfer Type):指明数据包的类型,包括发送(Send)、接收(Receive)和其他(Other)。
- 数据长度(Data Length):指定数据部分的长度,以字节表示。
- 数据包(Packet):实际传输的数据部分,可以包含一个或多个单个数据包。
USB的数据格式概述
和其他的一样,USBUSB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。
下面简单介绍一下域、包、事务、传输,请注意他们之间的关系。
(一)域:是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型:
1、同步域(SYNC),八位,值固定为0000 0001,用于本地时钟与输入同步
2、标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式格式,这是一个很重要的部分,这里可以计算出,USB的标识码有16种,具体分类请看问题五。
3、地址域(ADDR):七位地址,代表了设备在主机上的地址,地址000 0000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。
4、端点域(ENDP),四位,由此可知一个USB设备有的端点数量最大为16个。
5、帧号域(FRAM),11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义(同步传输为四种传输类型之一,请看下面)。
6、数据域(DATA):长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度
7、校验域(CRC):对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法,CRC校验在通讯中应用很泛,是一种很好的校验方法,至于具体的校验方法这里就不多说,请查阅相关资料,只须注意CRC码的除法是模2运算,不同于10进制中的除法。
(二)包:由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同的包的域结构不同,介绍如下
1、令牌包:可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,输出包是用来设置输出命令的,而不是放据数的)
其中输入包、输出包和设置包的格式都是一样的:
SYNC+PID+ADDR+ENDP+CRC5(五位的校验码)
(上面的缩写解释请看上面域的介绍,PID码的具体定义请看问题五)
帧起始包的格式:
SYNC+PID+11位FRAM+CRC5(五位的校验码)
2、数据包:分为DATA0包和DATA1包,当USB发送数据的时候,当一次发送的数据长度大于相应端点的容量时,就需要把数据包分为好几个包,分批发送,DATA0包和DATA1包交替发送,即如果第一个数据包是DATA0,那第二个数据包就是DATA1。
但也有例外情况,在同步传输中(四类传输类型中之一),所有的数据包都是为DATA0,格式如下:SYNC+PID+0~1023字节+CRC16
3、握手包:结构最为简单的包,格式如下
SYNC+PID
(注上面每种包都有不同类型的,USB1.1共定义了十种包,具体请见问题五)
(三)事务:分别有IN事务、OUT事务和SETUP事务三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成,这里用阶段的意思是因为这些包的发送是有一定的时间先后顺序的,事务的三个阶段如下:
1、令牌包阶段:启动一个输入、输出或设置的事务
2、数据包阶段:按输入、输出发送相应的数据
3、握手包阶段:返回数据接收情况,在同步传输的IN和OUT事务中没有这个阶段,这是比较特殊的。
事务的三种类型如下(以下按三个阶段来说明一个事务):
1、 IN事务:
令牌包阶段——主机发送一个PID为IN的输入包给设备,通知设备要往主机发送数据;
数据包阶段——设备根据情况会作出三种反应(要注意:数据包阶段也不总是传送数据的,根据传输情况还会提前进入握手包阶段)
1) 设备端点正常,设备往入主机里面发出数据包(DATA0与DATA1交替);
2) 设备正在忙,无法往主机发出数据包就发送NAK无效包,IN事务提前结束,到了下一个IN事务才继续;
3) 相应设备端点被禁止,发送错误包STALL包,事务也就提前结束了,总线进入空闲状态。
握手包阶段——主机正确接收到数据之后就会向设备发送ACK包。
2、 OUT事务:
令牌包阶段——主机发送一个PID为OUT的输出包给设备,通知设备要接收数据;
数据包阶段——比较简单,就是主机会设备送数据,DATA0与DATA1交替握手包阶段——设备根据情况会作出三种反应
1)设备端点接收正确,设备往入主机返回ACK,通知主机可以发送新的数据,如果数据包发生了CRC校验错误,将不返回任何握手信息;
2) 设备正在忙,无法往主机发出数据包就发送NAK无效包,通知主机再次发送数据;
3) 相应设备端点被禁止,发送错误包STALL包,事务提前结束,总线直接进入空闲状态。
3、SETUT事务:
令牌包阶段——主机发送一个PID为SETUP的输出包给设备,通知设备要接收数据;
数据包阶段——比较简单,就是主机会设备送数据,注意,这里只有一个固定为8个字节的DATA0包,这8个字节的内容就是标准的USB设备请求命令(共有11条,具体请看问题七)
握手包阶段——设备接收到主机的命令信息后,返回ACK,此后总线进入空闲状态,并准备下一个传输(在SETUP事务后通常是一个IN或OUT事务构成的传输)
(四)传输:传输由OUT、IN、SETUP事务其中的事务构成,传输有四种类型,中断传输、批量传输、同步传输、控制传输,其中中断传输和批量转输的结构一样,同步传输有最简单的结构,而控制传输是最重要的也是最复杂的传输。
1、中断传输:由OUT事务和IN事务构成,用于键盘、鼠标等HID设备的数据传输中
2、批量传输:由OUT事务和IN事务构成,用于大容量数据传输,没有固定的传输速率,也不占用带宽,当总线忙时,USB会优先进行其他类型的数据传输,而暂时停止批量转输。
3、同步传输:由OUT事务和IN事务构成,有两个特殊地方,第一,在同步传输的IN 和OUT事务中是没有返回包阶段的;第二,在数据包阶段所有的数据包都为DATA0
4、控制传输:最重要的也是最复杂的传输,控制传输由三个阶段构成(初始设置阶段、可选数据阶段、状态信息步骤),每一个阶段可以看成一个的传输,也就是说控制传输其实是由三个传输构成的,用来于USB设备初次加接到主机之后,主机通过控制传输来交换信息,设备地址和读取设备的描述符,使得主机识别设备,并安装相应的驱动程序,这是每一个USB 开发者都要关心的问题。
1、初始设置步骤:就是一个由SET事务构成的传输
2、可选数据步骤:就是一个由IN或OUT事务构成的传输,这个步骤是可选的,要看初始设置步骤有没有要求读/写数据(由SET事务的数据包阶段发送的标准请求命令决定)
3、状态信息步骤:顾名思义,这个步骤就是要获取状态信息,由IN或OUT事务构成构成的传输,但是要注意这里的IN和OUT事务和之前的INT和OUT事务有两点不同:
1) 传输方向相反,通常IN表示设备往主机送数据,OUT表示主机往设备送数据;在这里,IN表示主机往设备送数据,而OUT表示设备往主机送数据,这是为了和可选数据步骤相结合;
2) 在这个步骤里,数据包阶段的数据包都是0长度的,即SYNC+PID+CRC16
除了以上两点有区别外,其他的一样,这里就不多说。