USB设备是端口,接口,配置的集合,USB协议是以各种USB描述符来表征USB设备的功能。计算机通过这些描述符来获得USB设备的功能。

USB描述符包括: USB标准设备描述符,USB集线器描述符。HID描述符,这里主要讲解USB描述符。

USB标准设备描述符包括:设备描述符,端点描述符,接口描述符,配置描述符,设备限定描述符,其他描述符。这些所有的描述符都在 官方固件中的 dscr.a51 文件中,注意!!!!!

  1.设备描述符

一共18个字节,14个字段。在官方给的固件程序中的描述如下图:

   上图中42行是用宏定义描述符长度,一共18个字节。

43行描述符类型,其固定为01H,现也用一个宏定义;

44行是表示该USB设备所遵循的USB规范版本号,  一般为0002H,对于高速USB,版本为USB2.0,设置为0200H。

45行设备类别,对于显示类别(04H),01H(CRT显示器),02H(平面显示器),03H(3D显示器),官方固件设置为00H。46行也一样,

47行是协议子类,该字段为0时,表示不使用任何设备类协议。

48行最大数据包大小,对于全速设备,8/16/32/64,对于高速设备,设置为64.

51行到53行是设置上设备的VID&PID&Version ID,这个修改可以重新配置USB的签名,请参看博客《USB驱动安装及固件程序编写》

其他不用设置,保持默认即可。

  2.配置描述符

USB配置描述符9个字节,8个字段。在官方固件中给出了如下描述:

71和72固定。

73和74分别是USB配置总的信息长度。

75行是接口数量,最少为1.

77行配置字符串,若是没有配置字符串,为0。

注意78行是USB设备配备属性。第6位置1为使用总线电源,第5位置1表示支持远程唤醒功能,第0~4位置为0即可,第7位置为1.注意,笔者设计的板卡是从USB端取电,应该配置78行为10100000b。

79行是USB设备运行时所需要消耗的最大电流。以2mA为单位。这里更改为250mA,因为USB口能够提供的最大电流为500mA。

  3.字符串描述符

修改162到187内容即可。

4.接口描述符

注意一下128行的端点数,除了0端点以外,还有2,4,6,8四个端点。其中2和4能作为输出和输入,6和8能作为输出和输入。

5.端点描述符

此部分的设置和接口描述符中的端点数要一一对应,若是使用了一个端点,那么需要更改接口描述符中的128行,设为1.若是使用了两个端点,则设为2,一次类推。

官方固件上面给了两个端点数,一个作为入,一个作为出。

还要注意138行和147行,此设置是端点类型,USB传输类型,包括 中断传输,控制传输,块传输,同步传输。

其中 控制传输:少量数据,无传输时间要求,传输有严格保证;

块传输:大数据量,无传输时间要求和传输速率要求;

同步传输:大量数据,速率恒定,有周期性;

中断传输:少量或中量数据,有周期性要求;

6.设备限定符

和设备描述符差不多。

7.其他速率配置描述符

官方给的固件中,将上述的6种描述符集合在速率配置描述中,有全速和高速两个状态。如下图所示:

以上是对描述符的简单介绍,这些是学习其他方面的基础。

最新文章

  1. 在Azure虚拟机上安装VNC
  2. 【腾讯GAD暑期训练营游戏程序班】游戏中的设计模式作业说明文档
  3. systemctl命令用法详解
  4. 【NoSql】MongoDb
  5. java-io-FileReader和FileWriter类
  6. C语言 共用体
  7. cocos2dx实现象棋之运动
  8. 在hibernate中使用c3p0数据源
  9. WINDOWS 下搭建 OC 集成开发环境
  10. poj 2425 A Chess Game_sg函数
  11. [方法] Windows 下SSH远程连接Linux
  12. TOGAF架构内容框架之概述及架构工作产品分类
  13. 增强学习 | AlphaGo背后的秘密
  14. kettle闪退问题
  15. 【NOI2001】炮兵阵地(状态压缩,动态规划)
  16. 我写的python代码的规则
  17. [Swift]LeetCode989. 数组形式的整数加法 | Add to Array-Form of Integer
  18. corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的
  19. GitHub上README.md编写教程(基本语法)
  20. hdu-1043 bfs+康拓展开hash

热门文章

  1. 读取JPG图片的Exif属性(一) - Exif信息简介
  2. mydqldump 备份数单库 然后还原数据的时候报:ERROR 1881 (HY000) at line 52: Operation not allowed when innodb_forced_recovery > 0.
  3. FFmpeg编译: undefined reference to 'av_frame_alloc()'
  4. IIS写权限漏洞 (HTTP PUT方法利用)
  5. Recommender Systems中Yehuda Koren 和 Ma Hao的paper
  6. 每日英语:Google Scraps Plan to Build Hong Kong Data Center
  7. centos 7 min 编译安装php5.6+nginx1.7.5 笔记
  8. DIOCP开源项目-DIOCP3的LoadRunner11测试报告
  9. Django import / export实现数据库导入导出
  10. 【Java】通用版URLConnection 带cookie下载PDF等资源文件