usb 驱动学习总结:

usb 采用分层的拓扑结构,金字塔型,最多是7层。
usb 是主从结构,主和主或者从和从之间不能交换数据。理论上一个usb主控制器最多可接127个设备,协议规定每个usb设备具有一个7bit的地址,范围是[0,127], 0地址是保留给为初始化的设备用的。

一个完整的USB数据传输过程如下:

下行:
USB主控制器发出命令和数据 -》 根hub -》子hub或者usb 设备。
上行:
设备接收到数据,处理返回数据和信息 -》 上一层hub -》上一层hub...-》主控制器。
hub 集线器可以扩展出更多的usb接口,但是是不能扩展出更多的带宽。

Usb2.0 插头:

USB-A: 指向主控制器,上行方向。

USB-B: 指向设备和hub, 下行方向。

usb3.0 插头:

上图是标准的usb3.0 A接口。
micro的接口,这里不记录,需要的时候查阅。

可以看到usb 主要有四根线, VBUS, D+, D-, GND.

可以看到GND和VBUS比D-,D+要长一些,这是专门为热插拔而设计的硬件结构。
当插入时:
先接通GND和VBUS ,然后接通数据线。
拔下时:
先断开数据线,再断开GND和VBUS

这就保证了在插拔时,不会出现有数据信号而无电源的情况.如果数据数据线早于电源线接通,则可能会让芯片I/O引脚电压比电源电压高,从而进入芯片闩锁-latch up 现象, 一旦进入这个状态,轻则不能工作,重则芯片过流,过热烧毁。要解除latch up现象,必须断开电源,重新上电。

usb信号线的颜色: VBUS:红色 D-:白色 D+:绿色 GND:黑色

参考文献:
http://www.totalphase.com/support/articles/200472426#s1.1

usb 驱动的更多相关文章

  1. usb驱动开发24之接口驱动

    从第一节我们已经知道,usb_generic_driver在自己的生命线里,以一己之力将设备的各个接口送给了linux的设备模型,让usb总线的match函数,也就是usb_device_match, ...

  2. Linux内核USB驱动【转】

    本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内 ...

  3. USB驱动开发大全【转】

    本文转载自:http://www.360doc.com/content/12/0504/19/8363527_208666082.shtml 编写USB驱动程序步骤:1所有usb驱动都必须创建主要结构 ...

  4. usb驱动开发15之设备生命线

    总算是进入了HCD的片儿区,既然来到一个片区,怎么都要去拜会一下山头几个大哥吧.,先回忆一些我们怎么到这里的?给你列举一个调用函数过程usb_control_msg->usb_internal_ ...

  5. usb驱动开发14之设备生命线

    直接看代码吧. /*-------------------------------------------------------------------*/ /** * usb_submit_urb ...

  6. usb驱动开发12之设备生命线

    函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了 ...

  7. usb驱动开发10之usb_device_match

    在第五节我们说过会专门分析函数usb_device_match,以体现模型的重要性.同时,我们还是要守信用的. 再贴一遍代码,看代码就要不厌其烦. static int usb_device_matc ...

  8. usb驱动开发5之总线设备与接口

    Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init的函数bus_register(&usb_bus_type)里注册.usb_bus_type定义 ...

  9. usb驱动开发1之学习准备

    此系列是http://blog.csdn.net/fudan_abc/博文的整理,同时加入了自己的理解.很敬佩fudan_abc的文章,仔细学习和分析受益很多.注:fundan_abc所分析linux ...

  10. Linux USB驱动

    linux usb 驱动详解 一 http://blog.163.com/cl2006ky@126/blog/static/87195173201131245557340/ USB设备驱动开发-USB ...

随机推荐

  1. List<T> 排序

    List<T>的排序 List<DataPoint> dataPointsDataPints = ...; //按RegisterAddress升序排序 dataPointsD ...

  2. hdu 1176

    简单DP  类似于在一个矩形中求最长路径 /************************************************************************* > ...

  3. hdu 4648

    求一个数列中  去掉一些连续的数之后 不改变对m取余后的值 就是求一个最长的连续子序列 对m取余后为0 我的方法可能比较水 #include<iostream> #include<c ...

  4. Samza文档翻译 : Backgroud

    这一页提供了关于流处理的背景知识,描述什么是Samza,以及它为何而生. what is messaging?什么叫消息? 消息系统是用来实现近实时异步计算的一种流行方式.当事件发生时,消息可以被放在 ...

  5. hdu 2897 邂逅明下 博弈论

    这个分区间: 1<=n%(p+q)<=p 必败 其他必胜! 代码如下: #include<iostream> #include<stdio.h> #include& ...

  6. Android studio 下的 NDK 配置方法和注意事项

    http://blog.csdn.net/u013598660/article/details/47341963

  7. 选择排序的openMP实现

    // test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include < ...

  8. Android:简单的开场界面

    接通过ImageView创建一个全屏的图片: <?xml version="1.0" encoding="utf-8"?> <LinearLa ...

  9. font-size:100%和font-size:0

    h1,h2,h3,h4,h5,h6 {font-size:100%;} 正常情况下hx按照一定百分比增加字号,但是指定font-size:100%;就会继承body设置的字体大小 font-size: ...

  10. Android安全问题 程序锁

    导读:本文介绍如何实现对应用加锁的功能,无须root权限 某些人有时候会有这样一种需求,小A下载了个软件,只是软件中的美女过于诱惑与暴露,所以他不想让别人知道这是个什么软件,起码不想让别人打开浏 览. ...