USB设备系统分为两个部分,USB Host端和USB Device端,以USB接口的U盘为例子,U盘自身是一个USB Device,PC机的USB接口以及相关的控制电路为USB Host部分。

    每个部分由硬件部分和软件部分组成,硬件部分由USB主机控制器和USB接口芯片来组成,固件(软件)由两侧的驱动程序组成。

   

    为了规范不同厂商的USB设备,IEEE指定了相应的规范,只要不同端的设备都符合此规范,就能正常的通讯。

主机控制器协议

     主机控制器协议有 OHCI、EHCI、UHCI、xHCI。

     对于协议规范里面的特定功能,由硬件来实现还是由软件来实现,这取决于不同的应用场合和环境,因此,就出现了针对USB1.1协议的OHCI和UHCI主机控制器协议。

     OHCI把一些功能实现放在硬件上面,因此,软件方面就比较容易开发,常用于嵌入式系统

     UHCI则把一些功能的实现更多的放在软件上面,因此,硬件上面就可以做的较为简单,适用于大规模生产,常用于PC中

     为了解决USB1.1传输速度低下的问题,USB规范升级到USB2.0,对应的主机控制器规范升级为 EHCI。

     进一步升级USB规范到USB3.0,对于的主机控制器规范为xHCI。下图是不同USB主机控制器的区别。

 

USB硬件接口

    USB的插头和插座,根据不同使用环境,分为三种类型,Type最大,Mini适中,Micro最小。每个类型中又分为A类和B类两个规格。

    

    

USB3.0的接口,USB3.0相比于USB2.0增加了4根线,不过在设计上,保持同USB2.0的兼容。

    

下图是不同规范的协议对比:

 

编码方式

    USB中用NRZI(非归零反转码),电平翻转代表逻辑0,电平不变代表逻辑1.USB的每个数据包都以同步域开头(0000_0001),通过编码成为方波。为了防止发送同样的数据造成的传输误差,USB规定了强制插0的协议,即如果要传输的数据中有7个连续的1,发送前会在第六个1的后面强制插入一个0,强制反转发送信号,使得两侧的接受频率同步。

 

USB的分类

    USB只是一种接口形式,基于此接口,可以有多重多样的设备,为了便于统一管理,对于不同的设备,USB规范规定了不同的设备类型,详细的USB的Class分类参加此链接:

    http://www.xat.nl/en/riscos/sw/usb/class.htm

 

USB的枚举

    USB的枚举,USB Emulation,就是USB初始化的意思,简单的说,就是USB的Host和Device之间的对话。

 

USB的数据传输

    一次USB的传输,由不同事务(Transaction)组成,一个事务是由不同的包(Packet)组成,一个包是由不同的域组成。见下图:

   

    数据传输分为两类:周期性的和非周期性的。

            周期性的有中断传输和等时传输。

            非周期性的有控制传输和批量传输

  参考链接:

USB设备简述:

http://blog.csdn.net/ljzcom/article/details/8574411

USB设备驱动开发:

http://blog.csdn.net/ljzcom/article/details/8574387

usb设备的probe过程:

http://blog.csdn.net/ljzcom/article/details/7419867

USB设备驱动开发之数据结构:

http://blog.csdn.net/ljzcom/article/details/7693209

http://blog.csdn.net/ljzcom/article/details/7693212

http://blog.csdn.net/ljzcom/article/details/7693219 

Technorati 标签: USB

USB接口介绍的更多相关文章

  1. (九)打印机驱动设置—USB接口的设置

    佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...

  2. 【转】实战USB接口手机充电 看3.0/2.0谁更快

    原文网址:http://mb.it168.com/a2012/0816/1385/000001385641_all.shtml [IT168 应用]当下,越来越多的电脑都已普及USB 3.0接口,新买 ...

  3. uart接口介绍和认识

    接口/总线/驱动 UART (Universal Asynchronous Receiver/Transmitter) 通用异步收发器. UART是用于控制计算机与串行设备的芯片.有一点要注意的是,它 ...

  4. USB接口定义 | USB Type C接口定义 | 制作Type A转Type C充电-数据线

    1. USB接口定义 2. USB Type C接口定义 Type C接口母头(插座) Type C接口公头(插头) 引脚定义 参考:https://www.cnblogs.com/zhouhaoch ...

  5. 下一代USB接口将支持双向拔插,于明年亮相

    近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商采用更纤薄的接口设计,在实用性大大提高的同时 ...

  6. C#监控USB接口

    该C#代码实现监控USB接口是否有设备接入或拨出,包括多个U盘. using System; using System.IO; using System.Runtime.InteropServices ...

  7. USB总线介绍

    •USB 1.0出现在1996年的,速度只有1.5Mb/s1998年升级为USB 1.1,速度也提升到12Mb/s,称之为”full speed” •USB2.0规范是由USB1.1规范演变而来的.它 ...

  8. Hive 接口介绍(Web UI/JDBC)

    Hive 接口介绍(Web UI/JDBC) 实验简介 本次实验学习 Hive 的两种接口:Web UI 以及 JDBC. 一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanl ...

  9. SSH动态查询封装接口介绍

    SSH动态查询封装接口介绍 1.查询记录总条数 public int count(Class c,Object[][] eq,Object[][] like,String[] group,String ...

随机推荐

  1. postgrel 调试

    http://blog.csdn.net/anzelin_ruc/article/details/8539411

  2. [原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间

    背景:       随着时间的推移,我们的DW会越来越大,也就意味着磁盘空间会越来越小,那如果哪一天留意不当,就会造成磁盘空间的不足而导致ETL失败,最终影响我们的系统的数据正确性和使用,更严重的有可 ...

  3. JQuery实现回车代替Tab键(按回车跳到下一栏)

    一个提交按钮以后,用户如果按了键盘的回车键,默认情况下,就会提交这个表单了.这样对于用户输入各个表单项目,用户体验很不好,输入完一个项目,或者用鼠标选择下一个项目,或者用键盘的Tab键选中下一个项目. ...

  4. IOS 使用webview 显示 doc/docx/xls/pdf等

    在一款项目里添加阅读各种文档功能 那么对在线的文档或者是下载后的文档 进行阅读,比如 doc/docx/xls/pdf等文件 有两种方法总结如下: 1. - (void)viewDidLoad { [ ...

  5. 点击UITableviewCell展开收缩

    #import "ViewController.h" #import "ZSDTestCell.h" @interface ViewController ()& ...

  6. [JAVA] HTTP请求,返回响应内容,实例及应用

    JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述: 首先让我们先构建一个请求类(HttpRequester ). 该类封装了 JAVA 实现简单请 ...

  7. 【Android 界面效果35】管理Fragments

    http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html

  8. c++ 的几种强制转换的讨论

    http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html static_cast  : 同 c 的强制转换类似: rei ...

  9. Callable--创建有返回值的线程

    转自:JAVA 笔记 Callable 与 FutureTask:有返回值的多线程 常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存.C ...

  10. Java异常的一个小知识

    有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...