USB协议规范学习(一)
什么是USB OHCI规范?
OHCI(Open HCI)是目前使用比较广泛的三种USB主机控制器规范之一。USB体系结构是由四个主要部分组成:客户软件/USB驱动,主机控制器驱动(HCD),主机控制器(HC)和USB驱动。前两者由软件实现,后两者由硬件实现。而OHCI就是规范了主机控制器驱动和主机控制器之间的接口,以及它们的基本操作。在主机控制器驱动和主机控制器之间,有两个通信通道,第一个是应用位于HC的一套可操作寄存器,它们包括控制寄存器、状态寄存器和列表指针寄存器;另一个通道是应用称为主机控制器通信域(HCCA)的共享内存。
USB的4种协议规范
介绍USB协议的细节知识之前,有很多相关的软硬件的基础知识,需要了解一下。
2.1. USB相关的硬件
USB设备,从物理上的逻辑结构来说,包含了主机Host端和设备Device端。
其中,主机Host端,有对应的硬件的USB的主机控制器Host Controller,而设备端,连接的是对应的USB设备。
2.1.1. USB控制器类型:OHCI,UHCI,EHCI,XHCI
由于历史原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。
不论是那种USB主机控制器,简称主控,都是符合对应的USB的规范的,都是实现了对应的USB规范中所规定的USB主控所要的那些事情的。只不过是不同的USB主控的类型,有着不同的特点。
下面对这些不同类型的USB主控制器,进行简要的解释。
2.1.1.1. OHCI和UHCI
OHCI,Open Host Controller Interface,创立者是Compaq,Microsoft和National
Semiconductor。
UHCI,Universal Host Controller Interface,创立者是Intel。
两者之间的相同点是:
不论是OHCI还是UHCI都是对应于USB 1.1的标准的,都是完全符合USB协议标准的。
区别在于:
只是各自的实现方式有些略微不同而已。当然对应的具体的性能,也略有差别,具体的差异,,和实际的应用有关系。
但是本身OHCI和UHCI的区别在于:
虽然都是实现了USB1.1协议规范,但是在功能划分上,OHCI更多地把要做的事情,用硬件来实现,因此,实现OHCI的USB控制器的软件驱动的开发工作,相对要容易些,软件要做的事情,相对较少。
对应地,OHCI更多地应用在扩展卡,尤其是嵌入式领域中,常见的很多开发板中的USB的控制器,很多都是OHCI的。
而UHCI把更多的功能,留给了软件,相对来说,软件做的事情,即负担要重些。但是实现对应的UHCI的硬件的USB控制器,价格上,就相对便宜些。
对应地,UHCI更多地应用在PC机中的主板上的USB控制器。
2.1.1.1.1. 为何Intel设计的UHCI把更多的任务都留给软件实现?
对于两者的区别和实际的应用,自己分析,不难发现,其是有着内在的逻辑关系的。
因此,作为UHCI的创立者Intel,创立了UHCI,把更多的USB需要做的事情,留给了软件,这样就可以实现出相对教便宜的USB的主控制器了,可以用于PC端的CPU所对应的主板上,便宜的USB主控,当然相对市场来说,更容易多卖出去一点,有利于市场推广。
PC主板卖出的多了, 自然对应的Intel的CPU,也会多卖点,Intel自然可以赚更多的钱了。
2.1.1.1.2. 为何嵌入式系统中的USB主控多用OHCI,而非UHCI?
而对应的Compaq,Microsoft和National
Semiconductor所创立的OHCI,由于把更多的USB要做的事情,都用硬件实现了,这样对应的软件驱动所要做的事情,就少了,这样就有利于实现对应的OHCI的USB主控的驱动了,这点对于嵌入式系统来说,尤其重要,因为本身嵌入式系统就是资源有限,所以要尽量少的利用其他资源,比如CPU资源,去实现特点的功能,所以,倾向于采用对软件资源要求少的OHCI,而不是UHCI,否则用了UHCI的USB主控的话,需要实现对应的驱动,软件要做的事情太多,不利于在嵌入式系统这有限的资源环境下实现。
2.1.1.1.3. OHCI和UHCI技术细节上的区别
关于OHCI和UCHI在技术细节方面,更加详细的区别主要有这些:
- 单帧内的stage的个数
对于控制传输来说:
- OHCI:在单个帧内,可以调度多个stage;
- UHCI:在单个帧内,只调度一个stage。
- 单帧内的transaction的个数
对于最大数据包大小小于64字节的Bulk端点来说:
- OHCI:单个帧内,可能会有多个transaction。
- UHCI:单个帧内,不超过一个transaction;
- 轮询的频率
- OHCI:,即使端点描述符中,已经指定了最大延迟是255ms,但是OHCI主控还是会,至少每32ms就去轮询一次中断端点
- UHCI:UHCI主控可以支持,但是不是必须要支持,更低频率地轮询
2.1.1.2. EHCI
EHCI,Enhanced Host Controller Interface。
简单说就是,EHCI定义了USB 2.0的主机控制器的规范,定义了USB
2.0的主控,需要包括哪些硬件实现,需要实现哪些功能,其也对应着对应的系统软件,所面对的是哪些接口。
EHCI对USB主控的定义,详细到了寄存器的级别了,即定义了你USB主控,都要实现哪些对应的功能和对应的寄存器有哪些,分别是何种功能等。然后对应的软件驱动人员,去写USB主控的驱动的时候,也就清楚有哪些可以利用的系统资源,如何去使用这些资源,读取,设置对应的寄存器,实现对应的功能了。
对应的EHCI规范,可以去Intel的官网找到:
2.1.1.3. xHCI
xHCI,Extensible Host Controller Interface
同EHCI是针对USB 2.0类似,xHCI是针对的USB 3.0规范。也是定义了USB
3.0主控需要如何实现,需要包含哪些功能,也是提供了寄存器级别的定义。
对应的xHCI规范,可以去Intel的官网找到:
Extensible Host Controller Interface (xHCI) Specification for USB
3.0
2.1.1.4. OHCI,UHCI,EHCI,xHCI的区别和联系
针对上述的解释,对USB的不同类型的主机控制器,简要概括如下:
表 2.1. 不同USB控制器类型OHCI,UHCI,EHCI,xHCI的区别和联系
USB主机控制器类型 | 共同点 | 区别 | |||
---|---|---|---|---|---|
对应的USB的协议和支持的速率 | 创立者 | 功能划分 | 常用于 | ||
OHCI | 都实现了对应的USB的规范中所要求的功能 | USB 1.1=Low Speed和Full Speed | Compaq,Microsoft和National Semiconductor | 硬件功能 > 软件功能⇒硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单 | 扩展卡,嵌入式开发板的USB主控 |
UHCI | Intel | 软件功能 > 硬件功能⇒软件的任务重,可以使用较便宜的硬件的USB控制器 | PC端的主板上的USB主控 | ||
EHCI | USB 2.0=High Speed | Intel | 定义了USB 2.0主控中所要实现何种功能,以及如何实现 | 各种USB 2.0主控 | |
xHCI | USB 3.0=Super Speed |
Intel | 定义了USB 3.0主控中所要实现何种功能,以及如何实现 |
各种USB 3.0主控 |
2.1.2. USB接口的引脚定义
USB接口的物理上的对应的引脚和对应含义等,可用下表概括:
表 2.2. USB 1.x/2.0的引脚定义
引脚 | 名称 | 电缆颜色 | 描述 |
---|---|---|---|
1 | VBUS | Red | +5 V,电源 |
2 | D− | White | Data −,数据线 |
3 | D+ | Green | Data +,数据线 |
4 | GND | Black | Ground,接地 |
表 2.3. USB 3.0的引脚定义
PIN | COLOR | SIGNAL NAME(‘A’ CONNECTOR) | SIGNAL NAME(‘B’ CONNECTOR) |
---|---|---|---|
1 | Red | VBUS | |
2 | White | D− | |
3 | Green | D+ | |
4 | Black | GND | |
5 | Blue | StdA_SSRX− | StdA_SSTX− |
6 | Yellow | StdA_SSRX+ | StdA_SSTX+ |
7 | Shield | GND_DRAIN | |
8 | Purple | StdA_SSTX− | StdA_SSRX− |
9 | Orange | StdA_SSTX+ | StdA_SSRX+ |
Shell | Shell | Shield |
2.1.3. USB的接口(CONNECTOR)类型
由于USB的产生就是为了支持众多种应用的,而由于各种应用中,对于硬件接口的大小也有一些限制,比如有些小型设备或者移动式设备中,接口不能太大等,所以而设计出多种类型的接口,用于不同的应用。
在介绍插头和插座之前,先多解释一下,基本的叫法。
插头,plug,对应的也叫公口,即插别人的;
插座,receptacle,对应也叫做母口,即被插的;
对上述解释,想多了的,面壁去;没想多的,继续看技术介绍。
下面就来简单的介绍一下不同的USB接口类型,即各种不同的插头插座:
USB的接口类型,根据接口形状不同,主要可以分为三大类:
- 普通的硬件直接叫做Type
- 然后有小型版本的叫Mini迷你的
- 和更加小的,叫做Micro微小的
其中每一种大类中,又都可以分为两类
- A类(Type A)
- B类(Type B)
转自:http://blog.micro-studios.com/?p=2974
USB协议规范学习(一)的更多相关文章
- USB otg 学习笔记
1 USB OTG的工作原理 OTG补充规范对USB2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作.OTG有两种设备类型:两用OTG设备(Dualrole device ...
- USB协议规范文档简介
USB协议规范文档简介 USB驱动开发必须对USB相关的协议规范有一定程度的了解,理解得越深,遇到的问题就会越少,解决问题的速度也就越快. 工欲善其行,必先利其器.USB协议规范就是USB ...
- USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)
转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...
- usb入门学习
1.学习资源: usb org.http://www.beyondlogic.org/usbnutshell/usb3.shtml http://wenku.baidu.com/view/028231 ...
- STM32 USB CAN 学习笔记 - 共享RAM的用法
USB 时钟可以一直使能. 如果CAN时钟没有使能,RAM 能被软件读写.(CANBus 不能发送和接受Message) 如果CAN时钟使能,RAM不能软件被写. CANBus Core 控制此RAM ...
- USB OTG学习
1. 概要 OTG设备使用插头中的ID引脚来区分A/B Device,ID接地被称作为A-Device,为连接时候的USB Host,A-Device始终为总线提供电力,ID悬空被称作为B-Devic ...
- SD卡协议规范学习
首先,本博文遵照SD卡协议3.01版本,最旧协议版本为1.10,但是协议是向下兼容的.SD卡Physical Layer Simplified Specification Version 3.01英文 ...
- USB协议学习
URB:USB 请求块(USB request block,urb)是USB 设备驱动中用来描述与USB 设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff 结构体.
- usb协议栈学习笔记
1.usb 集线器为什么一般都是只有4个扩展口? PC的根集线器可为每个A型连接器提供5V.500mA电源.一个总线供电的外部集线器可为每个端口提供100mA电流.由于USB为为外部集线器电路分配10 ...
随机推荐
- 学习UFT11.5历程(一)
博主三年来测试都是功能测试 看了虫师的文章,感觉是要学点东西.所以,听从虫师的话,不被眼花瞭乱的测试技术打扰,先学习UFT,再学习python. 再不学习感觉要被淘汰了...... 也不想有谈工资的时 ...
- angular 路由请求js文件
<script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.3.2/an ...
- <mvc:annotation-driven/>与<context:annotation-config/>的区别
在使用注解的方式配置SSM的时候一般会配置<mvc:annotation-driven/>与<context:annotation-config/>,有时候会对两者的概念有些区 ...
- PBOC~PPT-补充内容B(转)
PBOC电子现金基于借记/贷记应用上小额支付的一种实现.在借记卡上可以解释为预付,在贷记卡上可以解释为预先授权.预付的金额或预授权额度在卡片中体现为可脱机消费的金额,也就是电子现金余额.电子现金解决方 ...
- drupal字段值的规律
field_abc,则会出现field_data_field_abc这样一个表,然后有entity_id这个字段,然后有field_abc_value或者field_abc_target_id,或者f ...
- Matrix
记载: Matrix Matrix是Android 提供的一个矩阵工具类,位于"android.graphics.Matrix"包下,它本身不能对图像或View进行变换, 但它可以 ...
- windows server 2003(64位)上利用iis6部署32位应用
如果直接部署,会出现如下问题: 试图加载格式不正确的程序. (Exception from HRESULT: 0x8007000B) 解决办法 1.命令行键入: cscript.exe %SYSTEM ...
- java连接数据库步骤
一.加载JDBC驱动程序 Class.forName(driver) ; 如果直接是上面的代码运行,一定会报错.找不到驱动类java.lang.ClassNotFoundException: com. ...
- C#读写TxT文件
文/嶽永鹏 WPF 中读取和写入TxT 是经常性的操作,本篇将从详细演示WPF如何读取和写入TxT文件. 首先,TxT文件希望逐行读取,并将每行读取到的数据作为一个数组的一个元素,因此需要引入List ...
- 学习PYTHON之路, DAY 4 - PYTHON 基础 4 (内置函数)
注:查看详细请看https://docs.python.org/3/library/functions.html#next 一 all(), any() False: 0, Noe, '', [], ...