USB软硬件知识之三:数据流和协议规范

(1)USB 体系在实现时采用分层的结构,如下图所示:

                         USB软硬件知识之三:数据流和协议规范_第1张图片
      在 HOST端,应用软件(Client SW)不能直接访问 USB 总线,而必须通过USB系统软件和USB主机控制器来访问 USB 总线,在 USB总线上和USB 设备进行通讯。从逻辑上可以分为功能层、设备层和总线接口层三个层次。其中功能层完成功能级的描述、定义和行为;设备级则完成从功能级到传输级的转换,把一次功能级的行为转换为一次一次的基本传输;USB 总线接口层则处理总线上的Bit流,完成数据传输的物理层实现和总线管理。图中黑色箭头代表真实的数据流,灰色箭头代表逻辑上的通讯。

(2)端点、管道和接口的关系 

      各应用软件-功能设备对之间的通讯相互独立,应用软件通过USB设备驱动程序(USBD)发起 IRQ 请求,请求数据传输。主机控制器驱动程序(HCD)接收 IRQ 请求,并解析成为 USB传输事务(Transaction),并对 USB 系统中的所有传输事务进行任务排定 (因为可能同时有多个应用软件发起 IRQ 请求)。主机控制器(Host Controller)执行排定的传输任务,在同一条共享的 USB 总线上进行数据包的传输。

      USB 系统中数据的传输,宏观的看来是在HOST 和 USB 功能设备之间进行;微观的看是在应用软件的 Buffer 和 USB 功能设备的端点之间进行。一般来说端点都有 Buffer,可以认为USB通讯就是应用软件Buffer和设备端点Buffer之间的数据交换,交换的通道称为管道。应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。通常需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口,这就是端点、管道和接口的关系。

      一个 USB 设备可以包括若干个端点,不同的端点以端点编号和方向区分。不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。除端点 0外,所有的端点只支持一个方向的数据传输。端点 0是一个特殊的端点,它支持双向的控制传输。管道和端点关联,和关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。

(3)USB数据包协议规范

       USB 采用 little endian字节顺序,在总线上先传输一个字节的最低有效位,最后传输最高有效位,采用NRZI编码,若遇到连续的 6个 1 要求进行为填充,即插入一个 0。所有的 USB 包都由 SYNC 开始,高速包的 SYNC 宽度为 32bit,全速/低速包的 SYNC段度为 8bit。实际接收到的 SYNC产度由于USB HUB 的关系,可能会小于该值。USB 数据包的格式,如下图:

                        

       PID 表征了数据包的类型,分为令牌(Token)、数据(Data)、握手(Handshacke)以及特殊包 4大类,共 16种类型的PID。具体定义见英文协议第 196页。
       对于令牌包来说,PID之后是 7位的地址和 4位的端点号。令牌包没有数据域,以 5 位的 CRC 校验和结束。SOF是一类特殊的令牌包,PID 后跟的是11 位的帧编号。
       对于数据包来说,PID 之后直接跟数据域,数据域的长度为N字节,数据域后以 16 位的 CRC 校验和结束。
       对于握手包仅有PID 域,没有数据也没有校验和。握手包包括 ACK,NAK,STALL以及 NYET 四种,其中ACK表的数据传输;NAK表示否定的应答,失败的数据传输,要求重新传输误;STALL表示功能错误或端点被设置了 STALL属性;NYET表示尚未准备好,要求等待。

 

       数据在 USB总线上的传输以包为单位,包只能在帧内传输。高速USB 总线的帧周期为125uS,全速以及低速 USB 总线的帧周期为 1mS。帧的起始由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。

 (4)USB CLASS分类

        依附在总线上的设备可以是需要特定的驱动程序的完全定制的设备,也可能属于某个设备类别。这些类别定义了某种设备的行为和接口描述符,这样一个驱动程序可能用于所有此种类别的设备。

        设备分类由USB设计论坛设备工作组决定,并分配ID。每种类别可选支持子类别(SubClass)和协议子定义(Protocol subdefinition)。这样可以用于主设备类型的不断修订。常用设备类别和ID有:
0x00   保留值
0x01   USB音频设备, 像声卡这样的设备。
0x03   人机接口设备, 键盘鼠标等
0x06   静止图像捕捉设备,用在USB上的Picture Transfer Protocol。
0x07   USB打印设备, 打印机。
0x08   USB大容量存储设备 keydrive, 可移动硬盘, MMC卡、SD卡、CF卡读卡器, 数码相机, 数字音频播放器等。 这一类设备显示成一个文件系统。
0x09   USB hubs。
0x0A   USB通信设备 ("CDC") used for 调制解调器(包括软件调制解调器), 网卡 (交叉电缆), ISDN, 传真。
0x0E   USB视频设备, 类似摄像头,电视卡的动态图像捕捉设备。
0xE0   无线控制器,如蓝牙dongles。
0xFF   定制设备。
        

转自《USB2.0规范初探》

你可能感兴趣的:(buffer,token,任务,通讯)