通俗易懂的USB协议详解

上传人:公**** 文档编号:552510900 上传时间:2022-12-22 格式:DOCX 页数:9 大小:232.86KB
返回 下载 相关 举报
通俗易懂的USB协议详解_第1页
第1页 / 共9页
通俗易懂的USB协议详解_第2页
第2页 / 共9页
通俗易懂的USB协议详解_第3页
第3页 / 共9页
通俗易懂的USB协议详解_第4页
第4页 / 共9页
通俗易懂的USB协议详解_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《通俗易懂的USB协议详解》由会员分享,可在线阅读,更多相关《通俗易懂的USB协议详解(9页珍藏版)》请在金锄头文库上搜索。

1、Usb详解USB作为一种串行接口,应用日益广泛。如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握usb.但是usb的接口协议实在有点费解,linux uhci驱动作者之一 Alan Stern曾经就说过The USBdocumentationis downright evil. Most of it is just crap, written by a committee. Youre better off ignoringmost of it ”。本文将从整体上介绍usb协议,包括usb host ,usb hub,usb function。希望能给读者一个总体上的

2、了解。也因此,文章将分成相应的三部分讲解。一。usb function1。初识usb.usb是一种串行接口协议,它靠d+,d-两条数据线构成的差分线来进行数据传输,这让我们非常感兴趣它到底和我们通常熟悉两线rs232/485有何区别。了解这种区别有助于我们对usb作一个深入的了解。那么让我们回想一下到底一个两线rs232的数据是如何传送的,如图一:IL _II皿: _ ”_ r_L旦: Start Brt_/ Bit 1 X X 颐 恥 /瞬皿 Bit ,;:十WORD t *:图一 RS232 .timing在这里我们的重点在于,我们发现要在串行口传送数据一个最体码的要求恐怕就是:要知道数据

3、传输何时开始,何时结束。即如何delimit.那么rs232怎么做的。显然,在idle (空闲)时,即无数据传送时,数据线处于高电平,等到有数据开始传送,发送方首先拉低数据线(start),表示数据传输开始,接受端也因为这个“start”信号开始准备接受即将到来的数据,类似一次握手,随后,在两者之间的数据传送开始,结束后主方再次拉高数据线,表示结束传输,自此两者重新进入Idle状态。等待下一轮传送开始。了解了 rs232,那么我们自然想到usb如何做到这个呢,既然是串行位流传输,也理所当然的解决这个问题。没错,Usb协议必然要解决这个问题,让我们作一个类似rs232的比较吧!类似于rs232,

4、usb的传输桢如图二:IDLESYNCINADDRENDPCRC5EOPIDLE图二:usb packst(这里我们暂时忽略这个传输所代表的意义)为了说明问题,我们对一些问题简化,我们定义这样几个状 态:假设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 ;SEO: D+=D-=0;SE1: D+=D-=1;那么上面的图中,相应的也可表示为图三:喝-usb i

5、n packet的传输这个对usb full speed function来说,idle状态将处于Data J state,se0表示一桢结束。看这个图是不是 很像我们熟悉的rs232。没错他们确实很相似。在无数据传输时,它们都处于Idle状态,当要开始传输数据时,先发一个sync(同步信号,rs232为start,usb为一 sync字节,见协议说明)信号进行握手”,而后开始传 输,当传输要结束时,发一 stop信号(usb为一个se0状态表示要结束传输),最后又进入idle态等待新的传 输。不过,你可能更加注意到,他们还是不同的。不同在于usb是按packet进行传输的,就是说它传输的最小

6、单位是 packet,而rs232是按字节传送的,也即它的最小传送单位是字节。既然是按pakcet传送,想想我们相较于rs232 的按字节单位传输,我们可以得到哪些“好处”。想想看,pakcet的好处不就在于我们可以灵活的定义数据的传送格 式,传送方式,从而可以适应各种各样的串行设备,这不就是所谓的“通用串行总线”吗?简介:从本节开始,我们将介绍usb的传输机制。这节先介绍usb现有传输方式的背景知识,做为对下节 将要展开的四种传输类型,描述符,等相关知识的一个导引。2。usb传输。我们在上一节中了解到了 usb的“packet的感念,了解到了 usb传送一个packet总是以sync开始,以

7、eop 结束,这个称为delimiter,即标记packet的始末。有了 packet,我们就可以在usb总线上传输数据了。但是这还 不够,比如数据传送方向,即传回usb主机还是传下usb从机,数据传送的地址,数据传送的类型(这些后面我 们将会知道)这些信息在传输之前是必须搞清楚的,那么这个信息如何得知呢,看来这就需要我们定一套基于packet 的“协议”了。主机与从机在传输中均遵循这套“协议”,那么这些问题就可以迎刃而解。事实上,usb的一次数 据传输总是遵循这样的“协议”的:首先,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。其次,主机发第2个至第n个pac

