如何51 P3.0 P3.1模拟USB与PC通讯!!!

[复制链接]
12456|36
 楼主| fengyeu 发表于 2007-11-18 22:30 | 显示全部楼层 |阅读模式
如何51 P3.0   P3.1模拟USB与PC通讯!!!
 楼主| fengyeu 发表于 2007-11-18 22:32 | 显示全部楼层

NRZI

.&nbsp;概述<br />USB2.0利用传输时序的缩短(微帧125us)以及相关的传输技术,将整个传输速度从原来的12Mbps提高到480Mbps,提高了40倍的带宽,为开发高宽带USB接口产品提供条件。USB2.0支持USB1.1的全速(Full&nbsp;Speed)和低速(Low&nbsp;Speed)工作环境,其电气特性在其他文献中有描述[6],这里主要介绍USB2.0高速设备的电气特性以及相关的UTMI接口规范。UTMI全称为&nbsp;USB2.0&nbsp;Transceiver&nbsp;Macrocell&nbsp;Interface,此协议是针对USB2.0的信号特点进行定义的,分为8位或16位数据接口。目的是为了减少开发商的工作量,缩短产品的设计周期,降低风险。此接口模块主要是处理物理底层的USB协议及信号,可与SIE整合设计成一专用ASIC芯片,也可独立作为PHY的收发器芯片,下以8位接口为例介绍PHY的工作原理及设计特点。<br />2.&nbsp;UTMI主要功能及原理<br />首先,为保证兼容性,PHY应该支持全速和高速工作模式。为此高速集线器(Root&nbsp;Hub或Hub)<br />需要能够检测设备是高速端口还是全速端口,以作相应的速度模式进行工作。因此,信号接口须实现以下功能:<br />l&nbsp;不同速率接口之间的动态传输<br />l&nbsp;高速设备检测(HighSpeed&nbsp;Detection&nbsp;Handshake)<br />l&nbsp;高速设备断开检测(HS_Disconnect)<br />l&nbsp;能传输高速/全速差分信号(要求阻抗匹配)<br />l&nbsp;发送和检测高速包开始信号(SYNC)<br />l&nbsp;发送和检测高速包结束信号(EOP)<br />l&nbsp;NRZI编码和位填充(Bit&nbsp;Stuff&nbsp;/&nbsp;Bit&nbsp;Unstuff)<br />l&nbsp;支持挂起和复位的操作<br /><br />&nbsp;<br /><br /><br />图1&nbsp;USB2.0&nbsp;PHY&nbsp;功能模块描述框图<br />图1描述了UTMI各个功能模块,其工作原理如下:PHY从其他转态(如上电、重启或挂起)转换成工作状态后,首先进行高速设备的连接检测(HS&nbsp;Detection&nbsp;Handshake)(后面再详细叙述),检测完毕后切换成相应的工作模式,然后等待主机和设备进行传输数据流。当接收器在USB数据线D+和D-检测到由主机发送到设备的信号时,首先对信号进行时钟恢复,得到正确同步信号后再送进缓冲区,通过NRZI解码及位反填充后,把串行信号转换成并行信号,最后送到设备SIE进行处理。反之,当设备端的SIE需要发送数据包时,UTMI将按照相反的顺序把已编译好的NRZI串行数据流通过发送器传输给主机。为了降低功耗,UTMI支持挂起功能,其工作状态如图2所示。<br /><br /><br /><br />图2&nbsp;UTMI工作状态转换的流程图<br />3.&nbsp;各功能模块分析<br />3.1&nbsp;Clock&nbsp;Multiplier<br />本模块产生UTM的本地内部时钟,同时提供一个外部时钟CLK输出给SIE,协议要求时钟频率的误差范围小于10%(±6MHz),时钟输出CLK的精确度达到±500ppm(30.0KHz),并要求在1.4ms内达到稳定时钟频率。<br />对于8位数据接口,此时的外部时钟CLK输出为60MHz。在高速环境下,一个外部时钟CLK周期即为高速设备传输一个字节数据所需的时间,即(&nbsp;)ms/per&nbsp;Byte;而在全速环境下,5个外部时钟CLK周期为全速环境下传输一位数据所需的时间,即(&nbsp;)ms/per&nbsp;Bit,因此,通常情况下,传输全速一个字节数据的时间为40个外部CLK周期,如果存在位填充,则需要45个周期时间。<br /><br />2.2&nbsp;发送及接收器<br />本文重点介绍高速传输的特点。在高速环境下USB的传输速率为480Mbps,选用这个数值,一方面是可以使用现存的电缆和连接器,另一方面通过对半导体技术的广泛研究与测试,这个速度不仅在生产工艺上没有问题,也与USB&nbsp;1.1的完全兼容。为了减少噪声和电源抖动对传输的影响,提高传输速度,选择差分电流模驱动方式。<br />USB2.0的一个最大挑战就是要设计出低的输出阻抗的高性能收发器[7]。在480Mbps传输时,如果路径没有按照性能要求的阻抗结束,就会产生反射。为此,在传输高速信号时,要给电缆匹配一个90Ω的电阻,以消除信号反射,同时电流源在驱动这个低的输出阻抗时也可增加抗噪声性能。当高速驱动器在工作的时候,总线处于空闲状态,两个数据线都处于低电平状态,此时集线器的全速驱动器和设备的全速驱动器在功能上等效成每个都是45Ω电阻(如图3的圆圈所示),合成90Ω的差分电阻产生一个0系数的反射。协议规定全速驱动器的输出阻抗在45Ω±10%,以符合高速收发器的需要。<br />高速数据传输和低速/全速数据传输一样,数据流以差分不归零码进行编码,在电缆上成差分信号进行传输。发送的高速信号是由高速电流驱动器完成的。驱动器根据高速环境中相应的J或K信号,向D+和D-数据线分别传送电流大小为17.78mA电流,通过一个22.5Ω的负载(两个45Ω的负载并联接地),在&nbsp;D+和D-信号线产生一个近似于±400mv的电压,达到高速差分传输的效果。<br /><br /><br /><br /><br />图3&nbsp;高速差分信号收发器的基本组件<br />2.2&nbsp;HS&nbsp;DLL和FS&nbsp;DLL<br />本模块包含延时锁相环,可以是DLL,也可以是PLL。其主要功能是对高速或全速传输的数据流进行提取及时钟恢复,达到同步和正确提取数据的目的。可以断定,这个模块是UTMI中的核心模块,它的性能的好坏将决定了UTMI接收数据的正确性。需要进一步了解可以参考文献[8]。<br /><br />.3.3&nbsp;MUX&nbsp;/&nbsp;DEMUX<br />选择全速还是高速传输的数据流。<br /><br />3.4&nbsp;NRZI编码/解码<br />与USB1.1原理相同,以提高信号的抗噪声能力。如图4所示,NRZI为差分不归零制编码,这种编码与常规的不归零制(NRZ)编码的区别在于每个&nbsp;&quot;0&quot;码处都有跳变、每个&quot;1&quot;码处没有跳变。在NRZI编码中的,信号通过相邻码元极性的跳变来解码,而不是简单的以绝对电平为准,由此可获得更高的抗干扰能力。<br /><br /><br /><br /><br />图4&nbsp;NRZI编码方式<br />3.5&nbsp;Bit&nbsp;Stuff&nbsp;/&nbsp;Bit&nbsp;Unstuff<br />对于NRZI编码方式会遇到一个严重的问题,就是若一长串连续的&quot;1&quot;将会导致无电平跳变,逐渐的累积,从而引起机收起最终丢失同步信号,使得读取的时序发生严重的错误。因此,在NRZI编码之间,还需执行所谓的位填充(Bit-stuffing)的工作。在连续的传输6个&quot;1&quot;位,强制在NRZI编码的数据流中加入跳变。这就确保接收器至少可以在每7个位的时间间隔,检测到一次跳变,使接收器和传送的数据保持同步。图5说明了位填充的工作方式。<br /><br /><br />图5&nbsp;位填充的工作方式<br />位填充操作从同步数据段(如图7&nbsp;所示)&nbsp;开始,始终贯穿于整个传送过程并严格遵守位填充规则,后面还可以看到高速包的结束EOF也是利用位填充规则来提示数据包结束的。<br /><br />3.6&nbsp;串行/并行转换<br />通过Rx&nbsp;Shift/Hold的寄存器或Tx&nbsp;Shift/Hold寄存器分别将接收的数据或要发送的数据进行相应的串行/并行转换。<br /><br />3.7&nbsp;基本控制单元<br />基本控制单元是为了控制UTMI的工作状态及检测接收数据是否有效。这里主要介绍发射包络探测器(Squelch)。<br />在低电压信号环境下,为了避免探测电缆上引起的噪声信号作为要传输的信号,就需要运用发射包络探测器(Squelch)来检测总线上的信号是否有效。总线空闲时,高速差分接收器处于静噪状态,当检测到包开始信号后,高速差分接收器被激活,此时当差分信号电平小于100mV时,探测器指示总线上的信号无效;只有当信号电平大于150mV时,探测器才会指示接收的高速差分信有效。但这种方法也可能会带来同步上的延时,即在检测到包络和启动接收器之间最多可能会出现4位的延时,但这个延时并不带来同步的问题[3]。<br />4.&nbsp;其他功能分析<br />4.1高速设备的连接检测(HS&nbsp;Detection&nbsp;Handshake)<br />前面原理提到,设备在连接、挂起恢复或复位后,都要进行高速设备的连接检测(HS&nbsp;Detection&nbsp;Handshake)。高速设备的连接检测刚开始是在全速信号环境下进行的。通过高速设备和高速集线器之间传输一个握手信号来指示设备是否为高速设备。<br />如果握手信号传输失败,则默认为全速设备。<br />设备连接到集线器Hub或主机时,全速和高速设备在D+线上有一个1.5KΩ的上拉电阻,由于下拉电阻为15KΩ,D+会加到近似90%的直流电平,当集线器探测到D+的高电平,就认为连接到全速设备。此时,软件就会通过复位命令发送一个RESET信号到集线器,让集线器驱动一个SE0信号(D+和D-都为低电平)超过10ms。高速设备检测到RESET信号后发送一个Chirp&nbsp;K信号给集线器(1~7ms的时间)。集线器的高速接收器若在设备发出Chirp&nbsp;K序列后2.5微秒内检测到,则响应传送一个交替的Chirp&nbsp;K和Chirp&nbsp;J信号序列。设备检测到这6个线性调频脉冲Chirp序列(3个交替的KJ信号对),<br />集线器将连接端口置入高速启用状态,并从D+断开上拉电阻,启用高速设备终端,设置高速设备默认状态。<br />若设备在RESET之后没有发出Chirp&nbsp;K信号或者设备没有检测到集线器响应的交替KJ信号序列,则高速设备就继续以全速模式进行操作。图6的事件时序图说明高速设备连接的过程。<br /><br /><br /><br /><br />图6&nbsp;HS_Detection_Handshake事件时序图<br />其中T0时刻表示HS&nbsp;Handshake开始。在T1时刻,设备发送Chirp&nbsp;K信号并在T2时刻结束;下行端口在T3时刻发送KJ交替脉冲序列,若设备在T6时刻接收到下行端口的Chirp信号后,则设备在T7时刻断开D+的上拉电阻,并设置成HS终端及HS缺省状态,等待高速连接检测结束。T8是指总线中止下行端口发送Chirp&nbsp;KJ信号的时刻;T9时刻则表示最早结束总线高速连接检测时刻,或者表示断开D+上拉电阻后,设置HS终端进入HS的缺省工作状态最晚时间。<br /><br />4.2&nbsp;高速设备断开检测(HS_Disconnect)<br />由于高速设备的连接没有上升电压,所以集线器要用不同的方法来检测设备的移除。高速设备在总线空闲时,D+和D-数据线保持低电平,当设备断开时,线上不会检测到明显的变化,但是此时设备的差分终端电阻消失,而高速包还继续从原来设备连接的端口进行传输。当这个包到达没有负载的路径端点时,一个很大的反射会回到集线器接口,使得集线器连接端口的差分电压加倍,当集线器检测到这个双倍电压就可指示设备已经被移除。协议定义,HS_Disconnect一般是在扩展高速信息包结束符后(extended&nbsp;End&nbsp;of&nbsp;High-speed&nbsp;Packet,&nbsp;HSEOP)USB探测集线器的差分电平,若大于等于625mV则表示设备已经解除连接。&nbsp;4.3&nbsp;高速包开始和同步序列(SYNC)<br />因为设备与主机不是分享同一时钟,接收设备无法正确知道传送设备何时会传送一个新的信息包。为此,要让传送和接收同步,每一个信息包都需要一个SYNC作为包开始,达到让接收设备的脉冲与传送的数据同步的目的。在高速环境中,SYNC是32位:15个交替重复的KJ信号对,最后是两个K信号。图7表示高速同步序列和包开始符。<br /><br /><br /><br /><br />图7&nbsp;高速模式的SYNC信息包&nbsp;<br />4.4&nbsp;高速包结束符(EOP)<br />高速包结束符检测原理如图8所示,每个包都以EOP序列结束。除了高速帧开始信息包中的高速信息包结束符(extended&nbsp;End&nbsp;of&nbsp;High-speed&nbsp;Packet,&nbsp;HSEOP)是40位外,其他高速信息包结束都是8位。这8位结束符是一个没有位填充的01111111b&nbsp;NRZI的编码。如果前一位是J,高速信息包结束符是KKKKKKKK。反之,如果前一位是K,则高速信息包结束符是JJJJJJJJ。不管那种情况,传输的7个位序列都会引起位填充错误,也就是接收器检测到一个有意的填充错误序列,就知道包结束,即使这不是一个EOP,而是出现了一个真正的位填充错误也不例外。&nbsp;<br /><br /><br />8&nbsp;高速传输的包结束符检测<br />4.5&nbsp;复位和挂起<br />设备的复位和挂起信号都是发送一个大于3ms的总线空闲信号,同时在两种状态下高速设备都转换到全速信号环境,因此高速设备必须能够区分这不同两个的事件。当高速设备断开高速电阻并重新连接1.5K&nbsp;的上拉电阻进入全速模式后,在100ms至875ms之内,总线探测D+和D-数据线的状态来判定总线进入复位还是挂起状态。如果D+和D-都是低电平,即Single-ended&nbsp;0,则总线在进行复位;如果是D+为高(上拉)、D-为低(下拉),则总线在发送全速空闲信号,指示设备进入挂起状态。<br />5.结论<br />本文分析了USB2.0接口高速传输的环境特点及在此模式下8位PHY的工作原理。为确保USB2.0在高速和全速环境下正常工作,对UTMI协议也进行了剖析。**还对USB传输的差分NRZI编码及如何增强抗噪声能力和确保数据的正确性做了较详尽的分析。本论文对UTMI及USB2.0接口设计有较好的参考价值。
 楼主| fengyeu 发表于 2007-11-18 22:38 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:38 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:39 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:39 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:41 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:41 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:42 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:43 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:45 | 显示全部楼层

