关于UART的CTS/RTS2008-03-2915:28RTS(requesttosend)请求发送谈这个问题之前我们先介绍另一个概念,DCE(DataCommunicationEquipment数据通讯设备)速度。它是指两个Modem之间即电话线之间的传输速度,我们所说的56K指的就是这个速度。而DTE(DataTerminalEquipment数据终端设备)速度是指从本地计算机到Modem的传输速度,如果电话线传输速率(DCE速度)为56000bps,Modem在接收到数据后按V.42bis协议解压缩56000×4=115200bps,然后以此速率传送给计算机,由此可见56K猫(使用V.42bis)的DTE速度在理想状态下都应达到115200bps。可用CTS/RTS或Xon/Xoff流量控制(Flowcontrol)从上边的介绍我们已经了解到DTE与DCE速度之间存在很大差异,这样在数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失,这个过程就是所谓的流量控制。控制的方式有两种,Xon/Xoff和CTS/RTS。前者由软件产生控制码,并将控制码加入到数据流中,Xoff表示停止发送,Xon表示继续发送,此种方法通常用于2400bps左右的低速猫。CTS(cleartosend)/RTS(requesttosend)则是通过计算机与Modem之间的信号线传送控制信号来实现流量控制的,即硬件方式。请求发送信号(RTS)由计算机产生,通知Modem可以发送数据,清除发送信号(CTS)由Modem产生,通知计算机可以传送数据.由于硬件控制的反应速度要比软件快,所以多用于高速Modem。在使用MNP,V.42以及传真时也应使用硬件方式。CTS(Cleartosend)允许发送,很多文章翻译成清除发送,是不正确的.CTS是对RTS的应答.A向B发送RTS信号,表明A要向B发送若干数据,B收到RTS后,向所有基站发出CTS信号,表明已准备就绪,A可以发送CTS和RTS是串行通讯中流控制的两个管脚,本身成对出现。一般连接方式如下图所示:图2UART流控制示意图。具体地说,就是当接收方(UART2)认为可以接受UART数据时,将RTS置为有效位。发送方(UART1)的CTS管脚接收到此信号后,才将数据进行发送。一般来说,当UART数据接收缓存大于两个字节空余时,就可以将RTS置为有效接收。当然,OD2101的UART接收缓冲区具有64位的字节,用户可以按照自己数据流量的需求定义RTS。一、远距离通信第1和第2中情况是属于远距离通信(传输距离大于15m的通信)的例子,故一般要加调制解调器MODEM,因此使用的信号线较多。注意:在以下各图中,DTE信号为RS-232-C信号,DTE与计算机间的电平转换电路未画出。1、采用Modem(DCE)和电话网通信时的信号连接:·若在双方MODEM之间采用普通电话交换线进行通信,除了需要2~8号信号线外还要增加RI(22号)和DTR(20号)两个信号线进行联络,如图1所示:图1DSR、DTR:数传机(DCE)准备好、数据终端(DTE)准备好,只表示设备本身可用。首先,通过电话机拔号呼叫对方,电话交换台向对方发出拔号呼叫信号,当对方DCE收到该信号后,使RI(振铃信号)有效,通知DTE,已被呼叫。当对方“摘机”后,两方建立了通信链路。若计算机要发送数据至对方,首先通过接口电路(DTE)发出RTS(请求发送)信号。此时,若DCE(Modem)允许传送,则向DTE回答CTS(允许发送)信号。一般可直接将RTS/CTS接高电平,即只要通信链路已建立,就可传送信号。(RTS/CTS可只用于半双工系统中作发送方式和接收方式的切换。A1?;当DTE获得CTS信号后,通过TXD线向DCE发出串行信号,DCE(Modem)将这些数字信号调制成模拟信号(又称载波信号),传向对方。计算机向DTE“数据输出寄存器”传送新的数据前,应检查Modem状态和数据输出寄存器为空。当对方的DCE收到载波信号后,向对方的DTE发出DCD信号(数据载波检出),通知其DTE准备接收,同时,将载波信号解调为数据信号,从RXD线上送给DTE,DTE通过串行接收移位寄存器对接收到的位流进行移位,当收到1个字符的全部位流后,把该字符的数据位送到数据输入寄存器,CPU可以从数据输入寄存器读取字符。2、采用专用电话线通信:在通信双方的MODEM之间采用电话线进行通信,则只要使用2~8号信号线进行联络与控制。不需要电话机、振铃信号RI和DTR信号,其信号线的连接如图2那样。图2二、近距离通信:当通信距离较近时,可不需要Modem,通信双方可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信,即是这里要讨论的第一种情况。无Modem时,最大通信距离按如下方式计算:RS-232C标准规定:当误码率小于4%时,要求导线的电容值应小于2500PF。对于普通导线,其电容值约为170PF/M。则允许距离L=2500PF/(170PF/M)=15M这一距离的计算,是偏于保守的,实际应用中,当使用9600bps,普通双绞屏蔽线时,距离可达30~35米。1、零Modem的最简连线(3线制)图3是零MODEM方式的最简单连接(即三线连接),图中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。图3(1)RTS与CTS互联:只要请求发送,立即得到允许(2)DTR与DSR互联:只要本端准备好,认为本端立即可以接收(DSR、数传机准备好)。2、零Modem标准连接:如果想在直接连接时,而又考虑到RS-232C的联络控制信号,则采用零MODEM方式的标准连接方法,其通信双方信号线安排如下1-2-3-4-5顺序所演示的那样。无Modem的标准联线(7线制)如图所示:从中可以看出,RS-232C接口标准定义的所有信号线都用到了,并且是按照DTE和DCE之间信息交换协议的要求进行连接的,只不过是把DTE自己发出的信号线送过来,当作对方DCE发来的信号,因此,又把这种连接称为双叉环回接口。双方的握手信号关系如下(注:甲方乙方并未在图中标出):(1)当甲方的DTE准备好,发出DTR信号,该信号直接联至乙方的RI(振铃信号)和DSR(数传机准备好)。即只要甲方准备好,乙方立即产生呼叫(RI)有效,并同时准备好(DSR)。尽管此时乙方并不存在DCE(数传机)。(2)甲方的RTS和CTS相连,并与乙方的DCD互连。即:一旦甲方请求发送(RTS),便立即得到允许(CTS),同时,使乙方的DCD有效,即检测到载波信号。(3)甲方的TXD与乙方的RXD相连,一发一收。DCD:载波检测。主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音,处于在线状态。RXD:此引脚用于接收外部设备送来的数据;在你使用Modem时,你会发现RXD指示灯在闪烁,说明RXD引脚上有数据进入。TXD:此引脚将计算机的数据发送给外部设备;在你使用Modem时,你会发现TXD指示灯在闪烁,说明计算机正在通过TXD引脚发送数据。DTR:数据终端就绪;当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。GND:信号地;此位不做过多解释。DSR:数据设备就绪;此引脚高电平时,通知计算机Modem已经准备好,可以进行数据通讯了。RTS:请求发送;此脚有计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。CTS:清除发送;此脚由Modem控制,用以通知计算机将欲传的数据送至Modem。RI:Modem通知计算机有呼叫进来,是否接听呼叫由计算机决定DCD(DataCarrierDetect数据载波检测)DTR(DataTerminalReady,数据终端准备好)DSR(DataSetReady数据准备好)RTS(RequestToSend请求发送)CTS(ClearToSend清除发送)在这五个控制信号中,DTR和RTS是DTE设备(数据终端设备,在实际应用中就是路由器)发出的,DSR、CTS和DCD是DCE设备(数据电路终结设备,在实际中就是各种基带MODEM)发出的。在数字电路中(如计算机),设备甲和设备乙交换信息(通讯),双方采用某个通讯规范(协议)来交换数据,它们的联络过程就叫“握手”,用来联络的信号就叫“握手信号”,单向联络通常用两根联络线:请求,应答,双向则四条。