📑 本页目录

计算机原理与嵌入式系统 · 配套学习整理

数据怎样传过去
时序怎样对上拍第四章 · 总线和接口

谁发起,谁响应,数据何时有效,没准备好怎么办?沿着这四个问题,把总线、外设接口、中断、DMA 和串行通信连起来。

完整覆盖原讲义 4.1—4.4 及全部 61 道习题,包含 AHB 两道时序图和两道中断电路分析。页码按第四章单独讲义:正文与习题第 1—82 页,目录页另计。

33 节完整讲解16 幅 SVG 图解61 道习题答题卡8 道短自测

总线与时序 → 片内/片外互连 → 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

如果 n 个模块都两两直接连接,需要:

n(n−1)2

组连接关系。

例如 6 个模块需要:

6×5/2=15

组。

采用共享通道,可以简化连接、减少重复线路,也更容易扩展。

代价是:

多个模块可能争用同一资源,需要协调,性能也可能受共享带宽限制。

本章开头强调的“共享、分时”,主要针对传统共享总线。后面 PCIe 等采用点对点、交换结构,仍沿用“总线”这个历史称呼。

还有一个容易误解的地方:

“同一时刻只能一个模块输出”,指的是不能让多个输出端争相驱动同一组共享信号线;不是整个芯片里所有信号线同时只能由一个模块输出。

否则后面“主机发地址、从机返回数据”的流水线就没法理解了。

第四章 · 第 02 节

4.1.1:总线分类——每一种分类都要先看依据

掌握要求:能按位置、功能、传输形式、时钟、复用分别分类并举例。

背景为什么要讲:每种分类回答的问题不同;认识术语用途,不必背所有历史插槽参数。

分类依据 类型 你要理解的区别
所处位置 片内、片间、系统、外部 连接哪些范围的模块
功能 地址、数据、控制 分别传什么
数据组织 并行、串行 多位同时传,还是逐位传
时序 同步、异步、半同步 怎样协调传输时刻
是否复用 复用、非复用 同一引脚是否分时承担不同功能

地址、数据、控制三类总线,是第三章知识的延续

  • 地址总线:选哪个存储单元、哪个外设寄存器。
  • 数据总线:传送数据、指令、状态或控制字。
  • 控制总线:指示读写、就绪、请求、响应等。

数据总线上的内容不一定是“普通变量”。CPU 往控制寄存器写一个控制字,也是在数据总线上传送。

地址通常由当前主机发出。主机可以是 CPU,也可以是获得使用权的 DMA 控制器等模块。

串行与并行,不要直接等同于“慢”和“快”

并行:多条数据线同时传多个位。

串行:沿一个逻辑通道逐位传输。

在每条线的传输速率相同等条件下,并行一次可以传更多位。但实际高速设计中,并行线路会遇到:

  • 不同线路到达时间不同;
  • 线间串扰;
  • 引脚、布线和连接器成本上升。

高速串行可以使用差分传输、提高单通道速率,再组合多个通道。因此 PCIe 这样的串行互连可以具有很高带宽。

单端与差分:

  • 单端:接收端主要判断信号相对于参考地的电压。
  • 差分:接收端主要判断两根信号线之间的电压差。

差分有利于抑制一部分共同叠加到两根线上的干扰,也有利于高速传输。

总线复用——对应 4.2

复用的意思是:

同一组物理引脚,在不同时间传不同类型的信息。

讲义的 8086 例子:

  • 低 16 位地址与 16 位数据共用引脚。
  • 前一阶段传地址。
  • 后一阶段传数据。

因为引脚后来要改传数据,外部电路就需要先把地址锁存下来。

因此:

复用减少引脚;锁存器保存已经出现、但随后会从引脚上消失的地址。

PCI 的命令/字节使能信号也是类似思想:同一组线,在不同阶段具有不同含义。

必会解释:复用节省引脚和线路,但会增加分阶段传输、锁存与控制的要求

第四章 · 第 03 节

寻址范围和带宽:先把两个最常见的计算题做清楚

掌握要求:会算地址数、范围和带宽,明确编址单位及理想条件。

背景为什么要讲:4.4 的容量必须说明按字还是按字节,数据线位数不能随意再乘。

章末 4.4:13 位地址总线,11 位数据总线,不复用

首先,无条件能确定的是:

213=8192=8K

个不同地址,地址范围:

0000H~1FFFH

接下来,容量要看一个地址对应多大的单元。

按讲义本节采用的“一个地址选择一个 11 位存储字”的组织模型:

8K×11位

总容量:

8192×11=90112b

折合:

90112/8=11264B=11KB

所以按该模型可以写:

8K×11b,容量11KB

同时写明:这里按 11 位字编址。

如果题目另行规定“按字节编址”,则最大可寻址容量为:

213B=8KB

这与第三章的原则一致:

地址位数决定地址数;一个地址对应多少字节,由编址单位决定。

“不复用”只说明地址和数据不轮流使用同一组引脚,不会额外增加地址数。

总线带宽——对应 4.7

在“每个时钟传一次、每次使用全部数据位”的理想模型下:

B=f×W/8
  • f:总线时钟频率;
  • W:每次传输位数;
  • 结果单位为 B/s。

32 位、100MHz:

B=100×106×32/8=400MB/s

但这只是理想峰值。

如果一次传送 4B,却需要 4 个时钟周期:

B有效=4B4/(100MHz)=100MB/s

所以性能评价不能只看频率,还要考虑:

  • 数据宽度;
  • 每周期传输次数;
  • 地址、仲裁、等待等开销;
  • 是否支持突发与流水线;
  • 实际利用率和访问延迟。

特别分清:时钟周期,不等于一次完整总线传输周期。

第四章 · 第 04 节

单总线、多总线和分层结构——核心是减少互相拖累

掌握要求:比较单总线、两类双总线与分层结构,会读桥接关系。

背景为什么要讲:整机框图是结构案例;增加通路不等于已经具备 DMA 控制器。

单总线结构:

CPU、存储器、I/O 接口共同使用一套总线。

优点是简单、便于扩展;缺点是资源争用,高速和低速设备互相影响。

讲义介绍的两种双总线结构:

结构 基本思路 主要特点
面向 CPU 分开 CPU—主存通路与 CPU—I/O 通路 两类访问可采用不同连接,但外设与主存交换仍需 CPU 参与
面向存储器 保留公共连接,再增加 CPU—主存高速通路 强化主存访问性能;讲义所画系统尚未因此自动具备 DMA 搬运能力

这里要避免一个推理错误:

增加一条高速总线,不等于已经增加了一个能独立搬数据的 DMA 控制器。

三总线结构进一步引入外设与主存之间的 DMA 通路;四总线等结构又把高速、低速设备分层。

分层的原因:让相近性能和用途的模块使用合适的互连,通过桥接器连接不同层

下面用本章后面会讲到的 AHB/APB 结构,把这个思想画出来:

图 4-1CPU、DMA 可以发起访问;主存响应。桥对上层接收访问、对下层组织外设传输;数据方向不能单独决定主从。

先看角色:

  • CPU、DMA 可以发起访问,是主机。
  • 存储器响应访问,是从机。
  • APB 桥对上层表现为被访问的目标,对下层负责发起外设访问。

主机不等于“发送数据的一方”。

CPU 读内存时:

  • CPU 发起访问,所以是主机。
  • 内存发送读数据,但仍然是从机。

判断主从,要看谁发起和组织事务,不能只看数据方向。

第四章 · 第 05 节

4.1.2:总线仲裁——多个主机都想用,先给谁?

掌握要求:解释集中/分布仲裁和链式优先级,说明公平性与开销。

背景为什么要讲:具体设备编号只对给定规则有效;不用把一个例子的设备数限制背成通则。

只有一个主机时,不需要在多个主机之间仲裁。

CPU、DMA 等多个主机同时请求共享资源时,就需要仲裁器或分布式仲裁机制。

集中式仲裁:由一个仲裁中心决定

讲义分为三种:

方式 怎么做 优点 代价
串行、链式 允许信号沿设备链传递 线少、实现简单 固定优先级、逐级延迟,链路故障可能影响后级
并行 每个主机有独立请求与允许线 决策快,优先级策略灵活 线多,仲裁电路规模增大
混合 组间并行、组内链式等 折中、便于扩展 控制较复杂

典型信号:

  • BR:Bus Request,请求总线。
  • BG:Bus Grant,允许使用。
  • BB:Bus Busy,总线忙。

链式过程:

  1. 设备提出请求。
  2. 仲裁器发出允许信号。
  3. 允许信号沿链向后传。
  4. 第一个有请求的设备截获允许,不再传给后级。
  5. 使用完毕后释放。

