📑 本页目录
计算机原理与嵌入式系统 · 配套学习整理
数据怎样传过去
时序怎样对上拍第四章 · 总线和接口
谁发起,谁响应,数据何时有效,没准备好怎么办?沿着这四个问题,把总线、外设接口、中断、DMA 和串行通信连起来。
完整覆盖原讲义 4.1—4.4 及全部 61 道习题,包含 AHB 两道时序图和两道中断电路分析。页码按第四章单独讲义:正文与习题第 1—82 页,目录页另计。
总线与时序 → 片内/片外互连 → I/O、中断与 DMA → 并行和串行接口
从总线、接口、协议开始 →先决定什么必须自己做
把信号名变成传输过程,再用题目验收
第四章内容多,但不是每项都要求背到同样深度。核心能力是读懂一条数据怎样经过接口、按协议传送、由 CPU 或 DMA 处理;在计算和画图时说明单位、版本与条件。
| 内容 | 掌握要求 |
|---|---|
| 总线分类、结构、性能与仲裁 | 会解释取舍,会算地址范围与带宽,会说明谁得到使用权。 |
| 同步、异步、半同步与 AHB | 会读等待、画时序、算突发地址,保证地址与数据对应。 |
| APB、AXI、ASB、AMBA 演进 | 知道定位;APB 能按 SETUP/ACCESS 说明过程,其余理解通道与用途。 |
| PCI、PCIe、USB | 会比较结构;PCIe 会区分 lane、wire、编码后带宽与净吞吐。 |
| I/O、中断、DMA | 完整说明工作流程,能分析优先级电路和搬运路径。 |
| 键盘、数码管、GPIO | 会看扫描电平和段码,理解缓冲、握手、模式配置。 |
| UART、I²C、SPI | 会读帧、波形、采样点、应答与事务,知道协议与电气的层次。 |
| 历史版本、芯片与接口参数 | 全部认识用途;具体年代、旧引脚表、纳秒参数以查表为主。 |
每节注明掌握要求及背景的学习理由。重点划分依据章后习题和后续依赖,不代表已知你的考试范围。计算题要独立重做,画图题要离开示范画一遍,概念题至少能用自己的话解释因果。
正文、公式和 SVG 均在本文件内,离线可用。图解可以切换条件;章末答案默认折叠。打印时显示答案并采用图解默认示例。外部资料链接只供核对。
第四章 · 第 01 节
先分清三个概念:总线、接口、协议
掌握要求:区分总线、接口、协议,说明共享连接的收益与代价。
背景为什么要讲:概念先分清,后面才不会把通信格式、电路适配和传送方式混为一类。
假设 CPU 要从温度传感器读取一个数值。
会遇到三个不同的问题:
- 数据沿什么连接传过去?
- CPU 和传感器的电路、速度、电平怎样匹配?
- 双方怎样约定开始、结束、地址、数据和应答?
分别对应:
| 概念 | 主要回答什么 |
|---|---|
| 总线 | 模块通过什么通信通道互连,怎样使用通道 |
| 接口 | 两端怎样适配、连接、交换信息 |
| 协议 | 双方共同遵守哪些传输规则 |
所以,总线不只是几根线,接口也不只是一个插座。
例如:
- UART 内部要完成并串转换、数据帧处理。
- RS-232 收发器要完成电平转换。
- I²C 要约定地址、起始条件、应答等。
- 总线仲裁要决定哪个主机可以先使用共享资源。
这一章的大量术语,其实都在回答这些具体问题。
为什么采用总线结构?——对应 4.1
如果 个模块都两两直接连接,需要:
组连接关系。
例如 6 个模块需要:
组。
采用共享通道,可以简化连接、减少重复线路,也更容易扩展。
代价是:
多个模块可能争用同一资源,需要协调,性能也可能受共享带宽限制。
本章开头强调的“共享、分时”,主要针对传统共享总线。后面 PCIe 等采用点对点、交换结构,仍沿用“总线”这个历史称呼。
还有一个容易误解的地方:
“同一时刻只能一个模块输出”,指的是不能让多个输出端争相驱动同一组共享信号线;不是整个芯片里所有信号线同时只能由一个模块输出。
否则后面“主机发地址、从机返回数据”的流水线就没法理解了。
第四章 · 第 02 节
4.1.1:总线分类——每一种分类都要先看依据
掌握要求:能按位置、功能、传输形式、时钟、复用分别分类并举例。
背景为什么要讲:每种分类回答的问题不同;认识术语用途,不必背所有历史插槽参数。
| 分类依据 | 类型 | 你要理解的区别 |
|---|---|---|
| 所处位置 | 片内、片间、系统、外部 | 连接哪些范围的模块 |
| 功能 | 地址、数据、控制 | 分别传什么 |
| 数据组织 | 并行、串行 | 多位同时传,还是逐位传 |
| 时序 | 同步、异步、半同步 | 怎样协调传输时刻 |
| 是否复用 | 复用、非复用 | 同一引脚是否分时承担不同功能 |
地址、数据、控制三类总线,是第三章知识的延续
- 地址总线:选哪个存储单元、哪个外设寄存器。
- 数据总线:传送数据、指令、状态或控制字。
- 控制总线:指示读写、就绪、请求、响应等。
数据总线上的内容不一定是“普通变量”。CPU 往控制寄存器写一个控制字,也是在数据总线上传送。
地址通常由当前主机发出。主机可以是 CPU,也可以是获得使用权的 DMA 控制器等模块。
串行与并行,不要直接等同于“慢”和“快”
并行:多条数据线同时传多个位。
串行:沿一个逻辑通道逐位传输。
在每条线的传输速率相同等条件下,并行一次可以传更多位。但实际高速设计中,并行线路会遇到:
- 不同线路到达时间不同;
- 线间串扰;
- 引脚、布线和连接器成本上升。
高速串行可以使用差分传输、提高单通道速率,再组合多个通道。因此 PCIe 这样的串行互连可以具有很高带宽。
单端与差分:
- 单端:接收端主要判断信号相对于参考地的电压。
- 差分:接收端主要判断两根信号线之间的电压差。
差分有利于抑制一部分共同叠加到两根线上的干扰,也有利于高速传输。
总线复用——对应 4.2
复用的意思是:
同一组物理引脚,在不同时间传不同类型的信息。
讲义的 8086 例子:
- 低 16 位地址与 16 位数据共用引脚。
- 前一阶段传地址。
- 后一阶段传数据。
因为引脚后来要改传数据,外部电路就需要先把地址锁存下来。
因此:
复用减少引脚;锁存器保存已经出现、但随后会从引脚上消失的地址。
PCI 的命令/字节使能信号也是类似思想:同一组线,在不同阶段具有不同含义。
必会解释:复用节省引脚和线路,但会增加分阶段传输、锁存与控制的要求
第四章 · 第 03 节
寻址范围和带宽:先把两个最常见的计算题做清楚
掌握要求:会算地址数、范围和带宽,明确编址单位及理想条件。
背景为什么要讲:4.4 的容量必须说明按字还是按字节,数据线位数不能随意再乘。
章末 4.4:13 位地址总线,11 位数据总线,不复用
首先,无条件能确定的是:
个不同地址,地址范围:
接下来,容量要看一个地址对应多大的单元。
按讲义本节采用的“一个地址选择一个 11 位存储字”的组织模型:
总容量:
折合:
所以按该模型可以写:
同时写明:这里按 11 位字编址。
如果题目另行规定“按字节编址”,则最大可寻址容量为:
这与第三章的原则一致:
地址位数决定地址数;一个地址对应多少字节,由编址单位决定。
“不复用”只说明地址和数据不轮流使用同一组引脚,不会额外增加地址数。
总线带宽——对应 4.7
在“每个时钟传一次、每次使用全部数据位”的理想模型下:
- :总线时钟频率;
- :每次传输位数;
- 结果单位为 B/s。
32 位、100MHz:
但这只是理想峰值。
如果一次传送 4B,却需要 4 个时钟周期:
所以性能评价不能只看频率,还要考虑:
- 数据宽度;
- 每周期传输次数;
- 地址、仲裁、等待等开销;
- 是否支持突发与流水线;
- 实际利用率和访问延迟。
特别分清:时钟周期,不等于一次完整总线传输周期。
第四章 · 第 04 节
单总线、多总线和分层结构——核心是减少互相拖累
掌握要求:比较单总线、两类双总线与分层结构,会读桥接关系。
背景为什么要讲:整机框图是结构案例;增加通路不等于已经具备 DMA 控制器。
单总线结构:
CPU、存储器、I/O 接口共同使用一套总线。
优点是简单、便于扩展;缺点是资源争用,高速和低速设备互相影响。
讲义介绍的两种双总线结构:
| 结构 | 基本思路 | 主要特点 |
|---|---|---|
| 面向 CPU | 分开 CPU—主存通路与 CPU—I/O 通路 | 两类访问可采用不同连接,但外设与主存交换仍需 CPU 参与 |
| 面向存储器 | 保留公共连接,再增加 CPU—主存高速通路 | 强化主存访问性能;讲义所画系统尚未因此自动具备 DMA 搬运能力 |
这里要避免一个推理错误:
增加一条高速总线,不等于已经增加了一个能独立搬数据的 DMA 控制器。
三总线结构进一步引入外设与主存之间的 DMA 通路;四总线等结构又把高速、低速设备分层。
分层的原因:让相近性能和用途的模块使用合适的互连,通过桥接器连接不同层
下面用本章后面会讲到的 AHB/APB 结构,把这个思想画出来:
先看角色:
- CPU、DMA 可以发起访问,是主机。
- 存储器响应访问,是从机。
- APB 桥对上层表现为被访问的目标,对下层负责发起外设访问。
主机不等于“发送数据的一方”。
CPU 读内存时:
- CPU 发起访问,所以是主机。
- 内存发送读数据,但仍然是从机。
判断主从,要看谁发起和组织事务,不能只看数据方向。
第四章 · 第 05 节
4.1.2:总线仲裁——多个主机都想用,先给谁?
掌握要求:解释集中/分布仲裁和链式优先级,说明公平性与开销。
背景为什么要讲:具体设备编号只对给定规则有效;不用把一个例子的设备数限制背成通则。
只有一个主机时,不需要在多个主机之间仲裁。
CPU、DMA 等多个主机同时请求共享资源时,就需要仲裁器或分布式仲裁机制。
集中式仲裁:由一个仲裁中心决定
讲义分为三种:
| 方式 | 怎么做 | 优点 | 代价 |
|---|---|---|---|
| 串行、链式 | 允许信号沿设备链传递 | 线少、实现简单 | 固定优先级、逐级延迟,链路故障可能影响后级 |
| 并行 | 每个主机有独立请求与允许线 | 决策快,优先级策略灵活 | 线多,仲裁电路规模增大 |
| 混合 | 组间并行、组内链式等 | 折中、便于扩展 | 控制较复杂 |
典型信号:
- BR:Bus Request,请求总线。
- BG:Bus Grant,允许使用。
- BB:Bus Busy,总线忙。
链式过程:
- 设备提出请求。
- 仲裁器发出允许信号。
- 允许信号沿链向后传。
- 第一个有请求的设备截获允许,不再传给后级。
- 使用完毕后释放。
因此,在这种链式规则下:
越靠近仲裁器,优先级越高。
如果前面的设备一直请求,后面的设备可能长期得不到服务。这个问题叫饥饿。
讲义把某个链路例子的设备数量写得很具体,那不是所有菊花链都必须遵守的统一数量限制。真正需要掌握的是逐级延迟和固定顺序。
分布式仲裁:各主机自己参加判断
没有唯一的中心仲裁器。
讲义例子中,每个主机读取请求组合,判断:
是否存在比我优先级更高的请求者?
有,就退出本次竞争;没有,才获得使用权。
需要认识:
- 申请期:提出请求。
- 裁决期:比较并确定谁可以使用。
在某个例子里“设备 4 优先级最高”,是由该例子的规则决定的;不能推广成设备编号越大永远优先级越高。
第四章 · 第 06 节
“线与”到底是什么——对应 4.10,也直接帮助理解 I²C
掌握要求:会画开漏或开集电极输出加上拉的线与关系。
背景为什么要讲:它也直接解释 I²C 的拉低、释放、时钟同步与逐位仲裁。
正常推挽输出可以主动输出高、低电平。若一个输出高、另一个输出低,却把它们直接接在一起,就会发生冲突。
开漏或开集电极输出换了一种方式:
只能主动拉低;需要高电平时,释放线路,由上拉电阻拉高。
把“释放”记作逻辑 1,把“拉低”记作逻辑 0:
| 设备 1 | 设备 2 | 共享线 |
|---|---|---|
| 释放 1 | 释放 1 | 1 |
| 拉低 0 | 释放 1 | 0 |
| 释放 1 | 拉低 0 | 0 |
| 拉低 0 | 拉低 0 | 0 |
这就是:
只要有一个器件拉低,线路就是低。
所以 4.10 可回答:
采用开集电极或开漏输出,将输出端连接到共享线上,并通过上拉电阻接电源,可实现线与。
如果信号是“低有效请求”,从“是否有人提出请求”的角度看,又体现为“任一设备拉低即可提出请求”。这与按电平讨论的线与不矛盾。
开漏输出的逻辑 1,实际动作是释放,不是主动驱动高电平
第四章 · 第 07 节
4.1.3:总线时序——关注每一步要等谁
掌握要求:会读同步、三种握手、等待与周期分裂的先后关系。
背景为什么要讲:固定纳秒数属器件参数;必须知道谁输出、谁采样、什么条件才能继续。
一次典型总线操作,可分为:
- 请求与仲裁;
- 寻址;
- 数据传输;
- 结束与释放。
只有一个主机时,可以省去多主机竞争的环节,但仍需完成相应传输和结束动作。
同步总线:按共同节拍工作
例如约定:
- 第一阶段提供地址。
- 后续某个时钟边沿接收数据。
要求数据必须及时到达,并满足采样边沿前后的建立、保持要求。
优点是节拍明确、控制相对简单。
限制是:
- 设备速度需要满足规定;
- 传播延迟、时钟偏差会限制工作频率;
- 慢设备可能跟不上固定时序。
讲义中的 、,是在说明地址和数据需要时间才能建立稳定。
**学到什么程度?**会在图上指出“哪一方输出,哪一个边沿采样,数据必须何时稳定”,不用先背某个历史总线的全部纳秒参数。
异步总线:不依靠统一时钟安排所有动作,依靠握手
讲义分三种:
| 方式 | 请求如何撤销 | 应答如何撤销 |
|---|---|---|
| 不互锁 | 固定延时后自行撤销 | 固定延时后自行撤销 |
| 半互锁 | 请求方等到应答后再撤销 | 应答方固定延时后自行撤销 |
| 全互锁 | 请求方确认应答后撤销 | 应答方确认请求撤销后再撤销 |
可以切换观察:
全互锁四步:
你可以直接理解为:
“我要传” → “我准备好了” → “我收完了” → “我知道你收完了”。
它能适应较大的速度差异,但握手有开销。
半同步:有共同节拍,也允许等一等
如果从机来不及:
- 用 READY/WAIT 等信号表示尚未准备好;
- 主机插入一个或多个完整等待周期;
- 准备好后再完成传输。
适合“总体按共同节拍工作,但部分设备或部分访问偶尔较慢”的场景。
后面的 AHB HREADY 就体现了这种等待思想;协议文档仍将 AHB 归为同步总线。
周期分裂:等待期间把共享资源让出去
普通等待:
主机发出请求,从机准备期间,总线仍被当前访问占着。
分裂事务的一般思想:
发出请求后先释放资源;结果准备好,再完成后续过程。
特别适合从机响应时间较长、而其他主机还有任务的场景。
不要把“流水线”与“分裂事务”当成同一个概念:
- 流水线:让不同传输的不同阶段重叠。
- 分裂事务:让一次尚未完成的事务暂时让出共享资源。
第四章 · 第 08 节
4.2:AMBA——先知道各条总线分工,不要先背信号表
掌握要求:区分 AMBA2 的 AHB、ASB、APB 和规范的适用层次。
背景为什么要讲:版本史用于定位名字,年份与所有版本信号无需逐项死记。
AMBA 是 Arm 提出的片上互连规范体系。
AMBA2 的三条主要总线:
| 总线 | 基本定位 |
|---|---|
| AHB | 高性能互连,连接 CPU、存储器、DMA 等 |
| ASB | 较早的高性能系统总线 |
| APB | 简单、低功耗的外设访问 |
**这里有一处讲义错误要纠正:ASB 也支持流水线、多主机和突发传输。**不能按讲义正文背成“ASB 不支持突发”。Arm 原始 AMBA2 规范明确包含 ASB 的突发事务。
为什么 AMBA 不定义外部连接器那样的机械特性,以及固定电压等电气特性?——4.19
因为它主要约定芯片内部模块之间的逻辑接口和传输规则:
- 没有必要规定一个外部插头长什么样。
- 电压、驱动能力、精确延迟,要结合制造工艺和芯片实现决定。
这不是说芯片内部“不需要考虑电气问题”,而是这些问题不由 AMBA 协议统一固定成某一种外部接口参数。
信号命名先认识:
H:AHB 相关。P:APB 相关。- 名称末尾
n:低电平有效。 T:测试相关。- ASB 表中的
A、B、D前缀按该规范识别。
例如 HRESETn 是低有效复位。讲义个别表格存在拼写笔误,按规范名称认识即可。
第四章 · 第 09 节
AHB:先把四类部件和几根关键线搞明白
掌握要求:区分主机、从机、仲裁器、译码器,按功能识别信号。
背景为什么要讲:完整信号表要会查;关键是把主机选择、从机选择和数据通路对应起来。
AHB 系统包含:
| 部件 | 做什么 |
|---|---|
| 主机 Master | 发起访问,给地址与控制信息 |
| 从机 Slave | 响应访问,读出或接收数据 |
| 仲裁器 Arbiter | 决定哪个主机取得使用权 |
| 译码器 Decoder | 根据地址选中哪个从机 |
仲裁器选主机,译码器选从机
这句话非常重要。
讲义有个别段落混用了仲裁器与译码器的职责,做题按上面的分工理解。
片内 AHB 常通过多路选择器连接信号:
- 地址和控制选择器:接通当前主机。
- 写数据选择器:选择当前数据阶段对应主机的写数据。
- 读数据选择器:选择目标从机返回的读数据。
因此并不要求把所有输出端像外部三态总线那样直接并在一起。
信号按用途分组,比逐个死背容易
| 信号 | 作用 |
|---|---|
| HCLK、HRESETn | 时钟、复位 |
| HADDR | 地址 |
| HWRITE | 1 写、0 读 |
| HWDATA | 主机写出的数据 |
| HRDATA | 从机读出的数据 |
| HSELx | 第 x 个从机被选中 |
| HREADY | 当前传输能否在相应时钟边沿结束、流水线能否推进 |
| HRESP | 返回 OKAY、ERROR、RETRY、SPLIT 等响应 |
| HSIZE | 每拍传多少字节 |
| HBURST | 整次突发的类型 |
| HTRANS | 当前这一拍属于哪种传输状态 |
| HPROT | 访问属性与保护相关信息 |
仲裁相关的认识:
HBUSREQx:主机请求。HGRANTx:仲裁允许。HMASTER:当前主机编号。HLOCKx/HMASTLOCK:请求或指示锁定序列。HSPLITx:从机通知仲裁器,某个被 SPLIT 的主机可以重新参与。
讲义 AMBA2 AHB 的四位主机编号最多区分 16 个主机,这是该版本模型的参数。
第四章 · 第 10 节
AHB 地址阶段与数据阶段——这是整个 AHB 部分的核心
掌握要求:会把同拍地址与数据归属分开,分析 HREADY 等待与主机交接。
背景为什么要讲:AHB 时序题的主线;不理解阶段错位,突发图很容易整体画错。
一次传输分成:
- 地址阶段:告诉从机访问哪里、读还是写、传多少。
- 数据阶段:真正交换数据。
为什么分开?
从机先知道地址,才有时间准备对应数据或写入位置。
流水线进一步允许:传 A 的数据时,同时给出 B 的地址
无等待时:
| 时钟区间 | 地址阶段 | 数据阶段 |
|---|---|---|
| C1 | A | 无 |
| C2 | B | A 的数据 |
| C3 | C | B 的数据 |
| C4 | 下一地址或空闲 | C 的数据 |
注意:
同一列时间里出现的地址和数据,通常不是同一次访问。
这是时序题最容易读错的地方
如果连续传 个数据,每个地址和数据阶段都只需一拍,且忽略仲裁等额外过程:
流水线填充以后,可以做到每拍完成一个数据传输;但第一拍还在提供第一个地址。
HREADY 为 0 时怎样处理?——对应 4.23
它表示当前数据阶段尚未完成,需要等待。
这会造成:
- 当前数据阶段延长;
- 下一次访问的地址阶段也被阻住;
- 不能把下一地址一直往前推进。
写操作时,等待期间对应写数据必须保持稳定。
读操作时,从机应在真正完成采样所需的时刻提供有效数据;不要求整个等待期间的读数据都已经有效。
最后,在相应的时钟上升沿,HREADY=1,才完成当前访问并推进流水线。
主机切换也要考虑这个错位
新主机已经接管地址阶段时,数据阶段可能仍属于旧主机最后一次访问。
所以:
地址、控制的所有者,与同一时刻数据阶段的所有者,不应简单当成同一个。
这就是讲义后面一系列主机交接图想说明的内容。
第四章 · 第 11 节
AHB 的 HTRANS、HBURST、HSIZE:三个字段,回答三个不同问题
掌握要求:区分 HTRANS、HSIZE、HBURST,并会编码常用状态与宽度。
背景为什么要讲:其余大位宽编码要知道用途,不可脱离实现随意使用。
HTRANS:当前拍是什么状态?
| 编码 | 名称 | 含义 |
|---|---|---|
| 00 | IDLE | 当前没有实际数据传输请求 |
| 01 | BUSY | 突发尚未结束,但主机暂时不能给出下一有效拍 |
| 10 | NONSEQ | 单次传输,或突发的第一拍 |
| 11 | SEQ | 同一突发中的后续拍 |
BUSY 与 HREADY=0 不同
- BUSY:主机暂时没准备好下一拍。
- HREADY=0:当前从机侧传输尚未完成。
HSIZE:每拍传多大?
本章最常用:
| HSIZE | 每拍大小 |
|---|---|
| 000 | 1B,字节 |
| 001 | 2B,半字 |
| 010 | 4B,字 |
| 011 | 8B |
更宽编码用于更大的传输宽度,但不能脱离实际总线宽度和实现支持随意使用。
HBURST:这次突发怎样组织?
| 编码 | 类型 | 意思 |
|---|---|---|
| 000 | SINGLE | 单次 |
| 001 | INCR | 未预先固定拍数的递增突发 |
| 010 | WRAP4 | 4 拍,地址回绕 |
| 011 | INCR4 | 4 拍,地址递增 |
| 100 | WRAP8 | 8 拍,地址回绕 |
| 101 | INCR8 | 8 拍,地址递增 |
| 110 | WRAP16 | 16 拍,地址回绕 |
| 111 | INCR16 | 16 拍,地址递增 |
不要把“8 拍”理解成“一拍 8 字节”。
例如:
- WRAP8 表示八拍;
- HSIZE=010 表示每拍 4B;
- 合计数据量:
第四章 · 第 12 节
INCR 与 WRAP 的地址计算——这里必须会算
掌握要求:能计算 INCR/WRAP 地址,识别窗口及 1 KiB 边界限制。
背景为什么要讲:公式适用前先检查传输对齐和题给条件,回绕并非回到初始地址。
设:
- 起始字节地址 ;
- 每拍 字节;
- 一共 拍。
递增 INCR:
每拍 4B,从 38H 开始,INCR4:
地址增加的是每拍字节数 4,不是永远加 1。
回绕 WRAP:先确定回绕窗口
窗口大小:
窗口起点:
地址在这个窗口内递增,到末尾就回到窗口开头:
先看讲义 WRAP4:
- ;
- ;
- 窗口 16B;
- 起始
38H; - 所在窗口是
30H~3FH。
因此:
3CH+4 本来得到 40H,但超出窗口,所以回到 30H。
再做 WRAP8:
- ;
- ;
- 窗口 32B;
- 起始
34H; - 所在窗口为
20H~3FH。
地址依次为:
WRAP 不是简单回到起始地址,而是回到对齐窗口的起点。
讲义还要求 AHB 突发不能跨越 1KB 地址边界。这是另外一条约束,不能与 WRAP 自身的 16B、32B 等窗口混淆。
第四章 · 第 13 节
4.26、4.27:怎样画两道 AHB 时序题
掌握要求:独立画出 4.26 的 INCR4 读、4.27 的 WRAP8 写,并正确插等待。
背景为什么要讲:图中的起始地址与每拍宽度是写明的合法假设,换数字后仍应能画。
题目没有指定每拍宽度和起始地址时,可以自己选一个合法例子,把假设写在图旁边。
下面已经把两题和正文 WRAP4 例子做成可切换的时序图;还可以加入等待拍:
4.26:INCR4 读传输
采用:
- 每拍 4B;
- 起始
38H; - 无等待。
需要写出的控制条件:
第一拍 NONSEQ,后三拍 SEQ。
四个地址:
使用 HRDATA 返回读数据;每个数据阶段比对应地址阶段晚一拍。
画图顺序:
- 先画时钟。
- 再按顺序画四个地址。
- 标上 NONSEQ、SEQ、SEQ、SEQ。
- 将 D0~D3 相对于对应地址右移一拍。
- HREADY 无等待时保持 1。
- 传完以后画 IDLE 或后续访问。
4.27:WRAP8 写传输
采用:
- 每拍 4B;
- 起始
34H; - 无等待。
控制条件:
八个地址就是前面计算的:
第一拍 NONSEQ,其余 SEQ。
使用 HWDATA,各数据与各自地址对应,晚一个阶段。
如果加等待:
例如 D1 没准备好:
- HREADY 拉低;
- D1 的阶段延长;
- 此时已经出现的下一地址也保持;
- 完成后才推进。
你不能只在 HREADY 上画一个低脉冲,却让地址、数据继续每拍变化。
第四章 · 第 14 节
SPLIT:总线不能因为一个慢设备就一直被占着
掌握要求:说明 SPLIT 的挂起、重新允许、原主机重试流程。
背景为什么要讲:经典 AHB 的具体实现与一般分裂事务思想要分开;不能套到 AHB-Lite。
AHB 的四种典型响应:
| 响应 | 意思 |
|---|---|
| OKAY | 正常完成 |
| ERROR | 访问失败 |
| RETRY | 当前没完成,主机以后重试 |
| SPLIT | 当前退出,待从机通知后重新参与并重试 |
SPLIT 的基本过程:
- 主机发起访问。
- 从机暂时不能完成,返回 SPLIT。
- 仲裁器暂时屏蔽这个主机的相关请求。
- 其他主机可以使用总线。
- 从机准备好,通过 HSPLIT 通知仲裁器。
- 原主机重新取得使用权,重试这次传输。
- 最后正常完成。
**关键纠正:经典 AHB SPLIT 不是从机准备好后,自己变成主机把结果直接送回来。**原主机会重新获得授权并重试。Arm AMBA2 原规范
这与前面介绍的“分裂事务一般思想”相关,但具体协议实现不能混为一谈。
HMASTER 让从机记住是哪一个主机被挂起;HSPLIT 的相应位告诉仲裁器可以重新允许谁。
经典 AHB 在每个主机身份下只支持一个未完成事务。可以有不同主机分别处于 SPLIT 状态,并不是整个系统总共只能出现一次。
4.22 的简答题重点:
SPLIT 减少等待期间的总线无效占用,使其他主机能够继续工作,适合从机响应时间较长的访问。
第四章 · 第 15 节
ASB、APB、AXI 和 AMBA 演进:认识设计取舍
掌握要求:认识 ASB、APB、AXI 的取舍,APB 会读 SETUP/ACCESS 和等待。
背景为什么要讲:AXI、ATB、ACE、CHI 等给出用途;本章不要求完整实现所有通道。
ASB:认识即可,但要认识正确
它是较早的高性能系统总线,包含主机、从机、译码器、仲裁器,也支持流水线和突发。
表中的信号可按功能理解:
- AREQ/AGNT:请求与授权;
- BA:地址;
- BD:数据;
- BWRITE:读写方向;
- BWAIT:等待;
- BERROR:错误;
- BLAST:突发末尾;
- DSEL:从机选择;
- BPROT、BSIZE 等:访问属性与宽度。
为什么仍讲它?它展示了 AHB 之前的系统总线设计。章末重点不是让你把整套 ASB 时序重新设计出来。
APB:为了低速外设,把接口做简单
典型对象:
- UART 控制寄存器;
- GPIO;
- 定时器;
- 其他低带宽配置端口。
APB 桥的工作:
接收上层 AHB/AXI 等访问,把地址、读写、数据转换成 APB 的访问步骤,再把读数据和完成状态返回上层。
APB 的基本状态:
| 阶段 | PSEL | PENABLE | 做什么 |
|---|---|---|---|
| IDLE | 0 | 0 | 没有访问 |
| SETUP | 1 | 0 | 提供地址、方向、写数据等 |
| ACCESS | 1 | 1 | 执行并完成访问,或等待 |
AMBA2 的简单 APB 一次传输至少经历 SETUP、ACCESS 两拍。
- PWRITE=1:写,使用 PWDATA。
- PWRITE=0:读,使用 PRDATA。
- PADDR:地址。
- PSEL:选目标。
- PENABLE:进入访问阶段。
APB 不像 AHB 那样把下一次地址与本次数据重叠起来
连续访问时,可以不经过额外 IDLE,但下一次访问仍需要重新进入 SETUP,不能一直保持 PENABLE=1 就当作开始了多次访问。
后续版本新增:
- PREADY:允许延长 ACCESS。
- PSLVERR:报告错误。
- PSTRB:选择哪些写入字节有效。
- PPROT:访问属性。
讲义把部分信号的版本归属和方向写错了:PREADY、PSLVERR 在 APB3 就已出现;PSTRB 是请求方提供的写字节选通。Arm APB 规范
AXI:进一步把不同信息分成独立通道
五个通道:
- 读地址 AR;
- 读数据 R;
- 写地址 AW;
- 写数据 W;
- 写响应 B。
这样读、写以及不同阶段可以更灵活地并行,适合高性能互连。
每个通道用 VALID/READY 握手:
- 发送方:信息有效,置 VALID。
- 接收方:可以接收,置 READY。
- 相应时钟边沿上两者均为 1,才发生传输。
等待期间,发送方要保持有效信息。Arm AXI 协议规范
本章认识:
| 名称 | 主要用途 |
|---|---|
| AXI4 | 高性能存储映射传输,支持突发 |
| AXI4-Lite | 简化的单拍寄存器访问 |
| AXI4-Stream | 连续数据流,不采用同样的存储映射地址访问模型 |
| AHB-Lite | 简化的 AHB 接口,去掉经典多主机相关复杂机制 |
| ATB | 调试、跟踪数据 |
| ACE、ACE-Lite | 一致性相关互连 |
| CHI | 面向更高扩展需求的一致性互连 |
AMBA 演进的主线是:
从简单系统和外设互连,发展到高带宽、多通道,再到多核一致性和更大规模互连。
为什么讲版本史?帮助你知道这些名字怎样关联。做本章题,不需要先把所有版本发布年份背下来。
第四章 · 第 16 节
4.3:PCI、PCIe、USB——重点比较结构,算清 PCIe 带宽
掌握要求:比较 PCI/PCIe/USB,会算 lane 导线数和 PCIe 编码后速率。
背景为什么要讲:历史接口参数用于说明计算口径,不能把线路速率当应用净吞吐。
PCI:传统并行共享总线
要会解释:
- 多个设备共享总线;
- 支持主设备发起传输;
- 有仲裁;
- 用桥连接不同总线层次;
- 可在某些条件下与 CPU 总线活动并行。
三类角色:
- 主设备:能主动发起访问。
- 从设备:被动响应。
- 桥:连接总线并转发事务。
本章历史例子 32 位、33MHz:
64 位、66MHz:
这是理想传输能力,还未扣除其他开销。
PCIe:串行、差分、点对点、交换连接
主要部件:
| 部件 | 作用 |
|---|---|
| Root Complex | 处理器、存储系统与 PCIe 体系的连接端 |
| Switch | 连接多个链路,转发事务 |
| Bridge | 与其他总线体系转换连接 |
| Endpoint | 网卡、存储设备、加速设备等端点 |
不同链路可并行工作。但如果共享同一个上游链路,该上游链路仍可能成为瓶颈。
lane、wire、link——对应 4.29、4.31
一个 PCIe lane 包含:
- 一对发送差分线;
- 一对接收差分线。
因此:
一个 link 可以包含多个 lane。
- ×1:1 条 lane。
- ×16:16 条 lane。
- ×32:32 条 lane。
所以 ×32 不是“32 根导线”,也不是传统意义上“一拍 32 位的并行数据总线”。
按上述信号对计算,×32 含:
根高速信号导线,不包括供电、地和其他辅助信号。
PCIe 5.0 ×16 的 63.0GB/s——对应 4.30
条件:
- 每 lane 每方向 32GT/s;
- 128b/130b 编码;
- 16 lane。
编码效率:
每 lane 的字节速率:
×16:
约为:
这使用 PCI-SIG 给出的 5.0 速率与编码参数。PCI-SIG 技术说明
必须说明三个限定:
- 是单方向;
- 已扣除线路编码开销;
- 尚未扣除全部事务包、控制等开销,不等于应用程序实际净吞吐量。
若合计双向理论传输能力,才再乘 2。
本章涉及的代际参数:
| PCIe | 速率 | 编码 |
|---|---|---|
| 1.0 | 2.5GT/s | 8b/10b |
| 2.0 | 5GT/s | 8b/10b |
| 3.0 | 8GT/s | 128b/130b |
| 4.0 | 16GT/s | 128b/130b |
| 5.0 | 32GT/s | 128b/130b |
学会公式比背完整带宽表更重要
USB:外设通用串行连接
本章要认识:
- 差分数据传输;
- 设备连接、识别与主机管理;
- USB2.0 的 D+、D−,以及 VBUS、GND;
- 后续高速版本增加相应高速信号通道。
讲义涉及的速率档包括 1.5、12、480Mb/s,以及后续 5、10、20Gb/s。
这里注意:
原始信号速率换算成字节只是第一步;线路编码、协议和传输组织还会降低有效数据吞吐量。
另外,**USB 不是下面 UART 那种“起始位+八位数据+停止位”的串口。**不能因为都叫串行,就把帧格式混用。
USB 数据速率、连接器形态和供电能力也要分开看:不能仅根据一个 USB 版本号,就认定一定支持某种供电电压和电流。
讲义中的多次改名、当年的 USB4 开发计划,属于版本历史背景,不作为你这章的核心背诵内容。
第四章 · 第 17 节
4.3.4 的整机案例——这些大框图到底想让你看懂什么?
掌握要求:能读南北桥、PCH 等框图,识别高速、低速通路和瓶颈。
背景为什么要讲:DMI、OPI、旧型号和市场历史只需认识在图中的位置与作用。
| 讲义案例 | 你应该从图中看出什么 |
|---|---|
| 8051 | CPU、存储器、端口等模块怎样在微控制器中连接 |
| Cortex-M3/STM32F1 | 取指、数据、DMA 与总线矩阵、AHB/APB 的连接 |
| 8086 最大模式 | CPU 之外还有时钟、总线控制器、锁存器、驱动器、中断控制器 |
| x86 前端总线、南北桥 | 高速主存、图形等与低速外设分层 |
| PCH | 部分原北桥功能进入 CPU,外设功能由 PCH 组织 |
| CPU 与 PCH 同封装 | 逻辑模块独立,不一定意味着必须是两个独立封装 |
8086 的两种模式:
- 最小模式:CPU 产生主要总线控制信号。
- 最大模式:CPU 输出状态,由外部总线控制器产生相应命令。
认识讲义出现的器件分工:
- 8284A:时钟。
- 8288:总线控制。
- 8259A:中断控制。
- 8286:总线收发驱动。
- 锁存器:保存复用地址。
讲义有一处又把 8288 写成锁存器,不要混着背。
STM32F1 的图还有一个需要分清的点:I-Code 用于相应代码区取指,D-Code 用于代码区数据访问;SRAM 等访问通常经过 System bus。不能简化成“D-Code 就是 SRAM 总线”。ST 的 RM0008 参考手册
DMI、OPI 则是在讲义案例中分别连接 CPU/PCH、同封装模块的互连名称。
**这一节的学习要求是“读懂框图分工和演进方向”。**不要求先记下整张电脑框图中的每一种外设型号。
第四章 · 第 18 节
4.4.1:I/O 接口与端口——端口首先是可访问的寄存器
掌握要求:说明 I/O 接口功能、三类寄存器及统一/独立编址。
背景为什么要讲:机械、电气、功能、规程是不同层面;外设寄存器不等于内存条中的数据。
接口要解决:
- 速度适配;
- 数据缓冲;
- 并串转换;
- 编码或格式转换;
- 电平转换;
- 必要时模数、数模转换;
- 状态报告、控制与联络。
例如:
CPU 写一个并行字节 → UART 把它变成串行数据帧 → 电平转换电路输出相应线路信号。
I/O 端口不一定是机箱上的插口
本章的端口,主要指 CPU 可以通过地址访问的接口寄存器。
典型三类:
| 端口 | 保存什么 | CPU 典型操作 |
|---|---|---|
| 数据端口 | 输入、输出的数据 | 读或写 |
| 状态端口 | Ready、Busy、Error 等 | 读状态 |
| 控制端口 | 启动、停止、工作模式等 | 写控制字 |
高位地址选中接口,低位地址选接口内部寄存器。
这与第三章“高位片选、低位片内寻址”完全是同一个组织思想。
实际器件可能支持控制寄存器读回、状态写一清零等操作,具体要看手册;不能把“状态永远只能读、控制永远只能写”当作所有接口的硬规则。
接口标准的四类特性,要会分类
- 机械:插头形状、尺寸、引脚排列。
- 电气:电平、负载、阻抗等。
- 功能:每根信号干什么。
- 规程:各事件怎样按先后顺序发生。
“这根线叫 RTS、作用是什么”主要是功能问题;“RTS 什么时候有效、随后谁响应”是规程问题。
端口编址:统一与独立——对应 4.39
| 编址方式 | 思想 | 特点 |
|---|---|---|
| 内存映像 MMIO | 外设寄存器占用一部分内存地址空间 | 用普通访存类指令访问,地址空间需划分 |
| 独立 I/O 编址 | I/O 与内存分属不同地址空间 | 需要相应 I/O 指令和访问区分机制 |
例如 MMIO:
访问某个地址,硬件译码发现它属于 UART 寄存器,就把访问送给 UART,而不是 DRAM。
因此 MMIO 寄存器“位于内存地址空间”,不意味着这个寄存器真的存放在内存条里。
x86 可以使用独立端口 I/O,也支持 MMIO;两种机制并不排斥同一体系中同时存在。
为什么输入要缓冲,输出要锁存?——4.40
- 输入三态缓冲:只在被选中读取时,把外设数据接到系统数据总线,其他时候隔离。
- 输出锁存:CPU 的写入只持续很短时间,需要把值保存下来,供外设持续使用。
注意:
有瞬时输入或握手机制时,输入也会使用锁存器,先保存数据再等 CPU 来读。
这不是“输入绝不能锁存、输出只能锁存”的二选一。
第四章 · 第 19 节
4.4.2:四种 I/O 传送方式——区别在于谁等、谁搬
掌握要求:比较无条件、查询、中断、DMA,说明谁等待、谁搬运。
背景为什么要讲:它们可与 UART/I²C/SPI 配合,不属于同一维度的接口分类。
| 方式 | 如何知道可以传 | 谁执行数据搬运 | 适合什么 |
|---|---|---|---|
| 无条件 | 假定随时可访问 | CPU | 简单输入输出,如普通端口状态、显示控制 |
| 查询 | CPU 反复读状态 | CPU | 简单、可控的短等待 |
| 中断 | 外设主动通知 | CPU 执行服务程序 | 随机事件、不希望持续查询 |
| DMA | 外设与 DMAC 协调 | DMA 控制器 | 较大量、规律性数据搬运 |
查询方式的过程:
- 读状态。
- 判断 Ready。
- 没好,继续查。
- 好了,读写数据。
它实现简单,但忙等会消耗 CPU 时间;若查询间隔过大,又可能响应不及时。
中断方式改变的是“等待方法”
CPU 平时做其他任务,外设就绪后通知 CPU。
但进入服务程序后,数据仍可能要由 CPU:
DMA 进一步改变“搬运方法”
因此,中断不等于 DMA;DMA 也不等于完全不需要中断。
常见组合是:
DMA 负责搬一批数据,搬完后通过中断通知 CPU 处理。
对应 4.48,按本章典型模型回答:
- 随机事件:中断方便。
- 减少反复等待:中断提高 CPU 利用率。
- 大块数据高速搬运:DMA 通常更合适。
小数据量时还要考虑配置开销,不能理解成任何一次传送使用 DMA 都一定更快。
第四章 · 第 20 节
4.4.3:中断——把全过程走通,比背名词更重要
掌握要求:能完整说明中断进入、保护、服务、清除、恢复和返回。
背景为什么要讲:自动保存与软件保存的分工依体系结构;向量表格式也不能跨架构照搬。
先认识几个词:
| 名词 | 含义 |
|---|---|
| 中断源 | 事件来自哪里 |
| 中断号、类型码 | 用编号区分来源 |
| 中断服务程序 ISR | 专门处理这个事件的代码 |
| 中断向量 | 与服务入口相关的信息 |
| 向量表 | 中断编号与入口信息的集中映射 |
| 断点 | 返回后应继续执行的位置及相关状态 |
| 现场 | 被中断程序的寄存器等运行状态 |
| 屏蔽 | 暂时禁止响应某些中断 |
| Pending | 请求已经发生,但尚未获得服务 |
| 嵌套 | 高优先级中断打断正在处理的低优先级中断 |
完整流程——对应 4.42
- 外设产生事件,保存状态或数据。
- 接口提出中断请求。
- 中断控制器检查允许条件、屏蔽与优先级。
- CPU 在允许响应的时机接受中断。
- 保存返回所需的状态。
- 根据中断号或向量机制找到 ISR。
- ISR 保存它还需要保护的现场。
- 读写数据、处理事件,并按器件要求确认或清除中断原因。
- 恢复现场。
- 执行中断返回,恢复被中断程序。
保护断点和保护现场为什么都需要?
- 只记得“回到哪里”,但寄存器被 ISR 改坏了,原程序仍会算错。
- 只保存寄存器,却不知道该返回哪里,也不行。
具体哪些由 CPU 自动保存、哪些由软件保存,取决于体系结构。讲义以传统处理器说明分工,不要背成所有 CPU 都一模一样。
向量表——4.45
它解决:
CPU 已经知道发生了第 类事件,该去执行哪段代码?
若采用固定长度表项:
但表项具体格式依体系而异。讲义的 8086 实模式向量表与其他架构的表不能直接套同一种格式。
中断嵌套:
主程序 → ISR-A → 更高优先级 ISR-B → 返回 ISR-A → 返回主程序。
返回顺序要与进入顺序对应,所以需要保存不同层的状态。
可屏蔽与不可屏蔽:
- 可屏蔽中断可受相应使能、屏蔽设置控制。
- NMI 不受普通中断屏蔽机制同样地控制。
并不是所有“严重事件”都必然走同一个 NMI 引脚;具体由处理器异常体系决定。
本章将 interrupt、trap、exception 作较宽泛的讨论。以后学习具体体系时,仍要区分它们在触发原因、返回位置等方面的规则。
第四章 · 第 21 节
中断优先级与两道电路分析题
掌握要求:解释 4.43 编码比较电路,写出四级菊花链的选中/后传逻辑。
背景为什么要讲:优先级编码大小与物理链序都是本例约定,不能推广为所有处理器规则。
优先级可以用:
- 软件查询顺序;
- 优先编码器;
- 菊花链;
- 可编程中断控制器等方式管理。
软件查询:
CPU 收到汇总请求,再按程序指定的顺序查看各来源。
优点是灵活、硬件简单;代价是查询时间。
硬件判优更快,但需要相应电路。固定优先级简单,可能造成低优先级长期等待;轮转等策略则改善公平性。
4.43:图 4.54 的编码器和比较器怎样只选最高优先级?
先对每个来源做允许条件过滤:
然后:
- 所有 汇总,判断有没有有效请求。
- 优先编码器在有效请求中选最高者,产生编码 。
- 优先权寄存器保存当前正在服务的优先级编码 。
- 图中按 表示新请求优先级更高。
- 若 CPU 当前未处理中断,则不需要与正在服务的优先级比较。
- 最后只有被选中的最高优先级请求获得相应服务机会。
可以写成:
例如有效请求优先级为 2、5、7,正在服务的是 4:
- 编码器只输出最高者 7;
- 比较器判断 ;
- 允许更高优先级事件进入。
注意“数值越大优先级越高”是这张图的编码约定,不是所有处理器的统一规则。
其他请求仍需按系统设计保持等待,不能因为这次未选中就默认消失。
4.44:四个中断源的菊花链电路
可以切换下面的请求组合:
设 已经包含允许条件,CPU 输出响应 INTA。
每一级用两个逻辑功能:
- 有请求:截获响应。
- 无请求:继续向后传。
记本级收到的响应为 :
第一阶段:
例如:
四级这样串接即可。每级可用一个与门形成受理输出,再用带反相请求输入的与门形成后传信号。
因为一个请求者截获后会令后传信号为 0,所以后级不能同时得到响应。
优先级:
最高的是最靠近 CPU 响应入口的第 1 个。
讲义的中断输入接口电路也要认识
外设给出数据及选通信号后:
- 数据进入锁存器;
- 中断请求触发器置位;
- 若未屏蔽,产生 IRQ;
- CPU 响应后按设计清除请求锁存;
- ISR 读数据端口时,地址译码和读信号使能三态缓冲,把锁存数据送上总线。
这样就把数据保持、事件记录、中断通知、CPU 读取连接起来了。
第四章 · 第 22 节
4.4.4:DMA——先配参数,再由控制器按规则搬运
掌握要求:说明 DMA 配置、请求、仲裁、搬运和通知,比较三种模式。
背景为什么要讲:传统控制器的一个周期、DACK 选外设等细节不代表所有现代 SoC。
CPU 一般先配置:
- 源、目的位置;
- 传输数量;
- 数据宽度;
- 地址是否递增;
- 方向、工作模式;
- 外设请求来源;
- 完成、错误通知方式。
传输过程:
- 外设提出 DRQ。
- DMAC 判断请求是否允许。
- DMAC 请求相应总线资源。
- 仲裁成功后获得访问能力。
- 使用 DACK 或相应外设请求机制协调。
- 进行数据读写。
- 更新地址、计数。
- 继续或暂停。
- 完成后释放资源,并按设置通知 CPU。
DMA 也可能是总线主机,因此它与前面的总线仲裁直接关联
本章传统模型中:
- I/O → 主存:I/O 读、存储器写。
- 主存 → I/O:存储器读、I/O 写。
讲义称 DMA 读、DMA 写时,采用的是对存储器的读写方向。看到名字先确认参照对象。
三种方式:
| 模式 | 特点 | 适用取舍 |
|---|---|---|
| 单次传送 | 传一个就释放,再申请 | 减少连续占用,但仲裁开销较多 |
| 成组、块传送 | 获权后连续传整块 | 大量数据效率高,但其他主机等待可能增加 |
| 请求、Demand | 请求有效就继续,无效就暂停;再来后续传 | 适合外设数据间歇到达或 FIFO 配合 |
成组传送还可能被 EOP 等提前结束信号终止。
块传送适合数据已经连续准备好、需要高吞吐量搬运的场景,回答 4.46 时还应指出它对总线占用的影响。
请求模式可与 UART 等接口的接收、发送 FIFO 水位配合:
- 接收达到一定水位,请 DMA 读走。
- 发送缓冲需要补充,请 DMA 写入。
多通道是什么意思?
DMAC 为不同外设或任务保留多组参数和请求关系。多个通道同时请求时,DMAC 内部也需要判优。
它不是 ISR 那种“保存当前程序现场,再进入更高层服务程序”的嵌套。
讲义中两句话需要限定范围:
- “一次 DMA 必在一个总线周期完成”:属于某些传统控制器的传输实现,不是所有 SoC 的统一承诺。
- “DMA 无法对 I/O 地址寻址”:是讲义用 DACK 选择外设的旧式模型;很多控制器可以配置外设寄存器地址,也支持存储器到存储器搬运。
所以真正通用的定义是:
数据搬运不需要 CPU 为每个数据逐字执行中转指令。
CPU 仍需配置和处理结果;DMA 不能代替所有复杂事件处理。
第四章 · 第 23 节
4.4.5:并行接口、矩阵键盘——先搞清“扫描”在扫什么
掌握要求:会读矩阵键盘行列电平并确定按键编号,认识消抖与多键问题。
背景为什么要讲:本图是单键模型;行扫描还是列扫描的叫法以实际驱动/读取方向说明。
并行接口可同时传送多位数据。
没有握手的简单端口,适合直接读输入电平、写输出值;有准备、忙等状态的外设,则需要缓冲和联络。
线性键盘:一个按键占一根输入线
优点简单,缺点是按键多时耗引脚。
矩阵键盘:按键接在行列交点
行、 列:
例如:
- 16 个独立按键,需要 16 根输入线。
- 4×4 矩阵,行列共 8 根线。
按讲义的接法:列输出,行输入
- 行输入带上拉,默认读到 1。
- 把某一列拉低。
- 如果这个列上的某个按键闭合,就把对应行拉低。
- 读行值,确定行号。
- 结合当前列号,确定按键。
- 换下一列继续扫。
例如当前扫 C1:
若 R2、C1 的键闭合,读到:
因此:
- 列号 1;
- 行号 2。
若按列优先编号:
4×4 的这个键:
讲义 8×8 就相应使用:
为什么还先把全部列拉低?
这是为了快速判断“有没有任何键按下”:
- 行全为 1:没有发现按键。
- 有行变 0:存在按键,再逐列定位。
有些资料把这种过程叫行扫描,有些根据驱动方向叫列扫描。关键是知道哪组线被主动选择、哪组线被读取。
还要认识:
- 按键机械抖动:需要延时复测或稳定采样确认。
- 行列反转、其他扫描方式:是识别行列的其他组织方法。
- 多键同时按下可能出现幽灵键,需要额外电路或算法处理。本节图解采用单键模型。
第四章 · 第 24 节
LED 数码管——段选决定“显示什么”,位选决定“哪一位显示”
掌握要求:会按连接位序求段码,区分静态/动态显示、段选/位选。
背景为什么要讲:引脚数量公式按直连模型;驱动芯片可改变 CPU 需要的连接数。
七段为:
加小数点 dp,就是八段。
共阴:公共端接低,段线高电平点亮
共阳:公共端接高,段线低电平点亮
在没有额外反相驱动的逻辑模型中,二者段码互补。
讲义采用位序:
显示 0,要点亮 a、b、c、d、e、f,关闭 g、dp。
共阴:
共阳:
**段码必须结合位序。**如果换了引脚到数据位的连接,代码就可能不同,不能把 3FH 当成脱离连接关系的“数字 0 固有编码”。
本章数字代码:
| 数字 | 共阴 | 共阳 |
|---|---|---|
| 0 | 3F | C0 |
| 1 | 06 | F9 |
| 2 | 5B | A4 |
| 3 | 4F | B0 |
| 4 | 66 | 99 |
| 5 | 6D | 92 |
| 6 | 7D | 82 |
| 7 | 07 | F8 |
| 8 | 7F | 80 |
| 9 | 6F | 90 |
| 熄灭 | 00 | FF |
你不必孤立地死记整张表,至少要能根据点亮哪些段推导几个数字。
静态显示——4.52
每位数码管有独立的保持、驱动关系,显示内容在更新前持续有效。
优点:控制直观,不需要不断轮流扫描。
按讲义的直接段线模型,N 位需要约 根段控制线。实际可通过锁存器或专用驱动器改变 CPU 所需引脚数。
动态显示——4.53
对应段线并联,另用位选控制当前哪一位工作。
例如显示 1234:
- 段线放数字 1 的码,只选第 0 位。
- 段线放数字 2 的码,只选第 1 位。
- 依次显示 3、4。
- 快速重复。
所以某一时刻通常只点亮一位,但人眼看到稳定的多位显示。
按讲义直连模型:
5 位:
- 静态约 40 根段线;
- 动态约 13 根段线加位线。
动态显示的取舍:
- 节省连接资源;
- 需要持续刷新;
- 单位数码管占空比降低;
- 扫描太慢可能闪烁;
- 更新段码和位选的顺序不当可能串影。
实际电路还需要限流与合适的驱动能力。这里学习的是段码、段选、位选和扫描原理。
第四章 · 第 25 节
带握手的并行接口、GPIO:把状态和数据对应起来
掌握要求:会按 STB/IBF、OBF/ACK 走缓冲握手,认识 GPIO 模式用途。
背景为什么要讲:8255 和 STM32F1 模式表是实例;完整寄存器编程留到具体器件章节。
输入接口的 STB、IBF
- STB:外设通知“这一份数据有效”。
- IBF:输入缓冲器已有尚未读取的数据。
过程:
- 外设确认缓冲可接收。
- 输出数据并发 STB。
- 接口锁存数据,置满、置 Ready。
- CPU 读取状态,发现有数据。
- CPU 读数据端口。
- 接口按设计清除满标志,允许下一次输入。
输出接口的 OBF、ACK
- CPU 确认可写。
- 写入输出缓冲。
- OBF 表示“有待取走的数据”。
- 外设取数据。
- 外设发 ACK。
- 接口清除相应忙、满标志。
因此握手不是一堆孤立缩写,而是在防止:
新数据覆盖尚未处理的旧数据,或者接收方读取还没准备好的内容。
GPIO:General-Purpose Input/Output,通用输入输出
常见寄存器:
- 配置、控制寄存器;
- 输入数据寄存器;
- 输出数据寄存器;
- 中断、复用等相关配置。
讲义 STM32F1 例子中的八类模式,可以归成:
| 类别 | 模式 | 核心意思 |
|---|---|---|
| 输入 | 浮空、上拉、下拉、模拟 | 如何接收及确定默认状态 |
| 普通输出 | 推挽、开漏 | 能否主动拉高,以及输出形式 |
| 复用输出 | 复用推挽、复用开漏 | 引脚交给 UART、SPI、I²C 等内部功能 |
- 推挽:能主动输出高、低。
- 开漏:拉低或释放。
- 上拉、下拉:给未被外部强驱动的输入提供默认状态。
- 复用:引脚由某个外设模块控制,而不是普通 GPIO 输出数据位直接控制。
这是本章例子,不是所有 STM32 或 MCU 都恰好只有同样八种模式。
讲义还提到 8255:
- 三个八位并行口;
- 可编程控制;
- 多种工作方式。
它作为历史上的可编程并行接口范例,帮助理解“写控制字改变端口工作方式”。本章没有要求你展开全部 8255 编程,不必先背其完整控制字。
第四章 · 第 26 节
4.4.6:串行通信——方向、速率、同步方法,分别判断
掌握要求:区分单双工、比特率/波特率、同步/起止式异步。
背景为什么要讲:没有独立时钟线不等于 UART;线路电平跳变次数也不等于波特率。
传送方向:
| 类型 | 含义 |
|---|---|
| 单工 | 只允许一个方向 |
| 半双工 | 可双向,但同一时刻轮流 |
| 全双工 | 可同时双向 |
这是通信能力的分类,不等于单纯数电缆有几根。
比特率与波特率:
- 比特率:每秒多少 bit。
- 波特率:每秒多少符号。
如果一个符号有 种状态,每符号可表达:
位,则:
在本章普通二进制 UART 中,每符号一位:
但波特率不是“电平每秒翻转多少次”。连续发送多个 1,电平可能不翻转,仍然发送了多个符号。
同步通信:双方有共同的位时序基准
可以:
- 单独传时钟;
- 或从编码后的数据中恢复时钟。
所以“没有独立时钟线”并不自动等于起止式异步串口。
异步 UART:双方使用各自时钟,但事先约定速率和格式
它不是完全没有时间要求:
一个字符内,每位时间需要基本一致;每个新字符的起始位帮助接收方重新对齐。
第四章 · 第 27 节
UART 数据帧与采样——对应 4.34~4.35、4.54、4.56~4.58
掌握要求:会画 UART 帧、算校验和有效速率,解释起始检测与中间采样。
背景为什么要讲:过采样倍数和容差依实现;图例用于理解误差,不充当器件保证值。
典型格式:
在 UART 逻辑电平侧:
- 空闲:1。
- 起始位:0。
- 数据:一般低位先传。
- 停止位:1。
下面画的是 UART 逻辑电平,不是经过 RS-232 收发器后的线路电压。
例如:
按 d0 到 d7 发送:
不要把写在纸上的八位二进制从左到右照搬成 UART 发送顺序。
8N1、7E1 是什么意思?
- 8N1:八位数据、无校验、一位停止。
- 7E1:七位数据、偶校验、一位停止。
- O:奇校验。
奇偶校验统计的是数据位加校验位中的 1:
- 偶校验:总数为偶数。
- 奇校验:总数为奇数。
53H 有四个 1:
- 八位偶校验位为 0;
- 八位奇校验位为 1。
奇偶校验能检测某些错误,不能检测所有错误,也不能直接纠正错误。
一帧的时间和有效数据率
8N1:
115200 波特时:
连续满速发送时,每秒用户字节数:
不是 ,因为还要传起始位、停止位。
8N1 的数据位占比:
7E1:
用户数据位占比则为 70%。
接收端怎样找到起始位?
- 平时检测空闲高电平。
- 发现下降沿,认为可能开始。
- 等待接近半个位时间,再检查是否仍为低,或采用多次采样确认。
- 确认起始位后,在后续各位的中间附近采样。
从起始沿算起:
- 起始位中间:约 ;
- 第一个数据位中间:约 ;
- 第二个数据位中间:约 。
以此类推。
为什么常用 16 倍波特率采样时钟?
为了更细地定位起始沿、确认起始位,并在位中间采样。
若波特率为 ,过采样倍数 :
、:
发送端每 发送一位,接收端可能用多个内部采样时钟观察这一位。内部采样时钟频率不能直接等同于线路波特率。
为什么在位中间采样?
因为距离两边的跳变最远,能容忍一定的:
- 时钟频率偏差;
- 起始检测误差;
- 信号转换延迟。
一帧内误差会逐渐积累;下一帧又由起始位重新对齐。偏差太大,最后可能把停止位采错,形成帧错误。
停止位同时提供帧结束标志和保持规定空闲电平的时间。
第四章 · 第 28 节
UART 接口内部:数据怎样从寄存器变成串行波形
掌握要求:说明发送/接收缓冲、移位、状态与错误,区分缓冲可写和线路完成。
背景为什么要讲:8250、16550 等历史用于解释 FIFO;芯片编号不必背成原理。
发送过程:
接口自动加入起始、校验、停止等格式。
接收过程:
还需要:
- 波特率发生器;
- 线路格式控制;
- 状态寄存器;
- 中断控制;
- 可选 FIFO 和流控制。
发送缓冲空,与整条线路发送完成,不是一回事
- 发送缓冲已有空间:CPU 可以再写下一个字节。
- 移位寄存器仍可能正在发送前一个字节。
- 整体发送完成:缓冲和移位阶段都已结束相应数据。
这就是讲义让你比较 TxRDY、TxEmpty 的原因。具体名称、置位条件要看器件手册。
接收端三类典型错误:
| 错误 | 意思 |
|---|---|
| Parity Error | 奇偶校验不符 |
| Framing Error | 在应有停止位的位置没有读到正确电平 |
| Overrun | 旧数据还没取走,新数据又到来,缓冲溢出 |
部分器件还有接收超时等通知。超时不一定等于线路传错数据。
8250、16550、16x50 的历史演进,重点是:
增加 FIFO,让 CPU/DMA 可以成批处理,减少每字节服务一次的开销。
芯片编号和厂商历史认识即可。
流控制:接收方来不及,通知对方先停
常见硬件信号 RTS/CTS 等用于协调发送节奏。
只有 TXD、RXD 和相应参考连接,也能进行基本通信,但没有因此自动获得硬件流控制。
第四章 · 第 29 节
RS-232、RS-422、RS-485、Modem:把“数据格式”和“线路电气”分开
掌握要求:区分 UART 逻辑与 RS 电气,解释 Modem、流控、距离和速率取舍。
背景为什么要讲:接口距离、电压、线缆等必须看相应标准和器件,避免机械背旧参数表。
UART 主要负责串行数据组织与收发。
RS-232 等规范讨论线路电气及相关接口信号。
因此 UART 逻辑引脚和 RS-232 线路之间,通常需要收发器完成电平转换,必要时包括反相。
RS-232 数据线采用反向的电压含义:
- 逻辑 1:负电压。
- 逻辑 0:正电压。
接收判决常以负于 −3V、正于 +3V 的相应有效区域区分,中间区域不能作为可靠的正常数据电平。TI 的 RS-232 接口说明
所以前面 UART 的“高电平空闲”,经过相应 RS-232 驱动后,可能在电缆上表现为负电压空闲,二者没有矛盾。
DTE、DCE 与联络信号
- DTE:计算机、数据终端。
- DCE:Modem 等数据通信设备。
讲义 DB9 常见信号:
| 引脚 | 信号 | 相对于 DTE 的典型方向与作用 |
|---|---|---|
| 1 | DCD | 输入,载波/链路相关检测 |
| 2 | RXD | 输入,接收数据 |
| 3 | TXD | 输出,发送数据 |
| 4 | DTR | 输出,终端就绪 |
| 5 | GND | 信号参考地 |
| 6 | DSR | 输入,通信设备就绪 |
| 7 | RTS | 输出,请求发送或流控 |
| 8 | CTS | 输入,允许发送 |
| 9 | RI | 输入,振铃指示,讲义称 BELL |
4.36 若问规程特性,可按过程回答:
设备就绪、需要时请求发送、对方允许、按约定帧格式和速率交换数据、完成后撤销相应状态。具体握手是否使用,由连接方式和设备约定决定。
不要只写电压范围,那是电气特性。
几种标准的主线:
| 标准 | 主要特点 |
|---|---|
| RS-232 | 单端,典型点对点 |
| RS-422 | 差分;一对线上通常单发送器、可多个接收器 |
| RS-485 | 差分;支持多个受控发送器的多点连接 |
| RS-423 | 较早的单端驱动、差分接收相关方案 |
| RS-449 | 相关历史接口规范体系,连接信号与兼容背景 |
RS-485 常见两线半双工,也有相应四线全双工组织。不能把“RS-485”直接当成某一种完整报文协议。
**讲义说 RS-485“提供总线仲裁能力”,这个表述不准确。**RS-485 主要规定电气特性,哪个节点何时发送,需要另外的协议或控制机制安排。TI 的 RS-485 基础说明
差分电气接口,也不自动包含 I²C 那种逐位无损仲裁。
提高距离与可靠性的措施——4.59:
- 采用适合场景的差分传输;
- 降低速率,留出更大时序余量;
- 选择适当双绞线、屏蔽和布线;
- 在需要时做终端阻抗匹配,减少反射;
- 使用中继器,或改用其他适合长距离的介质和收发方案。
最大距离和最大速率不能同时取表中两个上限;负载、电缆和拓扑都会影响结果。
讲义某些距离换算和电气参数表有笔误,不建议把整张表逐项背下来。
为什么需要 Modem——4.55
针对讲义的电话线等带通信道:
原始数字基带信号需要转换成适合信道传播的调制信号,另一端再解调恢复数据。
Modem 就是调制器、解调器的组合。
这并不意味着一切远距离串行通信都必须使用电话 Modem。长距离也可以采用合适的差分收发器、光纤等方案。
第四章 · 第 30 节
I²C:两根线如何接多个设备
掌握要求:解释 SCL/SDA、开漏、地址选择,并区分设备地址和单元地址。
背景为什么要讲:典型 7 位寻址之外的扩展知道存在即可,本章先把普通事务走通。
两根信号:
- SCL:时钟。
- SDA:数据。
典型普通 I²C 使用开漏输出和上拉,正好利用前面的线与特性。
主机:
- 发起事务;
- 提供相应时钟;
- 发送目标地址和方向。
从机:
- 地址匹配后参与事务;
- 根据方向接收或发送数据。
同一设备是否支持主机、从机或两者,要看它的硬件功能;不是任何 I²C 器件都一定能任意切换角色。
4.60:I²C 没有每个从机一根 CS,怎样选择设备?
靠总线上发送的设备地址。
典型 7 位地址,加一位读写方向:
- R/W=0:主机写。
- R/W=1:主机读。
每个从机比较地址,匹配者响应。
因此:
SPI 常用独立片选线选设备;I²C 常在报文里发设备地址选设备。
设备地址与内部寄存器地址,必须分开
例如:
50H:选哪颗 EEPROM。1234H:选这颗 EEPROM 内部哪个存储单元。
这是两层选择,不能混为一谈。
第四章 · 第 31 节
I²C 状态、ACK/NACK 与多主机仲裁
掌握要求:会识别 START/STOP/Sr/Q/D/ACK/NACK,并说明仲裁与时钟拉伸。
背景为什么要讲:状态图是教学简化,ACK 的发送方由当前接收角色决定。
普通数据传输遵守:
SCL 低时可以改变数据;SCL 高时保持数据稳定。
特殊的起始、停止条件例外。
| 条件 | 识别方法 |
|---|---|
| S,START | SCL 高时,SDA 从高变低 |
| P,STOP | SCL 高时,SDA 从低变高 |
| Sr,重复 START | 事务尚未释放时再次发起 START |
| Q | 讲义标注的 SCL 低阶段,可调整数据 |
| D | SCL 高的数据有效阶段 |
| ACK | 第九个时钟,接收方拉低 SDA |
| NACK | 第九个时钟,SDA 保持释放后的高电平 |
正常发送每字节:
发送方发完八位后,必须释放 SDA,让接收方决定 ACK/NACK
读事务中:
- 数据由从机发送;
- 主机是接收方;
- 因此 ACK/NACK 由主机给出。
读到最后一个需要的字节时:
NACK 此时表示“我不再要下一字节”,不等于刚收到的字节有错误。NXP 原规范明确列出这一用途。I²C 规范
4.61 的状态关系,以及下面 EEPROM 示例,可以切换看:
状态图按以下含义读:
- 空闲后建立 START。
- 每位经历低电平准备 Q、高电平有效 D。
- 八位后进入第九拍应答。
- ACK 后可以继续下一字节。
- 需要重新寻址、改变方向等时,可发 Sr。
- 完成或不继续时,按相应流程发 STOP。
- STOP 后回到空闲。
Sr 不要求先发 STOP,也不把事务中途交还为空闲。
多主机怎样仲裁?
多个主机可能同时发现空闲并开始发送。
某个主机:
- 想发送 1:释放 SDA。
- 却实际读到 0:说明另一个主机正在拉低。
- 它输掉本次仲裁,退出竞争。
因此:
发送方边发送边观察;低电平在电气上占优。
不是事先规定某个固定设备地址永远最高优先级,而是由竞争时实际发送的位序决定。
SCL 的线与连接还支持时钟同步;器件在允许的场景下可以通过保持 SCL 低电平延长等待,这就是时钟拉伸。具体控制器与器件是否支持,要看其实现。
第四章 · 第 32 节
通过 I²C 读取 EEPROM:把一整个事务串起来
掌握要求:能走通 EEPROM 随机读,分清 A0H/A1H、50H 和 1234H。
背景为什么要讲:STM32 双地址、PEC 等是特定功能,不能当所有 I²C 器件的基本要求。
讲义的 24LC256:
假设:
- 七位设备地址为
50H; - 内部单元地址为
1234H; - 读取一个字节。
设备地址与方向拼成八位:
注意:
七位设备地址是 50H;A0H、A1H 是加上方向位后的线上地址字节。
随机读流程:
- 主机发 START。
- 主机发 A0H,先选择设备并使用写方向。
- 从机 ACK。
- 主机发内部地址高字节 12H,从机 ACK。
- 主机发内部地址低字节 34H,从机 ACK。
- 主机发 Sr。
- 主机发 A1H,改为读方向。
- 从机 ACK。
- 从机发送指定单元数据。
- 主机发 NACK。
- 主机发 STOP。
为什么“读”前面还有一段“写”?
这里的写方向主要用来:
告诉 EEPROM 接下来要从哪个内部地址读取。
不是把用户数据写入那个单元。
上图切到 EEPROM 读,就能看到这两种地址和方向变化。
I²C 接口内部仍是熟悉的结构:
- 数据寄存器、移位寄存器;
- 地址比较;
- 控制、状态和时钟配置;
- 中断与 DMA 访问支持。
讲义 STM32 示例中的双地址、PEC 等是特定功能;不要把所有器件都必须有双地址或自动错误校验当成普通 I²C 的基本要求。
第四章 · 第 33 节
SPI:独立片选、独立收发线、共同串行时钟
掌握要求:识别四类 SPI 线,会分析 CPOL/CPHA、位顺序和收发状态。
背景为什么要讲:从机命令帧、CS 边沿与可配置功能依器件;SPI 并非统一固定的应用报文。
四类信号:
| 信号 | 方向与作用 |
|---|---|
| SCK/SCLK | 主机提供时钟 |
| MOSI | 主机输出、从机输入 |
| MISO | 主机输入、从机输出 |
| CS#/SS#/NSS | 选择目标从机 |
多从机时,一般:
- 共用 SCK;
- 共用 MOSI;
- 共用 MISO;
- 各有相应片选。
未选中从机通常应退出共享 MISO 的驱动,避免冲突。
SDO、SDI 是站在某个器件本身看输出、输入的叫法,连接时要看方向,不能脱离主从角色机械认成同一根名字。
SPI 能全双工,是因为同时有 MOSI、MISO 两条数据方向
每来一个时钟:
- 主机可发一位;
- 同时也可收一位。
因此主机要读数据,也通常需要继续提供时钟,MOSI 上可能发送命令、地址或占位数据。
CPOL、CPHA:决定什么时候更新、什么时候采样
- CPOL:时钟空闲电平。
- CPHA:在第一个还是第二个有效边沿采样。
| 模式 | CPOL | CPHA | 采样沿 |
|---|---|---|---|
| 0 | 0 | 0 | 上升沿 |
| 1 | 0 | 1 | 下降沿 |
| 2 | 1 | 0 | 下降沿 |
| 3 | 1 | 1 | 上升沿 |
可以切换波形:
CPHA=0 时,第一位需要在第一个采样边沿前准备好;后面按约定边沿更新和采样。
**讲义说 SPI 一律高位先传,不准确。**很多控制器可配置 MSB-first 或 LSB-first,双方需要一致。ST 的 SPI 培训资料
单个从机时也不能一概把 CS 永久接低:有些器件用 CS 边沿划分命令、复位移位状态或确定帧结束,应看器件要求。
SPI 内部同样包括:
- 发送、接收缓冲;
- 移位寄存器;
- 时钟分频;
- 控制、状态寄存器;
- 可选中断与 DMA。
讲义 STM32 图中的 TXE、RXNE、BSY,分别帮助软件判断发送缓冲、接收缓冲和传输状态。缓冲可写不代表整帧已在线路上结束,与 UART 的那一层区别相通。
把接口与访问方法放回不同层次
UART、I²C、SPI 总对照
现在把 UART、I²C、SPI 放在一起,你应该能直接区分
| 项目 | UART | I²C | SPI |
|---|---|---|---|
| 时序基准 | 双方各自时钟,起始位对齐 | SCL | SCK |
| 典型信号 | TX、RX | SDA、SCL | MOSI、MISO、SCK、CS |
| 设备选择 | 基本 UART 帧本身无统一设备寻址 | 报文设备地址 | 片选线 |
| 同时双向 | 分离 TX/RX 可支持 | 同一 SDA 上分时收发 | 分离 MOSI/MISO 可支持 |
| 典型帧结构 | 起始、数据、校验、停止 | 地址、方向、字节、ACK/NACK | 由从机命令协议约定 |
| 字节内位顺序 | 常见低位先 | 高位先 | 可依实现配置 |
| 本章重点 | 帧、速率、采样、错误 | 状态、寻址、应答、重复启动 | 片选、时钟模式、双向移位 |
不要把“查询、中断、DMA”再与这三种接口并列成同一类东西。
UART、I²C、SPI 是通信接口;CPU 访问它们的数据寄存器,可以采用查询、中断或 DMA。
例如:
SPI 接收数据,DMA 把它搬进内存,传完后中断通知 CPU。
三层机制可以同时存在。
内容覆盖与学习边界
原书小节与习题都能回查
| 原书位置 | 内容 | 对应讲解 |
|---|---|---|
| 4.1.1 | 总线技术概述 | 第 01—04 节 → |
| 4.1.2 | 总线仲裁 | 第 05—06 节 → |
| 4.1.3 | 总线操作与时序 | 第 07 节 → |
| 4.2.1 | AMBA 概述 | 第 08 节 → |
| 4.2.2 | AHB | 第 09—14 节 → |
| 4.2.3—4.2.6 | ASB、APB、AXI、版本演进 | 第 15 节 → |
| 4.3.1—4.3.3 | PCI、PCIe、USB | 第 16 节 → |
| 4.3.4 | 典型计算机总线系统 | 第 17 节 → |
| 4.4.1 | I/O 接口概述 | 第 18 节 → |
| 4.4.2 | 数据传送方式 | 第 19 节 → |
| 4.4.3 | 中断及优先级电路 | 第 20—21 节 → |
| 4.4.4 | DMA | 第 22 节 → |
| 4.4.5 | 并行接口、键盘、显示和 GPIO | 第 23—25 节 → |
| 4.4.6 | 串行、UART、RS、I²C、SPI | 第 26—33 节 → |
章末 61 道题,你现在应该分别会什么
| 题号 | 对应能力 |
|---|---|
| 4.1~4.3 | 说明总线意义、复用例子与多种分类 |
| 4.4 | 算地址数;区分按字、按字节编址;本文已给出结果与假设 |
| 4.5~4.7 | 比较分层结构、两种双总线;计算与解释性能 |
| 4.8~4.10 | 解释仲裁、比较集中/分布方式、画线与原理 |
| 4.11~4.15 | 总线阶段、同步/异步/半同步、三种握手、周期分裂 |
| 4.16~4.19 | AHB/ASB/APB 定位、仲裁器、APB 桥、AMBA 特性范围 |
| 4.20~4.23 | 地址/数据阶段、流水线、SPLIT、HREADY |
| 4.24~4.25 | 突发特点,区分 HSIZE、HBURST、HTRANS |
| 4.26~4.27 | 本文已画 INCR4 读、WRAP8 写,并提供等待变化 |
| 4.28~4.31 | PCI 特点,PCIe lane/wire/×N,以及 63GB/s 计算 |
| 4.32~4.36 | 串行特点、单双工、波特率、起止位、RS-232 规程 |
| 4.37~4.40 | 接口功能、端口分类、编址、输入缓冲和输出保持 |
| 4.41~4.42 | 四种传送方式、中断全过程 |
| 4.43~4.44 | 本文已分析编码比较电路,并给出四级菊花链逻辑 |
| 4.45 | 解释向量表与查找入口 |
| 4.46~4.48 | DMA 块传输、优先级管理、按场景选择传输方式 |
| 4.49~4.51 | 并串行区别,线性/矩阵键盘,扫描定位 |
| 4.52~4.53 | 静态、动态数码显示,段选与位选 |
| 4.54~4.58 | 异步通信约定、Modem、起始检测、过采样与中点采样 |
| 4.59 | 解释距离、速率、差分、线缆与匹配的取舍 |
| 4.60~4.61 | I²C 地址选择设备、状态与事务转换 |
正文里那些没有展开成计算题的内容,也已经覆盖了:
- 总线桥、三/四总线、南北桥、PCH、DMI、OPI:用于读系统框图。
- AMBA 命名、ASB 信号、ATB、ACE、CHI、QoS:用于认识互连体系演进。
- PCI/USB 版本史与改名:提供背景;重点是结构与速率口径。
- 各种串口芯片、8255、封装连接器:提供具体实现案例。
- GPIO 八种模式、I²C 双地址、SPI 各状态位:知道用途,具体编程到后续章节再结合器件展开。
- RS-449、RS-423 和标准组织历史:认识其位置,不必靠背全称、年份来证明学会通信原理。
不看答案先试一遍
八道章末短自测
先独立作答,再展开答案核对。
- 主机读内存时,真正发送数据的是内存,为什么内存仍是从机?
- 一个开漏设备释放,另一个拉低,共享线是什么?
- AHB 当前数据等待时,下一地址能否继续不断变化?
- 每拍 4B,从
3CH开始的 WRAP4,四个地址是什么? - PCIe ×8 有多少 lane,按每 lane 四根高速信号线算有多少根?
- UART 9600 波特、8N1,连续传输每秒最多多少用户字节?
- I²C 主机读取最后一个字节后,谁发送什么应答?
- 中断与 DMA 的主要区别是什么?
展开自测答案与过关标准
- 主从按谁发起事务划分,不按谁发送数据划分。
- 低电平,任意一个拉低就占优。
- **不能。**流水线被阻住,相应下一地址需要保持。
- 窗口
30H~3FH,因此是 3CH、30H、34H、38H。 - 8 lane、32 根高速信号线,不含供电、地与其他辅助信号。
- 一帧十位,因此 960B/s。
- 主机发送 NACK,表示不再要下一字节,然后结束或重复启动。
- 中断让 CPU 不必持续查询,但服务时仍由 CPU 执行相应操作;DMA 让数据搬运不必逐字经过 CPU 指令中转,CPU 负责配置和结果处理。
**第四章的过关标准是:你能独立画两道 AHB 图,解释中断和 DMA 的完整流程,读懂 UART/I²C/SPI 的基本传输,并算对地址、带宽、突发地址与串口有效速率。**这些会了,其余型号和历史背景就有位置可放,不会再是一堆散乱名词。
章后习题 · 全部覆盖
61 道习题的答题卡
题意归纳后保留原题号和计算条件。先自行作答,再展开核对;短答案用于检查,完整推导、波形和电路分析沿链接回正文。题目没有给定的时序参数,要在答案旁写明假设。
习题 4.1 / 为什么采用总线
说明共享连接比两两直连解决了什么,又付出什么代价。
展开答题要点
n 个模块两两直连需要 n(n−1)/2 组连接。共享总线减少重复连线、简化扩展和接口协调;代价是资源竞争、仲裁和共享带宽限制,不能保证所有模块同时任意发送。
习题 4.2 / 总线复用
给出地址/数据分时使用同一组线路的例子。
展开答题要点
例如先在复用引脚上传地址并锁存,随后同一组引脚传数据。节省引脚和线路,但需要阶段区分、锁存与控制;不复用不等于地址数翻倍。
习题 4.3 / 总线分类
按不同依据列举类型,避免把不同分类并列成互斥选项。
展开答题要点
按位置可谈片内、片间、系统和外部互连;按功能有地址、数据、控制;按传送形式分串行/并行;按时序有同步/异步等;按引脚使用有复用/不复用。一个总线可同时具有多种属性。
习题 4.4 / 13 位地址、11 位数据
不分时复用,求寻址范围,并注明编址假设。
展开答题要点
必能确定 8192 个地址,0000H—1FFFH。按讲义一个地址选一个 11 位字的模型,组织为 8K×11b,共 90112b=11264B=11KiB;若另规定按字节编址,则容量为 8KiB。不能省略编址单位。
习题 4.5 / 总线层次结构
说明为何把不同性能的模块分层,并通过什么连接。
展开答题要点
让 CPU、主存、高速 I/O、低速外设使用适合其性能与时序的通路,以桥接器连接层次。降低高速设备被慢设备拖累的程度,但共享上游链路仍可能成为瓶颈。
习题 4.6 / 两类双总线
比较本章面向 CPU 与面向存储器的结构。
展开答题要点
面向 CPU 分开 CPU—主存与 CPU—I/O;面向存储器在公共连接外强化 CPU—主存高速通路。两者改进访问组织,线路与控制也更复杂;本章两张结构图都不能仅凭多一条通路就推断已具备独立 DMA。
习题 4.7 / 总线性能指标
说明频率以外还应看什么,并给一个带宽计算。
展开答题要点
宽度、每周期次数、访问延迟、仲裁/地址/等待开销、突发、流水线与利用率等。理想每拍 32 位、100MHz 为 400MB/s;若传同样 4B 需四拍,则为 100MB/s。
习题 4.8 / 何时需要仲裁
说明争用情形和仲裁要选的对象。
展开答题要点
多个可发起事务的主机同时请求共享资源时,需要确定谁先获得使用权。例如 CPU 与 DMA 竞争同一总线。仲裁选主机,地址译码选从机。
习题 4.9 / 仲裁方式与特点
比较集中式与分布式,并说明集中式的常见结构。
展开答题要点
集中式含链式、并行、混合;链式线少但固定顺序和逐级延迟明显,并行更快且策略灵活但线多。分布式由主机参与比较,无唯一中心,仍需共同规则。还应分析公平性、饥饿与故障影响。
习题 4.10 / 线与电路
说明器件输出形式、共同连接和上拉电阻的作用。
展开答题要点
用开漏/开集电极输出共享线路并加上拉:器件只能主动拉低或释放,任一拉低则总线为 0,全部释放才由上拉得到 1。不能把普通推挽输出直接并联来实现。正文有电路与四种组合。
习题 4.11 / 总线周期阶段
按一次典型操作写出阶段。
展开答题要点
请求与仲裁、寻址、数据传输、结束与释放。单主机可省去多主机竞争,但并不省去访问与结束的必要控制。具体协议可能重叠阶段。
习题 4.12 / 同步和异步的适用条件
说明共同节拍的要求,以及何时采用握手。
展开答题要点
同步收发应满足规定时钟下的传播、建立与保持时间,控制清楚但受速度差异和时钟条件限制。速度差大或不宜固定统一节拍时,可用异步握手按就绪情况推进,代价是联络开销。
习题 4.13 / 三种异步握手
比较不互锁、半互锁、全互锁怎样撤销请求和应答。
展开答题要点
不互锁双方按延时自行撤销;半互锁请求方确认应答后撤销,应答方按延时撤销;全互锁依次请求↑、应答↑、请求↓、应答↓,每次撤销都获得相应确认。
习题 4.14 / 半同步总线
说明共同节拍与等待如何配合。
展开答题要点
有统一时钟,同时以 READY/WAIT 等表示从机尚未就绪,插入完整等待周期。适合总体同步但部分器件或访问偶尔较慢的情况;不能把等待期间地址控制随意推进。
习题 4.15 / 周期分裂
说明等待时为何释放共享资源。
展开答题要点
先提交请求,在较长响应等待期间让出资源,之后按协议完成后续操作,减少总线空占。它与“不同传输的阶段重叠”的流水线是不同概念;具体完成机制依协议。
习题 4.16 / AMBA2 三种总线
说出 AHB、ASB、APB 的定位。
展开答题要点
AHB 为 CPU、主存、DMA 等高性能互连;ASB 是较早的高性能系统总线,也支持多主机、流水线和突发;APB 面向简单低带宽外设,控制和功耗取向更轻。
习题 4.17 / AHB 与仲裁器
概括 AHB 机制并说明仲裁器的职责。
展开答题要点
经典 AHB 支持地址/数据阶段流水、突发、多主机和相应等待、响应机制;仲裁器确定哪个主机取得访问资格。译码器才按地址选择从机,不能混写。
习题 4.18 / APB 桥
说明上层访问怎样到达 APB 外设。
展开答题要点
桥接收上层地址、方向、写数据等,转换为 APB SETUP/ACCESS 操作,并返回读数据及完成/错误状态。对上层是被访问目标,对下层组织外设访问;不同版本支持信号不同。
习题 4.19 / AMBA 的机械、电气范围
解释为什么规范未固定外部插头、电压等参数。
展开答题要点
AMBA 主要规定片内逻辑接口与传输规则;不需要统一外部连接器,电压、驱动和精确延迟由工艺及实现决定。这不等于片内电气问题可以忽略。
习题 4.20 / AHB 为何划分两个阶段
分别说明地址阶段和数据阶段的任务。
展开答题要点
地址阶段给位置、方向、大小等,数据阶段交换对应数据。先给出地址便于从机准备,并允许下一次地址与本次数据重叠,提高连续传输效率。
习题 4.21 / AHB 流水线
以 A、B 两次访问说明同拍地址与数据的归属。
展开答题要点
C1 给 A 地址;C2 给 B 地址并传 A 数据;C3 可给下一地址并传 B 数据。无等待连续 n 拍数据通常需 n+1 个区间(忽略仲裁等开销)。数据与同拍显示的地址一般不是同次访问。
习题 4.22 / SPLIT 的优点
说明挂起之后谁重新完成原访问。
展开答题要点
慢从机返回 SPLIT,仲裁器暂时屏蔽该主机,其他主机继续;从机准备好以 HSPLIT 通知,原主机重新获权并重试。优点是减少等待空占;不是从机变成主机直接送回结果。
习题 4.23 / HREADY 的作用
解释为 0 时地址、数据阶段怎样变化。
展开答题要点
当前数据阶段未完成,下一地址阶段也停住;对应写数据需保持,不能每拍继续换地址。读数据需在实际完成采样时有效,未必整个等待期间都有效。HREADY=1 的相应上升沿才完成并推进。
习题 4.24 / 突发传输
说明“拍数”和“每拍大小”分别由什么给出。
展开答题要点
一组相关传输按突发类型组织,首拍 NONSEQ、后续有效拍 SEQ;HBURST 定类型/拍数,HSIZE 定每拍字节数。例如 WRAP8、每拍 4B 共 32B,不是每拍 8B。
习题 4.25 / AHB 突发类型
列出 SINGLE、INCR 和固定拍数递增/回绕。
展开答题要点
SINGLE、未固定拍数 INCR,以及 INCR4/8/16、WRAP4/8/16。递增按每拍字节数增加;回绕在 N×每拍字节数的对齐窗口内循环。经典 AHB 另有限制:突发不能跨 1KiB 地址边界。
习题 4.26 / INCR4 读时序
自行明确合法起始地址与大小,画地址、读数据、HTRANS、HREADY。
展开答题要点
例取 38H、每拍 4B:地址 38、3C、40、44H;HWRITE=0、HSIZE=010、HBURST=011;HTRANS 为 NONSEQ 后三个 SEQ。HRDATA 的 D0—D3 比各自地址晚一阶段;无等待需 5 个区间。完整图可切换等待。
习题 4.27 / WRAP8 写时序
明确回绕窗口,画 HWDATA 与地址对应关系。
展开答题要点
例取 34H、每拍 4B,32B 窗口为 20H—3FH:34、38、3C、20、24、28、2C、30H。HWRITE=1、HSIZE=010、HBURST=100;首 NONSEQ 后 SEQ;HWDATA 晚于各自地址阶段。无等待需 9 个区间。
习题 4.28 / PCI 特点
用本章传统并行 PCI 说明共享、主从和桥。
展开答题要点
PCI 是传统并行共享总线,多个主设备需仲裁,支持相应突发与主设备访问,桥连接不同层次。32 位、33MHz 的理想数据能力约 132MB/s,实际要扣协议与等待开销。
习题 4.29 / PCIe ×32
解释 ×32 以及与导线数的关系。
展开答题要点
表示一条链路含 32 条 lane。每 lane 有发送、接收各一对差分线,共四根高速信号线,故按此口径 ×32 为 128 根;不含供电、地和辅助信号,不是 32 根线。
习题 4.30 / PCIe 5.0 ×16 的 63GB/s
写出速率、编码、lane 数与字节换算。
展开答题要点
32×10⁹×(128/130)×16÷8 ≈ 63.015GB/s,约 63.0GB/s。是单方向、已扣线路编码但未扣全部事务与控制开销;双向理论相加才再乘 2。
习题 4.31 / lane 与 wire
分别解释通道和物理信号导线。
展开答题要点
一个 lane 是可同时双向工作的基本链路通道:一对 TX 差分线和一对 RX 差分线,共四根高速信号导线。多 lane 组成更宽 link;wire 指实际导体,差分对用两根。
习题 4.32 / 串行传输特点
从位序、线路与距离说明,避免直接判断快慢。
展开答题要点
数据按约定位序依次通过相应串行通道,通常减少数据线路,适于灵活连接;实际速率取决于编码、时钟和电气实现。串行不天然比并行慢,也不自动等于 UART。
习题 4.33 / 全双工与半双工
说明能否同时双向。
展开答题要点
全双工可同时双向传送;半双工可双向但同一时刻轮流。单工只有一个方向。不能单凭电缆总根数推断通信组织。
习题 4.34 / 时钟与波特率
以普通 UART 和 K 倍采样说明。
展开答题要点
二进制 UART 通常每符号一位,波特率等于线路比特率;发送位周期约 1/R。接收内部若 K 倍过采样,其时钟为 K×R,例如 16×9600=153600Hz。内部时钟不等于电平跳变次数。
习题 4.35 / 起始与停止位
说明重新对齐、结束检测和中间采样。
展开答题要点
空闲为 1,起始位 0 的下降沿提示新帧,确认后按约定位周期在数据位中间采样;停止位 1 标示帧尾与规定空闲电平。8N1 一帧为 10 位,不能只按 8 位算有效字节速率。
习题 4.36 / RS-232C 规程特性
按设备联络和传输先后回答,不只列电压。
展开答题要点
设备就绪,按连接约定请求/允许发送,按格式与速率交换数据,完成后撤销相应状态。RTS/CTS、DTR/DSR 等的使用依设备;电压是电气特性,不能代替规程说明。
习题 4.37 / I/O 接口功能
说明 CPU 与不同外设之间需要哪些适配。
展开答题要点
速度匹配、缓冲、并串与格式/编码转换、电平转换、必要的模数/数模处理,以及状态、控制、联络。并非每个接口都具备所有功能,按外设需要配置。
习题 4.38 / I/O 端口
区分接口寄存器与外部连接器。
展开答题要点
这里通常指 CPU 可按地址访问的接口寄存器,包括数据、状态、控制端口。高位选接口、低位选内部寄存器;具体可读写属性按器件,状态可能有写一清零等语义。
习题 4.39 / 端口编址
比较 MMIO 与独立 I/O 地址空间。
展开答题要点
MMIO 将寄存器映射到内存地址空间,使用访存类指令;独立编址用专门 I/O 空间及相应指令/控制区分。某体系可同时支持两者,MMIO 也不表示寄存器位于 DRAM 中。
习题 4.40 / 输入缓冲与输出锁存
说明隔离和保持各解决什么。
展开答题要点
输入三态缓冲只在读选中时驱动数据总线,平时隔离;输出锁存保存短暂 CPU 写入供外设持续使用。瞬时输入或握手输入也可能先锁存,不能背成输入绝不保存。
习题 4.41 / 四种传送方式
按等待方法和搬运执行者比较。
展开答题要点
无条件假定可访问;查询由 CPU 反复看状态;中断让外设通知、CPU 服务;DMA 由控制器逐项搬运,CPU 配置和处理结果。中断与 DMA 可组合,通信接口种类另论。
习题 4.42 / 中断流程
从事件到返回按顺序说明。
展开答题要点
事件/数据保存→请求→允许与判优→CPU 在合法时机响应→保存返回状态→定位 ISR→保护必要现场→处理并确认/清除原因→恢复→中断返回。硬件与软件各自保存哪些状态依体系结构。
习题 4.43 / 图4.54 编码比较电路
说明允许过滤、优先编码、当前服务比较与待处理请求。
展开答题要点
Qᵢ=请求ᵢ∧允许ᵢ;编码器只给出有效请求中最高的 A。按原图编码约定,若 A>B 或当前未处理中断,才允许新的 IRQ;其他请求仍需保持等待。例如 2、5、7 请求且当前 B=4,只选 7。
习题 4.44 / 四级菊花链
写选中与后传逻辑,并指出最高级。
展开答题要点
P₀=INTA;每级 Gᵢ=Pᵢ₋₁∧Rᵢ,Pᵢ=Pᵢ₋₁∧¬Rᵢ。前级有请求就截获,不再后传,因此仅首个有效请求受理。最高为最靠 CPU 入口的第 1 级;正文给出可切换四级图。
习题 4.45 / 中断向量表
说明中断号怎样定位服务入口信息。
展开答题要点
向量表集中保存各中断/异常编号对应的入口相关信息。固定大小表项时可用表基址+编号×表项大小定位,但表项格式、是否直接入口等依体系结构,不能把 8086 格式套到所有 CPU。
习题 4.46 / DMA 块传送
说明适合场景与共享资源代价。
展开答题要点
数据连续准备好、块较大、希望高吞吐时可连续搬完整块,减少反复仲裁开销;代价是总线连续占用较久,CPU 或其他主机可能等待。小数据还应考虑配置成本。
习题 4.47 / 中断优先级管理
比较软件查询、编码器、菊花链与可编程控制器。
展开答题要点
软件查询硬件简单、顺序灵活但有查询时间;编码器判优快、需要硬件;链式线少但固定顺序和逐级延迟;可编程控制器可屏蔽、设策略及管理嵌套,控制更复杂。固定优先级还要考虑饥饿。
习题 4.48 / 随机事件、CPU 效率与高速搬运
按本章典型模型回答,并注明边界。
展开答题要点
随机事件用中断方便;避免持续忙等可提高 CPU 利用率;大块高速搬运通常 DMA 更合适,也减少逐字 CPU 中转。没有一种方法对所有大小和场景都绝对最快。
习题 4.49 / 并行与串行接口
说明多位同时传与按位序传的差别。
展开答题要点
并行用多条数据线同时传多位,直观但线路/时序协调较多;串行按位序传,线少而需移位与时序组织。具体快慢、距离和抗干扰依实现。
习题 4.50 / 线性与矩阵键盘
比较按键数量与口线数。
展开答题要点
线性按键通常一键一输入;M×N 矩阵用 M+N 条行列线组织 MN 个键。4×4 可用 8 条行列线组织 16 键,但需扫描、消抖,多键还可能需处理幽灵键。
习题 4.51 / 矩阵键盘扫描
按本章“列输出、行输入”说明定位步骤。
展开答题要点
行上拉;逐列拉低;读到某行低,则该行与当前列交点按下。C1 输出 1101,若 R2 按下则行读 1011;列优先编号为 1×4+2=6。名称叫行扫或列扫时均应说明实际方向。
习题 4.52 / 数码管静态显示
说明段码保持与资源开销。
展开答题要点
每位有独立保持/驱动关系,更新前持续显示,不需轮流扫描。直连八段模型 N 位约 8N 条段线;锁存器或专用驱动可改变 CPU 引脚需求。段码取决于共阴/共阳和位连接。
习题 4.53 / 数码管动态显示
区分段选和位选,说明刷新取舍。
展开答题要点
对应段线共用、各位另有位选,依次送段码并只选相应位,快速重复形成多位显示。直连模型约 8+N 条控制线;需持续刷新,注意占空比、闪烁、串影及实际限流驱动。
习题 4.54 / 异步串行双方约定
列出会影响帧解释的条件。
展开答题要点
速率、数据位数、校验、停止位、位序及相应线路电平/流控。双方不共享一根时钟并不等于无时间约束;每帧靠起始位对齐。8N1、7E1 等是具体格式。
习题 4.55 / 为何需要 Modem
针对讲义带通信道说明调制和解调。
展开答题要点
电话线等带通信道不适合直接照搬数字基带波形,需要调制成适合传输的信号,再解调恢复。并非所有长距离串行都必须使用电话 Modem,也可用相应差分、光纤等方案。
习题 4.56 / 独立时钟怎样仍能正确接收
说明起始对齐、过采样、中间采样及误差累积。
展开答题要点
先检测并确认起始低电平,建立本帧时序,再按约定位周期在各位中间采样;较高内部采样时钟改善定位。一帧内频差会累积,下一帧重新对齐;过大偏差仍会错误。
习题 4.57 / 确认起始位
说明怎样区别下降沿与可靠的起始低电平。
展开答题要点
空闲为高,下降沿仅是候选起点;等待接近半位再确认仍低,或按实现做多次采样,随后采各数据位。具体滤波和确认规则依 UART,不能只见任意毛刺就开始收一帧。
习题 4.58 / 为什么取位中间
从跳变、传播与时钟误差说明。
展开答题要点
位中间距离两侧边界较远,较能容忍边沿延迟、检测误差和一定频差;在边界采样更容易碰到变化。但中间采样不能消除无限误差,帧末仍可能漂到邻位。
习题 4.59 / 提高串行距离
列出电气、线缆、速率和拓扑方面的办法。
展开答题要点
选合适差分接口、降低速率、使用合适双绞/屏蔽与布线、按需要终端匹配、限制分支负载,必要时中继或换介质。最大速率与最大距离不能同时取表中的两个独立上限。
习题 4.60 / I²C 怎样选择设备
对照 SPI 的独立 CS,说明总线地址机制。
展开答题要点
主机发送设备地址,匹配的从机才响应;典型为 7 位地址加 R/W。50H 为设备地址,A0H/A1H 为线上含方向的地址字节;1234H 是选中设备内部单元地址。
习题 4.61 / I²C 状态转移
画空闲、START、Q/D、应答、Sr、STOP 的关系。
展开答题要点
I→S→各位 Q(低时可改)/D(高时稳定)→第9拍 A/N;ACK 可继续下一字节,需要时 Sr 重新寻址,结束发 P 再回 I。S/P 是 SCL 高时 SDA 的下降/上升;读数据最后一字节由主机发 NACK。正文有状态图和 EEPROM 完整事务。
画图与答题前的检查
最容易串错的六组关系
- 谁发起与谁发数据:主从按事务发起关系判断;内存读出数据仍可为从机。
- 当前地址与当前数据:AHB 同拍两阶段可能属于不同访问;等待时不能只改 HREADY 而继续推进地址。
- 拍数与大小:HBURST、HSIZE、HTRANS 各有职责,WRAP 回到对齐窗口起点,非任意初始位置。
- 中断与 DMA:中断解决通知与响应,DMA 减少逐项 CPU 搬运;二者常常配合。
- 帧格式与线路电气:UART 的逻辑波形不能直接当 RS-232 电压,RS-485 也不是完整的报文与仲裁协议。
- 设备地址与内部地址:I²C 先选设备,再按器件命令选择单元;读末字节的 NACK 由接收数据的主机发。
正文已说明讲义中需要限定或纠正的地方,包括 ASB 支持突发、仲裁与译码分工、经典 AHB SPLIT 的重试、APB 信号版本、DMA 的传统模型边界、SPI 位顺序和 CS 条件。保留原因与适用范围,比孤立背一句改正更可靠。
能独立画出两道 AHB 图、分析两种中断判优、解释 DMA 全过程、读懂 UART/I²C/SPI 基本传输,并算对地址、带宽和有效速率,就形成了本章的主线。历史型号、整机框图和标准演进也都要知道各自说明什么。