EZ-USB 68013学习笔记(一)——USB协议之描述符

这里首先感谢电脑圈圈的USB那本书还有稻谷成熟了68013的固件研究

首先我们需要理解什么是USB。大家不要把它想复杂了,其实USB就是一种串行通信方式,它具有自己特有的通信协议,就是USB通信协议,有些人可能问,什么是协议,我觉得协议就好像 两个人之间的暗号,同样两个设备通信的话,也要事先规定好一个暗号,按照这个暗号的方式,两个设备就可以进行交流了。

下面我们开始说明一下USB的这个“暗号”,要明白USB的暗号,首先要明白以下几个概念(排名暂不分先后):USB描述符,USB的包,USB事务,USB请求。这四个概念必须要分清楚,其实按照这个顺序了解即可。理解这四个概念以后,对于USB 的枚举就会很容易理解了。

(1)USB描述符

USB描述符其实就是用来描述这个USB设备的,描述这个USB有什么结构,每个结构有什么特点。将来这个描述符表是存在一个a51的文件中的。描述符其实就类似于一个结构体。结构体中包含好几个字段(变量),每个字段表示不同含义。这里我只介绍设备描述符,配置描述符,接口描述符,端点描述符四种,其他都一样,大家再看书吧。

首先介绍设备描述符,下面类结构体就是设备描述符的结构

DeviceDscr:   
      db   DSCR_DEVICE_LEN      ;12H  设备描述符的长度(描述符的第一个字节一般存的都是这个描述符的总长度)
      db   DSCR_DEVICE   ;;01H  描述度的类型(第二个字节一般表示描述的类型,01H表示描述符是设备描述符)
      dw   0002H      ;; USB的规范版本号,USB2.0所以是2 (BCD)
      db   00H        ;; USB 设备类别代码,如HID设备对应的设备代码03H,还有显示设备为04H
      db   00H         ;; 对于前述设备再分类,比如说显示器,有好多种,可以继续分类,若上述为显示设备,01H表示CRT显示器
      db   00H         ;; 设备协议,为0时表示不使用设备类协议。
      db   64         ;; 这个表示端点0支持的最大数据包长度。这个很重要,大家要记住,后面会用 到
      dw   0B404H      ;; Vendor ID设备商ID VID 
      dw   0410H      ;; Product ID (Sample Device)产品ID PID  主机是根据相应PID VID 去加载驱动的。
      dw   0000H      ;; USB设备版本号
      db   1         ;; 供应商字符串索引
      db   2         ;; 产品字符串索引
      db   0         ;; 产品序列号索引
      db   1         ;; 支持的最大配置数

                  其次是配置描述符结构

      db   DSCR_CONFIG_LEN               ;; 配置描述符长度 09H
      db   DSCR_CONFIG                  ;; 描述符类型02H,即配置描述符
      db   (FullSpeedConfigDscrEnd-FullSpeedConfigDscr) mod 256 ;配置描述信息的总长度(包含配置描述符,接口描述符,端点描述符),这里不是配置信息的总长度
      db   (FullSpeedConfigDscrEnd-FullSpeedConfigDscr)  /  256 ;; 配置信息总长度的高字节
      db   1      ;; Number of interfaces所支持的接口数
      db   1      ;; Configuration number当前配置值
      db   0      ;; Configuration string字符串描述符索引
      db   10000000b   ;; 配置特性(b7 - buspwr, b6 - selfpwr, b5 - rwu)
      db   50      ;; Power requirement (div 2 ma)USB总线上的所需消耗的电流,一个二进制1表示2mA。

再次是接口描述符的结构

      db   DSCR_INTRFC_LEN      ;;接口描述符长度09H
      db   DSCR_INTRFC         ;; 描述符类型04H
      db   0               ;; 接口号
      db   0               ;; 可替换设置值
      db   4               ;; 支持的端点数,4个,端点2,4,6,8.不包含端点0
      db   0ffH            ;; 接口类代码
      db   00H               ;; 子类代码
      db   00H               ;; 协议代码
      db   0               ;; 接口字符串描述符

最后,重点是端点描述符

      db   DSCR_ENDPNT_LEN      ;; 端点描述符长度07H
      db   DSCR_ENDPNT         ;; 端点描述符类型05H
      db   04H               ;; 要配置的端点号,最高位表示传输方向,0表示out,1表示in
      db   ET_BULK            ;; 传输类型,批量传输
      db   40H               ;; 最大数据包的长度低字节Maximun packet size (LSB)
      db   00H               ;; 最大数据包的长度高字节Max packect size (MSB)
      db   00H               ;; 访问间隔,用于中断传输方式

上面我们把四种描述符简单介绍了一下,大家多少应该有个印象,我现在解释一下四个描述符的分工及作用。

首先设备描述符,一个USB只对应一个USB设备描述符,它是USB 描述符最总体,最高层的描述符。这里引用电脑圈圈的例子,如果把一个USB设备比作一个教学楼,对USB的设备描述符就相当于对这个教学楼的总体描述信息。在设备描述符中决定了USB的配置数,即设备描述符的下一层既是配置描述符,配置描述符是用来表示这个USB设备有什么用处的,USB设备可有多个配置,但是同一时刻只有一个配置有效,即只有一个作用有效。例如把教学楼分为考试用和平时上课用,这两种配置是不能同时发生的。配置描述符下面就是接口描述符了,接口描述符,是将usb的用途再进行细分,比如说教学楼配置为平时上课用的时候,其可以分为两种接口,一种是用来学生上课,一种是用来教师休息室。最后就是端点描述符了,端点最后就相当于教室了,若干个教室用于教师休息室,若干个教师可以用于学生上课。

其实这四个描述符中,就设备描述符和端点描述符对应了实际东西,设备描述符对应了USB这个设备,有些同学会问端点是什么,端点其实就是数据传输的BUF,是一块RAM,可以理解成一块FIFO。数据传输的时候都是先把数据传送到这个BUF,在发送出去,或者由固件程序读取。固件程序是指在USB芯片68013中的跑的程序。所以端点描述符对应的就是一块RAM。

没想到描述符写了这么久,还有一些别的描述符,我没有介绍,大家可以参考 薛园园的 USB应用技术开发大全,看看别的描述符如何定义的。写了好长时间了,下次我再介绍USB包和USB事务吧。这两个概念构成了USB 的传输方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值