因此,在这种链式规则下:

越靠近仲裁器,优先级越高。

如果前面的设备一直请求,后面的设备可能长期得不到服务。这个问题叫饥饿。

讲义把某个链路例子的设备数量写得很具体,那不是所有菊花链都必须遵守的统一数量限制。真正需要掌握的是逐级延迟和固定顺序。

分布式仲裁:各主机自己参加判断

没有唯一的中心仲裁器。

讲义例子中,每个主机读取请求组合,判断:

是否存在比我优先级更高的请求者?

有,就退出本次竞争;没有,才获得使用权。

需要认识:

  • 申请期:提出请求。
  • 裁决期:比较并确定谁可以使用。

在某个例子里“设备 4 优先级最高”,是由该例子的规则决定的;不能推广成设备编号越大永远优先级越高。

第四章 · 第 06 节

“线与”到底是什么——对应 4.10,也直接帮助理解 I²C

掌握要求:会画开漏或开集电极输出加上拉的线与关系。

背景为什么要讲:它也直接解释 I²C 的拉低、释放、时钟同步与逐位仲裁。

正常推挽输出可以主动输出高、低电平。若一个输出高、另一个输出低,却把它们直接接在一起,就会发生冲突。

开漏或开集电极输出换了一种方式:

只能主动拉低;需要高电平时,释放线路,由上拉电阻拉高。

图 4-2开漏输出只能拉低或释放;全部释放才由上拉电阻得到高电平。图中开关代表输出管的导通/截止。

把“释放”记作逻辑 1,把“拉低”记作逻辑 0:

设备 1 设备 2 共享线
释放 1 释放 1 1
拉低 0 释放 1 0
释放 1 拉低 0 0
拉低 0 拉低 0 0

这就是:

Y=X1∧X2

只要有一个器件拉低,线路就是低。

所以 4.10 可回答:

采用开集电极或开漏输出,将输出端连接到共享线上,并通过上拉电阻接电源,可实现线与。

如果信号是“低有效请求”,从“是否有人提出请求”的角度看,又体现为“任一设备拉低即可提出请求”。这与按电平讨论的线与不矛盾。

开漏输出的逻辑 1,实际动作是释放,不是主动驱动高电平

第四章 · 第 07 节

4.1.3:总线时序——关注每一步要等谁

掌握要求:会读同步、三种握手、等待与周期分裂的先后关系。

背景为什么要讲:固定纳秒数属器件参数;必须知道谁输出、谁采样、什么条件才能继续。

一次典型总线操作,可分为:

  1. 请求与仲裁;
  2. 寻址;
  3. 数据传输;
  4. 结束与释放。

只有一个主机时,可以省去多主机竞争的环节,但仍需完成相应传输和结束动作。

同步总线:按共同节拍工作

例如约定:

  • 第一阶段提供地址。
  • 后续某个时钟边沿接收数据。

要求数据必须及时到达,并满足采样边沿前后的建立、保持要求。

优点是节拍明确、控制相对简单。

限制是:

  • 设备速度需要满足规定;
  • 传播延迟、时钟偏差会限制工作频率;
  • 慢设备可能跟不上固定时序。

讲义中的 TAD、TDS,是在说明地址和数据需要时间才能建立稳定。

**学到什么程度?**会在图上指出“哪一方输出,哪一个边沿采样,数据必须何时稳定”,不用先背某个历史总线的全部纳秒参数。

异步总线:不依靠统一时钟安排所有动作,依靠握手

讲义分三种:

方式 请求如何撤销 应答如何撤销
不互锁 固定延时后自行撤销 固定延时后自行撤销
半互锁 请求方等到应答后再撤销 应答方固定延时后自行撤销
全互锁 请求方确认应答后撤销 应答方确认请求撤销后再撤销

可以切换观察:

图 4-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 的数据

注意:

同一列时间里出现的地址和数据,通常不是同一次访问。

这是时序题最容易读错的地方

如果连续传 n 个数据,每个地址和数据阶段都只需一拍,且忽略仲裁等额外过程:

总区间数=n+1

流水线填充以后,可以做到每拍完成一个数据传输;但第一拍还在提供第一个地址。

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;
  • 合计数据量:
8×4B=32B

第四章 · 第 12 节

INCR 与 WRAP 的地址计算——这里必须会算

掌握要求:能计算 INCR/WRAP 地址,识别窗口及 1 KiB 边界限制。

背景为什么要讲:公式适用前先检查传输对齐和题给条件,回绕并非回到初始地址。

设:

  • 起始字节地址 A0;
  • 每拍 s 字节;
  • 一共 N 拍。

递增 INCR:

Ai=A0+is

每拍 4B,从 38H 开始,INCR4:

38H, 3CH, 40H, 44H

地址增加的是每拍字节数 4,不是永远加 1。

回绕 WRAP:先确定回绕窗口

窗口大小:

W=Ns

窗口起点:

L=⌊A0W⌋W

地址在这个窗口内递增,到末尾就回到窗口开头:

Ai=L+((A0−L+is)modW)

先看讲义 WRAP4:

  • N=4;
  • s=4B;
  • 窗口 16B;
  • 起始 38H;
  • 所在窗口是 30H~3FH。

因此:

38H, 3CH, 30H, 34H

3CH+4 本来得到 40H,但超出窗口,所以回到 30H。

再做 WRAP8:

  • N=8;
  • s=4B;
  • 窗口 32B;
  • 起始 34H;
  • 所在窗口为 20H~3FH。

地址依次为:

34H, 38H, 3CH, 20H, 24H, 28H, 2CH, 30H

WRAP 不是简单回到起始地址,而是回到对齐窗口的起点。

讲义还要求 AHB 突发不能跨越 1KB 地址边界。这是另外一条约束,不能与 WRAP 自身的 16B、32B 等窗口混淆。

第四章 · 第 13 节

4.26、4.27:怎样画两道 AHB 时序题

掌握要求:独立画出 4.26 的 INCR4 读、4.27 的 WRAP8 写,并正确插等待。

背景为什么要讲:图中的起始地址与每拍宽度是写明的合法假设,换数字后仍应能画。

题目没有指定每拍宽度和起始地址时,可以自己选一个合法例子,把假设写在图旁边。

下面已经把两题和正文 WRAP4 例子做成可切换的时序图;还可以加入等待拍:

每拍 4B;D0、D1…分别属于 A0、A1…
图 4-4切换 4.26 的 INCR4 读、4.27 的 WRAP8 写以及 WRAP4 例子。等待会延长当前数据阶段,并保持已给出的下一地址;时钟区间从上升沿起算。

4.26:INCR4 读传输

采用:

  • 每拍 4B;
  • 起始 38H;
  • 无等待。

需要写出的控制条件:

HWRITE=0
HSIZE=010
HBURST=011

第一拍 NONSEQ,后三拍 SEQ。

四个地址:

38H, 3CH, 40H, 44H

使用 HRDATA 返回读数据;每个数据阶段比对应地址阶段晚一拍。

画图顺序:

  1. 先画时钟。
  2. 再按顺序画四个地址。
  3. 标上 NONSEQ、SEQ、SEQ、SEQ。
  4. 将 D0~D3 相对于对应地址右移一拍。
  5. HREADY 无等待时保持 1。
  6. 传完以后画 IDLE 或后续访问。

4.27:WRAP8 写传输

采用:

  • 每拍 4B;
  • 起始 34H;
  • 无等待。

控制条件:

HWRITE=1,HSIZE=010,HBURST=100

八个地址就是前面计算的:

34H, 38H, 3CH, 20H, 24H, 28H, 2CH, 30H

第一拍 NONSEQ,其余 SEQ。

使用 HWDATA,各数据与各自地址对应,晚一个阶段。

如果加等待:

例如 D1 没准备好:

  • HREADY 拉低;
  • D1 的阶段延长;
  • 此时已经出现的下一地址也保持;
  • 完成后才推进。

你不能只在 HREADY 上画一个低脉冲,却让地址、数据继续每拍变化。

第四章 · 第 14 节

SPLIT:总线不能因为一个慢设备就一直被占着

掌握要求:说明 SPLIT 的挂起、重新允许、原主机重试流程。

背景为什么要讲:经典 AHB 的具体实现与一般分裂事务思想要分开;不能套到 AHB-Lite。

AHB 的四种典型响应:

响应 意思
OKAY 正常完成
ERROR 访问失败
RETRY 当前没完成,主机以后重试
SPLIT 当前退出,待从机通知后重新参与并重试

SPLIT 的基本过程:

  1. 主机发起访问。
  2. 从机暂时不能完成,返回 SPLIT。
  3. 仲裁器暂时屏蔽这个主机的相关请求。
  4. 其他主机可以使用总线。
  5. 从机准备好,通过 HSPLIT 通知仲裁器。
  6. 原主机重新取得使用权,重试这次传输。
  7. 最后正常完成。

