通俗易懂的USB协议详解.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通俗易懂的USB协议详解

Usb详解 USB作为一种串行接口,应用日益广泛。如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握usb. 但是usb的接口协议实在有点费解,linux uhci驱动作者之一Alan Stern曾经就说过“The USB documentation? is downright evil. Most??? of it is just crap, written by a committee. Youre better off ignoring ?most?of 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载有实际数据 最后

文档评论(0)

aicencen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档