1.7 USB设备描述符及其之间的关系

USB1.1

设备描述符
USB协议版本号 设备类型  端点0最大包大小 VID PID 设备版本号 厂商字符串索引 产品字符串索引 设备序列号索引 可能的配置
配置描述符
配置说包含的接口数、配置的编号、供电方式、是否支持远程唤醒、电量需求 
接口描述符
接口的编号、接口的端点数、接口所使用的类、子类、协议
端点描述符
端点号及方向 端点的传输类型 最大的包长度 查询时间间隔等
字符串描述符 单独获取 获取字符串请求 描述符索引号 语言ID来获取
USB2.0
Device Qualifier Descriptior
Other Speed Configuration Description
还有些 类特殊 描述符 HID描述符 厂家自定义描述符 

1.8 USB设备枚举的过程

枚举的传输方式 控制传输
控制传输的三个过程 :建立过程 可选数据过程 状态过程
枚举的详细过程
1.获取设备描述符  这里面需要注意管道0得到大小和设备描述符的大小 但是管道的最大包长度是在设备描述符的最前面八个字节
2. 设置地址 
3.再次获取设备描述符 ,但是这次的用分配的地址获取全部的设备描述符
4. 获取配置描述符 然后获取配置集合

1.9 USB的包结构及传输过程

1.91 USB的包结构及包的分类

传输以包为单位· 包分为·不同的域  
通用格式 同步域. PID+ EOP
同步域
全速和低速 01H
高速              0001H
低速和全速EOP  大约为两个数据位的的SE0 即D+ D-都保持低电平
复位 10ms的SE0
高速    使用故意的位填充错误来表示。
包标识符PID   一共有八位 PID0-PID4
USB协议包括4类  
令牌包  token packet PID1-0   01 
数据包   data packet PID1-0  11
握手包  handshake PID1-0 10
特殊包 special packet PID1-0 00

1.9.2 令牌包

OUT令牌 通知设备输出一个数据包

IN 令牌 通知设备返回一个数据包
SETUP 用于控制传输 只是用 DATA0的数据包 只能发送到设备的控制端点,设备必须接受 
SOF包 每个帧开始时候以广播形式发送  十一位 不跟随数据

1.9.3 数据包

数据包 DATA0 DATA1高速分裂事务和同步高速高带宽传输 DATA2MDATA

这样的好处可以预防确认型号损坏的情况发送

1.9.4 握手包

ACK    正确接受数据 并且有足够的空间来容纳数据   
主机唯一能使用的握手包
NAK    没有数据需要返回  数据正在接受 但是没有足够的空间来容纳他们
主机接收到NAK以后会在以后合适的时机来重新传输
STALL 设备无法执行这个请求  或者端点已经被挂起了 它是一种错误的状态 设备返回 STALL 后 需要主机进行干预材料解除这种STALL 状态
NYET 只在USB2.0中的高速设备输出事务中使用,表示本次数据成功接收,但是没有足够的空间来接收下一次数据,主机在下一次输出数据时候,将先用PING命令牌来试探设备是否有空间接受数据,以避免不必要的浪费。
NAK不是出错 出错将什么都不返回

1.9.5 特殊包

令牌包
PER  打开低速端口的前导包 只使用全速模式  
与握手包的结构一样 全速设备将忽略这一要求
USB2.0新增
SPLIT  
高速事务令牌包 通知集线器把高速数据转换为全速或者低速数据发送给下面的端口
PING
与OUT结构一样
PING发送以后需要等待ACK命令才能继续发送数据包

握手包
ERR 

1.9.6 如何处理数据包

USB芯片都会处理好数据 只需要规定好要发什么数据就行了

1.10 USB传输的四种类型

按照一定的关系把包组成事务

1.10.1 USB事务包

事务组成  令牌包 数据包 握手包
令牌包启动事务 数据包 握手包(通常数据接受者发送)
批量 同步 和中断传输 是一个事务  
控制传输 建立过程 状态事务 一个事务 数据过程 包含多个事务

1.10.2 批量传输

bulk transaction 一次 批量事务 传输数据 分三个阶段
令牌包 数据包 握手包
批量读 批量写  
批量输入事务时 主机不允许使用NAK握手包 因为 USB所有的读写都是有主机发起的 所以主机既然发起接受请求 受到再拒绝 这种行为就太二了

1.10.3 中断传输

所谓的中断传输和单片机的中断意义不同 是指 以不大于某个时间间隔内安排一次传输

1.10.4 同步传输

没有应答是同步传输的一大特点

1.10.5 控制传输

建立过程
与批量事务传输不同之处
建立过程使用SETUP令牌包
SETUP只能使用  DATA0
握手包 只能用ACK 

 数据过程

数据传输过程中一旦方向改变 就进入状态过程 数据过程第一个数据包必须输出DATA1包,然后交替

状态过程

传输方向与数据过程相反 只能用DATA1

1.10.6 端点类型与传输类型的关系

1.0.7 传输类型与端点支持的最大包长

控制传输  低速 8  高速 64 全速 8/16/32/64
同步传输    全速1023 高速 1024  低速 不支持
中断传输 低速 8 全速 64 高速 1024
批量传输    高速 512 全速 8/16/32/64  低速不支持