**关键纠正:经典 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 规范

图 4-5SETUP 先给地址与控制,ACCESS 执行。带 PREADY 的版本可延长 ACCESS;图中展示一笔访问,完成判定在该区间末的下一上升沿,准备阶段的 PREADY 不参与完成判断。

AXI:进一步把不同信息分成独立通道

五个通道:

  1. 读地址 AR;
  2. 读数据 R;
  3. 写地址 AW;
  4. 写数据 W;
  5. 写响应 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:

33×106×32/8≈132MB/s

64 位、66MHz:

66×106×64/8=528MB/s

这是理想传输能力,还未扣除其他开销。

PCIe:串行、差分、点对点、交换连接

主要部件:

部件 作用
Root Complex 处理器、存储系统与 PCIe 体系的连接端
Switch 连接多个链路,转发事务
Bridge 与其他总线体系转换连接
Endpoint 网卡、存储设备、加速设备等端点

不同链路可并行工作。但如果共享同一个上游链路,该上游链路仍可能成为瓶颈。

lane、wire、link——对应 4.29、4.31

一个 PCIe lane 包含:

  • 一对发送差分线;
  • 一对接收差分线。

因此:

1 lane=2对差分线=4根信号线

一个 link 可以包含多个 lane。

  • ×1:1 条 lane。
  • ×16:16 条 lane。
  • ×32:32 条 lane。

所以 ×32 不是“32 根导线”,也不是传统意义上“一拍 32 位的并行数据总线”。

按上述信号对计算,×32 含:

32×4=128

根高速信号导线,不包括供电、地和其他辅助信号。

PCIe 5.0 ×16 的 63.0GB/s——对应 4.30

条件:

  • 每 lane 每方向 32GT/s;
  • 128b/130b 编码;
  • 16 lane。

编码效率:

128130

每 lane 的字节速率:

32×109×128130÷8≈3.938GB/s

×16:

32×109×128130×16÷8≈63.015GB/s

约为:

63.0GB/s

这使用 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

学会公式比背完整带宽表更重要

图 4-6上半部只画一个 lane;×N 就是重复 N 组。每组含两个相反方向的差分对。计算扣除相应线路编码,仍不是扣完所有开销后的应用净吞吐;本图范围为讲义涉及的 1.0—5.0。

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 控制器 较大量、规律性数据搬运

查询方式的过程:

  1. 读状态。
  2. 判断 Ready。
  3. 没好,继续查。
  4. 好了,读写数据。

它实现简单,但忙等会消耗 CPU 时间;若查询间隔过大,又可能响应不及时。

中断方式改变的是“等待方法”

CPU 平时做其他任务,外设就绪后通知 CPU。

但进入服务程序后,数据仍可能要由 CPU:

I/O端口→CPU寄存器→内存

DMA 进一步改变“搬运方法”

图 4-7查询或中断服务仍可由 CPU 执行数据中转;DMA 改变的是逐项搬运的执行者,CPU 仍负责配置与结果处理。

因此,中断不等于 DMA;DMA 也不等于完全不需要中断。

常见组合是:

DMA 负责搬一批数据,搬完后通过中断通知 CPU 处理。

对应 4.48,按本章典型模型回答:

  • 随机事件:中断方便。
  • 减少反复等待:中断提高 CPU 利用率。
  • 大块数据高速搬运:DMA 通常更合适。

小数据量时还要考虑配置开销,不能理解成任何一次传送使用 DMA 都一定更快。

第四章 · 第 20 节

4.4.3:中断——把全过程走通,比背名词更重要

掌握要求:能完整说明中断进入、保护、服务、清除、恢复和返回。

背景为什么要讲:自动保存与软件保存的分工依体系结构;向量表格式也不能跨架构照搬。

先认识几个词:

名词 含义
中断源 事件来自哪里
中断号、类型码 用编号区分来源
中断服务程序 ISR 专门处理这个事件的代码
中断向量 与服务入口相关的信息
向量表 中断编号与入口信息的集中映射
断点 返回后应继续执行的位置及相关状态
现场 被中断程序的寄存器等运行状态
屏蔽 暂时禁止响应某些中断
Pending 请求已经发生,但尚未获得服务
嵌套 高优先级中断打断正在处理的低优先级中断

完整流程——对应 4.42

  1. 外设产生事件,保存状态或数据。
  2. 接口提出中断请求。
  3. 中断控制器检查允许条件、屏蔽与优先级。
  4. CPU 在允许响应的时机接受中断。
  5. 保存返回所需的状态。
  6. 根据中断号或向量机制找到 ISR。
  7. ISR 保存它还需要保护的现场。
  8. 读写数据、处理事件,并按器件要求确认或清除中断原因。
  9. 恢复现场。
  10. 执行中断返回,恢复被中断程序。

保护断点和保护现场为什么都需要?

  • 只记得“回到哪里”,但寄存器被 ISR 改坏了,原程序仍会算错。
  • 只保存寄存器,却不知道该返回哪里,也不行。

具体哪些由 CPU 自动保存、哪些由软件保存,取决于体系结构。讲义以传统处理器说明分工,不要背成所有 CPU 都一模一样。

向量表——4.45

它解决:

CPU 已经知道发生了第 n 类事件,该去执行哪段代码?

若采用固定长度表项:

表项位置=表基址+n×表项大小

但表项具体格式依体系而异。讲义的 8086 实模式向量表与其他架构的表不能直接套同一种格式。

中断嵌套:

主程序 → ISR-A → 更高优先级 ISR-B → 返回 ISR-A → 返回主程序。

返回顺序要与进入顺序对应,所以需要保存不同层的状态。

可屏蔽与不可屏蔽:

  • 可屏蔽中断可受相应使能、屏蔽设置控制。
  • NMI 不受普通中断屏蔽机制同样地控制。

并不是所有“严重事件”都必然走同一个 NMI 引脚;具体由处理器异常体系决定。

本章将 interrupt、trap、exception 作较宽泛的讨论。以后学习具体体系时,仍要区分它们在触发原因、返回位置等方面的规则。

图 4-8先中断主程序进入 A,再由更高优先级 B 打断 A;返回必须先 B→A,再 A→主程序。各层返回位置和必要现场都要得到保护。

第四章 · 第 21 节

中断优先级与两道电路分析题

掌握要求:解释 4.43 编码比较电路,写出四级菊花链的选中/后传逻辑。

背景为什么要讲:优先级编码大小与物理链序都是本例约定,不能推广为所有处理器规则。

优先级可以用:

  • 软件查询顺序;
  • 优先编码器;
  • 菊花链;
  • 可编程中断控制器等方式管理。

软件查询:

CPU 收到汇总请求,再按程序指定的顺序查看各来源。

优点是灵活、硬件简单;代价是查询时间。

硬件判优更快,但需要相应电路。固定优先级简单,可能造成低优先级长期等待;轮转等策略则改善公平性。

4.43:图 4.54 的编码器和比较器怎样只选最高优先级?

先对每个来源做允许条件过滤:

Qi=请求i∧允许i

然后:

  1. 所有 Qi 汇总,判断有没有有效请求。
  2. 优先编码器在有效请求中选最高者,产生编码 A。
  3. 优先权寄存器保存当前正在服务的优先级编码 B。
  4. 图中按 A>B 表示新请求优先级更高。
  5. 若 CPU 当前未处理中断,则不需要与正在服务的优先级比较。
  6. 最后只有被选中的最高优先级请求获得相应服务机会。

可以写成:

IRQ=⋁Qi ∧\ [(A>B)∨当前未处理中断]

例如有效请求优先级为 2、5、7,正在服务的是 4:

  • 编码器只输出最高者 7;
  • 比较器判断 7>4;
  • 允许更高优先级事件进入。

注意“数值越大优先级越高”是这张图的编码约定,不是所有处理器的统一规则。

其他请求仍需按系统设计保持等待,不能因为这次未选中就默认消失。

图 4-9对应 4.43 的逻辑关系。A4H 的请求位为 7、5、2;允许位图可屏蔽来源。图沿用“编码越大越优先”的约定,只将最高候选与正在服务的优先级比较。

4.44:四个中断源的菊花链电路

可以切换下面的请求组合:

图 4-10四个请求已经过允许条件过滤。响应从链首向后传,第一个有效请求截获;优先级为 1>2>3>4。

设 Ri 已经包含允许条件,CPU 输出响应 INTA。

每一级用两个逻辑功能:

  • 有请求:截获响应。
  • 无请求:继续向后传。

