USB作为一种串行接口,运用日益广泛。好像每个工程设计人员有必要把握I2C,RS232这些接口相同,咱们也有必要把握usb.
可是usb的接口协议真实有点隐晦,linux uhci驱动作者之一Alan Stern从前就说过“The USB documentation
is downright evil. Most
本文将从全体上介绍usb协议,包含usb host ,usb hub,usb function。希望能给读者一个总体上的了解。也
因而,文章将分红相应的三部分解说。
一。usb function
1。初识usb.usb是一种串行接口协议,它靠d+,d-两条数据线构成的差分线来进行数据传输,这让咱们十分感兴
趣它究竟和咱们一般了解两线rs232/485有何差异。了解这种差异有助于咱们对usb作一个深化的了解。那么让
咱们回想一下究竟一个两线rs232的数据是怎样传送的,如图一:
在这儿咱们的要点在于,咱们发现要在串行口传送数据一个最体码的要求恐怕便是:要知道数据传输何时开端,
何时完毕。即怎样delimit.那么rs232怎样做的。明显,在idle(闲暇)时,即无数据传送时,数据线处于高电
平,比及有数据开端传送,发送方首要拉低数据线(start),表明数据传输开端,承受端也由于这个“start”信号
开端预备承受行将到来的数据,相似一次握手,随后,在两者之间的数据传送开端,完毕后主方再次拉高数据
线,表明完毕传输,自此两者从头进入Idle状况。等候下一轮传送开端。
了解了rs232,那么咱们天然想到usb怎样做到这个呢,既然是串行位流传输,也天经地义的处理这个问题。没错,
Usb协议必定要处理这个问题,让咱们作一个相似rs232的比较吧!相似于rs232,usb的传输桢如图二:
(这儿咱们暂时疏忽这个传输所代表的含义)为了阐明问题,咱们对一些问题简化,咱们界说这样几个状况:
假定D+,D-别离表明usb信号线的电平信号。那么关于usb full speed function(high speed ,low speed是不
同的),咱们界说差分数据线上或许呈现的四个状况:
Data J state:D+=1,D-=0;
Data K state:D+=0,D-=1;
SE0:D+=D-=0;
SE1:D+=D-=1;
那么上面的图中,相应的也可表明为图三:
这个对usb full speed function来说,idle状况将处于Data J state,se0表明一桢完毕。看这个图是不是很像
咱们了解的rs232。没错!!!他们的确很相似。在无数据传输时,它们都处于Idle状况,当要开端传输数据时,
先发一个sync(同步信号,rs232为start,usb为一sync字节,见协议阐明)信号进行“握手”,然后开端传输,
当传输要完毕时,发一stop信号(usb为一个se0状况表明要完毕传输),最终又进入idle态等候新的传输。不过,
你或许愈加留意到,他们仍是不同的。不同在于usb是按packet进行传输的,便是说它传输的最小单位是packet,
而rs232是按字节传送的,也即它的最小传送单位是字节。既然是按pakcet传送,想想咱们相较于rs232的按字节
单位传输,咱们能够得到哪些“优点”。想想看,pakcet的优点不就在于咱们能够灵敏的界说数据的传送格局,
传送方法,然后能够习惯各式各样的串行设备,这不便是所谓的“通用串行总线”吗?
简介:从本节开端,咱们将介绍usb的传输机制。这节先介绍usb现有传输方法的布景常识,做为对下节行将打开
的四种传输类型,描述符,等相关常识的一个扶引。
2。usb传输。
咱们在上一节中了解到了usb的“packet”的感念,了解到了usb传送一个packet总是以sync开端,以eop完毕,
这个称为delimiter,即符号packet的始末。有了packet,咱们就能够在usb总线上传输数据了。可是这还不行,
比方数据传送方向,即传回usb主机仍是传下usb从机,数据传送的地址,数据传送的类型(这些后边咱们将会知
道)这些信息在传输之前是有必要搞清楚的,那么这个信息怎样得知呢,看来这就需求咱们定一套根据packet的
“协议”了。主机与从机在传输中均遵从这套“协议”,那么这些问题就能够方便的解决。事实上,usb的一次数
据传输总是遵从这样的“协议”的:
首要,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。
其次,主机发第2个至第n个packet载有实践数据
最终,从机回来一个packet是一个ACK包,陈述数据传输的成果,比方承受犯错或成功等信息,这样主机
就能够借此了解到这次传输状况,然后有或许来作出相应措施如决议是否重发。
这儿咱们考虑的是主机发数据给从机的状况,那么从机发数据给主机时,是不是也能够这样呢?当然能够,比方
从机要发数据给主机时,也能够采纳同主机相似的方法:
首要,从机发第1个packet给主机,声明数据传送方向,数据传输地址,数据传输类型。
其次,从机发第2个至第n个packet载有实践数据
最终,主机回来一个packet是一个ACK包,陈述数据传输的成果,比方承受犯错或成功等信息,这样从机就能够
借此了解到这次传输状况,然后有或许来作出相应措施如决议是否重发。
基本上能够归结为一个“三段式”传输
这儿有人或许留意到了,对这样一个传输机制,从机和主机的功用将是相同的,由于这样的完成机制,从机
或许在某一时间是主机,某一时间又或许是从机,由于他们要完成相同的功用。这样完成起来的杂乱性也将是
相同的。
注:这儿概念或许简单混杂,其实,咱们这儿的主机(master)和从机(slaver)是一个transceiver,即可收可发。
相应的,在某一时间,master在发数据,咱们称其为transmitter,在承受时咱们称为receiver.对slaver相同。
咱们或许还留意到了,usb这种按pakcet传输的方法在完成时现已很杂乱了(至少比rs232要杂乱多吧),至少我
们现在看来主从机功用相同这样的完成方法好像仍是可行,可是后边咱们谈到usb host时将会了解到host的功
能是怎样的杂乱,以至于让一个usb function 也带上如此的功用本钱和完成杂乱性将猛然上升。作为面向广范
运用的usb,这是咱们不允许的。咱们希望的是一个运用usb 的udisk,运用usb的光驱,运用usb的耳麦等等这些
东西不要由于usb而变得贵重,杂乱。
正是由于这个原因,usb从机的传输发式便由上面的方法改成了下面的方法进行:
首要,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。
其次,从机收到主机送来的第一个packet后,再发第2个至第n个packet载有实践数据
最终,主机回来一个packet是一个ACK包,陈述数据传输的成果,比方承受犯错或成功等信息,这样从机
就能够借此了解到这次传输状况,然后有或许来作出相应措施如决议是否重发。
而关于usb 主机传输方法坚持不变。
关于这样的改动,咱们立刻就有疑问了:这个改动的传输方法是和未改动之前的等价吗。当然,不全等价。问题
在哪里?仔细观察一下便知,两者差异在于第一个packet是由谁建议的。未改动之前,第一个packet总是由要传
送数据的一方建议,而改动之后的第一个Packet总是由主机建议。这样,就变成假如从机要发送数据给主机时,
总是由主机建议(第一个packet),然后从机开端传送。
或许初度触摸咱们会感觉怪怪的,怎样从机要给主机发送数据前反而要主机先发packet给从机。
咱们要说这样是能够的,由于一般一次传输交互的发生,并非无因由的发生,这些都是由程序员操控的,操控usb
何时收,何时发,及发给谁!!!
这儿咱们就留意到了,usb function(总是作为从机)的功用一下从本来与主机具有相同功用的tranceiver变成
了现在仅具发送(或接纳)功用的transmitter(或Receiver)完成的杂乱性及本钱可想而知也就相应得减小了。
简介:本节介绍usb full speed function的四种传输类型。
上节中咱们了解到了usb host
数据仍是发送数据,都是由usb host首要建议。即传输的第一个packet总是由usb host宣布的。这个packet将声
明本次行将进行的数据传输方向,数据传输地址和数据传输类型。