果壳中的USB理解.docx
- 文档编号:30024206
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:29
- 大小:231.78KB
果壳中的USB理解.docx
《果壳中的USB理解.docx》由会员分享,可在线阅读,更多相关《果壳中的USB理解.docx(29页珍藏版)》请在冰豆网上搜索。
果壳中的USB理解
果壳中的USB
USB协议的理解
刚开始做USB可是非常困难,650页的规模庞大的协议理解起来要相当长的时间。
这只是一长串的USB相关协议标准的开始。
只有97页的HID接口规范却有详细的设备(键盘,鼠标等)使用介绍。
这有像HID接口规范一样的USB协议介绍。
如果你正在开发一个USB主机设备,你有三个USB主机控制接口协议供选择,没有一种在USB协议中有详细的介绍。
好消息是你不用阅读整个USB协议。
一些章节不用仔细去看,USB控制IC也使你更容易的使用USB。
让我们建议的来看一下USB协议的各个章节和他们的主要内容。
章节
章节名
概要
页码
1
Introduction
包括USB产生的动机和条件。
最重要的部分就是列出了各种USB接口的规格。
这一章不用看。
2
2
Termsandabbreviations
这一章对USB协议中用到的一些术语做了解释。
8
3
Background
指出USB对用户来说是一种简单的即插即用设备(不是对开发者),介绍了USB低速、全速、和高速设备的应用。
这一章也不用看。
4
4
Architectural
Overview
这就是你要开始看的地方。
这一章就USB系统的拓补、数据传输率、数据流格式、基本电器规格等做了概述。
10
5
USBDataFlowModel
这一章开始介绍USB数据怎样传输。
它包括了端点、管道。
然后他用了大部分的章节介绍了各种数据传输格式(控制、中断、同步和流格式)。
60
6
Mechanical
这一章详细说了两种规格的USB接口。
这儿的重要信息就是A型USB接口是用来连接下位机的,而B型USB接口是用来连接上位机的。
因此是不可能用电缆将两个上位机连起来的。
所有的连接线都应该是高速或全速的,低速的USB线应该被固定在设备上。
做USB电缆的话可以浏览一下这一章。
7
Electrical
这一章写了包括了导线阻抗、上升/下降沿时间、接收器/驱动器的规格和位编码、位填充。
这一章更重要的部分是数据线上的上拉电阻和传输速度的关系,主机供电电压和设备驱动电压。
除非你想设计硅刻工艺的USB设备,要不然你可以快速翻阅这一章。
8
ProtocolLayer
现在我们开始进入协议层。
这一章描述了USB数据包的控制、PID、地址、端点和CRC包。
这些掌握后就可以进入下一个协议层USB数据包了。
大多数开发者由于使用了USB芯片而不必关心这一层。
然而理解这些状态报告和握手包是有价值的。
9
USBDeviceFrameWork
这一章是整个USB协议中最常用到的,也使我唯一打印下来的一章。
它详细介绍了构成设计者USB协议层最常见的总线枚举和要求法则(设定地址,得到设备描述等)。
这一章必需仔细看。
10
USBHostHardwareandSoftware
这一章写了与主机有关的问题。
包括框架和微型构造,主机控制要求,软件机制和通用串行总线驱动程序模型。
设计主机,可以看这一章。
11
HubSpecification
详细写了集线器配置,分裂等集线器规范。
想设计集线器可以看这一章。
现在我们可以开始看我们需要的部分了。
设计USB外设(软件)只需阅读如下章节:
*4-ArchitecturalOverview
*5-USBDataFlowModel
*9-USBDeviceFrameWork,and
*10-USBHostHardwareandSoftware.
另外USB外设(硬件)只需看:
*4-ArchitecturalOverview
*5-USBDataFlowModel
*6-Mechanical,and
*7-Electrical.
USB外设设计
现在让我们来面对它,大多数人在看了USB协议后仍不知道怎样设计USB设备。
所以在下面的7章中,我们把重点放在设计USB设备需要的方面。
它将帮助你更好的掌握USB和根据你的应用进一步研究问题。
在USB2.0采用高速方式之前,USB1.1已经够复杂的了。
为了更好的理解USB的基本原则,我们省略了USB2.0高速设备部分。
一旦掌握了USB1.1的使用,USB2.0也会变得十分简单。
UniversalSerialBus介绍
USB1.1支持两种速度模式,全速12Mbits/s和低速1.5Mbits/s。
1.5M模式比较慢且不易受到电磁干扰。
从而减少了导线和磁环的成本。
比如说可以用便宜的谐振方式取代晶体振荡器。
USB高速接口已经被装在主流的台式机上。
它的480Mbits/s是为了与FirewireSerialBus(火线)竞争。
USB速度
*高度-480Mbits/s
*全速-12Mbits/s
*低速-1.5Mbits/s
USB总线由主机控制。
所以总线上只能由一个主机。
它不支持多主机方式。
USB直连(USBOn-The-Go)允许两个USB设备不经USB主机端直接相互通讯。
这只限于单一的点对点的连接,如移动电话和个人组织,而不是多个中心或多个桌面配置。
USB主机负责所有数据传输的带宽。
数据可通过协议规定格式传输。
我认为USB的总线拓补是有些限制的。
USB接口的本意之一是减少电脑的接口。
苹果人(原文为“Applepeople”应该是指苹果公司的设计者)说他们的想法来自于AppleDesktopBus,它把键盘、鼠标和一些其他外设都集成到了一个接口上。
USB总线采用分层星型拓补,与10BaseT以太网相似。
这使你的桌子上多了很多的导线和集线器。
但这对我来说并不坏。
很多设备有内置的集线器。
比如有的键盘就带了一个集线器,你的鼠标或相机之类的数码设备就可以简单的连到键盘上。
显示器也有可能集成了一个集线器。
这种星型的连接与菊花式的连接相比有他的好处。
首先各个设备的电源可以控制而且可以切断某个电流过大的设备而不影响其他正常工作的设备。
集线器可以筛选出高速和全速设备,速度较慢的设备就不会收到,这样高速、全速、低速设备就都可以支持了。
USB设备在任何时间都可以连接127个设备。
需要连接更多设备?
只要增加一个主机端口就可以了。
任何USB主机都有两个端点,大多数制造商看到了这个限制开始引进第4第5个来连接硬盘等。
早期的主机有只一个USB接口,所有的端点共享一个带宽。
随着对带宽要求的增长,我们开始看到有集成两个或更多端口来连接专用设备的控制卡了。
USB主机控制器有它自己的规格。
再USB1.1中有两种接口控制规格。
Intel开发的UHCI(UniversalHostControllerInterface)把更多负担压在软件上(Microsoft)从而减轻硬件成本。
Compaq、Microsoft和NationalSemiconductor开发的OCHI()则把更多负担压在硬上(Intel)而使软件更简单。
典型的硬件/软件工程师关系……
从introductionofUSB2.0我们可以看到USB2.0产生的经过。
EHCI(EnhancedHostControllerInterface)的产生,从它的制造者Intel,Compaq,NEC,Lucent和Microsoft联合推出一种接口规范我们可以看出将有且只有一种新的接口出现在操作系统上。
这只是时间问题。
从USB的名字上可以看出这是一种串行总线。
他用到了4根屏蔽导线,两根是电源(+5&GND)。
其余两根是差分数据信号双绞线。
使用NRZI编码(曼彻斯特编码)发送同步字段来同步主机和接收器时钟。
USB支持热插拔,使用者只需简单的把设备连在USB口上。
USB设备会检测器件被拔出和添加新增器件并自动加载驱动,在这期间屏幕上会出现一个沙漏来提醒你驱动正在安装。
最后使用者不必担心IRQ或端口地址之类的端口信息,也不用重启电脑。
当用户不需要时可以直接拔下设备,主机会检测到器件被拔出并自动关闭驱动程序。
加载适当的驱动是由PID/VID(ProductID/VendorID)实现的。
VID是由USB设计者提供的,这被看作是USB的另一个关键点。
最新的信息可以在USB官方网站(www.usb.org)上找到。
其它组织也为一些非商业活动如教学、科研或个人爱好者提供了另外的VID。
一些USB论坛也提供了这项服务。
在这种情况下,你可能希望你自己开发的设备也有一个分配好的VID。
例如大多数芯片制造商都有一个自己的VID/PID组合。
你可以用一个和已知商业产品不同的VID。
其它的芯片制造商甚至可能出售给你一个与他们VID相适用的PID,你可以把它用到自己的产品上。
USB另一个值得注意的特点是它的传输模式。
USB支持Control(控制)、Interrupt(中断)、Bulk(批量)和Isochronous(同步)传输。
先来看同步模式,同步模式允许设备收到一个与允许延时的带宽有关的定义。
这对于音频或视频中因总线拥挤而可能导致的数据损失或帧下降是理想的应用。
这些传输模式使设计者可权衡错误检测和恢复,速率和带宽来做出选择。
连接器
所有的设备都有一个向上的接口连接到主机,每一个都有一个向下的接口连接设备。
这两种接口不可以互换。
从而避免在HUB上接错,譬如把两个向下的接口接在一起。
下面是A型与B型两种接口。
A型是上位机接口。
可以在主机或集线器上看到。
比如在电脑主板上。
B型是下位机接口,可以在USB设备上看到。
有趣的是可以在一些电脑店可以看到A对A的数据线和USB接口充电器转接器。
这与USB协议相左。
唯一用到A对A接口的是一种连接两台电脑的设备(译者:
是设备而不是数据线,光用数据线是不能把两台电脑连起来的数据线是连接移动硬盘的,原作者可能没见到过)。
其它不规范的数据线是一头有USB口(A或B),另一头却是其它接口。
这些电缆的长度也与USB规范不同。
USB2.0另外有迷你USB口。
详见Mini-BConnectorEngineeringChangeNotice。
迷你USB接口大概是位像手机这样的微型电子设备设计的。
B型USB接口对他们来说太大了,不方便。
最经刚刚发布的直连(On-The-Go)协议增加了USB的点对点功能。
它包括了在手机和电子设备中集成USB主机,从而规范了迷你A型头、迷你A型口和迷你AB型口。
我猜测我们很快就会被迷你USB电缆和转接线淹没。
编号
颜色
作用
1
红
VBUS(5V)
2
白
D-
3
绿
D+
4
黑
Ground
表一:
USB每个脚作用
USB导线的颜色是固定的,方便人们分辨每根导线的作用。
该标准规了各种电缆的电气参数。
当你仔细看原始的USB1.0协议时会发现一件有趣的是。
你会发现它也规定了电气属性。
不过在6.3.1.2节中建议导线颜色为灰色(对应2.0的白色)。
USB1.1和USB2.0放宽了对黑、灰两种颜色的分辨要求。
PCB设计者需要参考第六章来确定引脚位置。
电气
不设计USB芯片的话可以不用太了解第七章。
我们简略的来看一下这部分的基本点。
我们已经知道,USB使用的是差分信号。
它采用曼彻斯特编码,通过位填充来保证数据的充分过渡。
在低速和全速设备中,差分的1是D+在15K电阻接地的情况下超过2.8V,D-在1.5K电阻接在3.6V的情况下低于0.3V。
差分的“0”则是在相同情况下D-高于2.8V,D+低于0.3V。
接收端当D+高于D-200mV时则认为是“1”,D+低于D-200mV则认为是“0”。
不同速度总线的极性是相反的。
因此就用“J”和“K”状态标记逻辑电平。
低速状态“J”为差分的0,高速模式“J”为差分的1。
USB收发器有差分和单端输出。
总线模式是由D+和D-上的单端信号决定的。
比如一个设备在被挂起10ms后出现一个单端的0或SE0则被认为是复位。
SE0是指D+和D-同时出现低电平(<0.3V)。
当你使用收发器和FPGA作为USB设备时要特别注意单端的0和差分的0输出。
你不能全当成差分的0处理。
低速和全速模式的USB总线有90欧姆(+/-15%)的特性阻抗(对地)。
因此,选择合适的D+、D-的阻抗是很重要的。
要使数据传输更好必须有合适的阻抗并且偏差在许可范围内。
高速模式(480Mbits/s)需要有17.78mA的电流来减小干扰。
USB设备需要把D+或D-拉高(3.3V)来表明自己的速度模式。
全速设备,如下图所示,需要在D+上接一个上拉电阻来表明它是全速设备。
这些上拉电阻也被主机或集线器用来检测设备是否被移除。
如果没有上拉电阻,USB假定没有设备连接在总线上。
有些设备的上拉电阻是被集成在芯片内部,这样就可以控制设备的连接和断开了。
其它的设备则需要一个外置的上拉电阻。
举例来说飞利浦公司就有一种“SoftConnect”技术。
当一个设备第一次连接到总线时,微控制器就会在连接上拉电阻之前先初始化USB设备,显示设备连接到总线。
否则插入USB时就会有上拉电阻,同时表明有一个设备连接到总线上。
主机就会在微控制器还没初始化设备之前,发出初始化设备指令并要求设备发送设备描述。
其他像赛普拉斯半导体这样的供应商也在他们的EzUSB中用到了一种可软件控制上拉电阻的“Re-Numeration”技术。
wheretheonedevicecanbeenumeratedforonefunctionsuchasInfieldprogrammingthenbedisconnectedfromthebusunderfirmwarecontrol,andenumerateasanotherdifferentdevice,allwithouttheuserliftinganeyelid.ManyoftheEzUSBdevicesdonothaveanyFlashorOTPROMtostorecode.Theyarebootstrapedatconnection。
Figure2:
全速模式Figure3:
低速模式
你会注意到我们没有提及高速模式,高速模式的启动方法和全速模式相同(1.5K上拉到3.3V)。
它会在集线器支持的情况下建立一个高速连接。
当设备运行在高速模式时,上拉电阻就会被移除。
一个USB2.0兼容设备不一定支持高速模式。
这样在速度允许的情况下就可以使用廉价的设备。
它也允许低速USB1.1设备存在的情况,而不必支持全速模式。
然而高速设备必须不支持低速模式。
它只能支持用来启动的全速模式,然后是已成功建立的高速模式。
一个USB兼容downstreamfacingdevice(haihuawu:
这我也不知道怎么翻译才好,具体是指集线器和主机)必须支持所有的这三种模式:
高速、全速和低速。
电源(VBUS)
USB的一大好处就是USB设备可从数据线取电而不需要而外的电源器件或电源线。
Howevermanyleapatthisoptionwithoutfirstconsideringallthenecessarycriteria.
USB设备的电源在配置描述中以2mA为一个单位,这个我将会在以后详细说。
一个USB设备即使是在失去外接电源的情况下也不能使用超过它枚举时的指定值。
以下是三种典型的USB模式:
*低功耗总线模式
*高功耗总线模式
*外接电源模式
低功耗模式从VBUS取电且其功耗不可高于1个单位。
USB协议定义1个单位为100mA。
低功耗模式的设备需要能在电压为4.40V—5.25V的情况下工作。
对于很多的3.3V设备来说,必须要有低压差稳压设备。
高功耗模式也由总线供电,在它被配置之前不能使用超过1个单位的电流,在描述之后可以使用5个单位的电流(500mAMax)。
高功耗模式必须在电压最低为4.40V时也被检测和枚举到。
提供500mA电流后要能在电压为4.75—5.25的情况下工作。
这些电压是指设备接口上的电压。
外接电源模式可从USB总线上得到一个单位的电流,然后从外接电源上取得更大的电流。
当不能连接到外接电源时,它必须保证不从USB总线取大于一个单位的电流。
外接电源模式由于不需要考虑电源问题,所以更容易设计。
一个单位的电流用来使设备在没有其它电源的情况下能够被检测和枚举。
不管是有总线供电还是外接电源供电设备,都不能控制它接口上的VBUS。
当VBUS断开时,设备有10秒的时间来移除D+/D-上的上拉电阻。
其它需要考虑的是必须限制端口的浪涌电流。
这在USB协议的7.2.4.1节中提到了,而且普遍容易忽视。
浪涌电流是由连接在VBUS和GND之间的电容引起的。
在你的设备上,VBUS和GND之间的电容最大的允许值是10uF。
断开设备时,端口可能出现一个很大的峰值电压。
为了避免这个情况,VBUS和GND之间的电容最小的允许值是1uF。
一个典型的总线供电设备,不能使用超过500mA的电流,这也是不可能的。
所以你还想问什么?
挂起模式?
挂起电流
挂起模式在所有设备上是强制性的。
在挂起时,会有额外的限制。
最大的挂起电流与单位电流成正比。
当为一个单位时(默认),最大电流是500uA。
这包括上拉电阻上的电流。
在集线器上,D+和D-都有15K的对地电阻。
为了电源考虑,下拉电阻是与1.5K上拉电阻串联的,在3.3V的电压间就会有16.5K的电阻。
在开始前就会有200uA的电流。
另外3.3v稳压器也会用电。
很多USB设备工作在3.3V。
PDIUSBD就是一个例子。
典型的线性稳压器效率低下,它的平均静态电流是600uA。
所以需要更有效同时也较贵的稳压器。
在大多数情况下,你需要停止微控制器的时钟来减小电流,使它适应500uA的限制电流。
很多人在USB开发论坛上问,超过这样的限制会发生什么情况。
据了解,大多数主机和集线器没有分辨这种微小电流过载的能力,所以你使用5mA甚至10mA的电流依然没有问题。
铭记,在最后一天,你违反了USB协议。
然而在正常操作时,如果你超过了100mA或者你的指定负载,然后期待集线器或主机检测到并断开你的设备,以总线完整性的为代价。
当然你可以设计一个外接电源设备来避免这些问题。
挂起电流对台式电脑来说可能不是一个多大的问题。
但引进了USB直连后,我们可以看到USB主机被集成到手机和移动设备中。
这些电损耗对电池使用时间会有不利影响。
进入挂起模式
USB设备将在总线没有动作超过3.0ms后进入挂起模式。
然后它有7ms的时间来关闭设备和减小电流到指定值。
因而在总线停止活动10ms后,设备只能使用额定的挂起电流。
为了保持和主机或集线器的连接,设备在挂起状态仍需保持上拉电阻的电源。
USB有一个帧开始包或定时发送来保持总线活动。
这防止总线空闲不发送数据时进入挂起模式。
●高速总线每125.0us±62.5ns发送一个小帧。
●全速模式每1。
000ms±500ns发送一帧。
●低速模式在没有低速数据时每1ms都会发送一个EOP(帧结束包)。
术语“全局挂起”是指USB总线整个进入挂起模式。
然而可以发送一条指令到连接指定设备的集线器来使它进入挂起模式。
这被成为“选择挂起”。
设备在收到任何非空闲信号后就会恢复操作。
一个设备被远程唤醒后他会告诉主机从挂起中恢复。
数据传输速率
另一个经常被忽视的地方是USB时钟的允许偏差。
这是在USB协议7.1.11中提到的。
●高速数据传输时钟是480.00Mb/s,数据信号的偏差是±500ppm。
●全速模式传输时钟是12.00Mb/s,数据传输偏差是±0.25%或2,500ppm。
●低速模式传输时钟是1.50Mb/s,数据传输偏差是±1.5%或15,000ppm。
Haihuawu:
ppm是百万分之一,配农药的时候用的比较多,不知道作者怎么想的。
这允许在低速模式下使用廉价的谐振器。
但全速和高速设备不可以。
USB协议
不像数据格式没有具体规定的RS-232或类似的串行接口一样,USB有数层协议。
虽然这听着很复杂,但不要放弃。
一旦你了解了数据是怎样传输的,你只需要担心协议的上层。
事实上大多数的USB控制IC会集成底层协议,从而使它几乎只需要上层协议的设计。
所有的USB传输包括
●令牌包(确定后面会跟着什么)。
●可选的数据包,(载有数据)。
●状态包(用来确认传输和提供错误信息)。
我们已经谈过,USB是主机控制总线。
主机负责所有的传输。
第一个包,是主机用来描述后面将会跟着什么,是读数据还是写数据,设备的地址和指定的端口。
第二个包一般是跟随在一个握手包后面的数据包。
握手包用来报告数据或令牌是否顺利接收,或者报告端口是被停止还是无法接收数据。
通用USB数据包字段
USB上的数据是低位在先的。
USB数据包包含以下几种字段。
●Sync
所有的包都要以Sync字段开头。
Sync字段有8位,用来同步发射器和接收器的时钟。
最后的两位表明PID字段的其实位置。
●PID
PID即为PacketID。
这一字段用来确定将要传输的包的格式。
下面的表格是可能值。
组
PID值
意义
令牌
0001
OUT令牌
1001
IN令牌
0101
SOF令牌
1101
SETUP令牌
数据
0011
数据0
1011
数据1
0111
数据2
1111
MDATA
握手
0010
ACK
1010
NAK
1110
STALL
0110
NYET(无响应)
特殊
1100
PREamble
1100
ERR
1000
Spit
0100
Ping
必须确保这4位的PID的正确。
这4位经取反后补充在后面,形成总共8位的PID。
如下
PID0
PID1
PID2
PID3
nPID0
nPID1
nPID2
nPID3
●ADDR
地址段指明了数据是对应那个设备的。
7位的地址段支持127个设备。
地址0不能使用,它是给还没有分配地址的设备预留的。
●ENDP
这个端点段有4位,允许有16个端点。
低速模式中,在默认端点上只能有两个额外的端点。
(最多4个端点)haihuawu:
简单说一下,默认端点地址0000,一个端点地址对应收、发两个端点,而端点都是单向的。
●CRC
包内的数据有CRC校验。
令牌包有5位CRC,数据包有8位CRC。
●EOP
包结束,由一个字节长的J和两个字节长的单端的0(SE0)组成。
USB包格式
USB有4中不同的包格式。
令牌包表明了后面跟随的包的格式,数据包包含了数据,握手包用来确认数据或报告错误,并且开始另一个包。
●令牌包
有三种格式的令牌包
IN–通知USB设备主机希望读取数据。
Out-通知USB设备主机要发送数据。
Setup–开始控制传输。
令牌包必须符合下列格式:
Sync
PID
ADDR
ENDP
CRC5
EOP
●数据包
有两种格式的数据包,每种能传输0-1023字节的数据。
Data0
Data1
数据包格式如下:
Sync
PID
Data
CRC16
EOP
●握手包
有3钟格式的握手包。
ACK–数据正常接收
NAK–设备暂时无法接收或发送数据。
在中断传输中也用来表示主机没有数据要发送。
STALL–主机处于一种需要主机干预的状态。
握手包个数如下:
Sync
PID
EOP
●
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 果壳 中的 USB 理解