APB(Advanced Peripheral Bus)是AMBA总线系列中专为连接低带宽、低功耗外设(如UART、I2C、GPIO)设计的简洁、低成本接口协议 -。它的核心价值在于通过简单的接口定义(通常约9个主要信号)和严格的通信时序,为挂载在AHB/AXI高速系统总线上的低速设备提供一个低功耗的接入通道-。你之前的理解没错,APB的结构确实很清晰易懂。
📌 核心信号与分类
APB接口的信号可清晰划分为以下几类-3:
| 分类 | 信号名 | 方向 | 功能描述 |
|---|---|---|---|
| 系统信号 | PCLK |
输入 | 总线时钟,所有信号在上升沿采样-2。 |
PRESETn |
输入 | 低电平有效异步复位-36。 | |
| 地址与命令 | PADDR |
主机输出 | 32位地址总线-28。 |
PWRITE |
主机输出 | 高电平为写传输,低电平为读传输-36。 | |
PSELx |
主机输出 | 从设备选择信号,高电平有效。每个从机对应一条独立的PSELx线-36。 |
|
PENABLE |
主机输出 | 使能信号,标志着访问(ACCESS) 阶段的到来-3。 | |
| 数据总线 | PWDATA |
主机输出 | 写数据总线,数据在PENABLE为高时有效-。 |
PRDATA |
从机输出 | 读数据总线,仅在读传输中被从机驱动-36。 | |
| 扩展/流控 | PREADY |
从机输入 | 从机用于扩展传输 ,低电平时表示从机未准备好,总线会在当前状态等待-28。 |
PSLVERR |
从机输入 | 传输错误 指示信号,与PREADY一同置高时表示当前传输失败-36。 |
🚦 APB状态机:传输的生命周期
APB协议的核心是一个包含IDLE、SETUP、ACCESS 三个状态的有限状态机(FSM),精准定义了传输的三步曲--28。
-
🟡 IDLE(空闲状态) :APB总线的默认状态,此时
PSELx=0,PENABLE=0,总线上无活动传输--28。 -
🟠 SETUP(建立状态) :当一次传输开始时,状态机进入此阶段。此状态只持续一个时钟周期 --8。
-
行为 :主机将有效的
PADDR、PWRITE和PWDATA(写操作)置于总线上。 -
主机将相应的从选择线
PSELx拉高。 -
此时,
PENABLE信号保持为低 -2。
-
-
🟢 ACCESS(访问状态) :
PENABLE信号在此阶段被拉高 ,标志着数据传输的发生--2。
⏱️ 读写时序详解
理解了状态机,时序就变得清晰了。下面将用文字描述典型时序,帮助你建立直观理解。
写传输 (Write Transfer)
-
无等待写传输 :最基础的传输模式,总耗时2个时钟周期-16。
-
有等待写传输:适用于处理速度较慢的从机。
-
当传输进入
ACCESS阶段后,主机采样PREADY信号。 -
若
PREADY为低,则总线保持在ACCESS状态 ,延长传输周期-1。 -
直到从机将
PREADY拉高,传输才宣告完成,随后总线状态转移。
-
读传输 (Read Transfer)
📜 APB协议版本演进
了解不同版本之间的差异有助于你阅读相关的手册或代码:
| 版本 | 发布年份 | 核心新特性与信号 | 说明 |
|---|---|---|---|
| APB2 | 1998 | 初版定义 | 定义了最基础的信号集-36。 |
| APB3 | 2003 | PREADY, PSLVERR |
增加了等待状态和错误报告机制-36。这是目前最常用的版本。 |
| APB4 | 2010 | PPROT, PSTRB |
增加了保护属性(如安全/非安全)和写选通信号-36。 |
| APB5 | 2017 | PWAKEUP, PUSER, PPARITY |
引入了低功耗唤醒、用户自定义信号和奇偶校验等高级特性--36。 |
💡 设计考量与常见陷阱
-
地址对齐 :协议本身未强制地址对齐。例如,若进行32位传输但地址
PADDR非4字节对齐,必须由具体设计来处理 ,通常建议由主机保证对齐,或直接报错-36。 -
PSLVERR与PREADY:PSLVERR信号仅在PSEL、PENABLE和PREADY均为高时的时钟周期有效 -36。从机应在PREADY拉高的同时,根据内部情况决定是否拉高PSLVERR以报告错误。 -
PSTRB与PPROT兼容性 :这些是APB4新增的可选信号。设计时需特别注意主从设备对这些信号支持的兼容性,否则可能导致意外行为-37。 -
带宽利用率 :APB是一种非流水线协议,每次完整传输都需要至少2个时钟周期 ,因此其理论最大带宽利用率仅为50% -17。这并不影响其适用场景,因为它连接的正是UART这类本身就很慢的外设。