记本级收到的响应为 Pi−1:

Gi=Pi−1∧Ri
Pi=Pi−1∧¬Ri

第一阶段:

P0=INTA

例如:

G1=INTA∧R1
G2=INTA∧¬R1∧R2
G3=INTA∧¬R1∧¬R2∧R3

四级这样串接即可。每级可用一个与门形成受理输出,再用带反相请求输入的与门形成后传信号。

因为一个请求者截获后会令后传信号为 0,所以后级不能同时得到响应。

优先级:

1>2>3>4

最高的是最靠近 CPU 响应入口的第 1 个。

讲义的中断输入接口电路也要认识

外设给出数据及选通信号后:

  • 数据进入锁存器;
  • 中断请求触发器置位;
  • 若未屏蔽,产生 IRQ;
  • CPU 响应后按设计清除请求锁存;
  • ISR 读数据端口时,地址译码和读信号使能三态缓冲,把锁存数据送上总线。

这样就把数据保持、事件记录、中断通知、CPU 读取连接起来了。

第四章 · 第 22 节

4.4.4:DMA——先配参数,再由控制器按规则搬运

掌握要求:说明 DMA 配置、请求、仲裁、搬运和通知,比较三种模式。

背景为什么要讲:传统控制器的一个周期、DACK 选外设等细节不代表所有现代 SoC。

CPU 一般先配置:

  • 源、目的位置;
  • 传输数量;
  • 数据宽度;
  • 地址是否递增;
  • 方向、工作模式;
  • 外设请求来源;
  • 完成、错误通知方式。

传输过程:

  1. 外设提出 DRQ。
  2. DMAC 判断请求是否允许。
  3. DMAC 请求相应总线资源。
  4. 仲裁成功后获得访问能力。
  5. 使用 DACK 或相应外设请求机制协调。
  6. 进行数据读写。
  7. 更新地址、计数。
  8. 继续或暂停。
  9. 完成后释放资源,并按设置通知 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:并行接口、矩阵键盘——先搞清“扫描”在扫什么

掌握要求:会读矩阵键盘行列电平并确定按键编号,认识消抖与多键问题。

背景为什么要讲:本图是单键模型;行扫描还是列扫描的叫法以实际驱动/读取方向说明。

并行接口可同时传送多位数据。

没有握手的简单端口,适合直接读输入电平、写输出值;有准备、忙等状态的外设,则需要缓冲和联络。

线性键盘:一个按键占一根输入线

优点简单,缺点是按键多时耗引脚。

矩阵键盘:按键接在行列交点

M 行、N 列:

可组织 MN 个按键,使用 M+N 根行列线

例如:

  • 16 个独立按键,需要 16 根输入线。
  • 4×4 矩阵,行列共 8 根线。

按讲义的接法:列输出,行输入

  1. 行输入带上拉,默认读到 1。
  2. 把某一列拉低。
  3. 如果这个列上的某个按键闭合,就把对应行拉低。
  4. 读行值,确定行号。
  5. 结合当前列号,确定按键。
  6. 换下一列继续扫。
● 闭合开关;○ 未闭合。仅演示单键。
图 4-11本例列输出、行输入带上拉,采用单键模型。先选一列,再看哪一行被拉低;编号使用列优先顺序。

例如当前扫 C1:

C3C2C1C0=1101

若 R2、C1 的键闭合,读到:

R3R2R1R0=1011

因此:

  • 列号 1;
  • 行号 2。

若按列优先编号:

键号=列号×行数+行号

4×4 的这个键:

1×4+2=6

讲义 8×8 就相应使用:

键号=列号×8+行号

为什么还先把全部列拉低?

这是为了快速判断“有没有任何键按下”:

  • 行全为 1:没有发现按键。
  • 有行变 0:存在按键,再逐列定位。

有些资料把这种过程叫行扫描,有些根据驱动方向叫列扫描。关键是知道哪组线被主动选择、哪组线被读取。

还要认识:

  • 按键机械抖动:需要延时复测或稳定采样确认。
  • 行列反转、其他扫描方式:是识别行列的其他组织方法。
  • 多键同时按下可能出现幽灵键,需要额外电路或算法处理。本节图解采用单键模型。

第四章 · 第 24 节

LED 数码管——段选决定“显示什么”,位选决定“哪一位显示”

掌握要求:会按连接位序求段码,区分静态/动态显示、段选/位选。

背景为什么要讲:引脚数量公式按直连模型;驱动芯片可改变 CPU 需要的连接数。

七段为:

a,b,c,d,e,f,g

加小数点 dp,就是八段。

共阴:公共端接低,段线高电平点亮

共阳:公共端接高,段线低电平点亮

在没有额外反相驱动的逻辑模型中,二者段码互补。

图 4-12按 dp、g、f、e、d、c、b、a 的位序比较共阴/共阳段码,再观察四位动态扫描的段选与位选。

讲义采用位序:

dp, g, f, e, d, c, b, a

显示 0,要点亮 a、b、c、d、e、f,关闭 g、dp。

共阴:

00111111B=3FH

共阳:

11000000B=C0H

**段码必须结合位序。**如果换了引脚到数据位的连接,代码就可能不同,不能把 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 位需要约 8N 根段控制线。实际可通过锁存器或专用驱动器改变 CPU 所需引脚数。

动态显示——4.53

对应段线并联,另用位选控制当前哪一位工作。

例如显示 1234:

  1. 段线放数字 1 的码,只选第 0 位。
  2. 段线放数字 2 的码,只选第 1 位。
  3. 依次显示 3、4。
  4. 快速重复。

所以某一时刻通常只点亮一位,但人眼看到稳定的多位显示。

按讲义直连模型:

口线数=8+N

5 位:

  • 静态约 40 根段线;
  • 动态约 13 根段线加位线。

动态显示的取舍:

  • 节省连接资源;
  • 需要持续刷新;
  • 单位数码管占空比降低;
  • 扫描太慢可能闪烁;
  • 更新段码和位选的顺序不当可能串影。

实际电路还需要限流与合适的驱动能力。这里学习的是段码、段选、位选和扫描原理。

第四章 · 第 25 节

带握手的并行接口、GPIO:把状态和数据对应起来

掌握要求:会按 STB/IBF、OBF/ACK 走缓冲握手,认识 GPIO 模式用途。

背景为什么要讲:8255 和 STM32F1 模式表是实例;完整寄存器编程留到具体器件章节。

输入接口的 STB、IBF

  • STB:外设通知“这一份数据有效”。
  • IBF:输入缓冲器已有尚未读取的数据。

过程:

  1. 外设确认缓冲可接收。
  2. 输出数据并发 STB。
  3. 接口锁存数据,置满、置 Ready。
  4. CPU 读取状态,发现有数据。
  5. CPU 读数据端口。
  6. 接口按设计清除满标志,允许下一次输入。

输出接口的 OBF、ACK

  1. CPU 确认可写。
  2. 写入输出缓冲。
  3. OBF 表示“有待取走的数据”。
  4. 外设取数据。
  5. 外设发 ACK。
  6. 接口清除相应忙、满标志。

因此握手不是一堆孤立缩写,而是在防止:

新数据覆盖尚未处理的旧数据,或者接收方读取还没准备好的内容。

GPIO:General-Purpose Input/Output,通用输入输出

常见寄存器:

  • 配置、控制寄存器;
  • 输入数据寄存器;
  • 输出数据寄存器;
  • 中断、复用等相关配置。

讲义 STM32F1 例子中的八类模式,可以归成:

类别 模式 核心意思
输入 浮空、上拉、下拉、模拟 如何接收及确定默认状态
普通输出 推挽、开漏 能否主动拉高,以及输出形式
复用输出 复用推挽、复用开漏 引脚交给 UART、SPI、I²C 等内部功能
  • 推挽:能主动输出高、低。
  • 开漏:拉低或释放。
  • 上拉、下拉:给未被外部强驱动的输入提供默认状态。
  • 复用:引脚由某个外设模块控制,而不是普通 GPIO 输出数据位直接控制。

这是本章例子,不是所有 STM32 或 MCU 都恰好只有同样八种模式。

讲义还提到 8255:

  • 三个八位并行口;
  • 可编程控制;
  • 多种工作方式。

它作为历史上的可编程并行接口范例,帮助理解“写控制字改变端口工作方式”。本章没有要求你展开全部 8255 编程,不必先背其完整控制字。

第四章 · 第 26 节

4.4.6:串行通信——方向、速率、同步方法,分别判断

掌握要求:区分单双工、比特率/波特率、同步/起止式异步。

背景为什么要讲:没有独立时钟线不等于 UART;线路电平跳变次数也不等于波特率。

传送方向:

