论坛风格切换切换到宽版
发帖 回复
返回列表  提醒:不能用迅雷等P2P下载,否则下载失败标(二级)的板块,需二级才能下载,没二级不要购买,下载不了
  • 1281阅读
  • 1回复

[技术文章]USB体系结构 [复制链接]

上一主题 下一主题
离线layout
 

性别:
帅哥
发帖
1543
金币
7584
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看楼主 倒序阅读 使用道具 0楼 发表于: 2018-07-25
xOZvQ\%  
USB总线接口层:物理连接、电气信号环境、信息包传输机制;主机一方由USB主控制器和根集线器组成,而USB方则由设备中的USB接口组成。 xEB 4oQ5  
USB设备层:由主机方的USB系统软件和设备方的USB设备逻辑视图组成。 PAiVUGp5[  
USB功能层:代表客户软件和一个给定的设备功能接口之间的关系。 R%JEx3)0m  
eTt{wn;6  
USB系统软件执行很多关键的功能,包括: =|d5V%mK  
       设备的连接/断开检测;设备配置;带宽分配;管理客户程序和设备之间的控制流;管理客户程序和设备之间的数据流;收集状态和事务处理的统计信息;事务处理的安排;控制电气接口。  <JZa  
一套USB系统软件存在于系统中,用于管理所有和USB总线相连的所有USB设备的访问。USB系统软件是由于以下部分组成的: 0.#% KfQ  
       USB驱动程序(USBD---为客户软件驱动程序提供接口和服务,分配总线带宽,并管理配置过程; tfv@ )9  
       USB主控制器驱动程序(HCD---控制对主控制器的操作,安排事务处理,并监视事务处理的完成状态。 WX+@<y}%  
VKi3z%kwK  
当一个事务处理被主机系统初始化以后,所有的传输设备和所有的集线器将看到这一务处理。每个事务处理包含一个地址字段,它标识目标设备或集线器,低速设备只能看见低速事务处理,它总是跟在一个高带的前导事务处理之后。 ?hW(5]p|  
efh1-3f  
'IER9%V$  
USB信号环境
QEEX|WM  
e co=ia  
USB采用了NRZI(反相非归零)编码和差分信号。NRZI编码方式既能够确保数据发送的完整性,双不需要独立的时钟信号和数据一起发送。数据流中的电平跳变代表0,而没有跳变则代表1。为保持同步,在连续传输61的情况下,强制在NRZI编码的数据流中加入跳变。这就确保接收器至少可以在每7个位的时间间隔内从数据流中会检测到一次跳动变。 &jDRRT3  
6uFGq)4p@  
一个USB的集线器通过监视差分数据线来检测设备是否已连接到自己的一个端口上。当没有设备连接到USB端口时,和D+D-线相连的下拉电阻(15K)保证数据线接地,USB设备必须至少在D+D-线的任意一条上有一个上拉电阻(1.5K)。全速设备D+上拉,低速设备D-上拉。保持时间2.5us
USB传输
* =O@D2g0  
中断传输---用于在传统PC产品中被称为中断驱动设备的器件。由于USB不支持硬件中断,所以中断驱动的USB设备必须要被周期性地查询,以确定设备是否有数据要传输。 lqKwjJ tX  
块传输---用于传输大块的没有周期和传输速率要求的数据。 cr{dl\ Na  
同步传输---要求有一个恒定的发送速率。保证发送方和接收方之间能够实现传输率的匹配。 tI2p-d9B  
控制传输---用来把特定的请求传送给USB设备,它经常在设备配置中被使用。 sk. rJ  
USB事务处理
&J=x[{R  
在USB上的每次传输广播都由一些信息包组成。这些信息包组合起来定义某个事务处理而某个事务处理又是作为一个大的传输的一部分执行的。事务处理由主机进行初始化,用于把数据发送到USB设备和从USB设备把数据发送出去。 '`p0T%w  
事务处理般由三个阶段(令牌包阶段、数据包阶段、握手包阶段)组成,或者说由信息包组成。 gOk^("@  
令牌包阶段:每一个事务处理类型都从一个令牌阶段开始,它定义了事务处理的类型。有的令牌包跟随一个到两个附加的信息包; gwYTOs ^  
数据包阶段:传输相关的数据。在一个事务处理中可以传输的最大数据包是1023字节。 ,]?l(H $x'  
握手阶段:对数据发送方提供了一个反馈信号,通知发送方数据是否已经被正确接收。 @HXXhYH  
St1>J.k_  
信息包有用来执行所有的USB事务处理的机制。 iainl@3Qj  
同步序列
包ID(标识符)
包特定信息
CRC
包结束标志
~0n9In%  
                                    信息包 ,@2d4eg 4  
CY9`HQ1  
同步序列由8个位(00000001)组成,由于0用差分数据上的电平跳变来编码,所以这7个0在每一位开始的时候都建立一个电平跳变。这就提供了一个时钟,用来同步。同步性序列还通知USB接收器马上要有一个信息包被发送,这个信息包紧跟在这8位同步序列之后。 J~G"D-l<9/  
信息包的标识符定义了信息包的目标和内容,它分为令牌包、数据包、握手包、专用包(前导包) 14\!FCe)!  
信息包的ID:由四位标识符字段组成,后接四位包ID的反码。 ?/s=E+  
信息包的特定信息:这些信息可以组成一个USB设备地址,一个时间片的序列,从USB设备发出或者发送到USB设备的数据,等等。 bRAf!<3  
CRC:数据包使用16位的CRC,而别的包则5位的CRC。CRC的产生和检验仅仅用于信息包的具体数据。 JGk,u6K7  
信息包的结束(EOP):每个信息饭结束都收发送方发出一个信号来表示,具体方法是把两条差分数据线上的电压降低,并且这个低电压将持续两个位的传输时间,而且后接一个位的空闲时间。 z9KsSlS ^  
令牌包的四种类型 =j~}];I  
SOF(时间片开始)-----指出下一个毫秒时间的开始; 'w7{8^Z2  
IN-----表示一个USB事务处理,把数据从目标USB设备发送到系统; ~LzTqMHM  
OUT-----表示一个USB事务处理,把数据从系统发送到目标USB设备; G,i%:my7  
SETUP-----表示一次控制传输的开始。SETUP是控制传输的第一阶段,并用来把一个请求从系统发往目标USB设备。 @)8C  
SOF包内含有一个11位的时间片编号。SOF包定义了一个事务处理,它仅仅由令牌包组成。 wwmODw<tT  
同步序列
包ID(标识符)
11位的时间片编号
5位CRC
包结束标志
v]27+/a$c  
oAp I/o  
当软件希望从一个指定的设备读取信息时,就用到一个IN令牌。IN包通知目标USB设备数据正在被系统请求。IN事务处理用于各种USB传输类型中。一个IN令牌包由ID类型字段、ID校验字段、USB设备地址和端点地址以及5位的CRC组成。一个IN事务处理从一个IN包广播开始,后接一个从目标USB设备返回的数据包。在某些情况,还包括发回到目标设备的握手包,用来确认数据接收。 WJL,L[XC  
y/2U:H  
系统软件指定一个OUT事务处理,当数据发送到一个目标USB设备时,有三种类型的传输采用OUT事务处理,块传输、控制传输的数据阶段、同步传输。一个OUT包由ID类型字段、ID校验字段、USB设备地址和端点地址以及5位的CRC组成。OUT令牌包后跟随一个数据包和一个握手包(仅用于块传输)。 Afa{f}st  
`P4qEsZE>`  
SETUP包仅仅在控制传输的建立阶段使用。SETUP包后跟随着一个数据包,和一个确认包。SETUP事务处理可以跟随一个或多个IN或OUT事务处理(数据阶段)。或者可以仅仅伴随一个状态阶段,状态阶段由一个最后的数据包组成,它从端点传向主机系统。一个SETUP包由ID类型字段、ID校验字段、USB设备地址和端点地址以及5位的CRC组成。 k .l,>s`!  
=U".L  
数据包---Data0和Data1 Lp*T=]C]  
数据包的传输方向由事务处理类型确定,数据既可以传向USB也可以从USB设备传出。一个数据包由ID类型字段、ID校验字段、数据字段(0-1023字节)和16位CRC。 ?0Ca-T Rz  
Jq`fD~(7  
USB设备使用握手包来报告一个给定的事务处理的状态。数据的接收器负责给发送方发回一个握手包。 am05>c9  
确认包(ACK)---确认数据包被无错误地接收了; (;h]'I@  
非确认包(NACK)---报告主机目标设备暂时不能接收返回的数据。在中断事务处理中,NACK表示当前没有数据可以返回到主机。 j|(bDa4\  
停止包(STALL)---目标设备用来报告它不能完成传输,并且要求软件进行干预,使设备从停止状态恢复。 XT_BiZ%l5O  
?-'Q-\j  
前导包 ;3sT>UB  
在广播一个低速信息包之前,必须广播一个前导包,通知所有的集线器在这个前导包后面跟随一个低速的事务处理。前导包由一个同步序列和一个包的ID组成的,该包以全速传输。之后延迟四个全速位的传输时间。 w } 2|Do$5  
@]#+`pZ4A  
TJ5{Ee GV  
JT^E `<nn  
+;[`fSi  
事务处理 L{fP_DIa  
IN事务处理:数据被无错误地接收;(主机发送ACK包) .Na>BR\F  
            数据接收的时候有错误; (没有握手包) \a]\j Zb  
            目标设备暂时不能返回数据;(USB设备返回NAK包) 6l vx  
            错误状态被清除之前,目标不能返回数据;(USB设备返回STALL停止包) p go\(K0  
            发生了一次同步传输,返回数据,没有握手运作。 q%:Jmi>  
OUT事务处理:数据被无错误地发送;(USB设备返回ACK包) (Fgt#H(B  
            数据发送出错;  (没有握手包) )Y&De)=  
            目标设备暂时不能接收数据;(USB设备返回NAK包) sqZHk+<%  
            错误状态被清除之前,目标不能接收数据;(目标设备返回STALL停止包) *u{.K:.I  
            发生了一次同步传输,数据被发送到目标设备,没有握手运作。 JN KZ'9  
SETUP事务处理/控制传输:控制传输总是从一个SETUP事务处理开始,称为建立阶段。建立阶段定义控制传输的性质。某些控制传输包括一个数据阶段,该数据阶段由一个或几个IN或OUT事务处理组成。控制传输的最终阶段是状态阶段。该阶段确认所要求的操作已经成功完成了。控制传输以两种基本基本形式存在:①传输由建立阶段和状态阶段组成②传输由建立阶段、数据阶段和状态阶段组成。 kyo ,yD  
SETUP事务处理的数据阶段包括8字节的信息,该信息指出了大量用于定义将被执行的设备请求信息。
错误恢复
dju&Ku  
信息包错误检查; NxX1_d  
错误EOP; wD,F=O  
总线超时(没有响应); j'J*QK&Q  
数据触发器错误检查; MM8)yCI  
串扰---在时间片结束之后发年事务处理; wbS++cF<  
LOA---总线活动丢失。 c\b>4 &n  
T&23Pf1  
三种类型的包错误:包ID(PID);CRC;位填充错误。发生以上错误,接收方忽略这个信息包,并且不会返回一个信息包。 ( L6`_)  
信息包的类型和CRC
Y) t}%62  
信息包的类型
*-Yw0Y[E  
字段名
KnFbRhu[  
字段的最大长度
GQZUC\cB  
CRC
L wu;y@[  
SOF
5,((JxX$  
时间片编号
E37@BfpO3  
11位
2Ls<OO  
5位
|5/[0V-vy  
IN
d#tUG~jc  
设备地址和端点地址
UK<"|2^sT  
11位
KE3v3g<  
5位
O&s6blD11  
OUT
an2Tc*=~l(  
设备地址和端点地址
ZF/KV\Ag)  
11位
qpeK><o  
5位
e4b~s  
SETUP
~Iu09t|a  
设备地址和端点地址
FS}z_G|4]  
11位
9 $S,P|  
5位
tVcs r  
DATA0
N9ufTlq s  
数据
] 6gu  
1023字节
R)C+wTG;  
16位
<<1oc{i  
DATA1
;hvXFU  
数据
yi?&^nX@9,  
1023字节
{EUH#':  
16位
:qp"Ao{M  
ACK
y {]%,  
z&0V21"l  
K5lp -F  
f)x}_dw%  
NAK
ftPw6  
,f+5x]F?m  
[VW;L l  
TH!8G,(w  
STALL
g4 X,*H  
(r4VIlap  
J":9  
ODEXQl}R  
PREAMBLE
<yPHdbF  
}6> J   
m4wTg 8LJ  
'[8b0\  
总线超时:事务处理的发送方在16个位时间内一定不会超时,但是在18个位时间后则一定时。 )''wu\7A)'  
错误的EOP:如果接收方在发送方实际完成传输之前检测到包的结束(EOP)。错误的EOP往往会导致一个CRC错误。 '>Y 2lqa  
数据触发出错:数据触发是一种机制,用来确保数据传输的发送方和接收方之间保持同步。数据触发机制解决了和握手包出错相关的问题。 B,833Azi  
串扰:如果在总线上的一个设备没有结束它的事务处理(不停地串扰),这种不断的串扰有可能对整个总线造成死锁。串扰在时间片结束时被检测到,如果设备在时间片结束时不处于空闲状态,那么这个设备必须被隔离,方法是把和这个设备相连的集线器端口禁止掉。 HJR<d&l;p  
LOA---总线活动丢失:一个设备从一个包的传输开始,后接总线上的一个恒定的J或K状态,而且没有EOP。检测和处理类似串扰。
USB供电分配
USB电源管理
USB设备配置
设备描述符-----描述了设备所支持的配置的数量;
配置描述符-----指出了一个或多个接口而且定义了某些和这个配置相关的属性;
接口描述符-----定义了端点的数量,它们和接口相关,而且定义了某些和接口相关的属性;
端点描述符-----指出了和给定的端点相关的属性,以及那些主机软件需要的信息,这些信息可以确定这个端点应该怎样被访问;
字符串描述符-----可选的描述符,由UNICODE字符串组成。
类特定描述符-----设备类附加的描述符。
每一个描述符都包含一个类型字段,用它来识别上面列出的这此描述符的类型。
设备描述符:
QP%Fz#u`  
字段编号
字段名
字段大小(字节)
字段取值
说明
0
长度
1
数字
描述符的长度(以字节为单位)
1
描述的符类型
1
常数
设备描述符,0x01
2
USB版本号
2
BCD
4
设备类
1
类代码
5
设备子类
1
子类
子类代码
6
设备协议
1
协议
7
最大数据包大小
1
数字
8、16、32、64
8
设备供应商
2
ID
供应商ID
10
产品
2
ID
产品ID
12
系列号
2
BCD
出厂编号
14
设备供应商索引
1
索引
15
产品索引
1
索引
16
系列号索引
1
索引
17
配置数目
1
数目
配置描述符:
jPNfLwVkl:  
字段编号
字段名
字段大小(字节)
字段取值
说明
0
长度
1
数字
描述符的长度(以字节为单位)
1
描述的符类型
1
常数
配置描述符,0x02
2
总长度
2
数字
用于配置的返回数据的总长度,包括所有被返回的用于配置的描述符(配置描述符、接口描述符、端点描述符、类或设备供应商自定的描述符)加在一起的长度。
4
接口的数目
1
数字
配置所支持的接口数目。
5
配置值
1
数字
作为Set Configuration的一个参数选择配置值。
6
配置索引
1
索引
描述配置的字符串描述符的索引。
7
属性
1
位段
D7     总线供电
D6     自供电
D5     远程唤醒
D4..0  保留
8
最大供电量
1
毫安
以2毫安为单位
每一个配置描述符都有一个唯一的配置值,用来配置这个设备。配置软件通过使用“Set Configuration”请求配置一个设备。这个配置值是在“Set Configuration”期间的SETUP事务处理的数值字段被指定的。
接口描述符:
] <3?=$  
字段编号
字段名
字段大小(字节)
字段取值
说明
0
长度
1
数字
描述符的长度(以字节为单位)
1
描述的符类型
1
常数
接口描述符,
2
接口数
1
数字
接口的编号。
3
可选设置
1
数字
用于为在前面的的字段标识出来的接口选择一个可选设置的数值。
4
端点数目
1
数字
本接口所使用的端点数目(0端点除外)。
5
接口类
1
类代码
6
设备子类
1
子类
子类代码
7
接口协议
1
协议
协议代码
8
接口索引
1
索引
字符串描述符的索引。
接口数目和可选设置的字段用于支持USB的可选设置特征。设备可以在相同的配置下定义可选的特征。一个支持可选设置的设备将包含一个或多个附加的接口和端点描述符,同样的接口,但是包含可选的设置。
端点描述符:
qo- F9u1J  
字段编号
字段名
字段大小(字节)
字段取值
说明
0
长度
1
数字
描述符的长度(以字节为单位)
1
描述的符类型
1
常数
端点描述符,0x05
2
端点地址
1
端点
描述符所描述的USB设备上的端点地址
D0..3  端点号
D4..6  保留
D7     传输方向,0:OUT;1:IN
3
属性
1
位段
D2..7 保留
D0..1 00 控制传输
01 同步传输
10 块传输
11 中断传输
4
最大包大小
2
数字
最大信息包的大小。
对于同步端点,该值用于保留进度表中的总线时间,这是每一个时间片传输数据都需要的。
6
间隔
1
数字
数据传输的时候,查询的时间间隔,以微秒为单位。对于块传输端点和控制传输端点,这个字段无效。对于同步端点,这个字段被置为1,对于中断端点,它的值为1-255。
端点描述符定义了在一个给定的设备里实现的实际寄存器。定义了每个寄存器的功能和特定的信息:端点要求的传输类型;传输的方向;带宽需求;查询间隔。
配置软件必须确定USB是否能够支持端点描述所指定的传输,传输所要求的带宽大小在MaxPacketSize字段被指定。如果端点的带宽需求超过了USB的所能提供的带宽,那么设备就不会被配置,而且用户会得到设备没有配置的通知


评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

一般

差劲
人人为我,我为人人。希望大家下载资料的同时能回帖支持,你们的支持,是我最大的共享动力。不回帖以后不共享了。哈哈
离线sun5304

性别:
帅哥
发帖
6244
金币
8073
提示:会员销售的附件,下载积分 = 版块积分 + 销售积分       只看该作者 1楼 发表于: 2018-08-11
学习了。


快速回复
限150 字节
 
上一个 下一个