第15章 串行通信及接口电路
1A003 计算机组织与系统结构 课程第15章 来源:田浩然上传的资料 / 1A003 计算机组织与系统结构 / 第二部分 PowerPoint 97-2003 二进制格式,LibreOffice 转 PDF 后 pdftotext 全文提取约 2.6 万字符
一、串行通信基本概念
1.1 串行通信的特点
- 优点:数据在单条 1 位宽的传输线上按时间先后一位一位地传送,节省传输线(长距离优势明显)
- 缺点:数据传输率较低
- 适用场景:长距离、低速率的通信
1.2 常用术语
(1)数据传送方向 — 单工 / 半双工 / 全双工
| 类型 | 特点 | 结构 |
|---|---|---|
| 单工 (Simplex) | 仅能进行一个方向的数据传送 | 设备A=发送器,设备B=接收器 |
| 半双工 (Half Duplex) | 数据可以双向传送,但不能同时进行(双向不同时) | 每端兼具发送/接收,分时切换 |
| 全双工 (Full Duplex) | 能够在两个方向同时进行数据传送 | 两条独立传输通道,同时收发 |
(2)数据传输率
- 比特率:每秒传输的二进制位数,单位 bps (bit per second)
- 波特率:每秒传输的”符号”(信号码元 Signal Element)的个数,单位 波特 (Baud)
- 比特率 vs 波特率的关系:
- 二进制中(高低两种电平 = 1 bit/符号),波特率 = 比特率
- 多进制调制中(如 QAM 相位+振幅复合调制),波特率 < 比特率
- 例:4 种相位 × 2 种振幅 = 8 种码元 = 3 bit/符号
- 标准波特率系列:50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, …
(3)调制解调器 (Modem)
- 电话网是模拟通信系统,传输数字信号必须经过调制解调
- 调制:用数字信号改变载波的幅值/频率/相位
- 解调:从载波中恢复出数字信号
- 三种基本调制方式:
- 调幅 (ASK):载波幅度随数字信号变化(抗干扰差)
- 调频 (FSK):载波频率随数字信号变化(抗干扰较好)
- 调相 (PSK):载波相位随数字信号变化(抗干扰最好,频带利用率高)
(4)信道带宽与数据传输率的关系
- 奈奎斯特公式(无噪声理想信道):C = 2H·log₂L (bps)
- H 为信道带宽 (Hz),L 为码元离散值个数
- 香农公式(有噪声信道):C = H·log₂(1 + S/N) (bps)
- S/N 为信噪比(常用分贝 dB = 10·lg(S/N) 表示)
- 信噪比越大,信道容量越大
1.3 串行通信的两种基本方式
(1)异步通信 (Asynchronous Communication)
- 特点:以字符为单位传送,字符之间的时间间隔不固定
- 帧格式:
- 起始位:1 位,低电平(标志一个字符开始)
- 数据位:5~8 位(通常 7 或 8 位),低位在前
- 校验位:1 位(奇校验/偶校验/无)
- 停止位:1、1.5 或 2 位,高电平(标志一个字符结束)
- 空闲位:线路空闲时保持高电平
- 优缺点:
- 优点:不需要同步时钟,设备简单,收发双方时钟独立
- 缺点:每个字符都有起始/停止位开销,传输效率低(约 80%)
(2)同步通信 (Synchronous Communication)
- 特点:以数据块(帧)为单位传送,字符之间无间隔
- 同步方式:
- 外同步:由外部提供同步时钟信号
- 内同步:在数据帧头部插入同步字符(SYN)
- 帧格式:
- 1~2 个同步字符 SYN → 数据块(连续字符)→ 校验字符(CRC 等)
- 优缺点:
- 优点:传输效率高(无字符间空隙和起始停止位)
- 缺点:需要同步时钟,硬件复杂,收发双方时钟必须严格同步
二、串行通信的差错控制
2.1 差错类型
- 随机错:由热噪声引起,单个比特出错
- 突发错:由脉冲噪声引起,连续多个比特出错
2.2 常用检错方法
(1)奇偶校验 (Parity Check)
- 奇校验:整个字符(数据位+校验位)中”1”的个数为奇数
- 偶校验:整个字符中”1”的个数为偶数
- 特点:简单,但只能检测奇数个比特错误,漏检率约 50%
(2)循环冗余校验 (CRC — Cyclic Redundancy Check)
- 基本原理:将数据块看成一个多项式,用生成多项式 G(x) 做模 2 除法,余数作为校验码
- 特点:检错能力强,能检测全部奇数个错和大部分突发错
- 常用生成多项式:
- CRC-12:x¹² + x¹¹ + x³ + x² + x + 1
- CRC-16:x¹⁶ + x¹⁵ + x² + 1(IBM/CCITT)
- CRC-CCITT:x¹⁶ + x¹² + x⁵ + 1
- CRC-32:x³² + x²⁶ + x²³ + x²² + x¹⁶ + x¹² + x¹¹ + x¹⁰ + x⁸ + x⁷ + x⁵ + x⁴ + x² + x + 1(以太网用)
2.3 纠错方法
- 自动重发请求 (ARQ):检出错误后请求发送方重发
- 前向纠错 (FEC):接收端不仅能检错还能纠正错误(如海明码)
- 混合纠错:少量错自行纠正,超出能力则请求重发
三、串行接口的基本功能
一个典型的串行接口应具备以下功能:
- 串-并转换:发送时并行→串行;接收时串行→并行
- 格式化:异步/同步帧格式装配与拆解
- 差错控制:奇偶校验/CRC 校验的产生与检测
- 速率控制:波特率发生器,可选多种波特率
- 联络信号:提供 Modem 控制信号(DTR/DSR/RTS/CTS 等)
- 缓冲:发送/接收数据缓冲寄存器,解决速度匹配
- 中断/DMA 支持:提高 CPU 效率
- 状态寄存器:反映接口工作状态(发送空、接收满、各种错误等)
四、可编程串行通信接口 8251A
4.1 8251A 概述
- Intel 8251A:通用同步/异步接收发送器 (USART — Universal Synchronous/Asynchronous Receiver/Transmitter)
- 支持同步和异步两种工作方式
- 同步:5
8 位数据,内同步/外同步,波特率 064K - 异步:5
8 位数据,1/1.5/2 位停止位,波特率 019.2K - 全双工,双缓冲(发送/接收各有缓冲)
- 三种错误检测:奇偶错、溢出错、帧格式错
- 提供 Modem 控制信号,可直接连接 Modem
4.2 8251A 内部结构
五大组成部分:
-
发送器
- 发送缓冲寄存器(并行输入)
- 发送移位寄存器(串行输出 → TxD)
- 发送控制电路
- 输出信号:TXRDY(发送准备好)、TXE(发送缓冲器空)、TxC(发送时钟)
-
接收器
- 接收移位寄存器(串行输入 ← RxD)
- 接收缓冲寄存器(并行输出)
- 接收控制电路
- 输出信号:RXRDY(接收准备好)、RxC(接收时钟)、SYNDET(同步检测)
-
数据总线缓冲器
- 8 位双向三态缓冲器
- 连接系统数据总线 D₀~D₇
- 含:数据输入缓冲、数据输出缓冲、控制字/状态字缓冲
-
读/写控制逻辑
- 接收 CPU 的控制信号,决定操作类型
- 控制信号:
- CS:片选
- C/D:控制/数据选择(C/D=1 读写控制字/状态字;C/D=0 读写数据)
- RD、WR:读/写控制
- RESET:复位(回到方式字等待状态)
- CLK:主时钟(8251A 工作时钟)
-
Modem 控制逻辑
- 提供与 Modem 的联络信号
- DTR:数据终端准备好(输出,低有效)
- DSR:数据装置准备好(输入,低有效)
- RTS:请求发送(输出,低有效)
- CTS:清除发送(输入,低有效)
4.3 8251A 外部引脚
28 脚 DIP 封装,分五大类:
| 类别 | 信号 | 方向 | 说明 |
|---|---|---|---|
| 数据总线 | D₀~D₇ | 双向 | 8 位数据总线,连系统数据总线 |
| 读/写控制 | CS | 输入 | 片选,低有效 |
| C/D | 输入 | 控制/数据选择(=1 控制;=0 数据) | |
| RD | 输入 | 读信号,低有效 | |
| WR | 输入 | 写信号,低有效 | |
| CLK | 输入 | 主时钟(同步时>30×波特率,异步时>4.5×) | |
| RESET | 输入 | 复位,高有效 | |
| 发送器 | TxD | 输出 | 串行数据发送端 |
| TXRDY | 输出 | 发送器准备好(缓冲器空) | |
| TXE | 输出 | 发送器空(移位寄存器也空) | |
| TxC | 输入 | 发送时钟(下降沿发送数据) | |
| 接收器 | RxD | 输入 | 串行数据接收端 |
| RXRDY | 输出 | 接收器准备好(已有数据可读) | |
| RxC | 输入 | 接收时钟(上升沿采样数据) | |
| SYNDET/BRKDET | 双向 | 同步检测/断点检测 | |
| Modem 控制 | DTR | 输出 | 数据终端准备好,低有效 |
| DSR | 输入 | 数据装置准备好,低有效 | |
| RTS | 输出 | 请求发送,低有效 | |
| CTS | 输入 | 清除发送,低有效 |
4.4 8251A 的控制字
8251A 有两个控制字寄存器,共用一个端口地址:
(1)方式指令字(模式字)
决定 8251A 的工作方式,复位后写入的第一个字就是方式字。
| D₇ | D₆ | D₅ | D₄ | D₃ | D₂ | D₁ | D₀ |
|---|---|---|---|---|---|---|---|
| 异步:停止位 / 同步:同步字符数 | 奇偶校验 | 字符长度 | 波特率因子 |
-
D₁D₀(波特率因子 / 同步选择):
- 00 = 同步方式
- 01 = 异步,×1(时钟=波特率)
- 10 = 异步,×16(时钟=16×波特率)
- 11 = 异步,×64(时钟=64×波特率)
-
D₃D₂(字符长度):00=5位, 01=6位, 10=7位, 11=8位
-
D₄(奇偶校验允许):1=允许,0=禁止
-
D₅(奇偶类型):D₄=1 时有效,1=偶校验,0=奇校验
-
D₇D₆(异步:停止位数):
- 00 = 无效
- 01 = 1 位停止位
- 10 = 1.5 位停止位
- 11 = 2 位停止位
-
D₇D₆(同步:同步字符数):
- D₀=00(同步)时:D₆=1 单同步, D₆=0 双同步;D₇=1 外同步, D₇=0 内同步
例:
0111 1011B = 7BH→ 异步,×16,8位数据,偶校验,2位停止位 例:0100 1110B = 4EH→ 异步,×16,8位数据,偶校验,1位停止位
(2)命令指令字(控制字)
方式字写入后,后续写入的就是命令字。
| D₇ | D₆ | D₅ | D₄ | D₃ | D₂ | D₁ | D₀ |
|---|---|---|---|---|---|---|---|
| EH | IR | RTS | ER | SBRK | RxE | DTR | TxEN |
- D₀ (TxEN):发送允许,1=允许发送
- D₁ (DTR):数据终端准备好,1=使 DTR 输出有效(低电平)
- D₂ (RxE):接收允许,1=允许接收
- D₃ (SBRK):发终止字符,1=发送连续低电平(BREAK)
- D₄ (ER):错误标志复位,1=清除 PE/OE/FE 三个错误标志
- D₅ (RTS):请求发送,1=使 RTS 输出有效(低电平)
- D₆ (IR):内部复位,1=使 8251A 复位,回到等待方式字状态
- D₇ (EH):进入搜索模式(同步方式用),1=启动搜索同步字符
例:
0011 0111B = 37H→ 发送允许,接收允许,错误复位,RTS 请求,DTR 有效
(3)状态字
从控制口(C/D=1)读出的是状态字。
| D₇ | D₆ | D₅ | D₄ | D₃ | D₂ | D₁ | D₀ |
|---|---|---|---|---|---|---|---|
| DSR | SYNDET | FE | OE | PE | TXE | RXRDY | TXRDY |
- D₀ (TXRDY):发送器准备好(=1 可发送数据)
- D₁ (RXRDY):接收器准备好(=1 有数据可读取)
- D₂ (TXE):发送器空(移位寄存器也空)
- D₃ (PE):奇偶校验错(Parity Error)
- D₄ (OE):溢出错(Overrun Error,前一字节未取走又收到新字节)
- D₅ (FE):帧格式错(Framing Error,异步方式无有效停止位)
- D₆ (SYNDET):同步检测
- D₇ (DSR):数据装置准备好(=1 表示 Modem 已就绪)
4.5 8251A 的初始化流程
关键:方式字和命令字共用一个写入端口,通过写入顺序区分。
复位(硬件复位或命令字 D6=1 内部复位)
↓
写入方式指令字(决定工作方式)
↓
┌→ 写入命令指令字(控制操作)
│ ↓
│ 数据收发操作
│ ↓
└── 需要改变方式吗?
是 → 发内部复位命令(D6=1)→ 回到方式字状态
否 → 继续操作
关于”先写 3 次 0”的初始化技巧:
- 8251A 上电后可能处于不确定状态(方式字/同步字符/命令字都有可能)
- 为保证正确初始化,先连续写 3 次 00H(C/D=1),再发内部复位命令 40H
- 原理:3 次 00H 会配置成同步方式 + 写入 2 个假同步字符,确保设备处于命令字状态
- 然后发 40H 内部复位,再正常初始化方式字和命令字
; 8251A 安全初始化示例
MOV DX, 控制端口
MOV AL, 0
OUT DX, AL ; 第1次 0
OUT DX, AL ; 第2次 0
OUT DX, AL ; 第3次 0
MOV AL, 40H ; 内部复位命令
OUT DX, AL
MOV AL, 4EH ; 方式字:异步×16,8数据,偶校验,1停止位
OUT DX, AL
MOV AL, 27H ; 命令字:发送/接收允许,错误复位,RTS,DTR
OUT DX, AL4.6 8251A 应用编程
(1)查询式发送程序
; 假设已初始化
MOV SI, 发送数据块首地址
MOV CX, 发送字节数
NEXT:
MOV DX, 8251A_控制口
IN AL, DX ; 读状态字
TEST AL, 01H ; 查 TXRDY (D0)
JZ NEXT ; 未准备好,等待
MOV DX, 8251A_数据口
MOV AL, [SI] ; 取数据
OUT DX, AL ; 发送
INC SI
LOOP NEXT
HLT(2)查询式接收程序
MOV DI, 接收数据块首地址
MOV CX, 接收字节数
L1:
MOV DX, 8251A_控制口
IN AL, DX ; 读状态字
TEST AL, 02H ; 查 RXRDY (D1)
JZ L1 ; 未收到,等待
TEST AL, 08H ; 查奇偶错 PE (D3)
JNZ ERR ; 有错转错误处理
MOV DX, 8251A_数据口
IN AL, DX ; 读数据
MOV [DI], AL ; 存数据
INC DI
LOOP L1
HLT五、RS-232C 串行接口标准
5.1 概述
- RS-232C:美国电子工业协会 (EIA) 制定的串行接口标准
- 全称:Recommended Standard 232, Revision C
- 用于数据终端设备 (DTE) 与 数据通信设备 (DCE) 之间的接口
- 物理接口:DB-25(25 针)或 DB-9(9 针)连接器
5.2 电气特性
- 采用负逻辑电平:
- 逻辑 “0”(SPACE):+3V ~ +15V(典型 +12V)
- 逻辑 “1”(MARK):-3V ~ -15V(典型 -12V)
- -3V ~ +3V 为过渡区,无定义
- 阻抗:负载 3kΩ ~ 7kΩ
- 速率:≤ 20kbps
- 距离:≤ 15m(速率越高距离越短)
5.3 常用引脚信号(9 针简化版)
| 引脚 | 缩写 | 名称 | 方向 (DTE→DCE) | 说明 |
|---|---|---|---|---|
| 1 | CD | 载波检测 | 输入 | DCE 检测到载波 |
| 2 | RxD | 接收数据 | 输入 | 串行数据输入 |
| 3 | TxD | 发送数据 | 输出 | 串行数据输出 |
| 4 | DTR | 数据终端准备好 | 输出 | DTE 已就绪 |
| 5 | GND | 信号地 | — | 公共地 |
| 6 | DSR | 数据装置准备好 | 输入 | DCE 已就绪 |
| 7 | RTS | 请求发送 | 输出 | DTE 请求发送数据 |
| 8 | CTS | 清除发送 | 输入 | DCE 允许发送 |
| 9 | RI | 振铃指示 | 输入 | DCE 检测到振铃 |
5.4 电平转换
- 8251A 等芯片输出的是 TTL 电平(0V/5V)
- RS-232C 是 ±12V 电平
- 需要电平转换芯片:
- MC1488 / SN75150:TTL → RS-232C(发送器,需 ±12V 电源)
- MC1489 / SN75154:RS-232C → TTL(接收器,+5V 电源)
- MAX232:单 +5V 供电,内部有电荷泵产生 ±10V,收发各 2 路(最常用)
六、章节关联与知识网络
与前后章的关系
-
前置知识:
- 第5章 计算机组成 → 系统总线与I/O基本概念
- 第10章 微处理器外部特性 → 总线接口、中断、DMA
- 第11章 I/O接口 → I/O控制方式、程序查询/中断/DMA
- 第14章 并行通信 → 8255A 并行接口基础、可编程接口的一般结构
-
后续章节:
- 第18章 总线技术 → 更高层次的通信与互连
- 8237 DMA 控制器 → 串行接口的 DMA 工作方式
关键概念对比
| 对比项 | 并行通信 | 串行通信 |
|---|---|---|
| 传输方式 | 多位同时传送 | 一位一位分时传送 |
| 传输线数 | N 根数据线 + 控制线 | 1 根数据线 + 控制线 |
| 速率 | 高(短距离内) | 低 |
| 成本 | 高(线缆多) | 低(线缆少) |
| 适用距离 | 短(通常 < 几米) | 长(可达几公里) |
| 典型芯片 | 8255A | 8251A |
| 典型标准 | 打印机并口(Centronics) | RS-232C / USB / 以太网 |
七、重点考点速查
- 异步通信帧格式:起始位(1) + 数据位(5-8) + 校验位(0/1) + 停止位(1/1.5/2)
- 波特率因子:异步方式下时钟频率与波特率的比值(×1/×16/×64)
- 8251A 两大控制字:方式字(复位后第一个)+ 命令字(后续写入),地址相同靠顺序区分
- 8251A 三种错误:PE 奇偶错、OE 溢出错、FE 帧格式错(命令字 D4=ER 复位)
- 8251A 初始化安全步骤:先写 3 次 00H → 40H 内部复位 → 方式字 → 命令字
- 状态字 vs 命令字:状态字从 C/D=1 读出;命令字向 C/D=1 写入
- RS-232C 电平:负逻辑,+3~+15V = 0,-3~-15V = 1;MAX232 单 5V 电平转换
- 全双工 vs 半双工:全双工同时双向(两条物理通道);半双工双向不同时(分时切换)
- 同步 vs 异步:同步以数据块为单位、效率高、需同步;异步以字符为单位、效率低、不需同步
- TXRDY vs TXE:TXRDY = 发送缓冲器空(可写新数据);TXE = 移位寄存器也空(全部发完)