类型 含义
单工 只允许一个方向
半双工 可双向,但同一时刻轮流
全双工 可同时双向

这是通信能力的分类,不等于单纯数电缆有几根。

比特率与波特率:

  • 比特率:每秒多少 bit。
  • 波特率:每秒多少符号。

如果一个符号有 M 种状态,每符号可表达:

log2M

位,则:

Rb=Rslog2M

在本章普通二进制 UART 中,每符号一位:

比特率=波特率

但波特率不是“电平每秒翻转多少次”。连续发送多个 1,电平可能不翻转,仍然发送了多个符号。

同步通信:双方有共同的位时序基准

可以:

  • 单独传时钟;
  • 或从编码后的数据中恢复时钟。

所以“没有独立时钟线”并不自动等于起止式异步串口。

异步 UART:双方使用各自时钟,但事先约定速率和格式

它不是完全没有时间要求:

一个字符内,每位时间需要基本一致;每个新字符的起始位帮助接收方重新对齐。

第四章 · 第 27 节

UART 数据帧与采样——对应 4.34~4.35、4.54、4.56~4.58

掌握要求:会画 UART 帧、算校验和有效速率,解释起始检测与中间采样。

背景为什么要讲:过采样倍数和容差依实现;图例用于理解误差,不充当器件保证值。

典型格式:

起始位+数据位+可选校验位+停止位

在 UART 逻辑电平侧:

  • 空闲:1。
  • 起始位:0。
  • 数据:一般低位先传。
  • 停止位:1。

下面画的是 UART 逻辑电平,不是经过 RS-232 收发器后的线路电压。

UART 逻辑电平;8 数据位、1 停止位;从低位 d0 开始
图 4-13UART 逻辑电平侧的 8 数据位、1 停止位。数据从 d0 先发,圆点为采样位置;不是 RS-232 电缆的正负电压图。

例如:

53H=01010011B

按 d0 到 d7 发送:

1, 1, 0, 0, 1, 0, 1, 0

不要把写在纸上的八位二进制从左到右照搬成 UART 发送顺序。

8N1、7E1 是什么意思?

  • 8N1:八位数据、无校验、一位停止。
  • 7E1:七位数据、偶校验、一位停止。
  • O:奇校验。

奇偶校验统计的是数据位加校验位中的 1:

  • 偶校验:总数为偶数。
  • 奇校验:总数为奇数。

53H 有四个 1:

  • 八位偶校验位为 0;
  • 八位奇校验位为 1。

奇偶校验能检测某些错误,不能检测所有错误,也不能直接纠正错误。

一帧的时间和有效数据率

8N1:

1+8+1=10位/帧

115200 波特时:

Tb=1115200≈8.68μs
T帧=10Tb≈86.81μs

连续满速发送时,每秒用户字节数:

115200/10=11520B/s

不是 115200/8,因为还要传起始位、停止位。

8N1 的数据位占比:

8/10=80%

7E1:

1+7+1+1=10位

用户数据位占比则为 70%。

接收端怎样找到起始位?

  1. 平时检测空闲高电平。
  2. 发现下降沿,认为可能开始。
  3. 等待接近半个位时间,再检查是否仍为低,或采用多次采样确认。
  4. 确认起始位后,在后续各位的中间附近采样。

从起始沿算起:

  • 起始位中间:约 0.5Tb;
  • 第一个数据位中间:约 1.5Tb;
  • 第二个数据位中间:约 2.5Tb。

以此类推。

为什么常用 16 倍波特率采样时钟?

为了更细地定位起始沿、确认起始位,并在位中间采样。

若波特率为 R,过采样倍数 K:

f采样=KR

K=16、R=9600:

f采样=153600Hz

发送端每 Tb 发送一位,接收端可能用多个内部采样时钟观察这一位。内部采样时钟频率不能直接等同于线路波特率。

为什么在位中间采样?

因为距离两边的跳变最远,能容忍一定的:

  • 时钟频率偏差;
  • 起始检测误差;
  • 信号转换延迟。

一帧内误差会逐渐积累;下一帧又由起始位重新对齐。偏差太大,最后可能把停止位采错,形成帧错误。

停止位同时提供帧结束标志和保持规定空闲电平的时间。

图 4-14假定起始沿检测精确,连续发送 8N1,第一帧为 53H,后面紧跟下一帧起始位。点越过目标位边界后,可能取到邻位;图只解释漂移,不给出真实 UART 的容差保证。

第四章 · 第 28 节

UART 接口内部:数据怎样从寄存器变成串行波形

掌握要求:说明发送/接收缓冲、移位、状态与错误,区分缓冲可写和线路完成。

背景为什么要讲:8250、16550 等历史用于解释 FIFO;芯片编号不必背成原理。

发送过程:

CPU写发送缓冲→发送移位寄存器→逐位发送

接口自动加入起始、校验、停止等格式。

接收过程:

逐位采样→接收移位寄存器→接收缓冲\rightarrowCPU或DMA读取

还需要:

  • 波特率发生器;
  • 线路格式控制;
  • 状态寄存器;
  • 中断控制;
  • 可选 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 位地址,加一位读写方向:

7位地址+R/W
  • 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 保持释放后的高电平

正常发送每字节:

8位数据+1位应答

发送方发完八位后,必须释放 SDA,让接收方决定 ACK/NACK

读事务中:

  • 数据由从机发送;
  • 主机是接收方;
  • 因此 ACK/NACK 由主机给出。

读到最后一个需要的字节时:

主机发 NACK,再结束或重复启动

NACK 此时表示“我不再要下一字节”,不等于刚收到的字节有错误。NXP 原规范明确列出这一用途。I²C 规范

4.61 的状态关系,以及下面 EEPROM 示例,可以切换看:

图 4-15状态图是字节级教学模型。另一模式从 EEPROM 的 1234H 单元读取假定数据 5AH;设备地址与单元地址分开,读末字节由主机 NACK。

状态图按以下含义读:

  1. 空闲后建立 START。
  2. 每位经历低电平准备 Q、高电平有效 D。
  3. 八位后进入第九拍应答。
  4. ACK 后可以继续下一字节。
  5. 需要重新寻址、改变方向等时,可发 Sr。
  6. 完成或不继续时,按相应流程发 STOP。
  7. STOP 后回到空闲。

Sr 不要求先发 STOP,也不把事务中途交还为空闲。

多主机怎样仲裁?

多个主机可能同时发现空闲并开始发送。

某个主机:

  • 想发送 1:释放 SDA。
  • 却实际读到 0:说明另一个主机正在拉低。
  • 它输掉本次仲裁,退出竞争。

因此:

发送方边发送边观察;低电平在电气上占优。

不是事先规定某个固定设备地址永远最高优先级,而是由竞争时实际发送的位序决定。

SCL 的线与连接还支持时钟同步;器件在允许的场景下可以通过保持 SCL 低电平延长等待,这就是时钟拉伸。具体控制器与器件是否支持,要看其实现。

第四章 · 第 32 节

通过 I²C 读取 EEPROM:把一整个事务串起来

掌握要求:能走通 EEPROM 随机读,分清 A0H/A1H、50H 和 1234H。

背景为什么要讲:STM32 双地址、PEC 等是特定功能,不能当所有 I²C 器件的基本要求。

讲义的 24LC256:

256Kb=32KB

假设:

  • 七位设备地址为 50H;
  • 内部单元地址为 1234H;
  • 读取一个字节。

设备地址与方向拼成八位:

(50H≪1)|0=A0H
(50H≪1)|1=A1H

注意:

七位设备地址是 50H;A0H、A1H 是加上方向位后的线上地址字节。

随机读流程:

  1. 主机发 START。
  2. 主机发 A0H,先选择设备并使用写方向。
  3. 从机 ACK。
  4. 主机发内部地址高字节 12H,从机 ACK。
  5. 主机发内部地址低字节 34H,从机 ACK。
  6. 主机发 Sr。
  7. 主机发 A1H,改为读方向。
  8. 从机 ACK。
  9. 从机发送指定单元数据。
  10. 主机发 NACK。
  11. 主机发 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 上升沿

可以切换波形:

CS# 已有效;主发 53H,从发 96H;● 为采样沿
图 4-16切换 CPOL/CPHA 和位顺序。CPHA=0 的首位必须提前准备;实际采样沿、CS 边界和命令格式按双方器件约定。

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.1AMBA 概述第 08 节 →
4.2.2AHB第 09—14 节 →
4.2.3—4.2.6ASB、APB、AXI、版本演进第 15 节 →
4.3.1—4.3.3PCI、PCIe、USB第 16 节 →
4.3.4典型计算机总线系统第 17 节 →
4.4.1I/O 接口概述第 18 节 →
4.4.2数据传送方式第 19 节 →
4.4.3中断及优先级电路第 20—21 节 →
4.4.4DMA第 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 和标准组织历史:认识其位置,不必靠背全称、年份来证明学会通信原理。

