USB设备从接入HUB到正常工作之前。都属于设备枚举阶段。所谓设备枚举。就是让host控制器认识USB设备,并为其准备资源。建立好主机与设备间的数据传递机制。

该阶段的工作,是USB通信协议规定的,所以属于ISO标准流程。设备枚举阶段也相应了USB设备的五种状态。

设备枚举阶段分为例如以下8个步骤:

  1. 获取设备描写叙述符
  2. 复位
  3. 设置地址
  4. 再次获取设备描写叙述符
  5. 获取配置描写叙述符
  6. 获取接口。端点描写叙述符
  7. 获取字符串描写叙述符
  8. 选择设置配置
当中,步骤1与4都是获取设备描写叙述符,两者有什么差别?
步骤1中仅仅取得设备描写叙述符的固定长度字段,而步骤4是获取设备描写叙述符的所有字段。
通过上述的8个步骤。能够看出:在设备枚举阶段,主机控制器获取了USB设备的全部具体信息(5大描写叙述符),然后为其分配了资源(设置地址)。在设备枚举阶段完毕之后。USB设备就能与USB主机之间进行数据交换了。
同一时候,我们知道USB设备接入USB主机之后有5种状态:
  1. Attached
  2. Powered
  3. Default
  4. Addressed
  5. Configured
这5中状态与USB设备枚举的相应关系是:

  • USB设备插入接口之后,处于Attached状态;
  • USB主控制器会给USB设备供电,此时处于Powered状态;
  • 设备枚举阶段的步骤2。复位操作之后,设备处于Default状态;
  • 设备枚举阶段的步骤3。设置地址操作之后,设备处于Addressed状态。
  • 设备枚举结束之后,设备处于Configured状态。

转载于:https://www.cnblogs.com/lytwajue/p/7111283.html

USB设备驱动之设备初始化(设备枚举)相关推荐

  1. linux设备usb节点和硬件接口,所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动......

    原标题:所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动... 设备驱动最通俗的解释就是"驱使硬件设备行动".操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏 ...

  2. linux设备驱动之总线、设备、驱动

    文章转载至多个地方,网上拼凑的一篇文章,说的好听一些的话那就叫自己总结的文章,只 是多次引用啊,哈哈,哎,不管了,反正这个有利用学习进步就好,这是重要的,文章转载过来要经过一篇大脑才能成为自己的,以后 ...

  3. Linux 设备驱动篇之I2c设备驱动

    ******************************************************************************************** 装载声明:希望 ...

  4. 设备驱动模型:总线-设备-驱动

    1 设备驱动模型简介 参考 以下内容: Linux 笔记: https://xuesong.blog.csdn.net/article/details/109522945?spm=1001.2014. ...

  5. 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)

    目录 自动分配和释放设备号 示例代码 新的字符设备注册到内核方法 字符设备结构体(前面的设备号也放进来) cdev_init结构体初始化函数 cdev_add 添加到linux内核 cdev_del内 ...

  6. linux字符设备文件的打开操作,Linux字符设备驱动模型之字符设备初始化

    因为Linux字符设备驱动主要依赖于struct cdev结构,原型为: 所以我们需要对所使用到的结构成员进行配置,驱动开发所使用到的结构成员分别为:[unsigned int count;].[de ...

  7. Linux设备驱动01:Linux设备驱动概述

    目录 1. 设备驱动的作用 2. 有无操作系统时的设备驱动 2.1 无操作系统 2.1.1 硬件.驱动和应用程序的关系 2.1.2 单任务软件典型架构 2.2 有操作系统 2.2.1 硬件.驱动.操作 ...

  8. 零基础学Linux内核之设备驱动篇(8)_设备模型

    零基础学Linux内核系列文章目录 前置知识篇 1. 进程 2. 线程 进程间通信篇 1. IPC概述 2. 信号 3. 消息传递 4. 同步 5. 共享内存区 编译相关篇 1. GCC编译 2. 静 ...

  9. linux设备驱动总结,《Linux设备驱动开发详解(第3版)》海量更新总结

    本博实时更新<Linux设备驱动开发详解(第3版)>的最新进展. 2015.2.26 几乎完成初稿. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第1章 <Linux ...

  10. linux设备驱动第一篇:设备驱动程序简介

    为什么80%的码农都做不了架构师?>>>    首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的"黑 ...

最新文章

  1. modelsim 各版本 网盘_阿里云盘官方下载-阿里云盘最新版本 v1.0.1
  2. Linux平台定时监控进程退出并自动重启的方法
  3. 三、【线性表】线性表概述
  4. ThinkPHP 3.2.3 关联模型的使用
  5. php3级分类,关于php非递归三级分类输出json数据
  6. 3条原则,16个小点,帮你写出一个优秀的对外接口!
  7. 货车交强险在网上能买吗?
  8. EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
  9. 南京晓庄学院c语言试卷,南京晓庄学院—C语言期末考试复习提纲.doc
  10. win7便签怎么一直在桌面显示
  11. 前端预览pdf文件流
  12. 快速将PDF转换为图片:使用在线转换器的步骤
  13. 深度学习基础(五):循环神经网络概念、结构及原理实现
  14. 《重说中国近代史》—张鸣——(2)战争的开始
  15. 【WhatsApp营销】如何为企业构建WhatsApp聊天机器人
  16. 《老母鸡汤》送给正在坚持在路上的你
  17. windows驱动开发5:WDK Demo:avstream avscamera
  18. Android与PC通过USB连接通信(一)
  19. Python自动化学习笔记(八)——接口开发、发送网络请求、发送邮件、写日志...
  20. 03 Hadoop(HDFS)

热门文章

  1. WCF技术剖析之十八:消息契约(Message Contract)和基于消息契约的序列化
  2. 使用var声明的变量 和 直接赋值并未声明的变量的区别
  3. Oracle常用的几个父栓
  4. ASP.NET下QueryString不同字符编码间强制转换的解决方案
  5. CSS布局说——可能是最全的
  6. C# where用法解析
  7. 通过Python脚本理解系统进程间通信
  8. ocs 2007技巧:查看存档服务记录的消息内容
  9. akshare写etf动量滚动策略
  10. 计算机系统的部件名称作用,电脑配件与每个配件作用详细完整的解释