APB 总线时序与从机设计:PSEL/PENABLE/PREADY 两拍访问与 PSLVERR
更新时间:2026-09-19。低速外设侧的标准配置总线,常经 AHB/APB 桥接 或 AXI-to-APB 桥接到处理器。寄存器表与地址解码概念见入门层 寄存器表与地址解码。
本文要回答的问题
- APB 为什么固定至少两拍完成一次访问?Setup/Access 两个相位各做什么?
- PSEL、PENABLE、PREADY、PSLVERR 分别什么作用?
- 慢外设怎么拉长访问?APB3/APB4/APB5 各加了什么信号?
- 什么时候该用 APB 而不是 AXI-Lite?
一、信号集与定位
APB(Advanced Peripheral Bus)为极低带宽、低复杂度的配置寄存器设计,只有一个主机(桥),不支持流水线、burst、多主。核心信号:
| 信号 | 方向(相对从机) | 含义 |
|---|---|---|
| PCLK / PRESETn | 入 | 时钟 / 同步复位 |
| PADDR | 入 | 字节地址 |
| PSELx | 入 | 该从机被选中(decoder 片选) |
| PENABLE | 入 | Access 相位使能(第二拍拉高) |
| PWRITE | 入 | 1=写 0=读 |
| PWDATA / PSTRB | 入 | 写数据 / 字节使能(APB4) |
| PRDATA | 出 | 读数据 |
| PREADY | 出 | 从机就绪,可插入等待态 |
| PSLVERR | 出 | 从机错误(APB3 起) |
| PPROT | 入 | 安全/特权属性(APB5) |
二、两拍状态机:Setup → Access
一次无等待访问固定两个相位:
┌── Setup ──┬── Access ──┐
拍: T1 T2
PSEL ■───────────■
PENABLE ────────────■ (仅 Access 相位高)
PADDR/PWDATA/PWRITE 在 Setup 起稳定并保持
PREADY ■(=1,T2 末拍完成)
采样点:从机在 Access 相位、PREADY=1 的上升沿完成写入;读则在该拍驱动 PRDATA- Setup 相位(PSEL=1,PENABLE=0):地址、PWRITE、PWDATA 有效,从机被选中。
- Access 相位(PSEL=1,PENABLE=1):若 PREADY=1,在该拍上升沿完成传输,随后总线可回到 idle 或直接进入下一笔 Setup。
- 空闲时 PSEL=0。APB 规定至少两拍,没有 AXI 那样的流水线重叠,因此最高吞吐是每 2 拍一次访问——这是它极简的代价。
三、PREADY:慢外设的等待态
若从机在 Access 相位还没准备好(访问的寄存器需要多拍,如跨时钟取数),把 PREADY 拉低,总线停留在 Access 相位重复若干拍,地址/控制保持不变,直到 PREADY=1 才完成。PREADY 在未选中时应被桥默认拉高(避免悬空拖慢总线)。
注意 PENABLE 在等待期间保持高,不要把 PREADY 当独立时钟,从机只在 PSEL & PENABLE & PREADY 沿动作。
四、PSLVERR 与读/写时序
- PSLVERR(APB3+):在完成拍(Access + PREADY)与 PRDATA/PWDATA 同相位有效,标 DECERR/访问错误;不支持时绑 0。
- 写:PWRITE=1,从机在完成沿把 PWDATA 按 PSTRB 写入 PADDR 选中的寄存器。
- 读:PWRITE=0,从机在 Access 相位把数据放到 PRDATA,主机在完成沿采样;读数据不需要等到 PREADY 之后,但有等待态时要保持稳定。
- APB4 加 PSTRB 支持字节写;APB5 加 PPROT/AWAKEUP 等,支持 TrustZone 与低功耗。
五、地址解码与挂栏
桥/decoder 对 PADDR 高位解码产出一个 PSELx one-hot;未命中区间访问默认从机(default slave)回错误。每个外设一个 APB 从机接口,内部寄存器写法与 AXI4-Lite 从机 几乎一致,只是握手换成两拍 + PREADY。
六、APB 还是 AXI-Lite?
| APB | AXI4-Lite | |
|---|---|---|
| 传输 | 至少 2 拍、无流水 | 单拍可完成、五通道可并行 |
| 主机数 | 单主(桥) | 多主经互连 |
| 复杂度/面积 | 极低 | 中 |
| 典型 | UART/SPI/I2C/时钟/引脚复用配置 | DMA、CPU 直连的较忙寄存器 |
大量慢而散的配置寄存器用 APB,经一座 AXI/AHB-to-APB 桥统一挂到骨干;软件可见的仍是一片内存映射地址。选型见 AMBA 总线选型。
七、常见的坑
- 在 Setup 相位就写寄存器:应在 Access+PREADY 完成沿动作,提前写会在等待态重复写入。
- PREADY 悬空/默认低:未选中或始终未准备好,桥被永久卡住;不用等待态时静态绑 1。
- PSLVERR 相位错:只在完成拍有效,其他时间低;主机只在完成拍采样。
- 等待期间改地址/数据:插入等待态时 PADDR/PWDATA 必须保持,不能提前变。
- 把 APB 当高带宽口:两拍一笔、无 burst,搬数据务必换 AXI/Stream。
相关与延伸
桥接见 AHB/APB 与桥接;寄存器表见 寄存器表与地址解码;高带宽配置口对比见 AXI4-Lite 从机;选型见 AMBA 总线选型。
总结
APB 用 PSEL 选中、PENABLE 标记 Access 的固定 Setup→Access 两拍完成一次寄存器访问,慢外设拉低 PREADY 插等待态、PSLVERR 在完成拍报错;它单主、无流水无 burst、面积极低,专挂 UART/SPI/I2C 等低速配置寄存器,经一座桥并到 AXI/AHB 骨干。