不看答案先试一遍

八道章末短自测

先独立作答,再展开答案核对。

  1. 主机读内存时,真正发送数据的是内存,为什么内存仍是从机?
  2. 一个开漏设备释放,另一个拉低,共享线是什么?
  3. AHB 当前数据等待时,下一地址能否继续不断变化?
  4. 每拍 4B,从 3CH 开始的 WRAP4,四个地址是什么?
  5. PCIe ×8 有多少 lane,按每 lane 四根高速信号线算有多少根?
  6. UART 9600 波特、8N1,连续传输每秒最多多少用户字节?
  7. I²C 主机读取最后一个字节后,谁发送什么应答?
  8. 中断与 DMA 的主要区别是什么?
展开自测答案与过关标准
  1. 主从按谁发起事务划分,不按谁发送数据划分。
  2. 低电平,任意一个拉低就占优。
  3. **不能。**流水线被阻住,相应下一地址需要保持。
  4. 窗口 30H~3FH,因此是 3CH、30H、34H、38H。
  5. 8 lane、32 根高速信号线,不含供电、地与其他辅助信号。
  6. 一帧十位,因此 960B/s。
  7. 主机发送 NACK,表示不再要下一字节,然后结束或重复启动。
  8. 中断让 CPU 不必持续查询,但服务时仍由 CPU 执行相应操作;DMA 让数据搬运不必逐字经过 CPU 指令中转,CPU 负责配置和结果处理。

**第四章的过关标准是:你能独立画两道 AHB 图,解释中断和 DMA 的完整流程,读懂 UART/I²C/SPI 的基本传输,并算对地址、带宽、突发地址与串口有效速率。**这些会了,其余型号和历史背景就有位置可放,不会再是一堆散乱名词。

章后习题 · 全部覆盖

61 道习题的答题卡

题意归纳后保留原题号和计算条件。先自行作答,再展开核对;短答案用于检查,完整推导、波形和电路分析沿链接回正文。题目没有给定的时序参数,要在答案旁写明假设。

习题 4.1 / 为什么采用总线

说明共享连接比两两直连解决了什么,又付出什么代价。

展开答题要点

n 个模块两两直连需要 n(n−1)/2 组连接。共享总线减少重复连线、简化扩展和接口协调;代价是资源竞争、仲裁和共享带宽限制,不能保证所有模块同时任意发送。

回到第 01 节完整讲解 →

习题 4.2 / 总线复用

给出地址/数据分时使用同一组线路的例子。

展开答题要点

例如先在复用引脚上传地址并锁存,随后同一组引脚传数据。节省引脚和线路,但需要阶段区分、锁存与控制;不复用不等于地址数翻倍。

回到第 02 节完整讲解 →

习题 4.3 / 总线分类

按不同依据列举类型,避免把不同分类并列成互斥选项。

展开答题要点

按位置可谈片内、片间、系统和外部互连;按功能有地址、数据、控制;按传送形式分串行/并行;按时序有同步/异步等;按引脚使用有复用/不复用。一个总线可同时具有多种属性。

回到第 02 节完整讲解 →

习题 4.4 / 13 位地址、11 位数据

不分时复用,求寻址范围,并注明编址假设。

展开答题要点

必能确定 8192 个地址,0000H—1FFFH。按讲义一个地址选一个 11 位字的模型,组织为 8K×11b,共 90112b=11264B=11KiB;若另规定按字节编址,则容量为 8KiB。不能省略编址单位。

回到第 03 节完整讲解 →

习题 4.5 / 总线层次结构

说明为何把不同性能的模块分层,并通过什么连接。

展开答题要点

让 CPU、主存、高速 I/O、低速外设使用适合其性能与时序的通路,以桥接器连接层次。降低高速设备被慢设备拖累的程度,但共享上游链路仍可能成为瓶颈。

回到第 04 节完整讲解 →

习题 4.6 / 两类双总线

比较本章面向 CPU 与面向存储器的结构。

展开答题要点

面向 CPU 分开 CPU—主存与 CPU—I/O;面向存储器在公共连接外强化 CPU—主存高速通路。两者改进访问组织,线路与控制也更复杂;本章两张结构图都不能仅凭多一条通路就推断已具备独立 DMA。

回到第 04 节完整讲解 →

习题 4.7 / 总线性能指标

说明频率以外还应看什么,并给一个带宽计算。

展开答题要点

宽度、每周期次数、访问延迟、仲裁/地址/等待开销、突发、流水线与利用率等。理想每拍 32 位、100MHz 为 400MB/s;若传同样 4B 需四拍,则为 100MB/s。

回到第 03 节完整讲解 →

习题 4.8 / 何时需要仲裁

说明争用情形和仲裁要选的对象。

展开答题要点

多个可发起事务的主机同时请求共享资源时,需要确定谁先获得使用权。例如 CPU 与 DMA 竞争同一总线。仲裁选主机,地址译码选从机。

回到第 05 节完整讲解 →

习题 4.9 / 仲裁方式与特点

比较集中式与分布式,并说明集中式的常见结构。

展开答题要点

集中式含链式、并行、混合;链式线少但固定顺序和逐级延迟明显,并行更快且策略灵活但线多。分布式由主机参与比较,无唯一中心,仍需共同规则。还应分析公平性、饥饿与故障影响。

回到第 05 节完整讲解 →

习题 4.10 / 线与电路

说明器件输出形式、共同连接和上拉电阻的作用。

展开答题要点

用开漏/开集电极输出共享线路并加上拉:器件只能主动拉低或释放,任一拉低则总线为 0,全部释放才由上拉得到 1。不能把普通推挽输出直接并联来实现。正文有电路与四种组合。

回到第 06 节完整讲解 →

习题 4.11 / 总线周期阶段

按一次典型操作写出阶段。

展开答题要点

请求与仲裁、寻址、数据传输、结束与释放。单主机可省去多主机竞争,但并不省去访问与结束的必要控制。具体协议可能重叠阶段。

回到第 07 节完整讲解 →

习题 4.12 / 同步和异步的适用条件

说明共同节拍的要求,以及何时采用握手。

展开答题要点

同步收发应满足规定时钟下的传播、建立与保持时间,控制清楚但受速度差异和时钟条件限制。速度差大或不宜固定统一节拍时,可用异步握手按就绪情况推进,代价是联络开销。

回到第 07 节完整讲解 →

习题 4.13 / 三种异步握手

比较不互锁、半互锁、全互锁怎样撤销请求和应答。

展开答题要点

不互锁双方按延时自行撤销;半互锁请求方确认应答后撤销,应答方按延时撤销;全互锁依次请求↑、应答↑、请求↓、应答↓,每次撤销都获得相应确认。

回到第 07 节完整讲解 →

习题 4.14 / 半同步总线

说明共同节拍与等待如何配合。

展开答题要点

有统一时钟,同时以 READY/WAIT 等表示从机尚未就绪,插入完整等待周期。适合总体同步但部分器件或访问偶尔较慢的情况;不能把等待期间地址控制随意推进。

回到第 07 节完整讲解 →

习题 4.15 / 周期分裂

说明等待时为何释放共享资源。

展开答题要点

先提交请求,在较长响应等待期间让出资源,之后按协议完成后续操作,减少总线空占。它与“不同传输的阶段重叠”的流水线是不同概念;具体完成机制依协议。

回到第 07 节完整讲解 →

习题 4.16 / AMBA2 三种总线

说出 AHB、ASB、APB 的定位。

展开答题要点

AHB 为 CPU、主存、DMA 等高性能互连;ASB 是较早的高性能系统总线,也支持多主机、流水线和突发;APB 面向简单低带宽外设,控制和功耗取向更轻。

回到第 08 节完整讲解 →

习题 4.17 / AHB 与仲裁器

概括 AHB 机制并说明仲裁器的职责。

展开答题要点

经典 AHB 支持地址/数据阶段流水、突发、多主机和相应等待、响应机制;仲裁器确定哪个主机取得访问资格。译码器才按地址选择从机,不能混写。

回到第 09 节完整讲解 →

习题 4.18 / APB 桥

说明上层访问怎样到达 APB 外设。

展开答题要点

桥接收上层地址、方向、写数据等,转换为 APB SETUP/ACCESS 操作,并返回读数据及完成/错误状态。对上层是被访问目标,对下层组织外设访问;不同版本支持信号不同。

回到第 15 节完整讲解 →

习题 4.19 / AMBA 的机械、电气范围

