第15章 串行通信及接口电路
课程:1A003 计算机组织与系统结构(第二部分) 教材:北京大学计算机组织与系统结构课程 文件类型:PowerPoint 97-2003 二进制格式
一、串行通信基本概念
1.1 串行通信的特点
- 优点:数据在单条 1 位宽的传输线上按时间先后一位一位地传送,节省传输线
- 缺点:数据传输率较低
- 适用场景:长距离、低速率的通信
1.2 常用术语
1) 数据通信方向性结构
| 模式 | 特点 |
|---|---|
| 单工(Simplex) | 仅能进行一个方向的数据传送 |
| 半双工(Half Duplex) | 数据可以在两个方向上传送,但不能同时进行(双向不同时) |
| 全双工(Full Duplex) | 能够在两个方向同时进行数据传送 |
2) 数据传输率
- 比特率:每秒传输的二进制位数,单位 bps(bit per second)
- 波特率:每秒传输的”符号”(信号码元 Signal Element)的个数
- 比特率 vs 波特率:
- 二进制传输时(高低两种电平),每个符号信息量为 1 比特,波特率 = 比特率
- 采用复合调制技术时(如相位+振幅),一个符号含多个比特,波特率 ≠ 比特率
- 例:4 种相位 × 2 种振幅 = 8 种码元 → 每符号 3 位
- 标准波特率系列:50, 75, 110, 150, 300, 600, 1200, …
3) 调制解调器(Modem)
- 电话网是模拟通信系统,传输数字信号需经过调制/解调
- 调制:用数字信号改变载波的幅值、频率或相位
- 三种调制方式:
- 调幅(ASK):改变载波幅度
- 调频(FSK):改变载波频率
- 调相(PSK):改变载波相位
4) 发送时钟和接收时钟
- 主时钟 CLK 经分频后产生发送/接收移位脉冲
- 接收端:RxD → 输入移位寄存器 → 数据输入寄存器
- 发送端:数据输出寄存器 → 输出移位寄存器 → TxD
- 分频系数:÷1, ÷16, ÷32 等
5) 波特率因子
时钟频率 F = 波特率因子 × 波特率
- 给定时钟频率,选择不同的波特率因子可得到不同的波特率
- 例:f = 19.2 kHz,波特率因子 = 16,则波特率 = 1200 bps
- 8253 分频系数计算:计数初值 = 时钟频率 /(波特率 × 波特率因子)
- 例:外部时钟 1 MHz,要得到 19.2 kHz → 分频系数 N = 1,000,000 / 19,200 ≈ 52
6) 异步方式与同步方式
异步方式(Asynchronous,起止同步式):
- 数据格式:起始位(1位低电平) + 5-8位数据位 + 奇偶校验位 + 1/1.5/2位停止位(高电平)
- 每个字符独立,字符间为空闲位(高电平)
- 靠起始位和停止位实现字符同步
- 协议开销较大,效率较低
同步方式(Synchronous):
- 数据格式:同步字符(SYN) + 数据块
- 收发双方使用同一时钟,字符连续传送无间隙
- 效率高,适合大数据量传输
- SDLC/HDLC 帧格式:标志(01111110, 8位) + 地址(8位) + 控制(8位) + 数据场 + CRC(16位) + 标志(01111110)
- 效率计算:2048 位数据,协议开销 48 位 → 效率 = 2048/(2048+48) = 97%
- 通用公式:协议开销 = 1 - N/(N+48)
二、可编程串行通信接口 8251A
Intel 8251A 是 USART(Universal Synchronous Asynchronous Receiver/Transmitter,通用同步/异步收发器),专为 Intel 微处理器设计。
2.1 基本性能
| 特性 | 说明 |
|---|---|
| 工作模式 | 同步 + 异步传送 |
| 同步传送 | 5~8位/字符,内部或外部字符同步,自动插入同步字符 |
| 异步传送 | 5~8位/字符,时钟倍率 1/16/64 倍波特率 |
| 异步特色 | 中止字符(Break)生成,1/1.5/2 位停止位,假起始位检测,自动中止检测处理 |
| 波特率范围 | 异步:DC |
| 工作方式 | 全双工、双缓冲发送和接收 |
| 差错检测 | 奇偶错(PE)、溢出错(OE)、帧格式错(FE) |
| 封装 | 28 脚 DIP |
| 电气兼容 | 全部输入输出 TTL 兼容,单一 +5V 电源 |
2.2 结构与引脚
五大组成部分
- 接收器:串-并转换、接收缓冲、接收控制
- 发送器:并-串转换、发送缓冲、发送控制
- 数据总线缓冲器:与 CPU 数据总线接口
- 调制解调器控制电路:DTR/DSR/RTS/CTS 四根联络线
- 读写控制逻辑电路:接收 CPU 的读写控制信号
与 CPU 接口信号
- D7~D0:8 位双向数据线
- RESET:复位信号
- CS:片选信号
- C/D:控制/数据选择(1=控制/状态,0=数据)
- RD/WR:读/写信号
- TXRDY:发送器准备好(中断/查询)
- RXRDY:接收器准备好(中断/查询)
- TXEMPTY:发送器空
- SYNDET/BRKDET:同步检测/中止检测(双向)
- CLK:主时钟
读写控制真值表:
| CS | C/D | RD | WR | 操作 |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 | CPU 从 8251A 读数据 |
| 0 | 0 | 1 | 0 | CPU 往 8251A 写数据 |
| 0 | 1 | 0 | 1 | CPU 从 8251A 读状态 |
| 0 | 1 | 1 | 0 | CPU 往 8251A 写控制命令 |
与外设接口信号
- RXC:接收器时钟
- TXC:发送器时钟
- RXD:串行数据输入
- TXD:串行数据输出
- DTR:数据终端就绪(输出,低有效)
- DSR:数据装置就绪(输入,低有效)
- RTS:请求发送(输出,低有效)
- CTS:允许发送(输入,低有效)
2.3 编程(控制字与状态字)
1) 方式指令字(Mode Instruction)
复位后首先写入,定义工作方式(8 位):
D7 D6 D5 D4 D3 D2 D1 D0
S2 S1 EP PEN L2 L1 B2 B1
- B2B1(D1D0):波特率因子
- 00 = 同步方式
- 01 = 异步 ×1
- 10 = 异步 ×16
- 11 = 异步 ×64
- L2L1(D3D2):字符长度
- 00=5位, 01=6位, 10=7位, 11=8位
- PEN(D4):奇偶校验允许(1=允许, 0=禁止)
- EP(D5):偶校验选择(1=偶校验, 0=奇校验)
- S2S1(D7D6):
- 异步时:停止位数量(01=1位, 10=1.5位, 11=2位, 00=无效)
- 同步时:同步字符数+同步方式
- 00=2个同步字符+内同步
- 01=2个同步字符+外同步
- 10=1个同步字符+内同步
- 11=1个同步字符+外同步
2) 命令指令字(Command Instruction)
方式字之后写入,控制实际操作(8 位):
D7 D6 D5 D4 D3 D2 D1 D0
EH IR RTS ER SBRK RXE DTR TXEN
- TXEN(D0):允许发送(1=允许)
- DTR(D1):数据终端准备好(1=DTR输出有效)
- RXE(D2):允许接收(1=允许)
- SBRK(D3):发送中止字符(1=中止, 0=正常)
- ER(D4):清除错误标志(1=复位PE/OE/FE)
- RTS(D5):请求发送(1=RTS输出有效)
- IR(D6):内部复位(1=使8251A复位,回到方式字状态)
- EH(D7):进入搜索同步字符方式(同步方式用,1=允许搜索)
3) 状态字(Status Word)
CPU 可读状态字查询工作状态(8 位):
D7 D6 D5 D4 D3 D2 D1 D0
DSR SYNDET/ FE OE PE TXEMPTY RXRDY TXRDY
BRKDET
- TXRDY(D0):发送缓冲器空(状态位只反映缓冲器,引脚还需 CTS=0 和 TXEN=1)
- RXRDY(D1):接收器准备好
- TXEMPTY(D2):发送器空
- PE(D3):奇偶校验错
- OE(D4):溢出错(超越错)
- FE(D5):帧格式错
- SYNDET/BRKDET(D6):同步/中止检测
- DSR(D7):数据装置就绪
注意:TXRDY 状态位 vs TXRDY 输出引脚
- 状态位为 1:仅反映发送缓冲器已空
- 引脚为 1:发送缓冲器空 且 CTS=0 且 TXEN=1
- 状态位用于 CPU 查询,引脚用于中断请求
2.4 初始化流程
RESET
↓
输出方式指令字
↓
异步? ──N──→ 输出第一个同步字符
│Y ↓
↓ 单同步? ──N──→ 输出第二个同步字符
输出命令指令字 ↓Y
↓ 输出命令指令字
有复位命令? ←──────────┐
│Y │
↓ ↓
回到方式字状态 传送数据
↓
数据完否?
关键规则:
- 初始化必须在复位后先写方式指令字
- 异步方式:方式字 → 命令字 → 数据传送
- 同步方式:方式字 → 同步字符(1或2个) → 命令字 → 数据传送
- 传送过程中可随时写命令字或读状态字
- 使用 IR=1 的内部复位命令可回到方式字状态,重新编程
2.5 编程举例
例1:异步方式初始化
设定:异步方式,波特率因子 64,7 位数据,偶校验,2 位停止位
- 方式字 = 1111 1011B = FBH
- 命令字 = 0001 0111B = 17H(发送允许+接收允许+错误复位+DTR有效)
MOV AL, 0FBH ; 方式指令字
OUT 51H, AL ; 写入控制端口
MOV AL, 17H ; 命令指令字
OUT 51H, AL ; 写入控制端口例2:同步方式初始化
设定:同步方式,双同步字符,同步字符 16H,内同步,偶校验,7 位数据
- 方式字 = 0011 1000B = 38H
- 命令字 = 1001 0111B = 97H(发送允许+接收允许+错误复位+搜索同步+DTR有效)
MOV AL, 38H ; 方式指令字
OUT 51H, AL
MOV AL, 16H ; 同步字符 1
OUT 51H, AL
OUT 51H, AL ; 同步字符 2(双同步)
MOV AL, 97H ; 命令指令字
OUT 51H, AL2.6 应用:双机串行通信
近距离(<15米)双机通信方案:
- 不用 Modem,直接 RS-232C 相连
- 双方均为 DTE,需加电平转换电路(EIA ↔ TTL)
- 可不用四根联络信号,CTS 接地即可
- 支持半双工或全双工
- CPU 与接口之间可用查询或中断方式
发送端程序(查询方式、半双工、异步):
START: MOV DX, 8251A_CTRL
MOV AL, 7AH ; 异步,7位数据,1停止位,偶校验,×16
OUT DX, AL
MOV AL, 11H ; 发送允许,错误复位
OUT DX, AL
MOV SI, OFFSET SEND_BUF
MOV CX, SEND_LEN
NEXT: MOV DX, 8251A_CTRL
IN AL, DX ; 读状态字
TEST AL, 01H ; TXRDY?
JZ NEXT
MOV DX, 8251A_DATA
MOV AL, [SI]
OUT DX, AL ; 发送一字节
INC SI
LOOP NEXT
HLT接收端程序:
BEGIN: MOV DX, 8251A_CTRL
MOV AL, 7AH ; 同发送端方式字
OUT DX, AL
MOV AL, 14H ; 接收允许
OUT DX, AL
MOV DI, OFFSET RECV_BUF
MOV CX, RECV_LEN
L1: MOV DX, 8251A_CTRL
IN AL, DX ; 读状态字
TEST AL, 02H ; RXRDY?
JZ L1
TEST AL, 08H ; 奇偶校验错?
JNZ ERR ; 有错转出错
MOV DX, 8251A_DATA
IN AL, DX ; 接收一字节
MOV [DI], AL
INC DI
LOOP L1
HLT2.7 初始化的特殊问题:先写 3 次”0”
上电时 8251A 可能处于任意状态(方式字/同步字符/命令字)。为确保在发复位命令前处于命令字格式,需执行最坏情况初始化序列:
MOV DX, CTRL_PORT
MOV AL, 0
OUT DX, AL ; 第1次写0
OUT DX, AL ; 第2次写0(第1个同步字符)
OUT DX, AL ; 第3次写0(第2个同步字符→进入命令字状态)
MOV AL, 40H ; 内部复位命令
OUT DX, AL ; 复位,回到方式字状态
MOV AL, 4EH ; 方式指令字
OUT DX, AL
MOV AL, 27H ; 命令指令字
OUT DX, AL原理:连续写 3 个 00H → 配置为同步方式并写入两个空同步字符 → 此时已处于命令字格式 → 写 40H(内部复位命令)确保可靠复位。
三、与相关知识的关联
- 与中断系统-第13章-计算机组织与系统结构:串行通信常结合中断方式实现高效数据收发
- 与可编程并行接口8255A-第14章-计算机组织与系统结构:8255A 并行 vs 8251A 串行,两种接口设计思路对比
- 与《深入理解计算机系统》CSAPP 中网络/通信章节:物理层串行传输是网络通信的基础
- 与 FPGA 设计中 UART IP 核:现代数字设计中 8251A 的功能已被 Verilog/VHDL 实现的 UART 核替代,但原理一致