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 ...
随机推荐
- scrollReveal.js页面滚动动态效果
scrollReveal.jshttp://www.dowebok.com/134.html简介 和 WOW.js 一样,scrollReveal.js 也是一款页面滚动显示动画的 JavaScrip ...
- vue.js 首屏优化
我们以 vue-cli 工具为例,使用 vue-router 搭建SPA应用,UI框架选用 element-ui , ajax方案选用 axios, 并引入 vuex ,使用 vuex-router- ...
- android笔记---ScrollView
<!--在创建xml文件的时候选择ScrollView类型--> <?xml version="1.0" encoding="utf-8"?& ...
- oracle 负载均衡连接方式常用SQL语句备忘录
1.---表中有重复记录用SQL语句查询出来 select * from Recharge where RechargeSerial in (select RechargeSerial from Re ...
- Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量
之前一篇文章介绍了Burpsuite如何抓取使用了SSL或TLS传输的Android App流量,那么IOS中APP如何抓取HTTPS流量呢, 套路基本上与android相同,唯一不同的是将证书导入i ...
- 非nodejs方式的vue.js的使用
1.node环境 详细见我之前的文章,node的安装 2.git环境 git bash命令窗,支持bash命令,cmd不支持bash命令 3.cnpm安装 cnpm是针对国内使用npm网络慢的而使用的 ...
- lua的模块加载require
加载指定的模块.首先函数会在 package.loaded 这个表中查看是否已经加载 了 modname 这个模块.如果是,那么 require 会返回保存在 package.loaded[modna ...
- 【Android】安卓闪电复习
Intent An intent is an abstract description of an operation to be performed 一个Intent就是一次对将要执行的操作的抽象描 ...
- 应用SAP PI实现SAP BW数据仓库对于第三方系统数据完美集成以及DELTA加载的分析
注明:本篇的技术性细节参考了SAP SCN上的一篇SAP PI 和BW集成的文章,本篇文章并不打算过多探讨实现的技术细节,因为在SCN上的这篇英文文章已经完全涵盖了技术细节和配置步骤 大家可以通过搜索 ...
- MyBatis SqlSessionFactory的几种常见创建方式
原文链接:https://blog.csdn.net/jimolangge123/article/details/49228255 MyBatis框架主要是围绕着SqlSessionFactory这个 ...