8、ket载有实际数据最后,从机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样主 机就可以借此了解到这次传输情况,从而有可能来作出相应措施如决定是否重发。这里我们考虑的是主机发数据给从机的情况,那么从机发数据给主机时,是不是也可以这样呢?当然可以, 比如从机要发数据给主机时,也可以采取同主机类似的方式:首先,从机发第1个packet给主机,声明数据传送方向,数据传输地址,数据传输类型。其次,从机发第2个至第n个packet载有实际数据最后,主机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样从 机就可以借此了解到这次传输

9、情况,从而有可能来作出相应措施如决定是否重发。基本上可以归结为一个“三段式”传输这里有人可能注意到了,对这样一个传输机制,从机和主机的功能将是一样的,因为这样的实现机制,从 机可能在某一时刻是主机,某一时刻又可能是从机,因为他们要实现同样的功能。这样实现起来的复杂性也 将是一样的。注:这里概念或许容易混淆,其实,我们这里的主机(master)和从机(slaver)是一个transceiver,即可收可发。相应的,在某一时刻,master在发数据,我们称其为transmitter,在接受时我们称为receiver.对slaver同 样。我们可能还注意到了,usb这种按pakcet传输的方式在实现

10、时已经很复杂了(至少比rs232要复杂多吧), 至少我们目前看来主从机功能一样这样的实现方式似乎还是可行,但是后面我们谈到usb host时将会了解到host 的功能是如何的复杂,以至于让一个usb function也带上如此的功能成本和实现复杂性将陡然上升。作为面向 广范应用的usb,这是我们不允许的。我们期望的是一个使用usb的udisk,使用usb的光驱,使用usb的耳麦 等等这些东西不要因为usb而变得昂贵,复杂。正是因为这个原因,usb从机的传输发式便由上面的方式改成了下面的方式进行:首先,主机发第1个packet给从机,声明数据传送方向,数据传输地址,数据传输类型。 其次,从机收到

11、主机送来的第一个packet后,再发第2个至第n个packet载有实际数据 最后,主机返回一个packet是一个ACK包,报告数据传输的结果,比如接受出错或成功等信息,这样从 机就可以借此了解到这次传输情况,从而有可能来作出相应措施如决定是否重发。而对于usb主机传输方式保持不变。对于这样的改变,我们马上就有疑问了:这个改变的传输方式是和未改变之前的等价吗。当然,不全等价。 问题在哪里?仔细观察一下便知,两者区别在于第一个packet是由谁发起的。未改变之前,第一个packet总 是由要传送数据的一方发起,而改变之后的第一个Packet总是由主机发起。这样,就变成如果从机要发送数据给主 机时,

12、总是由主机发起(第一个packet),然后从机开始传送。可能初次接触我们会感觉怪怪的,怎么从机要给主机发送数据前反而要主机先发packet给从机。这样行 吗?我们要说这样是可以的,因为通常一次传输交互的产生,并非无来由的产生,这些都是由程序员控制的, 控制usb何时收,何时发,及发给谁这里我们就注意到了,usb function(总是作为从机)的功能一下从原来与主机具有相同功能的tranceiver 变成了现在仅具发送(或接收)功能的transmitter (或Receiver)实现的复杂性及成本可想而知也就相应得减 小了。简介:本节介绍usb full speed function的四种传输

13、类型。上节中我们了解到了 usb host与usb function之间采用的是一种非对称的传输,也就是说,无论usb接 受数据还是发送数据,都是由usb host首先发起。即传输的第一个packet总是由usb host发出的。这个packet 将声明本次即将进行的数据传输方向,数据传输地址和数据传输类型。控制传输(Control Transfers):或许你已经注意到了,一个usb host端口并不是仅仅支持一个Usb function.如图1,图一TYPICAL USB ARCHITECTURAL CONFIGURATtON、 USBZ/b通过usb hub,一个usb host端口可以

14、连接usb鼠标,usb键盘,Usb写字板。要连接这么多东西在同一个usb host上,我们通常会有一个基本问题,即usb host如何识别这些被连接在它的端口上的设备呢。正如 通常的主从式通讯系统一样,如rs485多机通讯,我们通常是用一个特定的地址标志每一个从设备。对这里的usb, 我们采用同样的方法,将为每个挂接在该usb host上的usb function指定一个特定地址,通过这个特定地址来 识别 每个usb function.看来这将是一个usb function在数据传输之前必须解决的问题-得到它的地址分配。这个地址指定的过程需要usb host通知usb function才能完成

15、,这个交互过程就是一个控制式传输。通 过这个控制式传输,usb host将指定地址给usb function,以为即将进行的正式通讯做好准备工作。这里细 心的读者可能已经注意到了,既然usb host总要分配地址给usb function才能进行正式的数据传输工作,那 么usb host将如何与一个初始时未分配地址的usb function进行交互来分配地址呢。这里,是这样解决的:usb协议保留了一个通用地址0,usb host通过这个地址0来和初始未分配地址的usb function进行通讯, 进行一些初始的准备工作,诸如这里的为它非配一个特定地址。后面我们就会了解到,usb除了配置地址外,还 有一些其它参数需要事先主从双方达成共识。这些参数也都是通过控制式传输完成的。一个Usb的控制式传输如 图二:SETUPStageDATAStage (optional)STATUSStage一个Usb的控制式传输分为两个或三个阶段进行传输:setup sta

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号