转载于:https://www.cnblogs.com/cjxltd/p/7125698.html

圈圈教你学USB第一章相关推荐

  1. 美女讲师教你学Python第一季:基础入门-秦红华-专题视频课程

    美女讲师教你学Python第一季:基础入门-448人已学习 课程介绍         本课程以最新的Python3为基础,面向Python编程语言的初学者: 精选教材,内容反复锤炼,精炼详实,既有实用 ...

  2. 跟着开涛学SpringMVC 第一章源代码下载

    2019独角兽企业重金招聘Python工程师标准>>> 源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 第二章 Spring MVC入门 源代码下 ...

  3. 圈圈教你玩USB学习总结

    前言 最近想学习一下USB的相关知识,然后看大家都比较推荐<圈圈教你玩USB>这本书作为入门资料,看了一个礼拜看到了USB键盘实现章节.因为USB的内容比较多也比较复杂,特写下此文进行梳理 ...

  4. 趣学PYTHON 第一章python不是大蟒蛇

    趣学PYTHON 第一章python不是大蟒蛇 把我自己的学习记录在这里,留下一片回忆. Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:3 ...

  5. Datawhale---动手学数据分析---第一章:数据载入及初步观察(泰坦尼克的任务)

    1.1 载入数据 数据集下载 Titanic - Machine Learning from Disaster | Kaggle 1.1.1 任务一:导入numpy和pandas import num ...

  6. 软件测试为什么要学python_第一章 为什么要学习软件测试

    第一章 为什么要学习软件测试 当今时代是一个互联网+的时代,走在大北京北四环的中关村附近,大厦上 "大众创业,万众创新"的标语振奋人心.互联网+,首先要有互联网,要有互联网就要有提 ...

  7. 【跟阿铭学 Linux 第一章】:学习之初

    第一章 学习之初 1.1 Linux是什么 Linux是一个和Windows一类的操作系统 1.1.1 Linux的由来 GNU计划:加入GNU计划的所有软件都必须自由使用,自由更改,自由发布. GP ...

  8. 动手学数据分析 第一章之探索性数据分析

    要不今天开篇先吐槽一下工作,一句话--底层数据乱得我不想说话.今天一天很平静,跟昨天很像,下面是给我自己说的...关键是我们做的东西是服务于我们自己的,难道不应该是我们想看什么,顺便给某人看一下什么数 ...

  9. 【TL第二期】动手学数据分析-第一章 数据基本操作

    文章目录 第一章 第一节 数据载入与初步观察 0 导库 1 载入数据 2 查看数据基本信息 第二节 pandas基础 1 数据类型DataFrame 和 Series 2 对文件数据的基本操作 3 数 ...

  10. 计算机第一章学什么,第一章计算机基础知识学习课件.ppt

    第一章计算机基础知识学习课件.ppt 3.2.6 表单标记(FORM) 作用:定义一个表单,供后续设计向其中加入表单对象. 格式: 属性:1. action:设定处理程序的文件名. 2. method ...

最新文章

  1. JAVA try...catch...finally中的执行顺序和return语句
  2. python内置对象的实现_Python 内置对象的实现
  3. velocity用法简单实例说明 .
  4. Kafka消息的可靠性
  5. 环境变量PATH、mv命令、cp命令、文档查看命令(cat、more、less、head、tail)
  6. 关于nginx调转404错误页面
  7. 215.数组中的第K个最大元素/347. 前 K 个高频元素
  8. java正则匹配双字节_Java 正则表达式详解(二)
  9. php中这个向右的箭头怎么理解呢?$db-query
  10. 花了一个月精心准备30张可视化大屏模板,可直接套用,拿走不谢
  11. 一个毕业设计 儿童趣味数学 app
  12. 使用代理服务器是否安全?
  13. 为了强调低电平有效,有时也将反相器图形符号中表示反相的小圆圈画在输入端,例如上图的左边一列反相器的画法
  14. 【迁移学习】Self Paced Adversarial Training for Multimodal Few-shot Learning论文解读
  15. 魔高一丈道高一尺,开放接口安全性设计
  16. oppo三年Android更新,OPPO Find X3系列将提供3年系统更新支持
  17. 【Redis】回顾下Redis的过期策略
  18. 用于实时大数据处理的Lambda架构
  19. 入侵网站的黑客被我抓到了!
  20. 基于ARM的智能灯光控制系统总结(3-主程序及全局数据结构)

热门文章

  1. php完整系统由哪几部分,一个完整的物联网系统由哪些部分组成,各有什么功能?...
  2. mysql 存储过程 锁表_MYSQL锁表问题的解决方法
  3. c 创建mysql实体模型_ADO.Net实体数据模型添加DB-First/Code First报错
  4. oracle通信通道的文件结尾_oracle里执行full join 报通信通道的文件结尾问题
  5. element布局容器大小_Element-UI 技术揭秘(4)— Container 布局容器组件的设计与实现。...
  6. yb3防爆电机型号含义_温州出租大型发电机定做-智慧动力机械设备租赁
  7. day15 ( 集合框架)
  8. C语言:使用递归解决汉诺塔问题。
  9. BZOJ 1001 平面图转对偶图
  10. [改善Java代码]使用静态内部类提高封装性