
rs232串口
-
2023年3月5日发(作者:孔子介绍)RS232串行接口总线
目录
第一节RS232串行接口系统描述…………………………………………………3
第二节RS232串行接口拓扑结构………………………………………………3
第三节物理接口…………………………………………………………………5
3.1电气特性…………………………………………………………………………5
3.2接口信号…………………………………………………………………………6
3.3机械特性…………………………………………………………………………8
第四节电源………………………………………………………………………8
第五节RS232接口协议…………………………………………………………9
5.1数据传送格式……………………………………………………………………9
5.2流控制…………………………………………………………………………10
5.3差错检测…………………………………………………………………………10
5.4差错控制…………………………………………………………………………10
第六节系统配置…………………………………………………………………10
6.1端口地址和中断…………………………………………………………………10
6.2串行端口寄存器…………………………………………………………………11
6.3DLAB……………………………………………………………………………14
第七节数据流模型………………………………………………………………14
第八节RS232串口接口设备………………………………………………………15
第一节RS232串行接口系统描述
串行接口是微型计算机和外部设备的主要通信接口之一。只需要一条信号线就可以进行
单向数据传送。由于线路简单,价格相对较低,目前得到广泛使用。
串行通信接口标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上
经过改进而形成的。所以,以RS-232C为主来讨论。RS-323C标准是美国EIA(电子工业联
合会)和BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~
20000b/s范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都
作了明确规定。由于通行设备厂商都生产和RS-232C制式兼容的通信设备,因此,它作为
一种标准,目前已在微机通信接口中广泛采用。
在讨论RS-232C接口标准的内容之前,先说明两点:
首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(DataTerminalEquipment)
和数据通信设备DCE(DataCommunicationEquipment)而制定的。因此这个标准的制定,并
未考虑计算机系统的使用要求。但目前它又广泛地被借来用于计算机(更准确的说,是计算
机接口)和终端或外设之间的近端连接标准。显然,这个标准的有些规定及和计算机系统是
不一致的,甚至是相矛盾的。有了对这种背景的了解,我们对RS-232C标准和计算机不兼
容的地方就不难理解了。
其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在
DCE的立场来定义的。由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者
都是DTE,因此双方都能发送和接收。
目前,PC系列微机串行接口采用异步通信方式,按照RS-232接口标准进行数据传输。
UART(UniversalAsynchronousReceiver/Transmitter)是实现数据字符的串并转换的单
元。
第二节RS232串行接口拓扑结构
使用串行接口进行通信的器件可以分为两类。一类叫做DCE(DATA
COMMUNICATIONSEQUIPMENT),另外一类叫做DTE(DATATERMINALEQUIPMENT)。
DCE是类似MODEM一类的设备。而DTE就是计算机或者是计算终端。图2.1是典型的串
行通信的拓扑结构图。
图2.1串行通信拓扑结构
尽管微机系统中存在一些单向传输的器件,如只用于发送的游戏杆和只用于接收的打印
机。但大多数的情况是全双工,双向的通信。数据在DTE和DCE之间进行双向传输。
无MODEM结构是用来连接两个DTE设备的。这通常作为一种较为经济的做法用于联
网游戏或者在两台计算机之间使用ZMODEM协议或者XMODEM协议等进行数据传输。
这也可以用于很多微处理器开发系统。图2.2是典型的无MODEM通信结构图。
图2.2无MODEM模式的通信结构图
LOOPBACK模式的结构在编写串口通信程序的时候使用非常方便。它将发送和接收线
连接在一起。因此任何从串口传出的数据会立即回到同一断口的接收端。图2.3是典型的
LOOPBACK模式结构图。
DTEDTE
图2.3LOOPBACK通信结构图
第三节物理接口
RS232的物理接口包括电气特性和机械特性两部分。
3.1电气特性
EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定。
在TxD和RxD上:
逻辑1(MARK)=-3v~-15v
逻辑0(SPACE)=+3~+15v
在RTS、CTS、DSR、DTR和DCD等控制线上:
信号有效(接通,ON状态,正电压)=+3v~+15v
信号无效(断开,OFF状态,负电压)=-3v~-15v
以上规定说明了RS-323C标准对逻辑电平的定义。对于数据(信息码):逻辑“1”(传
号)的电平低于-3v,逻辑“0”(空号)的电平高于+3v;对于控制信号;接通状态(ON)
即信号有效的电平高于+3v,断开状态(OFF)即信号无效的电平低于-3v,也就是当传输电平
的绝对值大于3v时,电路可以有效地检查出来,介于-3~+3v之间的电压无意义,低于-15v
或高于+15v的电压也认为无意义,因此,实际工作时,应保证电平在±(3~15)v之间。
EIA-RS-232C和TTL转换:EIA-RS-232C是用正负电压来表示逻辑状态,和TTL以高低
电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须
在EIA-RS-232C和TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立
元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150
芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的
转换。MAX232芯片可完成TTL←→EIA双向电平转换,图3.1显示了1488和1489的内部结
构和引脚。MC1488的引脚(2)、(4,5)、(9,10)和(12,13)接TTL输入。引脚3、6、8、11输
出端接EIA-RS-232C。MC1498的14的1、4、10、13脚接EIA输入,而3、6、8、11脚接
TTL输出。具体连接方法如图3.2所示。图中的左边是微机串行接口电路中的主芯片UART,
它是TTL器件,右边是EIA-RS-232C连接器,要求EIA高电压。因此,RS-232C所有的输出、
输入信号都要分别经过MC1488和MC1498转换器,进行电平转换后才能送到连接器上去或从
连接器上送进来。
DTE
图3.1UART和连接器的连接方法
3.2接口信号
RS-232C规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未
定义线,常用的只有9根,它们是:
(1)联络控制信号线:
数据装置准备好(DataSetReady-DSR)——有效时(ON)状态,表明MODEM处于可以
使用的状态。
数据终端准备好(DataTerminalReady-DTR)——有效时(ON)状态,表明数据终端可
以使用。
这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设
备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信
号决定。
请求发送(Requesttosend-RTS)——用来表示DTE请求DCE发送数据,即当终端要发
送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发
送状态。
允许发送(Cleartosend-CTS)——用来表示DCE准备好接收DTE发来的数据,是对
请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使
该信号有效,通知终端开始沿发送数据线TxD发送数据。
这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的
切换。在全双工系统中作发送方式和接收方式之间的切换。在全双工系统中,因配置双向通
道,故不需要RTS/CTS联络信号,使其变高。
接收线信号检出(ReceivedLinedetection-RLSD)——用来表示DCE已接通通信链路,
告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载
波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解
调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(DataCarrier
Detection-DCD)线。
振铃指示(Ringing-RI)——当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效
(ON状态),通知终端,已被呼叫。
(2)数据发送和接收线:
发送数据(Transmitteddata-TxD)——通过TxD终端将串行数据发送到MODEM,
(DTE→DCE)。
接收数据(Receiveddata-RxD)——通过RxD线终端接收从MODEM发来的串行数据,
(DCE→DTE)。
(3)地线
有两根线SG、PG——信号地和保护地信号线,无方向。
上述控制信号线何时有效,何时无效的顺序表示了接口信号的传送过程。例如,只有当
DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送
数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在
TxD线上发送串行数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信
才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。
232引脚CCITTModem名称说明
用途
异步同步
1101AA保护地设备外壳接地PEPE√
2103BA发送数据数据送ModemTXD
3104BB接收数据从Modem接收数据RXD
4105CA请求发送在半双工时控制发送器的开和关RTS
5106CB允许发送Modem允许发送CTS
6107CC数据终端准备好Modem准备好DSR
7102AB信号地信号公共地SGSG√
8109CF载波信号检测Modem正在接收另一端送来的信号DCD
9空
10空
11空
12接收信号检测(2)在第二通道检测到信号√
13允许发送(2)第二通道允许发送√
14118发送数据(2)第二通道发送数据√
15113DA发送器定时为Modem提供发送器定时信号√
16119接收数据(2)第二通道接收数据√
17115DD接收器定时为接口和终端提供定时√
18空
19请求发送(2)连接第二通道的发送器√
20108CD数据终端准备好数据终端准备好DTR
21空
22125振铃振铃指示RI
23111CH数据率选择选择两个同步数据率√
24114DB发送器定时为接口和终端提供定时√
25空
3.3机械特性
连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9
各种类型的连接器,其引脚的定义也各不相同。下面分别介绍两种连接器。
(1)DB-25:PC和XT机采用DB-25型连接器。DB-25连接器定义了25根信号线,分为4
组:
①异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22
②20mA电流环信号9个(12,13,14,15,16,17,19,23,24)
③空6个(9,10,11,18,21,25)
④保护地(PE)1个,作为设备接地端(1脚)
DB-25型连接器的外形及信号线分配如图3.3所示。注意,20mA电流环信号仅IBMPC
和IBMPC/XT机提供,至AT机及以后,已不支持。
图3.2连接器外形和引脚配置
(2)DB-9连接器
在AT机及以后,不支持20mA电流环接口,使用DB-9连接器,作为提供多功能I/O卡
或主板上COM1和COM2两个串行接口的连接器。它只提供异步通信的9个信号。DB-25型连
接器的引脚分配和DB-25型引脚信号完全不同。因此,若和配接DB-25型连接器的DCE设备
连接,必须使用专门的电缆线。
电缆长度:在通信速率低于20kb/s时,RS-232C所直接连接的最大物理距离为15m(50
英尺)。
最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情
况下,DTE和DCE之间最大传输距离为15m(50英尺)。可见这个最大的距离是在码元畸变
小于4%的前提下给出的。为了保证码元畸变小于4%的要求,接口标准在电气特性中规定,
驱动器的负载电容应小于2500pF。
第四节电源
无
第五节RS232接口协议
串行接口的主要功能是接受来自CPU的数据,并转换为串行数据格式发送出去。或者
将接收到的串行数据,送交CPU。图2.1示出了串行接口的结构框图。和系统连接的数据总
线不但用于传送并行数据,而且接收系统的控制字和向系统发送串行接口的状态。系统送往
串行接口的控制字包括发送和接收串行数据的波特率、二进制位串数据格式等。系统读取的
状态字包括发送空、接收完成及错误等状态,以便控制发送和接收过程。
发送数据时,CPU将发送数据送入发送缓冲寄存器。由控制寄存器按照CPU设定的格
式将并行数据转换为串行数据,加上起始位、奇偶校验位和停止位。转换后并被格式化的二
进制位串被送入移位寄存器中,按照选定的波特率发送输出。
接收数据的过程和此相反。控制器按照设定的波特率接收串行位串数据并进行奇偶校
验,去掉串行格式中的附加信息,将其转换成并行数据,送入接收缓冲寄存器。无论发送和
接收,线路的状态寄存器始终保持着接口的各种状态。通过查询状态寄存器,就可以了解和
控制发送和接收过程。
此外,串行接口还包括一个有效的中断系统,无论发送和接收,以及出现的传输错误,
都可以引发系统的硬件中断。
5.1数据传送格式
串行数据通信是把并行数据转换为串行数据按顺序依次发送。接受端再将接受到的串行
数据转换成并行数据。串行数据可按两种方式进行,即同步方式和异步方式。同步方式适用
于大批量数据通信,每次传送一组数据,在每组数据前加上一定的编制信号,使得双方保持
同步。异步数据通信每次发送一个字符,在每个字符的二进制位串前加上启动位作为接收端
的同步信号,这样每发送一个字符,双方进行一次同步。
串行异步数据传输有着严格的数据格式和时序关系。在空闲状态,线路呈现出高电平或
者“1”状态。传输时,首先发送起始位,接收端接收到起始位,即开始接收过程。在后边
的整个二进制位串传输过程中,都是以起始位作为同步时序的基准信号。起始位以“0”表
示。紧跟其后的是数据位,根据采用的编码,数据位可能为5位到8位之间。奇偶位可以有
也可以没有。处在最后的是停止位,停止位以“1”表示,位数可能是1位、1/2位或者2
位。
传送格式中的起始位和停止位在数据传输过程中起着十分重要的作用。通信中有两点影
响着数据的正确接收。一是数据发送是随机的,接收端必须随时准备接收数据。另一方面,
接收端和发送端不是使用同一个时钟,在通信线路的两端各自具有时钟信号源,虽然可以设
定双方的时钟频率一样,但脉冲边沿也不可能一致。脉冲周期、脉冲宽度总有误差。开始发
送时,接收端必须准确地检测到起始位的下降沿,使其内部时钟和发送端保持同步。在对每
个二进制位接收采样时,采样点应可能接近数据位中点。为了能及时发现起始位的下降边沿,
大多数接收器使用高于发送数据波特率十六倍的频率时钟信号进行采样。这样,接收器能够
在一个二进制位周期的1/16时间内检测到起始位的下降边。对数据位周期中心采样的偏差
也不会超过位周期时间的1/16。
图5.1串行异步传输格式
5.2流控制
如果DTE到DCE的速度是DCE到DCE速度几倍的话,PC就可以用115.200Kbps的
速度给MODEM发送数据了。而数据由于缓冲区的溢出早晚会丢失。因此,我们要采用流
控制。流控制有两种:硬件流控制和软件流控制。
软件流控制,有时表示位XON/XOFF,使用两个字符XON和XOFF。XON常常用ASCII
码17表示,而XOFF常用ASCII码19表示。MODEM只有很小的缓冲区所以当计算机将
他填满时MODEM发出一个XOFF字符告诉计算机结束发送数据。一旦MODEM有空间供
起始位数据字校验位结束位
更多的数据使用,它就发XON字符,计算机就可以发送更多的数据。这种类型的流控制有
这样的优点:它不需要额外的信号线,就像字符通过TD/RD线传送那样。但是,在慢速的
连接中,每个字节需要10位,这样会减慢通信的速度。
硬件流控制,也叫做RTS/CTS流控制。它用我们串口电缆中的两根线而不是在数据线
中传输的额外的字符来实现。硬件流控制不会像XON/XOFF那样减慢传输速度。当计算机
希望发送数据时,激活请求输出线。如果MODEM有所需要的空间,MODEM会通过激活
允许发送线来回复,然后计算机会开始发送数据。如果MODEM没有空间,就不会激活允
许发送线。
5.3差错检测
协议定义了完善的差错检测机制,包括通过奇偶检验判定数据的正确性,帧检验判定数
据的完整性。我们可以在发送的数据中在一个字的最后一位和停止位之间加入校验位,进行
数据完整性的检测。
奇偶检验可以用五种不同的校验位。Markparitybit总是被置于逻辑1;spaceparitybit
总是被置于逻辑0;偶校验位通过计算字中的位数,如果结果是偶数,就置为1;奇校验位
则在结果是奇数时置为1。后面的两种方法提供了一种检测位电平传输错误的方法。要注意
的是并不一定要使用校验位,这样就可以在每一个帧内去掉一位,常称为无校验位帧。
帧检验将由硬件自动实现,当设定了相应的帧长度之后,如果系统检测到实际帧宽度和
之不符,将会给出错误标志。
5.4差错控制
RS-232通过设置接口寄存器的相应的值,接口设备会对不同的差错产生相应的中断信
号。系统可以通过相应的中断服务程序进行差错检测,但协议并没有规定相应的差错控制方
法,如果要实现该功能,需要用户在客户端自己添加。
第六节系统配置
6.1端口地址和中断
NameAddressIRQ
COM13F84
COM22F83
COM33E84
COM42E83
表6.1标准端口地址
上表是一般PC机均适用的标准端口地址。如果你的机器恰好是带有微通道总线的IBMP/S2,
那么它的地址和中断是另外一种分配。和LPT端口一样,COM口的基址可以从BIOS的数据
区读取。
StartAddressFunction
0000:0400COM1'sBaseAddress
0000:0402COM2'sBaseAddress
0000:0404COM3'sBaseAddress
0000:0406COM4'sBaseAddress
表6.2BIOS数据区的COM口地址
上表所示的是BIOS数据区的COM口地址,每个地址占2字节空间。下面这个用C编写的范
例程序,告诉我们如何从这些位置获得COM口的地址。
6.2串行端口寄存器
寄存器列表
BaseAddressDLABRead/erName
+0
=0Write-TransmitterHoldingBuffer
=0Read-ReceiverBuffer
=1Read/Write-DivisorLatchLowByte
+1
=0Read/WriteIERInterruptEnableRegister
=1Read/Write-DivisorLatchHighByte
+2
-ReadIIRInterruptIdentificationRegister
-WriteFCRFIFOControlRegister
+3-Read/WriteLCRLineControlRegister
+4-Read/WriteMCRModemControlRegister
+5-ReadLSRLineStatusRegister
+6-ReadMSRModemStatusRegister
+7-Read/Write-ScratchRegister
表6.3寄存器列表
(1)中断允许寄存器(IER)
中断允许寄存器可能是UART所有寄存器中最易理解的。将BIT0设置为高,则允许接
收数据中断,当CPU读取接收寄存器或FIFO中包含的数据,就会产生一个中断。
BIT1是发送存储寄存器为空中断允许位,该中断用来提示CPU发送缓冲区为空。BIT2
是接收线路状态寄存器中断允许位,当该寄存器状态变化时,UART产生一个中断。同样的,
BIT3是Modem状态中断允许位,BIT4到BIT7最为简单,因为它们是保留位。
(2)中断识别寄存器(IIR)
中断识别寄存器是只读寄存器,BIT6和BIT7指示FIFO缓冲区的状态。当两位均为0
时,没有FIFO缓冲区被激活。对于8250或16450,只有这个状态。如果BIT7为1,而BIT
6为0,代表UART的缓冲区有效但是不能使用。当16550UART的FIFO缓冲区出现故障,就
会使得FIFO不能使用。如果两位均为1,则代表FIFO有效而且完全可用。
BIT4和BIT5是保留位。在16550或更高版本中,BIT3代表超时状态中断。
而BIT0代表是否有中断发生。如果有中断发生,由BIT1和BIT2来显示它的状态。这
些中断按照优先级状态工作。线路状态中断具有最高优先级,然后从高往低依次是数据中断、
发送寄存器为空中断、Modem状态中断。
(3)FIFO控制寄存器(FCR)
FIFO寄存器是只写寄存器,用来控制16550或更高版本上的FIFO(先进先出)缓冲区。
BIT0是FIFO接收和发送操作允许位,将该位置为0则使得FIFO的所有发送和接收操作无
效,因此将失去保存在这些FIFO缓冲区里的所有数据。
BIT1和BIT2控制FIFO发送和接收的清除。BIT1负责接收缓冲区,而BIT2负责发送缓
冲区。将这两位置1只会清除FIFO中的内容,而不会影响移位寄存器。这两位是自动清除
的,因此结束时不需要用户自己置0。
BIT3是DMA模式选择位,适用于16550或更高的版本。在此之后的BIT4和BIT5都是
简单的保留位。
BIT6和BIT7都用来设置接收FIFO的触发级。例如,BIT7设置为1而BIT6设置为0,
那么触发级则为8字节。当接收FIFO中有8字节的数据,就会产生接收数据中断。参看IIR。
(4)线路控制寄存器(LCR)
线路控制寄存器设置通信的基本参数。BIT7是波特率因子访问锁存位(简称为DLAB),
在“什么是DLAB”中我们已经讨论过这个概念。BIT6是j间断允许位,该位有效时TD线路
进入间隔(Spacing)状态,使接收UART产生中断。将该位设为0将不允许中断。
BIT3、BIT4、BIT5是奇偶校验选择位。对这三位仔细研究,你会发现BIT3控制了奇偶
校验。也就是说,如果它置0,则不使用奇偶校验;置1则使用奇偶校验。而BIT5可被视
作是固定奇偶检验(STICKYPARITY)的控制位。固定奇偶校验其实就是传送和检验的奇偶
校验位总是固定的0或1。这种方法用来查错是不太有效的,比如前4位出错,而固定奇偶
校验位上仍然是正确的预置值,这样就不会产生奇偶校验错误。高位固定奇偶校验(STICKY
HIGHPARITY)就是奇偶校验位固定为1;而低位固定奇偶校验(STICKYLOWPARITY)则用0
来作为奇偶校验位的值。
如果BIT5控制固定奇偶校验(STICKYPARITY),那么当该位置0,而BIT3仍为1时,
将产生普通的奇偶校验。奇校验指奇偶校验位为1或0,来保证传送的字节中1的总个数为
奇数。偶校验中的奇偶校验位则保证1的个数为偶数。这是较好的查错方法,但也不是完美
的,因此软件纠错中常常使用CRC-32方法。在这种奇偶校验中,当只有一位发生0、1变化,
那么就会产生奇偶校验错误;但如果有两位都0、1跳变了,那么奇偶校验是正确的,也不
会产生奇偶校验错误了。
BIT2设置停止位的长度。将该位置0,则产生一位停止位,而将其置1则根据字长可分
别产生1.5或2位停止位。注意,接收设备只检查第一位停止位。
BIT0和BIT1设置字长,这是很直接的,现在的字长一般是8bit。
(5)Modem控制寄存器(MCR)
Modem控制寄存器是读写寄存器。BIT5、BIT6、BIT7是保留位,BIT4激活回送模式。
在回送模式下,发送端串行输出进入标记状态,接收端串行输入被断开。发送端输出回送到
接收端输入。DSR,CTS,RI和DCD均断开,DTR,RTS,OUT1和OUT2连接到Modem控制输
入上,此时Modem控制输出管脚无效。在该模式下,发送寄存器中的发送的所有数据都被同
一块芯片上的接收电路接收,存于接收寄存器中。这可用来测试UART的工作情况。
辅助设备输出2可连接可控制UART-CPU中断进程的外部电路。辅助设备输出1一般是
断开的,但有些卡中会用作1.8432MHZ和4MHZ(MIDI)的切换。BIT0和BIT1来控制相应的
数据线,例如将BIT1置1就可激活发送线路。
(6)线路状态寄存器(LSR)
线路状态寄存器是只读寄存器。BIT7是接收FIFO出错位。当FIFO中的字节有一次或
以上的间断、奇偶校验错误或帧错误发生,该位就为高。
当BIT6置高,发送存储寄存器和移位寄存器都为空。UART的存储寄存器保存将要发送
的并行数据的下一字节。移位寄存器用于将该字节转换为串行数据,这样可以在一根线路上
传送数据。当BIT5置高,只有发送存储寄存器为空。这两者之间有什么区别呢?BIT6为高,
发送存储寄存器和移位寄存器都为空,没有任何串行转换,因此发送数据线上没有任何动作。
而BIT5为高只是发送存储寄存器为空,另个字节可以被数据端口上,就可能发生使用移位
寄存器的串行转换。
当接收数据线的逻辑0(空)状态维持时间超过发送一个完整字所需时间,就会产生间
断中断(BIT4)。这包括开始位、数据位和停止位的时间。
当最后一位不是停止位,就会发生帧中断错误(BIT3),超时错误可能会导致这个问题。
使用无效的Modem连接两台机器或协议分析器,当数据发送的速率和你UART设置的接收输
率不匹配时,通常会产生帧错误。
当你的程序不能足够快的从端口读取数据,往往会发生超时运行错误。如果寄存器中进
来的字节没有及时的被读走,此时如果恰好又接收到另一字节,那么最后的字节将被丢失,
从而导致运行超时错误。
BIT0代表数据是否就绪,也就是说,一个字节已被UART接收,并存放在接收缓冲区内
等待被读取。
(7)MODEM状态寄存器(MSR)
Modem状态寄存器的BIT0清除发送变量(delta,指增量),也就是说寄存器最后一次
读操作以后,清除发送线有所变化。BIT1和BIT3类似于BIT0。BIT1表示数据设置就绪线
路上的状态变化,BIT3代表数据载波检测线路的状态变化。BIT2代表环指示器追踪沿,当
环指示器从低到高跳变时置位。
BIT4到BIT7指示读取数据时数据线的当前状态。BIT7代表载波检测,BIT6代表环指
示器,BIT5代表数据设置就绪,BIT4指示清除发送线路状态。
(8)擦除寄存器(ScratchRegister)
擦除寄存器不是用于通信的,而是留出一字节的数据空间。它实际是用来判断UART是
8250/8250B还是8250A/16450,这种功能现在已很少用到,因为AT从来就没有8250/8250B
的设计,因为它不能应付总线速度。
6.3DLAB
你可能注意到在上面的寄存器列表里有DLAB一栏,当DLAB设置为1或0时,一些寄
存器会有所变化。这就是为什么UART能在8个端口地址上带有12个寄存器(包括Scratch
Register)的原因。DLAB是DivisorLatchAccessBit(波特率因子访问锁存位)的缩写。
当线路控制寄存器将DLAB设置为1,就有两个可设置通信速度(以比特率计算)寄存器可
供使用。
UART将会带有一个震荡频率在1.8432MHZ左右的晶体。现在的UART只有一个16分
频计数器,将进入的时钟信号简单的16分频。如果有1.8432MHZ的时钟信号,我们就可以
得到115.2KHZ的信号,这样UART就可以达到115.2Kbps的传送和接收速率。这对于一些快
速Modem和可传递这种速度的设备而言是很有利的,但却这会使得其他设备不能够进行通
信。因此UART配备了可编程的波特率发生器,由两个寄存器对其控制。
举个例子来说,我们只想要2400bps的通信速率,必须将115.2K进行48分频来得到
一个适用的2400HZ的时钟。在这里分频因子48保存在由DLAB控制的两个寄存器中。这个
因子可以是0-65535中的任何数字(可16位存储即可)。UART数据总线只有8位,所以要
用两个寄存器,当DLAB=1时,第一个寄存器(基址+0)保存波特率因子的低字节,而另
一个寄存器(基址+1)波特率因子的高字节。
以下是一些更常见的通信速率及其波特率因子(包括高低字节)。注意所有的波特率
因子都是以16进制表示的。
Speed(BPS)Divisor(Dec)DivisorLatchHighByteDivisorLatchLowByte
50230409h00h
30038401h80h
60019200hC0h
24004800h30h
48002400h18h
96001200h0Ch
19200600h06h
38400300h03h
57600200h02h
115200100h01h
表6.4:常用波特率因子表
第七节数据流模型
无
第八节RS232串口接口设备
通用异步接收器/发送器(UART)是一种支持RS-232C标准的可编程串行接口芯片。较
低档次的PC机采用INS8250芯片,AT机采用和8250兼容的NS16450芯片。PC386机、
486机往往使用定制的包括并行接口等其它功能的专用芯片,但其基本功能相同。图4.1是
16550C的芯片外观及管脚排列,通过其特性可以了解异步串行接口的功能和使用。
16550C实现的是对从外围器件或者modem接受来的数据进行串并转换和对从CPU接
受来得数据进行并串转换。CPU可以随时读取芯片的状态,包括完整的modem控制能力和
一个处理器中断系统可用于减少通信连接中对系统管理的占用。
16550C包含一个可编程的波特率发生器。他可以对输入的参考时钟加以一个分量,给
内部的发送逻辑电路提供一个16倍的发送时钟。这个16倍时钟也可以用于接受端逻辑。
16550C可以用在一种替换模式下(FIFO模式)。通过对接受和发送的字符进行缓存,可以减
轻CPU的过度的软件开销。发送和接收的FIFO可以存储16个字节,接收端的FIFO对每个字
节可以另外包含三个错误状态位。在FIFO模式下,可以选择自动流控制的机制,它可以减
轻软件的负担,并且通过RTS输出和CTS输入信号自动控制数据流提高系统的效率。下图是
典型的UART结构框图。
图8.1UART结构框图