nrzi编码的方法

麻省理工学院MIT<br />电子工程与计算机科学系<br />6.829&nbsp;2001&nbsp;秋季&nbsp;研究背景:单链路通信&nbsp;2001&nbsp;年9&nbsp;月5&nbsp;日<br />概述:本笔记的内容是本课程的研究背景,不会包含在课程的讲解中,只会简单提及。本笔<br />记主要介绍当两台计算机期望通过简单介质相连来达到数据交换的目的时所面临的问题。我<br />们将从两台计算机直接相连的点—点介质开始,然后再扩展到共享介质的方式(例如以太<br />网)。按照传统的分层描述,本笔记覆盖了第二层—数据链路层的基本概念;同时还包含了<br />第一层—物理层的基本概念。<br />预备知识:6.033&nbsp;课程中的大部分知识,特别是关于网络和共享的专题。熟悉协议分层,端<br />—端及其实例;简单的概率和统计学知识。<br />参考资料:MB76,PD00(第二章),PD96(第三章)<br />阅读以上资料作为本笔记的扩展讨论。<br />1.&nbsp;问题描述<br />我们将研究两台相连的计算机“交谈”所面临的看似琐碎的问题。首先,我们说明了实<br />际上这个问题并不如它看起来那么琐碎。然后,我们将系统地将这个过程转换为一个包含5<br />个任务的集合,并解决每个任务。最后,我们将说明这些任务是如何配合工作的。<br />物理介质(例如:电话线,同轴电缆,或是以太网)最初是用于传输模拟信号而不是数<br />字信号。因此,我们需要一种将比特转换为模拟信号的方法,这通常被称为调制modulation,<br />而相反的模拟到比特的转换过程被称为解调demodulation。在物理层需要解决的众多问题<br />中,这是其中重要的一步。<br />实际上我们真正希望做的是将一个大文件传送到其它计算机。假定我们已经解决了调制<br />/解调的问题,并且知道如何传输这些比特。这样我们需要一种将文件有效传输的方法。一<br />种解决策略是将文件看作比特流,然后连续地传输;另一种是将文件“打包”或者将文件分<br />成小尺寸的帧frame,然后再进行传输,这就是所谓的成帧问题framing&nbsp;problem。<br />在所有的环境中都不可能保证在物理介质上无噪声的传输。在很多情况下,我们真正关<br />心的是保证接收者收到的内容恰好是发送者所发送的。这意味着接收者需要一种机制来执行<br />差错检测error&nbsp;detection。<br />在很多情况下,只要能做到接收者检测出差错并将出错部分丢弃就足够了。[你能否体<br />会到成帧为什么是非常必须的?你能否想到在什么情况下丢弃出错部分而不需要做其它处<br />理就足够了?]&nbsp;然而,还有差错的检测和差错的恢复问题。最后,还有很多传输媒体,例如<br />以太网,一台计算机通过一条物理介质可以与两台以上的计算机相联。因此,还需要解决共<br />享sharing&nbsp;的问题。这就是介质访问media&nbsp;access&nbsp;或者信道分配channel&nbsp;access&nbsp;的问题&nbsp;—&nbsp;这<br />个问题主要解决在任意时刻谁能发送数据,并且如何解决和裁决信道的竞争。<br />2.&nbsp;调制/解调<br />方案1.&nbsp;NRZ.&nbsp;在这种最简单得调制方案中,二进制位“1”采用高电平信号传输,而<br />&copy;&nbsp;1999-2001&nbsp;Hari&nbsp;Balakrishnan&nbsp;2<br />二进制位“0”采用低电平信号传输。一种容易被误解得术语“不归零制(Non-Return&nbsp;to&nbsp;Zero,<br />NRZ)”用来描述这种方案。NRZ&nbsp;最大的问题是连续的同一种二进制位(电平)序列会使接<br />收者产生混乱—例如:区分“0”和无信号不是件容易的事情,而太长的连续“1”序列会使<br />基准信号偏离其真正的值。<br />在调制/解调方案中一个关键的问题是使时钟恢复clock&nbsp;recovery&nbsp;更加简便。时钟恢复<br />是指接收者能推断(或“恢复”)发送者的时钟,这是因为发送者根据时钟周期来触发信息<br />(二进制位)的发送。直观地来说,通过0-1&nbsp;或1-0&nbsp;的频繁跳变可以使得时钟恢复变得容<br />易。<br />方案2.&nbsp;NRZI.&nbsp;NRZI&nbsp;是“反相不归零制(Non-Return&nbsp;to&nbsp;Zero&nbsp;Inverted)”的简称。也就<br />是将NRZ&nbsp;方案中的&nbsp;“1”和“0”的表示方法对调。这种方案虽然解决了连续“1”的问题,<br />但同时又产生了连续“0”的问题。<br />方案3.&nbsp;曼彻斯特编码.&nbsp;在曼彻斯特编码中,发送者用从低到高的电平变化表示“0”&nbsp;,<br />而从高到低的电平变化表示“1”。这保证了每位的传输,并且方便了时钟恢复。虽然它解决<br />了上面提到的NRZ&nbsp;的问题,但它的效率会受到一些影响。[&nbsp;为什么?]<br />方案4.&nbsp;4B/5B&nbsp;编码.&nbsp;这种方案通过增加一位二进制位避免了过长的连续“1”&nbsp;或连<br />续“0”,从而解决了曼彻斯特编码的低效率问题。可以简单的认为通过增加一些冗余数据(编<br />码)而使得时钟恢复变得容易。明确的说就是将每4&nbsp;位二进制位串转变为5&nbsp;位编码,然后将<br />其采用NRZI&nbsp;方案进行编码(这就是我们为什么介绍NRZI&nbsp;编码的原因!)。这种方案的关键<br />在于通过4&nbsp;位到5&nbsp;位的编码的转化,保证了在有效编码中不会出现3&nbsp;个以上的连续“0”,这<br />就使得采用NRZI&nbsp;方案成为可能。[&nbsp;想想4B/5B&nbsp;编码的效率是多少?]<br />3.&nbsp;成帧<br />成帧协议的例子包括:点到点协议PPP(&nbsp;Point-to-Point&nbsp;协议)以及高级链路控制规<br />程HDLC(High-level&nbsp;Data&nbsp;Link&nbsp;Control)。成帧的基本思想是发送者使用起始标志(HDLC<br />中使用著名的8&nbsp;位模式,01111110)来划分二进制位串的边界,而起始标志间的部分就是<br />帧。链路层使用上述调制方法之一来将帧传送到接收者。在接收者,链路层处理这些帧,<br />并将它们提交给发送者指定的高层应用,这就是最简单的协议分层实例。在上述描述中,<br />每层都有三个接口:(1)对等接口,用于与对等方通信;(2)低层接口,发送者通过该接<br />口来接收数据,而接收者通过该接口来发送数据;(3)高层接口,作用与低层接口相反。<br />这种成帧策略带来的一个问题是起始标志可能在实际传输的数据中出现,如果不做任<br />何处理,接收者将会向高层传送错误的数据。解决这个问题的策略被称为位填充bit<br />stuffing,并有很多著名的填充序列。在HDLC&nbsp;和PPP&nbsp;中,发送者每遇到5&nbsp;个连续的“1”<br />就在后面插入1&nbsp;个“0”。这样,接收者使用如下解码策略:如果发现5&nbsp;个连续的“1”,则<br />看紧接着的位的值了。如果为“0”,则其必然为填充位,将该位删除,然后继续处理;如<br />果为“1”,则要么是起始标志,要么是填充位在传输过程中出现了差错;而这两种情况是<br />非常容易判断的,只需要看下一位的取值&nbsp;—&nbsp;下一位必须为“0”。<br />这种HDLC&nbsp;和PPP&nbsp;采用的形成帧的方式被称为面向比特的成帧方式。这种方式的一<br />个问题是填充位的总长度取决于实际负载、不固定。<br />&copy;&nbsp;1999-2001&nbsp;Hari&nbsp;Balakrishnan&nbsp;3<br />4.&nbsp;差错检测<br />有很多种方式来检测传输中出现的差错,包括奇偶校验,校验和以及CRC。差错检<br />测的难点在于需要尽可能少的产生开销。具体细节可参加Peterson&nbsp;和Davie&nbsp;所编写的著作<br />(第一版),我不可能描述得更好了。<br />5.&nbsp;差错恢复<br />有很两种方式来恢复传输中的差错或者数据的丢失:自动重新请求ARQ(Automatic<br />Repeat&nbsp;reQuest)和前向差错纠正FEC(Forward&nbsp;Error&nbsp;Correction)。ARQ&nbsp;方式是接收者通过<br />使用某种确认机制来保证重传;而FEC&nbsp;使用编码理论通过增加冗余位来允许接收者纠正传<br />输中出现的差错。在本课程我们不研究FEC&nbsp;方式(在MIT&nbsp;有其它课程研究该问题)。<br />5.1&nbsp;ARQ<br />最简单的恢复是采用确认机制,即:发送者发送一个报文(或帧),然后等待接收者的<br />应答(ACK);当收到应答后,发送者发送后续报文。如果在给定的间隔(称为超时间隔)<br />内未收到ACK,则认为报文出错或丢失,这时将重传报文。这种简单的机制被称为停—等<br />(stop-and-wait)机制。<br />有人可能认为停-等机制不需要在报文首部加任何的信息,因为一个报文在任意时刻都<br />是很明显的。但是,实际情况却不是这样的,因为发送者不能完全确定一个假定丢失的报文<br />是否真的丢失(或者出错)1。例如,一个报文的传输时延比超时间隔长。这意味着ARQ&nbsp;协<br />议需要一个序号来保证接收者能识别重复报文。很容易想到,即使在重传同一个报文的情况<br />下,循环使用1&nbsp;位序号(wraps&nbsp;around)也足够了。<br />停-等协议最大的问题在于在一个往返时间间隔(RTT,&nbsp;round-trip&nbsp;time)只允许传送一<br />个报文,这导致了最大吞吐量受限于在RTT&nbsp;中传送报文的尺寸。换句话说,发送者和接收<br />者间的通信管道未被充分利用。<br />若信道的带宽为B,RTT&nbsp;为d,那么收发者间可最多传送多少数据呢?&nbsp;假设这个数量为<br />P。我们知道当信道被填满时,带宽B&nbsp;被充分利用。我们还知道当信道中未确认的总字节数<br />为P,并且没有数据丢失时,接收者的吞吐量为P/d。因此,在没有变化的情况下实际管道<br />容量为B×&nbsp;d&nbsp;。这个数量经常被称为网络中发送者和接收者间的带宽-&nbsp;延迟乘积<br />bandwidth-delay&nbsp;product。理想情况下,发送者会保证B×d&nbsp;字节在管道中,而不会在处理前<br />等待每个报文的应答(除非B×d&nbsp;&lt&nbsp;S,其中S&nbsp;是报文的大小)。<br />这种方式可使用基于窗口的协议(window-based&nbsp;protocol)来实现。直觉上,达到链路<br />最大利用率的理想窗口的尺寸为B×d,而且窗口应该是滑动的。协议将以如下方式工作,<br />发送一个窗口的报文后等待应答,然后再发送下个窗口的报文。因此,我们使用滑动窗口协<br />议sliding-window&nbsp;protocols&nbsp;来到达我们的目标。<br />滑动窗口协议的基本思想是接收者对其接收到的每个报文进行应答,而发送者则向右滑<br />动一个窗口位置。这时,发送者可再发送一个新的报文来保证未应答报文的总数等于窗口的<br />1&nbsp;一般来说,在有丢失倾向(loss-prone)的网络中信息的发送者和接收者不能做到真正的同步。这就是著<br />名的“两军问题(two-generals&nbsp;problem)”,即在山谷两侧的两军希望统一共同攻打山谷上的敌军的作战时<br />间,而信息的传递需要士兵骑马通过山谷。在传递信息的过程中,士兵有可能被消灭,也有可能被敌军捕<br />获。很容易证明真正解决这个问题的最短协议(shortest&nbsp;protocol)具有矛盾的特性。注意在最短差错协议<br />中,最后传递的信息是多余的,因为它也有可能丢失,这就使得我们很难选择最短协议。<br />&copy;&nbsp;1999-2001&nbsp;Hari&nbsp;Balakrishnan&nbsp;4<br />尺寸。在很多实际的协议中,这个窗口是弹性的,作为保证接收者的接收缓冲区不会被发送<br />者的大量数据淹没的流量控制flow&nbsp;control&nbsp;的一种手段。<br />虽然我是在链路层的ARQ&nbsp;问题中描述这个问题,但是滑动窗口和确认的思想不仅应用<br />在单链路中,在其它层次中也被广泛应用。在后面的课程中,我们会看到在传输层协议,如<br />TCP&nbsp;中类似的思想是如何被采用的。<br />6.&nbsp;共享媒体访问<br />一般情况下,我们可以像在常用的以太网技术中那样通过一条物理介质连接两个以上的<br />节点。这种媒体被称为共享媒体shared&nbsp;media&nbsp;并带来了另外一个重要问题—媒体访问media<br />access。这个问题主要是解决多个竞争的站点在使用共享信道时的冲突问题。解决该问题的<br />协议被称为媒体访问控制协议(MAC,Media&nbsp;Access&nbsp;Control)。<br />通常,有很多种MAC&nbsp;协议。集中式协议主要依赖于网络中的一个中心控制者来仲裁在<br />任意时刻谁能使用信道。另一方面,分布式协议没有任何站点来完成这样的工作,而是使用<br />分散式机制。一个特别有趣的实例是在以太网中使用的被称为带二进制退避的CSMA/CD<br />(Carrier&nbsp;Sense&nbsp;Multiple&nbsp;Access/Collision&nbsp;Detect&nbsp;载波监听多路访问方式/冲突检测)。这是一种<br />非常有效的分布式随机协议。<br />要发送报文?<br />检测载波发送检测到冲突<br />b=CalcBackoff();<br />wait(b);<br />attemps++;<br />丢弃报文<br />否<br />是<br />Attemps&lt16<br />Attemps=16<br />图1:&nbsp;以太网的MAC&nbsp;协议基本原理。函数CalcBackoff()从0&nbsp;到当前退避间隔中随机取<br />值。对于每次失败的传输,退避间隔将加倍。<br />当一个站点要传输数据时,它首先检测载波来判断信道当前是否活动。这主要是通过检<br />测信道的电压是否高于基准值来实现的。如果没有检测到载波,则它将发送报文。然后等待<br />一定时间间隔(10Mbps&nbsp;以太网为51.2&nbsp;毫秒)后再试图发送其它的报文,这保证了其它站点<br />能在这个间隔有机会发送。<br />在另一方面,当检测到载波时,它将等待到信道空闲时再传输报文。当然,两个或更多<br />的站点可能同时开始传输。这将导致冲突。以太网的站点支持冲突检测(也就是CSMA/CD<br />中的CD);当检测到冲突时,站点将保证至少传输512&nbsp;位的报文,然后停止传输。[为什么<br />&copy;&nbsp;1999-2001&nbsp;Hari&nbsp;Balakrishnan&nbsp;5<br />至少传输这么多位的报文?]<br />每次一个站点检测到冲突,它都假定报文不可恢复的被破坏。它将等待一段时间然后重<br />新发送。这段等待时间间隔被称为退避backoff&nbsp;间隔。有很多选取退避间隔的方式,在以太<br />网中使用了一种被称为二进制退避算法(exponential&nbsp;backoff)的方法。这种算法的基本思想<br />是退避间隔随机并均匀地从检测出冲突的次数连续加倍的值中选取。随机选取避免了站点的<br />同步,而二进制退避算法通过减少冲突的概率增加了系统的稳定性2。使用退避机制的基本<br />出发点是每个站点试图估计信道到底有多繁忙;它认为越繁忙,就等待越长的时间(基于它<br />分布式的本性,没有站点确切知道当前时刻到底有多少其它站点活动)。站点并不会无限制<br />地重发报文,一般都有固定的上限(一般为16)。[&nbsp;这如何作为端-端的一个实例?]&nbsp;传输<br />算法(主要的工作原理)如图1&nbsp;所示。<br />以太网协议的理论和实际的执行效率是过去几年很多研究的主题。不难发现当报文很小<br />并且站点数量很多时(最坏的情况),最大利用率上限为1/e(37%)。然而,在很多实际情<br />况下,以太网性能非常好,经常到达高达90%的利用率。在以太网中获取高的利用率的简<br />单方法包括:避免长电缆(以太网最多可答1.5&nbsp;公里,但一般情况不需要那么远的距离,通<br />过网桥连接的短电缆段会有更好的效果),减少每电缆段包含的主机数量,以及使用长报文<br />代替64&nbsp;字节的最短报文。<br />7.&nbsp;总结<br />我们看到了即使在最简单的网络情况下,也有很多复杂的问题需要解决,需要采用很多<br />技术:调制/解调,成帧,差错检测,差错恢复,以及共享媒体和信道访问。<br />在下一讲,也就是课程的第一部分中,我们将研究报文交换packet&nbsp;switching&nbsp;以及同种<br />类型的不同链路如何连接形成一个更大的网络。
 楼主| fengyeu 发表于 2007-11-18 22:46 | 显示全部楼层

