串口modemCTSRTSdoc.docx
- 文档编号:7077476
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:12
- 大小:30.65KB
串口modemCTSRTSdoc.docx
《串口modemCTSRTSdoc.docx》由会员分享,可在线阅读,更多相关《串口modemCTSRTSdoc.docx(12页珍藏版)》请在冰豆网上搜索。
串口modemCTSRTSdoc
串口modemCTSRTS
MODE是用户接入互联网的重要设备。
虽然网络干线上已经普及宽带光纤
传输,但是在拥有庞大用户群的最后一公里路段上,目前最现实的接入方式还是铜线连接(电话线,双绞线、电缆)。
另外,随着无线技术的发展,采用无线接入的固定/移动用户也越来越多。
不论是铜线连接还是无线接入,都要采用调制解调器,以便使数据信号能够在信道内传输。
MODE啲对外接口是串口,这个串行I/O口用于传输控制信号、状态信号、数据、AT指令及其响应。
虽然MODE种类繁多(56K猫/GPRS/CDM等),但对外都表现为一个标准的串口,只要将这个串口了解清楚,那么就可以将所有的MODE一网打尽。
*
(1)UART*
一般地,我们把这个串口叫作UART(UniversalAsynchronousReceiverandTransmitter通用异步收发器)。
其中,RT是接收和发送的英文缩写,能收能发又是串口,说白了就是串行I/O口的意思。
A表示异步模式。
这种模式的优点是适应性强,对时钟精度要求低(成本
低)。
每次发送字节数据前都首先发送一个开始位同步时钟相位,抖动误差不会在整个通信过程中累积,只影响单个字节的传输单元。
U的意思是通用。
为什么一定要冠以"通用"二字,这个定语到底想强调什么呢?
话说很早以前,还没有出现计算机的时候,就已经出现了串口设备。
例如:
MODEM电传打字机、工控设备、数传机等等。
为了方便设备互连,EIA制定了
RS232标准化规范,采用DB25接口连接DTE(DataTerminalEquipment数据终端设备)和DCE(DataCommunicationsEquipment数据通信设备)。
后来,出现了个人计算机(PC机),这些已有的设备毫无疑问地成了最初的外设,为了将其接入主机,制造商们自然地选择了标准的RS232串口。
在这个标准中,DB25接
口支持同步和异步两种工作模式,采用D型接插件,防止插反。
这种设计兼容性好,使用方便,但是制造商们并不买帐,他们更倾向于进一步减少接插件的大小和成本。
通过删除DB25中未使用的引脚和支持同步模式的引脚,将DB25
改造成只有9根线,只支持异步模式,体积更小,成本更低的DB9最初的状
况比较混乱,因为DB9只给出了信号范围,但没有指出引脚和信号的对应关系,而且DB9也不是RS232规范所定义的接口标准,因此各个制造商只能自行定义对应关系。
后来,IBM制造的PC机成了行业标准,DB9的对应关系就逐渐统一到了IBM的定义上,现如今使用的DB9就是遵守的IBM的定义。
随着时代的发展,计算机越来越普及,外设的种类也越来越多,有些非RS232的串行设备需
要接入主机,这就要求主机提供更多的I/O口。
如果为每一种新出现的设备都提供一个I/O,显然是不现实的,因为主机后面板位置有限,不可能容纳太多的接口。
幸运的是,外部I/O口大体上主要分为两类:
并口和串口。
如果复用已有的RS232串口接入非RS232的设备,那么就可以用有限的接口,接入大量的设备。
一个有趣的现象是,早期的操作系统DOS®ROMBIOS1供的通信例程只支持RS232串口标准,即使是实现简单的字节收发这种非RS232应用,竟然
也要先检测DSRDCDCTS等信号是否有效,如果不满足条件,将不会发送数据到TXD上。
解决这个问题的方法有两种:
1、旁路系统提供的API函数,自己直接操纵硬件实现非RS232的操作;2、短接接头里某些RS232空制信号线,使系统通信例程误以为是RS232设备,使非RS232的设备满足RS232规范的子集要求。
现在,PC机上的串口既支持RS232应用又支持非RS232应用,通用串口指的就是这个意思。
RS232规范对速度和距离都有约束,在码元畸变小于4%勺条
件下,传输距离上限是15米;速率上限是19200。
目前,在PC机上的串口都突破了RS232标准的限制,速度可以达到115200甚至更高。
软件上,已经可以选项配置是否支持硬件流控,是否检查DSRDCDRI等输入信号。
可以说,现在的PC串口,来源于RS232但又不拘泥于它的限制,越来越向通用目的的串口方向发展。
UAR创此可以总结为:
用于通用目的的异步串行I/O口。
综上,可以看出计算机串口发展的大致历程:
(个人计算机)史前出现原始的串口设备--EIA制定RS232统一标准,DB25出现--个人计算机诞生,为引入串口,DB9出现,软硬件仍然遵循RS232标准--为引入新的非RS232串口,将原来的RS232口改造成通用目的的UART软硬件可以不遵循RS232规范。
PC机串口拥有多个名字:
串口、RS232口、COM口(通信口)、异步口、
UART等,他们是不同历史时期的产物,一直沿用至今,让现在的人们感觉有些莫名其妙。
最开始PC机接入的串行外设是RS232设备,就叫RS232口。
这个设备主要是通信用的MODEMPC上就称为COM口。
现在连非RS232设备也接了进来,就叫UART®。
不过新名字没有老名字有名,有些人的习惯改不过来,再说计算机发展太快,老名字还没消失,新名字就出现了,而且各有各的拥趸,约定俗成,那就这么乱着叫吧。
就在UART准备一统江湖的时候,制造商们再一次不满于它的速度、灵活性
(软件可配置)和体积,推出了USB串口和1394串口。
现在越来越多的笔记本电脑上已经取消了UART串口,因此有不少网友发出"没有串口,吾谁与归"的慨叹,历史前进的脚步无法阻挡,古今多少事,都付笑谈中,USE取代UART是后话,
暂且不表。
⑵DB9引脚定义和表示
DB9遵循IBM定义,所有输入输出方向都是站在DTE角度说的。
1--载波检测DCD2--接收数据RXD3--发送数据TXD4--数据终端就绪DTR5--信号地GND6--数据设备就绪DSR7--请求发送RTS8--清除发送CTS9--振铃指示RI
在TXD和RXD上:
(一般,驱动器件都是反相器,用负表示"1",用正表示"0",采用负逻辑,完全可以理解。
)
逻辑O(SPACE空号)=+3V~+15V
逻辑1(MARK传号)=-3V~-15V
在RTSCTSDSRDTR和DCD等控制线上:
信号有效(接通,ON犬态,正电压,高电平)=+3V~+15V
信号无效(断开,OFF犬态,负电压,低电平)=-3V~-15V
-3V到+3V之间的电平无意义,称为死区,不应该处于这个电压范围。
+3V
以上,-3V以下的一段区间属于过渡区,尽量不要使电平落入此区间,以便使判断更可靠,最好在+12V以上,-12V以下。
一般的驱动器件为+-12V电压。
工程上,电压不可能如此理想,判断需要在一定范围内进行,有些半导体器件也不容易升压到+-15V,同时,大摆幅电路速度也高不了。
以上说的是RS232电平,在未经驱动的芯片引脚上是TTL电平:
信号有效二进制0=0-0.3V
信号无效二进制仁3.3V/5V
如果不经RS232驱动芯片,直接把MCI和Moden模块(TTL电平)连接,需要注意电平兼容。
⑶DB9引脚信号详细说明
注意:
硬件只提供机制而不提供策略,RS232的规范由软件实现,硬件只
是提供标准的硬件信号线。
例如:
载波检测由软件完成,硬件只提供DCD引脚
信号。
硬件流控并不是说将RTS和CTS接到相应引脚位置上,硬件就可以自动实现流量控制,硬件流控是靠软件实现的,之所以强调"硬件"二字,只是因为硬件为软件提供了指示信号的硬件通路,而软件流控没有使用硬件指示信号罢了。
RS232规定的是DTE和DCE设备间连接,而现在大多数设备已经内嵌了CPU可以主动发送数据,因此成了DTE设备,DTE和DTE的连接RS232里没有规定,需要使用交叉线。
有兴趣的读者可以尝试着分别剪断9根线,看看会有什么现象发生。
看看拨号软件将弹出什么样的错误信息。
TXD(TransmittedData发送数据),RXD(ReceivedData接收数据)--数据传输物理通道,DTE和DCE设备此引脚一一对应连接即可,两个DTE设备需要交叉连接。
所谓收发全是站在DTE角度说的。
可以在这两个引脚对应的芯片引脚上连接LED指示灯,在数据收发时会有闪烁指示。
这两个信号连接芯片内部的并/串和串/并电路,先处理低位,硬件上不受其他硬件控制信号的影响。
GND(Ground地)--地参考点。
RS232是非平衡接法,不是差分的,所以抗噪性能不好,收发信号需要高电压+15V/-15V,摆幅大,速率低。
此地使两端电位参考点一致,避免了地回路。
DCD(DataCarrierDetect数据载波检测)--当话音通路建立后,两端
Modem各自发送单频载波,以便各自的对端实时检测链路通断。
只要检测到载波信号,DCD就有效。
此信号无效时用于触发nocarrier事件,提供向上层传递lowerdown消息的机制,使PPP复位,并根据策略决定是否断线重拨。
在PPP收发数据时应实时监测DCD言号,只有当DCDt效时才能进行收发操作。
DTR(DataTerminalReady数据终端准备好),DSR(DataSetReady数据设
备准备好)--虽然通过RXD和TXD就可以收发数据,但是在发送数据前还是应该先确定对方是否准备好,以避免不必要的数据丢失。
DTR和DSFgl脚用于主硬
件流控。
DTRt效表示DTE设备可以接收数据,DSR有效表示DCE设备可以接收数据。
DTE向DCE发送数据前要检测DSR信号,如果无效将不会发送,同样,DCE向DTE发送数据前也要先检测DTR是否有效。
这是RS232规范的要求。
MODE并没有使用DTR和DSF实现通常意义上的硬件流控。
DTR在整个通信期间保持有效,DSF在MODE上电后立即有效/在发出载波后有效(这取决于程序对DSR的理解,是把它简单地看成电源开关指示还是看成拨号后的指示)并在
整个通信过程中一直保持有效。
DTF或DSF在任何时间点无效,都将终止通信过程。
有人可能奇怪RS232标准里明明使用这两个信号用于主硬件流控,为什么MODE却这样安排时序呢?
原来MODE根本就没有按照RS232的规范将DTR和DSR用于硬件流控,它只使用这两个信号指示DTE和DCE已经上电,可以开始
工作。
当然这在某种意义上也算是流控,但它确实不是RS232所指的那种,
MODE是通过RTS和CTS实现的硬件流控。
DTR和DSR的这种使用方法最初是由贺氏Hayes公司在SmartModem里最先采用的,后来贺氏HayesMODEI成为行业事实上的标准,其他公司参照贺氏设计的时序生产与其兼容的MODE,甚至连AT指令都一样(大家一起抄他呗)。
因此,现在的MODE都不遵守RS232在这两个引脚上定义的用法了。
DataTerminal和DataSet是两个过时的名字,这两个术语已经被废弃了(谁还记得数据终端和数传机啊,早就成古董了,兴许在博物馆还能见到实物)
RS232-D版本中起用DTEready和DCEready两个新名字。
虽然新名字表达的意思清楚多了,但可以肯定的说,旧名字仍将继续使用。
RTS(RequestToSend请求发送),CTS(ClearToSend清除发送)--半双工时,用于收发模式切换。
属于辅助流控信号。
半双工的意思是说,发的时候不收,收的时候不发。
那么怎么区分收发呢?
缺省时是DCE向DTE发送数据,当DTE决定向DCE发数据时,先有效RTS表示DTE希望向DCE发送,一般DCE不能马上转换收发状态,DTE就通过监测CTS是否有效来判断可否发送,这样避免了DTE在DCE未准备好时发送所导致的数据丢失。
全双工时,这两个信号一直有效即可。
(
RTS/CTS协议即请求发送/允许发送协议,相当于一种握手协议,主要用来解决"隐藏终端"问题。
"隐藏终端"(HiddenStations)是指,基站A向基站B发送信息,基站C未侦测到A也向B发送,故A和C同时将信号发送至B,弓I起信号冲突,最终导致发送至B的信号都丢失了。
"隐藏终端"多发生在大型单元中(一般在室外环境),这将带来效率损失,并且需要错误恢复机制。
当需要传
送大容量文件时,尤其需要杜绝"隐藏终端"现象的发生。
IEEE802.11提供了如下解决方案。
在参数配置中,若使用RTS/CTS协议,同时设置传送上限字节数--一旦待传送的数据大于此上限值时,即启动RTS/CTSB手协议:
首先,A
向B发送RTS信号,表明A要向B发送若干数据,B收到RTS后,向所有基站发出CTS信号,表明已准备就绪,A可以发送,其余基站暂时"按兵不动",然后,A向B发送数据,最后,B接收完数据后,即向所有基站广播ACK确认帧,这样,所有基站又重新可以平等侦听、竞争信道了。
)
以上所述是RS232标准的定义,然而在MODE中,完全没有遵守这个规范,而是将其用于硬件流控。
很多人根据RTS和CTS的字面意思理解他们的用法往往百思不得其解,再加上半双工/全双工,就更加云里雾里了。
RTS和CTS在MODE中的用法与他们字面的含义没有任何关系,他们已经由贺氏公司重新定义了用法。
以下是网友dengm给出的程序,详细说明了RTS和CTS在MODE里的用法。
RTS用于指示本端是否可以接收数据,CTS指示对端是否可以接收数据。
dengm发表于2005-1-1407:
52侃单片机
PC端处理:
本端发送
当发现(不一定及时发现)CTS(-3Vto-15V)无效时,停止发送,
当发现(不一定及时发现)CTS(3Vto15V)有效时,恢复发送;
本端接收
0MNLEN_OF_RX_BUFFE不要在处于边界时才给出指示,否则对端很有可能来不及停发而造成本端接受缓冲区溢出。
)
当接收buffers中的bytesM时,给RTS有效信号(+3vto+15v).
当接收buffers中的bytesN时,给RTS无效信号(-3vto-15v)
MODE端处理:
同上,但RTS与CTS交换
图1表示DTE向DCE发送数据时的流控过程。
DTE和DCL般都会有一定容量的FIFO(先入先出)缓冲区,例如16字节。
DTE以设定的波特率(如115200)向DCE发送数据,当DCE的FIFO缓冲区快满时,DCE使CTS无效,DTE软件检测到此信号后停止发送。
同时DCE继续向电话线上发送数据,一旦发出,DCE
的FIFO就变成不满,CTS恢复有效,允许DTE继续写入。
串口波特率只是接口速率,不是Mode*!
勺实际传输速率,一般发送都快于接收,为避免溢出丢失数据,均需要接收端控制发送端发送速度,即流控。
DCE向DTE发送数据用RTS进行流控,过程与上面讲的类似。
流控在通信里的作用非常重要,它能使发送和接收保持均衡,避免数据因为收发速率不匹配而丢失。
例如:
在TCP协议里,当数据丢失时,总是假定丢包是由于网络拥塞引起的,此时采用拥塞避免算法,超时时间加倍,拥塞窗减半,尽管此时信道正常,有数据可以发,但因为拥塞窗减小导致不能发送,而且超时等待时间加倍,TCP的性能将急剧下降,测试报告不会好看。
信道上因为误码引起的丢包和网络上因为拥塞造成的丢包都是不可控的,而收发速率不匹配造成的数据丢失完全可以通过流控避免,因此,在接收速率小于/等于发送
速率的地方都要使用流控。
硬件流控不能跨越设备,软件流控可以实现端到端控制。
注意:
MODE是否配置硬件流控可以通过AT指令动态修改。
在不支持硬件流控时,这两个信号在数据传输状态一直有效。
此时可以无流控,或者通过ON(0x11)/XOFF(0x13)软件流控。
RI(Ringlndicator振铃指示)--这个引脚用于指示是否有90V铃流信号输
入。
如果检测到振铃信号,MODE将周期改变RI引脚电平,变化频率与振铃频率无关,DTE设备检测RI上的电平变化,并计数,一旦符合规定次数,就发出DTR信号,指示DCE摘机应答。
以前的"笨猫"没有CPU所以需要DTE帮助判断是否有拨入,现在的"聪明猫"(HayesSmartmodem)有CPU完全可以自动应答,我看,这个信号以后就可以省掉了,毕竟RS232是很早以前的标准,已经过时了,不必拘泥于原来的规范。
DTEDCEABHJD04大型程控电话交换机
-----电话线---ST-BUS---ST-BUS--E1
|FIFO缓冲HFIFO缓冲ITSLIC板|---|DSN交换网络|--|DTP数字中继|---经汇接局到另一端局的相应电路
(左图逆序)
RTS----CTSA|A
川
公共资源--
铃流源|信号音(拨号/回铃/忙/催挂音)
VDTMF双音多频收号器
图1硬件流控图(DTE向DCE发送数据)
如图1,MODE的另一端连接电话线,通过AB线与对端(局端)程控电话交换机SLIC板(用户线接口电路)相连,需要实现用户线信令(摘机、挂机、振铃、拨号音、忙/催挂/回铃音等),还有用于判断链路通断的载波检测。
以上讨论的DB9串口是很早以前设计的,随着技术的发展,MODE越来越聪明,软件完全可以取代一些硬件控制连线,甚至重新设计MODE串口。
如果今后遇见不符合现在定义的MODE接口是不足为奇的。
(4)串口交叉连接方式和MODE工作时序
交叉连接用于两个DTE设备互连
图略
(1)最简连接
用于调试目的等非RS232应用,通信软件不能检测DSRDCDCTS信号
(本端)--(对端):
(2)--(3)(3)--
(2)(5)--(5)
1-4-6--7--8--9悬空
(2)RS232连接
用于屏蔽RS232通信软件的检测,早期BIOS和OS通信软件只能在符合
RS232规则的接口线上运行,此种接法可使其只用3根线即可正常工作。
短接本端1--4--6;短接本端7--8
(本端)--(对端):
(2)--(3)(3)--
(2)(5)--(5)
9悬空
(3)完全连接
忽略DCD和RI,带硬件流控的交叉连接
(本端)--(对端):
(2)--(3)(3)--
(2)(5)--(5)(7)--(8)(8)--=(6)--
⑷⑷--(6)
1和9悬空
(4)NULLMODEI连接
用于模拟两个DTE之间通过MODE连接。
在PPP开发时,可以节省大量通信费用
(本端连接)--(对端连接):
⑵-(3)(3)-
(2)(7--8)--
(1)(6--9)--⑷(5)--
⑸
(1)--(7--8”4)--(6--9)(9--6)--⑷
MODE的工作时序:
在整个通信过程中,DTR和DSF及DCD必须一直有效,RTS和CTS用于硬件流控(软件实现的),RTS有效时指示DTE可以收,CTS有效时指示DCE可以收(详见引脚说明)。
当电话打入时,交换机SLIC(用户线接口电路)板发出90V振铃信号,
MODE识别后发出RI信号,RI变化频率与振铃频率无关,PC机对RI变化记数,达到触发值时,PC机发出DTR信号通知MODE摘机应答。
MODE发出载波后有效DSR通知PC已摘机。
当接收到对端载波后,DCD有效,指示话音通道连通。
通信完毕任一方停止载波,导致两端载波消失,PC检测到DCD无效,就使DTR
无效,MODEIM后使DSR无效响应之,一次通信过程结束。
现在的MODE一般都可以自动应答,RI信号可忽略。
当MODE识别出振铃后,摘机应答并发载波,同时有效DSR通知PC机有拨入,PC随即有效DTR允许拨入。
当收到对端载波,MODE有效DCD指示话音通道连通。
通信完毕任一方停止载波,导致两端载波消失,PC检测到DCDE效,就使DTR无效,MODE随后使DSR无效响应之,一次通信过程结束。
PC机拨出时,先有效DTR指示MODE摘机拨号,MODE回应DSRt效,
在识别出拨号音后拨号,然后在回铃音结束后发载波,一旦收到对端载波,
MODE有效DCD指示话音通路连通。
此后,就可以进行PPPtt、商了。
通信完毕任一方停止载波,导致两端载波消失,PC检测到DCDE效,就使DTR无效,
MODE随后使DSR无效响应之,一次通信过程结束。
(5)硬件学习方法总结
我认为学习硬件最重要的是抓住4个关键点:
引脚、时序、寄存器和协议。
硬件的参考资料就是数据手册(datasheet),虽然大部分由英文写成,但是科技英语并不象想象中那么难,而且数据手册的内容编排有规律可寻。
一般,先介绍总体特点概述(卖点),顺便做一下公司广告(什么leadership一类的),然后是结构/功能框图、引脚说明、时序分析、寄存器说明、硬件所实现的具体协议(USBPCI、E1等)、应用范例demo直流/交流特性、封装、订购信息、联系方法等,手册里往往还会总结一些图、表、关键字目录索引,方便读者阅读。
引脚是对硬件工程师最重要的信息之一,务必将其背记下来。
背下来的好处多多,基本上扫一眼图纸就能猜出芯片是干什么用的;对一些不常用的设计技巧能马上发现,进而学习之;能立即指出明显的低级错误;能轻易区分不同型号相同种类的芯片;有利于不断积累硬件经验,熟能生巧。
总之,背下引脚能大大提高工作效率,不必频繁查书,不必中断思路,让精力集中在应用设计上。
面对几百个引脚的芯片,看似无法记住,实则简单Easy。
譬如:
地址线32
根、数据线32根,电源5根、地线20根,一会儿就记住了89根引脚线,然后按功能记I2C、SPI、ST-BUSUSBJTAG等固定用法的引脚线,不管用在哪个芯片上,这些引脚种类和功能都相同,有时,只要记住功能就能把相关引脚一一背出,或者只须记住差异点即可。
一旦背下一个芯片,那么与之类似的一系列芯片就都不在话下了。
万事开头难,一旦习惯了,随时记住几百个引脚的芯片也不是难事,这是专业硬件工程师的基本功。
|时序|
时序是硬件工程师获得的另一个重要信息,务必反复咀嚼回味。
时序图可以清楚全面地展示硬件的工作过程,从中我们可以得到想要的细节。
硬件设计的一大任务是抑制干扰噪声,通过分析时序可以找到最佳的处理方法。
比如:
在数据的中点采样,可以获得前后各50%勺抖动裕量;通过满足建立/保持时间,使得数据采样正确。
一般来说,时序图展示的是理想情况下的位置关系,实际电路中还要受到生产工艺和现场情况的影响。
比如:
温度、湿度会影响介电常数,进而影响阻抗匹配。
实际波形有上冲、下冲、振铃等幅度变化;相位有超前、滞后变化;时钟有不同步问题等等。
这些问题限制了时序图的适用范围,使用中切记满足前提条件。
例如:
PCI的突发访问字节数在时序图上可以做得很大,这样传输效率高,但是因为生产工艺达不到要求,不能保证时钟低抖动,阻抗也不能完全匹配,如果突发访问字节数过大,会造成误差累积,导致采样错误,因此实际中一般限制在4字节以下。
我们只可以把时序图当作理论参考,切记不能过份相信,要看时序只能通过示波器和逻辑分析仪。
本来直流和交流特性不是时序内容,但因为对时序影响较大,所以就应该配合时序一起看。
一般芯片厂商会提供DEM飯供设计参考,但DEM就是DEM,不能用于量产,切记,切记!
真实波形的边沿不能象时序图里画的那么陡峭。
因为越是陡峭的边沿,频谱范围越大,旁瓣
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 modemCTSRTSdoc