解释为什么规范未固定外部插头、电压等参数。

展开答题要点

AMBA 主要规定片内逻辑接口与传输规则;不需要统一外部连接器,电压、驱动和精确延迟由工艺及实现决定。这不等于片内电气问题可以忽略。

回到第 08 节完整讲解 →

习题 4.20 / AHB 为何划分两个阶段

分别说明地址阶段和数据阶段的任务。

展开答题要点

地址阶段给位置、方向、大小等,数据阶段交换对应数据。先给出地址便于从机准备,并允许下一次地址与本次数据重叠,提高连续传输效率。

回到第 10 节完整讲解 →

习题 4.21 / AHB 流水线

以 A、B 两次访问说明同拍地址与数据的归属。

展开答题要点

C1 给 A 地址;C2 给 B 地址并传 A 数据;C3 可给下一地址并传 B 数据。无等待连续 n 拍数据通常需 n+1 个区间(忽略仲裁等开销)。数据与同拍显示的地址一般不是同次访问。

回到第 10 节完整讲解 →

习题 4.22 / SPLIT 的优点

说明挂起之后谁重新完成原访问。

展开答题要点

慢从机返回 SPLIT,仲裁器暂时屏蔽该主机,其他主机继续;从机准备好以 HSPLIT 通知,原主机重新获权并重试。优点是减少等待空占;不是从机变成主机直接送回结果。

回到第 14 节完整讲解 →

习题 4.23 / HREADY 的作用

解释为 0 时地址、数据阶段怎样变化。

展开答题要点

当前数据阶段未完成,下一地址阶段也停住;对应写数据需保持,不能每拍继续换地址。读数据需在实际完成采样时有效,未必整个等待期间都有效。HREADY=1 的相应上升沿才完成并推进。

回到第 10 节完整讲解 →

习题 4.24 / 突发传输

说明“拍数”和“每拍大小”分别由什么给出。

展开答题要点

一组相关传输按突发类型组织,首拍 NONSEQ、后续有效拍 SEQ;HBURST 定类型/拍数,HSIZE 定每拍字节数。例如 WRAP8、每拍 4B 共 32B,不是每拍 8B。

回到第 11 节完整讲解 →

习题 4.25 / AHB 突发类型

列出 SINGLE、INCR 和固定拍数递增/回绕。

展开答题要点

SINGLE、未固定拍数 INCR,以及 INCR4/8/16、WRAP4/8/16。递增按每拍字节数增加;回绕在 N×每拍字节数的对齐窗口内循环。经典 AHB 另有限制:突发不能跨 1KiB 地址边界。

回到第 11 节完整讲解 →

习题 4.26 / INCR4 读时序

自行明确合法起始地址与大小,画地址、读数据、HTRANS、HREADY。

展开答题要点

例取 38H、每拍 4B:地址 38、3C、40、44H;HWRITE=0、HSIZE=010、HBURST=011;HTRANS 为 NONSEQ 后三个 SEQ。HRDATA 的 D0—D3 比各自地址晚一阶段;无等待需 5 个区间。完整图可切换等待。

回到第 13 节完整讲解 →

习题 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 个区间。

回到第 13 节完整讲解 →

习题 4.28 / PCI 特点

用本章传统并行 PCI 说明共享、主从和桥。

展开答题要点

PCI 是传统并行共享总线,多个主设备需仲裁,支持相应突发与主设备访问,桥连接不同层次。32 位、33MHz 的理想数据能力约 132MB/s,实际要扣协议与等待开销。

回到第 16 节完整讲解 →

习题 4.29 / PCIe ×32

解释 ×32 以及与导线数的关系。

展开答题要点

表示一条链路含 32 条 lane。每 lane 有发送、接收各一对差分线,共四根高速信号线,故按此口径 ×32 为 128 根;不含供电、地和辅助信号,不是 32 根线。

回到第 16 节完整讲解 →

习题 4.30 / PCIe 5.0 ×16 的 63GB/s

写出速率、编码、lane 数与字节换算。

展开答题要点

32×10⁹×(128/130)×16÷8 ≈ 63.015GB/s,约 63.0GB/s。是单方向、已扣线路编码但未扣全部事务与控制开销;双向理论相加才再乘 2。

回到第 16 节完整讲解 →

习题 4.31 / lane 与 wire

分别解释通道和物理信号导线。

展开答题要点

一个 lane 是可同时双向工作的基本链路通道:一对 TX 差分线和一对 RX 差分线,共四根高速信号导线。多 lane 组成更宽 link;wire 指实际导体,差分对用两根。

回到第 16 节完整讲解 →

习题 4.32 / 串行传输特点

从位序、线路与距离说明,避免直接判断快慢。

展开答题要点

数据按约定位序依次通过相应串行通道,通常减少数据线路,适于灵活连接;实际速率取决于编码、时钟和电气实现。串行不天然比并行慢,也不自动等于 UART。

回到第 26 节完整讲解 →

习题 4.33 / 全双工与半双工

说明能否同时双向。

展开答题要点

全双工可同时双向传送;半双工可双向但同一时刻轮流。单工只有一个方向。不能单凭电缆总根数推断通信组织。

回到第 26 节完整讲解 →

习题 4.34 / 时钟与波特率

以普通 UART 和 K 倍采样说明。

展开答题要点

二进制 UART 通常每符号一位,波特率等于线路比特率;发送位周期约 1/R。接收内部若 K 倍过采样,其时钟为 K×R,例如 16×9600=153600Hz。内部时钟不等于电平跳变次数。

回到第 27 节完整讲解 →

习题 4.35 / 起始与停止位

说明重新对齐、结束检测和中间采样。

展开答题要点

空闲为 1,起始位 0 的下降沿提示新帧,确认后按约定位周期在数据位中间采样;停止位 1 标示帧尾与规定空闲电平。8N1 一帧为 10 位,不能只按 8 位算有效字节速率。

回到第 27 节完整讲解 →

习题 4.36 / RS-232C 规程特性

按设备联络和传输先后回答,不只列电压。

展开答题要点

设备就绪,按连接约定请求/允许发送,按格式与速率交换数据,完成后撤销相应状态。RTS/CTS、DTR/DSR 等的使用依设备;电压是电气特性,不能代替规程说明。

回到第 29 节完整讲解 →

习题 4.37 / I/O 接口功能

说明 CPU 与不同外设之间需要哪些适配。

展开答题要点

速度匹配、缓冲、并串与格式/编码转换、电平转换、必要的模数/数模处理,以及状态、控制、联络。并非每个接口都具备所有功能,按外设需要配置。

回到第 18 节完整讲解 →

习题 4.38 / I/O 端口

区分接口寄存器与外部连接器。

展开答题要点

这里通常指 CPU 可按地址访问的接口寄存器,包括数据、状态、控制端口。高位选接口、低位选内部寄存器;具体可读写属性按器件,状态可能有写一清零等语义。

回到第 18 节完整讲解 →

习题 4.39 / 端口编址

比较 MMIO 与独立 I/O 地址空间。

展开答题要点

MMIO 将寄存器映射到内存地址空间,使用访存类指令;独立编址用专门 I/O 空间及相应指令/控制区分。某体系可同时支持两者,MMIO 也不表示寄存器位于 DRAM 中。

回到第 18 节完整讲解 →

习题 4.40 / 输入缓冲与输出锁存

说明隔离和保持各解决什么。

展开答题要点

输入三态缓冲只在读选中时驱动数据总线,平时隔离;输出锁存保存短暂 CPU 写入供外设持续使用。瞬时输入或握手输入也可能先锁存,不能背成输入绝不保存。

回到第 18 节完整讲解 →

习题 4.41 / 四种传送方式

按等待方法和搬运执行者比较。

展开答题要点

无条件假定可访问;查询由 CPU 反复看状态;中断让外设通知、CPU 服务;DMA 由控制器逐项搬运,CPU 配置和处理结果。中断与 DMA 可组合,通信接口种类另论。

回到第 19 节完整讲解 →

习题 4.42 / 中断流程

从事件到返回按顺序说明。

展开答题要点

事件/数据保存→请求→允许与判优→CPU 在合法时机响应→保存返回状态→定位 ISR→保护必要现场→处理并确认/清除原因→恢复→中断返回。硬件与软件各自保存哪些状态依体系结构。

回到第 20 节完整讲解 →

习题 4.43 / 图4.54 编码比较电路

说明允许过滤、优先编码、当前服务比较与待处理请求。

展开答题要点

Qᵢ=请求ᵢ∧允许ᵢ;编码器只给出有效请求中最高的 A。按原图编码约定,若 A>B 或当前未处理中断,才允许新的 IRQ;其他请求仍需保持等待。例如 2、5、7 请求且当前 B=4,只选 7。

