您的位置 首页 芯闻

USB总线协议基础知识

USB作为一种串行接口,应用日益广泛。如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握usb但是usb的接口协议实在有点

USB作为一种串行接口,运用日益广泛。好像每个工程设计人员有必要把握I2C,RS232这些接口相同,咱们也有必要把握usb.

可是usb的接口协议真实有点隐晦,linux uhci驱动作者之一Alan Stern从前就说过“The USB documentation

is downright evil. Mostof it is just crap, written by a committee. Youre better off ignoring

mostof it ”。

本文将从全体上介绍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 function之间选用的是一种“非对称”的传输,也便是说,不管usb承受

数据仍是发送数据,都是由usb host首要建议。即传输的第一个packet总是由usb host宣布的。这个packet将声

明本次行将进行的数据传输方向,数据传输地址和数据传输类型。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/233530.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部