PDF

http://www.core.org.cn/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-829Computer-NetworksFall2002/F13056EC-619D-4CA9-8550-202C4A90B987/0/L0singlelink.pdf<br /> 相关链接:<a href='http://www.core.org.cn/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-829Computer-NetworksFall2002/F13056EC-619D-4CA9-8550-202C4A90B987/0/L0singlelink.pdf'>http://www.core.org.cn/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-829Computer-NetworksFall2002/F13056EC-619D-4CA9-8550-202C4A90B987/0/L0singlelink.pdf</a>
平常人 发表于 2007-11-18 22:48 | 显示全部楼层

搞什么名堂?与51扯不上边

东西好像很凌乱。<br /><br />等楼主全发完了再说吧。
 楼主| fengyeu 发表于 2007-11-18 22:49 | 显示全部楼层
 楼主| fengyeu 发表于 2007-11-18 22:53 | 显示全部楼层

给51超个频啊!!!

给51超个频啊!!!用51系列的模拟USB。<br />14楼抢我地盘啊!!!<br />可以慢慢来不急!**就是拉。<br />主要是为了学习,好玩啊!<br />睡了!
xwj 发表于 2007-11-18 23:03 | 显示全部楼层

51?除非用那些怪物(叫兽)级的51...

而且,很多叫兽级的51&nbsp;本身就带USB啊<br /><br /><br />更不用说模拟USB2.0了
xwj 发表于 2007-11-18 23:11 | 显示全部楼层

资料倒是不错,大家感兴趣的话就看看吧

  
 楼主| fengyeu 发表于 2007-11-19 08:06 | 显示全部楼层

模拟1.1的行不????

模拟1.1的行不????
古道热肠 发表于 2007-11-19 16:54 | 显示全部楼层

AVR确定办此事

 51单片机用此法有难度,但不是没有可能,可能性是有的,但实用价值不大。
dragon_hn 发表于 2007-11-20 16:03 | 显示全部楼层

狂晕!

大家如果只是有空想锻炼一下还可以,千万别当真,要么现在那些现成的USB芯片谁要?<br />如果想练练手的话建议用FPGA去做,那样做成之后还有可能将来设计芯片.<br />你用个上百MHz的51也许可以做到,但那个成本足够你买几个USB芯片了,而且你的51还别想干别的,专门服饰这个USB就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

446

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部