USB学习笔记连载(十二):USB描述符
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种描述符集合在速率配置描述中,有全速和高速两个状态。如下图所示:
![]()
以上是对描述符的简单介绍,这些是学习其他方面的基础。
USB学习笔记连载(十二):USB描述符的更多相关文章
- USB学习笔记连载(二十):FX2LP如何实现高速和全速切换(转载)
CYPRESS的USB外设控制器CY7C68013A是一款广泛应用于USB打印机,手机,存储设备,USB测试等多个领域的经典产品.该产品符合USB2.0协议规范,支持full speed和high s ...
- USB学习笔记连载(二十一):CY7C68013A进行数据传输(一)
官方手册中给出了bulkloop参考例程,此例程是PC从端口2发送出数据,然后从端口6接收到数据,那么根据这个思想,可以进行修改,使得PC机接收到的数据不是从EP2发送过来的,而是从外部逻辑,比如FP ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
- 汇编入门学习笔记 (十二)—— int指令、port
疯狂的暑假学习之 汇编入门学习笔记 (十二)-- int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...
- Binder学习笔记(十二)—— binder_transaction(...)都干了什么?
binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...) ...
- USB学习笔记连载(十五):USB固件更新以及安装驱动
前几篇博客已经把如何更改固件程序和更改USB驱动名称,那么接下来就要把之前生成的 .iic 文件烧录到EEPROM里面去,实现USB的C2启动(笔者使用的是此类型,C2启动). 打开Cypress U ...
- USB2.0学习笔记连载(二):USB基础知识简介
USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
随机推荐
- Atitit 快速开发的推荐技术标准化 规范 大原则
Atitit 快速开发的推荐技术标准化 规范 大原则 1. 如何评估什么样的技术适合快速开发??1 1.1. (重要)判断语言层次..层次越高开发效率越高 4gl dsl> 3.5gl &g ...
- [na]二层sw数据交换
1,同vlan下,两台pc配置了GW,arp请求过程. Pc1 ping pc0的时候,触发pc1的arp请求,发给GW后,GW继续发给pc0(同一个vlan),pc0收到后给pc1回复.Pc1发出i ...
- su 和 su -
单纯使用su切揣到root,读取变量的方式 是non-login shell,这种方式下很多的变量都 不会改变,尤其是PATH,所以root用的很多命令都只能用绝对路径来执行,这种方式只是切换到roo ...
- morgan日志分割
var FileStreamRotator = require('file-stream-rotator') var express = require('express') var fs = req ...
- 【小白的CFD之旅】19 来自计算网格的困惑
经过一年的忙碌,终于又到了寒假时间,小白又满状态复活了. 这一年小白学了很多的课程,但是一年下来,小白却感觉脑袋里没留下什么东西,貌似什么东西都在考完试的那一刹那全还回给老师了.这一年学习之余,小白仍 ...
- shell(7):四则运算
shell 四则运算:expr,let,bc,(()), 1.expr的用法: expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串. 详细 ...
- 添加Fragment报已有父view,需先移除的错
错误LOG: 12-13 17:05:28.754: E/AndroidRuntime(8344): FATAL EXCEPTION: main 12-13 17:05:28.754: E/Andro ...
- 序列化ADODataSet, ADOQuery
经过昨天晚上一折腾把做了一个DIOCP直接传递TADOQuery的Demo,在google上找了一系列的资料. 这样服务端可以直接将TADOQuery查询出来的数据直接转换成TStream自己进行传递 ...
- django模型创建
定义模型 模型,属性,表,字段之间的关系 一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段 定义属性:见下文 创建模型类 元选项 在模型类中定义Meta类,用于设置元 ...
- Ubuntu常用安装源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份 sudo vim /etc/apt/sources.list #修改 sudo ...

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

修改162到187内容即可。

和设备描述符差不多。


