1.05k likes | 1.27k Views
RS-232C 串行接口. RS-232C 是一种 异步串行接口 概述. 串行通信、并行通信. 计算机系统中两个功能模块之间的信息交换有 两种方式:并行通信与串行通信。 串行通信 是指数据通过 一根数据线 进行发送和接收,其特征是把各个二进制位连成串, 一位一位地 传送 。 并行通信 是指数据的各位通过 若干根 数据线 同时 进行发送和接收。. 并行通信及并行接口 并行通信 是指两个功能模块之间有多条数据信号传送线,这样两模块之间可以一次同时传送多位数据, 传送速度快 。
E N D
RS-232C串行接口 RS-232C是一种异步串行接口 概述
串行通信、并行通信 计算机系统中两个功能模块之间的信息交换有 两种方式:并行通信与串行通信。 串行通信 是指数据通过一根数据线进行发送和接收,其特征是把各个二进制位连成串,一位一位地传送。 并行通信 是指数据的各位通过若干根数据线同时进行发送和接收。
并行通信及并行接口 并行通信是指两个功能模块之间有多条数据信号传送线,这样两模块之间可以一次同时传送多位数据,传送速度快。 由于所需的数据传送线较多,造价高,因此并行通讯适用于近距离、快速数据交换的场合,如微机系统中CPU与存储器、I/O端口之间。 完成并行通信的接口电路称为并行接口。
串行通信及串行接口 串行通信是指两个功能模块之间只通过一条或 两条数据线进行数据交换。 发送方需要将数据按二进制位进行分解,一位、一位地分时经过单条数据线传送。 接收方需要一位一位地从单条数据线上接收数据,并且将它们重新组装成一个数据。 串行通信所需数据线少,在远距离传送时比并行通信的造价低。但是一个数据只有经过若干次以后才可以传送完,速度较慢。 完成串行通信的接口电路称为串行接口。
串行通讯时,需要解决以下问题: • 双方约定的发送与接收速率(波特率,即位/秒); • 约定采用的数据格式(帧格式); • 接收方怎样知道一批数据的开始、结束 (帧同步问题); • 接收方怎样从数据流中采样每位数据(位同步); • 接收方怎样判断接收数据的正确性(数据校验),如何处理收发错误; • 解决这些问题的方法大体有同步通信与异步通信两种。
同步通信与异步通信 异步通信 异步通信以字符为单位传送,为了解决帧同步,每个字符都附加了一些控制信息,由4部分组成: 一位起始位(低电平)、 5~8位数据位、 一位奇偶校验位、 1~2位停止位(高电平)。 两个字符之间的间隔是任意的,中间可以填充空闲位(高电平)。
只要接收方检测到数据线上出现了由高电平向低电平的跳变,并且低电平能持续一段时间,就表明已经接收到一帧数据的开始。只要接收方检测到数据线上出现了由高电平向低电平的跳变,并且低电平能持续一段时间,就表明已经接收到一帧数据的开始。 这时接收方就可以按照接收时钟从数据线上采样数据,直到接收到了停止位,表明接收完一帧数据。 接收方还可以通过奇偶校验位判断数据传送过程中是否出现错误。
异步传送控制比较简单,对发送与接收时钟要求不很严格(发送和接收时钟可以不用同一个,所以不必传送时钟信号),不会造成错误累积,但是由于每个数据在传送时都要附加控制信息,约有20%的冗余。异步传送控制比较简单,对发送与接收时钟要求不很严格(发送和接收时钟可以不用同一个,所以不必传送时钟信号),不会造成错误累积,但是由于每个数据在传送时都要附加控制信息,约有20%的冗余。 传送速率并不高,为50~9600波特之间。 异步串行接口特别适合于使用普通电话线进行远距离数据通信。
同步通信 同步通信以数据块为单位进行传送,为了解决帧同步,在每一批数据流之前,附加同步信息(1~2个同步字符),最后以校验字符结束。 如果在数据传送过程中,发生数据断流(即发送方没有数据可发送)应以同步字符填充。
接收方检测到协议要求的1~2个同步字符后,就可以认为双方已经取得一致,之后就可以在严格的时钟控制下采样数据线接收数据。接收方检测到协议要求的1~2个同步字符后,就可以认为双方已经取得一致,之后就可以在严格的时钟控制下采样数据线接收数据。 同步通信可以根据校验字符判断所接收的一批字符是否在传送过程中出现错误。
同步通信的传送速率较高(通常其传送速率为50~几百千波特)。同步通信的传送速率较高(通常其传送速率为50~几百千波特)。 同步通信在1~2个同步字符的带领下,就可以源源不断地发送和接收数据了。但是同步通信对双方的时钟要求很严格,并且容易造成错误累积。 同步通信时发送时钟和接收时钟必须用同一个时钟信号以减少错误累积,所以,在发送数据的同时还需要将发送时钟信号发送给接收方作为接收时钟。
串行通信中的常用术语 (1) 传送制式 串行传送有 单工、半双工、全双工三种传送制式。
甲 (发送器) 乙 (接收器) 数据线 单工方式 单工:是指发送方与接收方只有一条数据线路,而 且这条数据线路永远只能进行一个方向的传输。
甲 (发送器) (接收器) 乙 (接收器) (发送器) 数据线 半双工方式 半双工: 是指发送方与接收方也只有一条数据线路, 但这条数据线路可以在不同时刻进行两个方向的 传输。
甲 (发送器) (接收器) 乙 (接收器) (发送器) 数据线 全双工方式 全双工: 是指发送方与接收方有两条数据线路,同 一时刻可以利用这两条数据线路进行不同方向 的数据传输。
(2) 调制与解调 计算机内使用的是数字信号,要求的频带很宽,而一般的通信线路(如电话线路)的频带只有300Hz~3400Hz。若直接用电话线传输数字信息,则会引起严重的信号失真。 为了能通过电话线传送数据,必须要把数字信号变成符合线路要求的模拟信号,这就是调制。而将电话线路上的模拟信号变为计算机可以接受的数字信号就是解调。
(3)传输率 传输率是指每秒传送的二进制位的个数,通常与波特率相同。 计算机中常用的一些标准波特率系列为: 110、150、300、600、1200、2400、4800、9600、19200。 通信是根据传送的波特率来确定发送和接收时钟的。收、发时钟频率和波特率之间的关系为: 时钟频率=N*波特率 这里的N为波特率因子,常为1、16、32、64。
串行通信过程中常见的错误 串行通信中常见的错误有奇偶校验错、溢出错、帧格式错 • 奇偶校验错:是指接收方接收到的数据中1的个数与奇偶校验位不符,通常是由干扰引起的,发生这种错误时接收方应该要求发送方重新发送。 • 溢出错:是指接收方与发送方的速率不匹配,接受方没有来得及处理接收来的数据,发送方已经发送来下一个数据,造成数据丢失。可以通过降低发送方的发送速率或者在接收方设置多级缓冲结构等方法来减少这种错误。 • 帧格式错:是指接收方接受的字符格式与协议不符,这种错误多半是由双方协议不明确或干扰引起的。
4. 常用的异步通信规程 在数据传送过程中,为了能正确传送数据制定了许多通讯规程。常见的通讯规程有: 异步控制规程(ASYNC)、 同步控制规程(BISYNC)、 高级数据链路控制规程(HDLC)等。 每一种通讯规程都由一些大规模集成电路芯片完成,如:可编程UART(通用异步收发器)8250, 可编程USART(通用同步/异步收发器)8251, 可编程HDLC/SDLC规程控制器8273与8273A, 多协议串行控制器8274等。
异步串行接口的核心电路称之为 通用异步发送器-接收器UART (Universal Asynchronous Receiver-Transmitter) UART的主要功能是, 一方面可以把来自计算机的8位并行数据变换为串行数据传送给MODEM或其他串行通信设备; 另一方面可以把来自MODEM或其他串行通信设备的串行数据变换为8位并行数据传送给计算机。
异步串行通信接口以UART为核心, 附加一些辅助电路, 如地址译码、电平转换等组成。
在IBM PC/XT时代使用的UART是8250, 后来升级到NS 16550A/D, 现在集成到SIO电路中的兼容 UART常常称之为NS 16C550。
RS-232C串行接口的电路 在IA-32 Intel计算机的主板上,串行接口电路由集成在SIO电路中的 UART(NS16C550)、 电平转换电路GD75232、 及外部的9芯D型连接器共同组成,如下图示。
引脚 信 号 名 称 信号方向 说 明 1 DCD(DataCarrier Detect) MODEM → PC 数据载波检测 2 R×D#(Receive Data) MODEM → PC 接收数据 3 T×D#(Transmit Data) MODEM ← PC 发送数据 4 DTR(DataTerminal Ready) MODEM ← PC 数据终端准备好,加电后有效 5 GND(Ground) MODEM ─ PC 地 6 DSR(Data Set Ready) MODEM → PC 数据设备准备好,加电后有效 7 RTS(Request to Send) MODEM ← PC 请求发送 8 CTS(Clear to Send) MODEM → PC 清除待发 9 RI(Ring Indicator) MODEM → PC 振铃指示 表 9芯D型连接器信号名称与引脚分配
通用异步收发器(UART)NS16550 • 主要功能: • 数据格式可以编程选择: 数据位可选5、6、7、8位, 停止位可选1、1.5、2位, 可选用(或不选用)奇校验或偶校验;
2. 波特率可编程设置: 波特率因子设定为16。 即:内部时钟电路能产生频率为 16×波特率 的 时钟作为发送或接收的时钟; 发送或接收的时钟是对UART的外部提供的基准时钟1.8432MHz进行分频得到,能选择1~65535作为分频系数,分频系数由UART中的除数锁存器提供。
可得到公式: 通常用波特率(位/秒)来表示传输率。 可见,串行通信中信息传输率的选择可通过设置除数锁存器的不同的值来实现。 程序员可根据所需波特率的值计算出应设置的除数锁存器的值,通过输出指令写入除数锁存器即可 。(据上公式可得下表)
3. 支持异步通信规程: 发送时在串行数据流中自动插入起始位、停止位和奇偶校验位;接收时自动删除这些发送时插入的信息; 4.具有和MODEM的接口和控制信号(与MODEM连接方便); 5. 发送和接收均采用双缓冲的结构,因而,发送时数据由CPU写入UART和接收时从UART读取数据均无需严格的同步要求。
一般UART的寄存器结构框图 CS0 CS1 CS2# A2 A1 A0 ADS# DISTR DISTR# DOSTR DOSTR# DDIS CSOUT XTAL1 XTAL2 MR
NS16550比以往的UART中增加了16字节的“FIFO先进先出缓冲器”,用于缓冲读写操作,以适合高速处理器的通信。 NS16550采用了FIFO缓冲器,使UART接收到的16个字节数据之后,才通知微处理器,同样,若多达16个字节的发送数据保持在FIFO中,等待发送将有利于提高传输效率。
A0,A1,A2 寄存器选择地 寄存器选择地址信号,芯片内有十个可供CPU访问的寄存器,由三位地址译码与线路控制寄存器的最高位(DLAB)共同选择。 CS0,CS1,CS2# 芯片选择,只有当CS0、CS1为高电平,CS2#为低电平时,该芯片被选中。 ADS# 地址选通,用于锁存地址线和片选线,可以连接到地 址译码器的选通端。它有效时,才可允许UART与 CPU之间进行数据传送。
MR 主复位信号用于对16550的初始化,它应该与系统 的RESET信号相连。 INTR 中断请求线用于向系统申请中断,如每收到或发出 数据16个字节、或数据检测到出错、或线路出错等就向 系统请求一次。 RD、RD# 读信号用于控制芯片中的RX缓冲器读出操作。两信 号任选。
WR、WR# 写信号用于将数据写入芯片的有关寄存器。两信号 任选。 SOUT、SIN 串行发送和接收数据线。 RCLK、BAUDOUT# 分别为接收时钟和发送器时钟输入信号 RTS#、CTS# 分别是请求发送和批准发送。均与调制解调器相连。
DTR#、DSR# 分别是数据终端准备就绪、数据通信设备准备就绪。 均与调制解调器相连。 DCD#(CD#) 载波检测线。来自调制解调器,该信号表明有一个 设备与系统相连。 RI# 响铃指示。由调制解调器置发来的表明有电话铃响。 DDIS# 禁止UART写操作。表明系统正在读操作,用于进 行读写两个方向的转换。
D0-D7 数据总线与系统连接,用于传递数据、命令和状态。 XIN,XOUT 主时钟线是由18.432MHz晶振经过10倍分频后 连接到芯片上的。 OUT1、OUT2 用户自定义引脚。可供UART向调制解调器发命令 信号。 RXRDY#、TXRDY# 分别为接收器与发送器准备就绪信号。
串行端口寄存器 • NS16550采用多种中断方法。这几个中断可由程序员在“中断允许寄存器”中事先设置。每当中断条件具备时,16550将向系统请求中断,并且将状态反映在“中断标识寄存器”中以便于程序查询。 • “除数锁存器”有两个作用,一是用作波特率的除数因子,二是在高位上用1和0区别端口寄存器地址。 • 串行通信参数由“线路控制寄存器”决定。 • “线路状态寄存器”保存的是通信进程中的状态。 • 为了对外部载波线路进行控制,设置有:“调制解调器控制寄存器”和“调制解调器状态寄存器”。
NS16550中的10个独立的可编程寄存器, 是串行端口编程的基础。 COM1、COM2所对应的UART寄存器及其 所占用的I/O地址如下表所示。 (其中DLAB指的是线路控制寄存器的最高位。)
寄 存 器 地 址 COM1 I/O空间地址 COM2 I/O空间地址 DLAB A2 A1 A0 接收缓冲寄存器RBR(读操作) 0 0 0 0 03F8H 02F8H 发送缓冲寄存器TBR(写操作) 0 0 0 0 03F8H 02F8H 中断允许寄存器IER 0 0 0 1 03F9H 02F9H 中断标识寄存器IIR(读操作) x 0 1 0 03FAH 02FAH FIFO控制寄存器FCR(写操作) x 0 1 0 03FAH 02FAH 线路控制寄存器LCR x 0 1 1 03FBH 02FBH MODEM控制寄存器MCR x 1 0 0 03FCH 02FCH 线路状态寄存器LSR x 1 0 1 03FDH 02FDH MODEM状态寄存器MSR x 1 1 0 03FEH 02FEH 除数锁存器低位字节DLL 1 0 0 0 03F8H 02F8H 除数锁存器高位字节DLH 1 0 0 1 03F9H 02F9H 表 COM1、COM2的UART寄存器及其所占用的I/O地址
中断允许寄存器 用低4位分别使能4种中断,程序员可设置任何一种中断,该寄存器各位的定义如下: D0:为1时,允许接收的数据准备好时发中断; D1:为1时,允许发送保持寄存器空时发中断; D2:为1时,允许接收字符出错或收到间断状态时发中断; D3:为1时,允许Modem状态改变发中断。
中断标识寄存器: 每当在中断允许寄存器中已置1的中断被激活,UART内部由硬件使中断标识寄存器位0清0,同时经过INTR发出中断信号。 只有执行中断服务程序,并读出中断标识及有关寄存器的内容,才能使此次中断复位(位0置1)。否则,下一个同类型中断就不会得到响应。
中断标识寄存器 (等待处理)