usb 驱动
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 驱动的更多相关文章
- usb驱动开发24之接口驱动
从第一节我们已经知道,usb_generic_driver在自己的生命线里,以一己之力将设备的各个接口送给了linux的设备模型,让usb总线的match函数,也就是usb_device_match, ...
- Linux内核USB驱动【转】
本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内 ...
- USB驱动开发大全【转】
本文转载自:http://www.360doc.com/content/12/0504/19/8363527_208666082.shtml 编写USB驱动程序步骤:1所有usb驱动都必须创建主要结构 ...
- usb驱动开发15之设备生命线
总算是进入了HCD的片儿区,既然来到一个片区,怎么都要去拜会一下山头几个大哥吧.,先回忆一些我们怎么到这里的?给你列举一个调用函数过程usb_control_msg->usb_internal_ ...
- usb驱动开发14之设备生命线
直接看代码吧. /*-------------------------------------------------------------------*/ /** * usb_submit_urb ...
- usb驱动开发12之设备生命线
函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了 ...
- usb驱动开发10之usb_device_match
在第五节我们说过会专门分析函数usb_device_match,以体现模型的重要性.同时,我们还是要守信用的. 再贴一遍代码,看代码就要不厌其烦. static int usb_device_matc ...
- usb驱动开发5之总线设备与接口
Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init的函数bus_register(&usb_bus_type)里注册.usb_bus_type定义 ...
- usb驱动开发1之学习准备
此系列是http://blog.csdn.net/fudan_abc/博文的整理,同时加入了自己的理解.很敬佩fudan_abc的文章,仔细学习和分析受益很多.注:fundan_abc所分析linux ...
- Linux USB驱动
linux usb 驱动详解 一 http://blog.163.com/cl2006ky@126/blog/static/87195173201131245557340/ USB设备驱动开发-USB ...
随机推荐
- 汇编invoke和call的关系
win32汇编里面,我们既可以用invoke也可以用call调用子程序/函数,不过invoke使用简单方便,所以绝大多数情况我们都用invoke. 但是很多人只是知道使用它,对它却不是很了解.我以前对 ...
- how to make form:checkboxes in JSP
retransmitTable.jsp file: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix=&qu ...
- 【leetcode】Longest Palindromic Substring (middle) 经典
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- tomcat部署javaweb项目的三种方式
一.将项目文件夹或war包直接拷贝到tomcat的webapps下 二.在Tomcat\conf\Catalina\localhost下建立xml文件 修改内容如下<Context path=& ...
- cocos2d-x 常规库的图文件配置
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE := cocos_lua_static LOCAL_MODULE_FILE ...
- xcode 预编译头文件
xcode 预编译头文件 cocos2d-prefix.pch #import <Foundation/Foundation.h>
- Android:ScaleType设置图片
设置例子:ImageViewId.setScaleType(ScaleType.CENTER); ScaleType:设置图片显示方式 效果预览:
- 【POJ】2104 K-th Number
区间第K大数.主席树可解. /* 2104 */ #include <iostream> #include <sstream> #include <string> ...
- Android开发之错误:elicpse运行时弹出Running Android Lint has encountered a problem failed, nullpointerexception
昨天安装了下Android Studio,把SDK路径指向了ADT目录下的SDK目录.同时FQ出去更新了下SDK.然后今天运行eclipse的时候,弹出错误,同时在工程的名称处有错误提醒,但是代码中没 ...
- Mac修改用户名
Mac 修改用户是一件很悲剧的事,因为牵涉到很多地方的修改,当然,如果只是需要满足登陆用户名的修改的话,就比较简单.而如果需要将某个用户在每一个地方显示的名字都改掉的话,就要修改不是地方了,下面就来讲 ...