回到第 21 节完整讲解 →

习题 4.44 / 四级菊花链

写选中与后传逻辑,并指出最高级。

展开答题要点

P₀=INTA;每级 Gᵢ=Pᵢ₋₁∧Rᵢ,Pᵢ=Pᵢ₋₁∧¬Rᵢ。前级有请求就截获,不再后传,因此仅首个有效请求受理。最高为最靠 CPU 入口的第 1 级;正文给出可切换四级图。

回到第 21 节完整讲解 →

习题 4.45 / 中断向量表

说明中断号怎样定位服务入口信息。

展开答题要点

向量表集中保存各中断/异常编号对应的入口相关信息。固定大小表项时可用表基址+编号×表项大小定位,但表项格式、是否直接入口等依体系结构,不能把 8086 格式套到所有 CPU。

回到第 20 节完整讲解 →

习题 4.46 / DMA 块传送

说明适合场景与共享资源代价。

展开答题要点

数据连续准备好、块较大、希望高吞吐时可连续搬完整块,减少反复仲裁开销;代价是总线连续占用较久,CPU 或其他主机可能等待。小数据还应考虑配置成本。

回到第 22 节完整讲解 →

习题 4.47 / 中断优先级管理

比较软件查询、编码器、菊花链与可编程控制器。

展开答题要点

软件查询硬件简单、顺序灵活但有查询时间;编码器判优快、需要硬件;链式线少但固定顺序和逐级延迟;可编程控制器可屏蔽、设策略及管理嵌套,控制更复杂。固定优先级还要考虑饥饿。

回到第 21 节完整讲解 →

习题 4.48 / 随机事件、CPU 效率与高速搬运

按本章典型模型回答,并注明边界。

展开答题要点

随机事件用中断方便;避免持续忙等可提高 CPU 利用率;大块高速搬运通常 DMA 更合适,也减少逐字 CPU 中转。没有一种方法对所有大小和场景都绝对最快。

回到第 19 节完整讲解 →

习题 4.49 / 并行与串行接口

说明多位同时传与按位序传的差别。

展开答题要点

并行用多条数据线同时传多位,直观但线路/时序协调较多;串行按位序传,线少而需移位与时序组织。具体快慢、距离和抗干扰依实现。

回到第 23 节完整讲解 →

习题 4.50 / 线性与矩阵键盘

比较按键数量与口线数。

展开答题要点

线性按键通常一键一输入;M×N 矩阵用 M+N 条行列线组织 MN 个键。4×4 可用 8 条行列线组织 16 键,但需扫描、消抖,多键还可能需处理幽灵键。

回到第 23 节完整讲解 →

习题 4.51 / 矩阵键盘扫描

按本章“列输出、行输入”说明定位步骤。

展开答题要点

行上拉;逐列拉低;读到某行低,则该行与当前列交点按下。C1 输出 1101,若 R2 按下则行读 1011;列优先编号为 1×4+2=6。名称叫行扫或列扫时均应说明实际方向。

回到第 23 节完整讲解 →

习题 4.52 / 数码管静态显示

说明段码保持与资源开销。

展开答题要点

每位有独立保持/驱动关系,更新前持续显示,不需轮流扫描。直连八段模型 N 位约 8N 条段线;锁存器或专用驱动可改变 CPU 引脚需求。段码取决于共阴/共阳和位连接。

回到第 24 节完整讲解 →

习题 4.53 / 数码管动态显示

区分段选和位选,说明刷新取舍。

展开答题要点

对应段线共用、各位另有位选,依次送段码并只选相应位,快速重复形成多位显示。直连模型约 8+N 条控制线;需持续刷新,注意占空比、闪烁、串影及实际限流驱动。

回到第 24 节完整讲解 →

习题 4.54 / 异步串行双方约定

列出会影响帧解释的条件。

展开答题要点

速率、数据位数、校验、停止位、位序及相应线路电平/流控。双方不共享一根时钟并不等于无时间约束;每帧靠起始位对齐。8N1、7E1 等是具体格式。

回到第 27 节完整讲解 →

习题 4.55 / 为何需要 Modem

针对讲义带通信道说明调制和解调。

展开答题要点

电话线等带通信道不适合直接照搬数字基带波形,需要调制成适合传输的信号,再解调恢复。并非所有长距离串行都必须使用电话 Modem,也可用相应差分、光纤等方案。

回到第 29 节完整讲解 →

习题 4.56 / 独立时钟怎样仍能正确接收

说明起始对齐、过采样、中间采样及误差累积。

展开答题要点

先检测并确认起始低电平,建立本帧时序,再按约定位周期在各位中间采样;较高内部采样时钟改善定位。一帧内频差会累积,下一帧重新对齐;过大偏差仍会错误。

回到第 27 节完整讲解 →

习题 4.57 / 确认起始位

说明怎样区别下降沿与可靠的起始低电平。

展开答题要点

空闲为高,下降沿仅是候选起点;等待接近半位再确认仍低,或按实现做多次采样,随后采各数据位。具体滤波和确认规则依 UART,不能只见任意毛刺就开始收一帧。

回到第 27 节完整讲解 →

习题 4.58 / 为什么取位中间

从跳变、传播与时钟误差说明。

展开答题要点

位中间距离两侧边界较远,较能容忍边沿延迟、检测误差和一定频差;在边界采样更容易碰到变化。但中间采样不能消除无限误差,帧末仍可能漂到邻位。

回到第 27 节完整讲解 →

习题 4.59 / 提高串行距离

列出电气、线缆、速率和拓扑方面的办法。

展开答题要点

选合适差分接口、降低速率、使用合适双绞/屏蔽与布线、按需要终端匹配、限制分支负载,必要时中继或换介质。最大速率与最大距离不能同时取表中的两个独立上限。

回到第 29 节完整讲解 →

习题 4.60 / I²C 怎样选择设备

对照 SPI 的独立 CS,说明总线地址机制。

展开答题要点

主机发送设备地址,匹配的从机才响应;典型为 7 位地址加 R/W。50H 为设备地址,A0H/A1H 为线上含方向的地址字节;1234H 是选中设备内部单元地址。

回到第 30 节完整讲解 →

习题 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 完整事务。

回到第 31 节完整讲解 →

画图与答题前的检查

最容易串错的六组关系

  1. 谁发起与谁发数据:主从按事务发起关系判断;内存读出数据仍可为从机。
  2. 当前地址与当前数据:AHB 同拍两阶段可能属于不同访问;等待时不能只改 HREADY 而继续推进地址。
  3. 拍数与大小:HBURST、HSIZE、HTRANS 各有职责,WRAP 回到对齐窗口起点,非任意初始位置。
  4. 中断与 DMA:中断解决通知与响应,DMA 减少逐项 CPU 搬运;二者常常配合。
  5. 帧格式与线路电气:UART 的逻辑波形不能直接当 RS-232 电压,RS-485 也不是完整的报文与仲裁协议。
  6. 设备地址与内部地址:I²C 先选设备,再按器件命令选择单元;读末字节的 NACK 由接收数据的主机发。

正文已说明讲义中需要限定或纠正的地方,包括 ASB 支持突发、仲裁与译码分工、经典 AHB SPLIT 的重试、APB 信号版本、DMA 的传统模型边界、SPI 位顺序和 CS 条件。保留原因与适用范围,比孤立背一句改正更可靠。

能独立画出两道 AHB 图、分析两种中断判优、解释 DMA 全过程、读懂 UART/I²C/SPI 基本传输,并算对地址、带宽和有效速率,就形成了本章的主线。历史型号、整机框图和标准演进也都要知道各自说明什么。

整理依据与核对资料

依据用户提供的《计算机原理与嵌入式系统讲义》第四章《总线和接口》及全部 61 道习题重新讲解。保留已有 33 个完整讲解单元,补充原书定位、逐题答题卡、交互 SVG 与折叠自测;本文件不包含原讲义扫描页。

沿用前几章及项目教材整理版的排版。经典 AHB 的仲裁、SPLIT 等按原章 AMBA2 背景理解;APB 图明确区分版本;PCIe 计算范围按讲义 1.0—5.0;历史芯片和版本用于理解原理,不作当前产品推荐。

核对链接放在相关段落,采用 Arm AMBA/AHB/APB/AXI、NXP I²C、PCI-SIG、ST 和 TI 等原始技术资料。标准名相同也要核对版本、实现和器件条件。容量、频率、线路速率与净吞吐的单位按正文说明。

16 幅 SVG 与全部公式保存在本文件中,正文离线可读。打印时自动显示答案,采用图解默认示例;需要打印部分内容时,可在浏览器打印对话框中选择页面范围。