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

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

                        

(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表示尚未准备好,要求等待。

 (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规范初探》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值