news 2026/8/24 8:02:56

AMBA总线协议学习笔记——APB

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AMBA总线协议学习笔记——APB

AMBA总线协议学习笔记——APB

  • 背景
  • 常用接口信号介绍
  • APB从机设计
  • APB主机设计
  • 参考

背景

APB 是 AMBA 家族中的低功耗、低成本外设总线协议,非流水线、同步设计,每次传输至少需要 2 个时钟周期。

APB2协议主要定义了基本的总线接口,没有握手协议,只有基本的读写传输。

APB3增加了PREADY,PSLVERR信号。PREADY用于表示APB传输的完成,可以实现slave的等待功能。PSLVERR用以指示slave的错误状态。

APB4增加了PPROT,PSTRB。PPROT信号实现安全和非安全的数据传输,可实现系统在不同安全属性的控制传输,保证系统的安全性。PSTRB信号用于实现部分数据的写操作,可以指示一笔传输中的一部分数据有效。

APB5增加了WAKEUP,USER,PAIRTY等信号。wake-up用于实现低功耗的控制,通过控制时钟只在传输的时候开启,减少动态功耗的消耗。user则增加了基本信号之后的用户自定义信号。parity主要针对安全系统设计中的保护功能。(APB5只是提一下,还没用过,不是很懂)

常用接口信号介绍

  1. PCLK:时钟,所有APB信号都是上升沿触发
  2. PRESETn:复位,低电平有效,通常直接与系统总线的复位信号相连(reset)
  3. PADDR:地址(读写共用),位宽一般设为32 bit或64 bit
  4. PSELx:有多个slave的情况下对其进行选择
  5. PENABLE:指示 APB 传输的第二个和后续周期。PENABLE在写操作周期结束后,会同PSEL一同拉低,除非又需要立即跟随下一次传输。
  6. PWRITE:高电平表示写,低电平表示读
  7. PWDATA:PWRITE为1时有效,表示写数据,可以是8,16 或32 bits wide.
  8. PRDATA:PWRITE为0时有效,表示读数据,可以是8,16 或32 bits wide.
    为了省电,地址信号和写信号、读信号在一次传输过后不会改变,直到下一次传输发生。
    PWDATA将在PENABLE的下个周期被驱动,PRDATA将在PENABLE的下个周期被采样。
  9. APB3中增加了PREADY,使读写操作也由原来的基础传输多了有等待的传输。当PSEL和PENABLE都为高的时候,slave 把 PREADY拉低了,说明slave没有准备好,需要等待一段时间。
  10. APB3中还增加了PSLVERR,实现slave反馈给master error response的功能,使读写操作也由原来的基础传输多了有错误标志的传输。
    读取和写入事务都可能发生错误,使用pslverr来指示APB传输上的错误情况。当psel,penable和pready均为高电平时,仅在APB传输的最后一个周期内才认为pslverr有效,其他时间不考虑pslverr。
    若pslverr信号置高则表示此次传输失败,但并不表示此次写寄存器失败,寄存器的值还是可能跟新。如果是多数据,也并不意味着 rdata 全是0
  11. PPROT:通过控制总线上的访问权限来提供安全保护。共3bit,分别表示:

    简言之,0位指示是普通还是特权,1位指示是安全还是非安全,2指示是数据还是指令。

PS
当任何一个PSEL, PENABLE或者PREADY为低时,可以将PSLVERR拉低,这是推荐,并不是强制要求。APB外围设备不要求必须支持PSLVERR引脚,当不使用该引脚时,应被置低。
13.PSTRB,写字节选通信号,可以使写数据总线上的数据片段化,即指示数据总线上那几个字节数据有效,使写数据总线上的稀疏数据传输成为可能。
由于数据位最大为32bit,即4个字节。因此PSTRB位宽为4位,每一位对应一个字节,设置为1时,指示该字节数据有效。需注意,在读操作中,PSTRB所有位必须设置为低电平
当置为高电平时,写选通脉冲指示写数据总线的相应字节通道包含有效信息。
写数据总线的每八位有一个写选通脉冲,因此 PSTRB [n] 对应于PWDATA [(8n + 7) : ( 8n)]

APB从机设计

APB从机主要需要做以下几件事:

  1. 看到 PSEL & PENABLE & PWRITE → 采样 PWDATA/PSTRB,写寄存器
  2. 看到 PSEL & PENABLE & !PWRITE → 驱动 PRDATA
  3. 需要等待时 → 拉低 PREADY;否则拉高 PREADY
  4. (可选)pslverr置位

PSLVERR 在传输完成拍(PSEL & PENABLE & PREADY)置位,具体置位原因由外设根据自身功能定义,常见于非法地址、权限违规、不支持的操作等场景:

  • 非法地址访问,如访问了外设地址空间中不存在的寄存器地址、地址越界(超出外设实现的寄存器范围)
  • 非法操作类型,如对只读寄存器发起写操作、对不支持稀疏写(PSTRB)的外设发起了部分字节写
  • 访问权限违规,如Non-secure 访问(PPROT[1]=1)尝试访问 Secure 寄存器、Normal 模式(PPROT[0]=0)尝试访问 Privileged 寄存器
  • 外设状态不允许,如对配置寄存器写入非法值(如保留字段)、外设处于低功耗/时钟关闭状态,无法响应

注意
PSLVERR 置位 ≠ 操作未发生
协议原文“Transactions that receive an error might or might not have changed the state of the peripheral. This is peripheral-specific and either state is acceptable.”
“A Requester which receives an error response to a read transfer might still use the data. A Completer cannot rely on the error response to prevent the reading of a value on PRDATA.”

  • 写 + PSLVERR:寄存器可能已经被更新,规范允许这种实现。
    比如CPU发起一个写操作,外设返回了一个SLVERR。这个写操作可能根本没生效(寄存器没变),也可能生效了一半(部分位写了,部分没写)。
    对设计的影响:这意味着软件(驱动)不能因为收到了错误,就认为“肯定没写进去”,也不能认为“肯定写进去了”。软件的正确处理方式是重新读取该寄存器来确认,而不是凭错误码做状态缓存。
  • 读 + PSLVERR:PRDATA 上的数据可能无效,但master可能仍然使用它,slave不能依赖 PSLVERR 来"阻止"读操作
    对设计的影响:Slave硬件不能把“返回错误”当作“把PRDATA清零”的理由。即:即使slave端打算返回读错误,也必须把PRDATA驱动到一个确定的值(可以是0,也可以是当前寄存器的值),不能出现高阻态(X)或未定义的毛刺。否则,如果master直接使用了prdata的值,且该值为x或z态,可能会导致芯片挂死。

APB主机设计

  • 设计流程概览:需求分析 → 接口定义 →状态机设计→ 信号生成 → 握手控制 → 错误处理 → 验证
  • 状态机设计——核心实现
    APB的状态机是标准的Mealy型FSM:

    状态机按以下状态运行:
  1. IDLE(空闲) — APB 接口的默认状态。
  2. SETUP(建立) — 当需要发起传输时,接口进入 SETUP 状态,此时相应的选择信号 PSELx 被置位。接口在 SETUP 状态仅保持一个时钟周期,并在下一个时钟上升沿无条件进入 ACCESS 状态。
  3. ACCESS(访问) — 使能信号 PENABLE 在 ACCESS 状态中被置位。以下信号在 SETUP 到 ACCESS 的跳变过程中、以及 ACCESS 状态内的各周期之间,必须保持不变:
    PADDR
    PPROT
    PWRITE
    PWDATA(仅写传输)
    PSTRB
    PAUSER
    PWUSER
    (即:所有控制信号已经在 SETUP 阶段给出,进入 ACCESS 时直接锁存不动。ACCESS 等待期间(PREADY=0),信号继续冻结,直到 PREADY=1 的那一拍)
  4. ACCESS 状态的退出由 Completer 的 PREADY 信号控制:
    若 Completer 将 PREADY 保持为 LOW,接口保持在 ACCESS 状态。
    若 Completer 将 PREADY 驱动为 HIGH,则退出 ACCESS 状态:如果没有更多传输,总线返回 IDLE;如果还有后续传输,总线直接进入 SETUP 状态。 SETUP阶段必须维持至少1个时钟周期。

注意:

  • 规范明确:SETUP 状态只持续 1 个时钟周期,无条件进入 ACCESS
  • ACCESS阶段可以通过PREADY延长(PREADY = 0 → 保持 ACCESS 状态(所有信号不变),PREADY = 1 → 退出 ACCESS,传输完成)
  • 状态转换时PENABLE的建立时间要满足时序要求

参考

[1]: AMBA总线协议的总结 - APB

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 8:01:26

CANoe从入门到精通:汽车电子开发仿真、测试与诊断实战指南

1. 项目概述:为什么CANoe是汽车电子工程师的“瑞士军刀”?如果你在汽车电子、车载网络或者嵌入式系统领域工作,那么“CANoe”这个名字对你来说,绝对不是一个陌生的词汇。它远不止是一个软件,更像是一位经验丰富的“副驾…

作者头像 李华
网站建设 2026/8/24 8:01:14

IT团队知识管理实战:自建MinDoc文档系统解决信息孤岛

1. 项目概述:为什么IT团队需要一个专属的文档系统?干了十几年技术,带过团队也踩过无数坑,我越来越觉得,一个团队的技术文档和知识管理状态,直接决定了这个团队的战斗力和交付质量。回想一下,你们…

作者头像 李华
网站建设 2026/8/24 7:57:17

依托全栈式自研实力,哈工现代如何解读工业智造的“牛来”?

近期,“牛来”刷屏全网,成为现象级网络热词。一场全民热度的背后,值得工业智造行业深度思考:属于我们的“牛来”,究竟是什么模样? 流量热度转瞬即逝,而工业智造的突破从无偶然。作为国内领先的全…

作者头像 李华
网站建设 2026/8/24 7:57:14

单机Docker部署Milvus 2.0:从零到一快速搭建向量数据库

1. 从零到一:为什么选择单机Docker部署Milvus 2.0?如果你正在寻找一个高性能、可扩展的向量数据库来支撑你的AI应用,比如构建一个智能问答系统、一个以图搜图的引擎,或者一个复杂的推荐系统,那么Milvus这个名字你肯定不…

作者头像 李华
网站建设 2026/8/24 7:53:45

工业机器人智能决策:从软件架构到数字孪生的实战演进

工业机器人领域,最近似乎到了一个关键的“岔路口”。如果你关注过近期的行业动态,可能会发现一个有趣的现象:一方面,传统工业机器人(机械臂、AGV等)的应用已经深入到焊接、喷涂、搬运等各个车间&#xff0c…

作者头像 李华
网站建设 2026/8/24 7:52:47

代理式AI:突破大模型OOD泛化瓶颈的主动智能体架构

1. 项目概述:为什么“代理式AI”是解决大模型泛化难题的关键范式?最近和几个做AI落地的朋友聊天,大家普遍有个头疼的问题:我们花大力气训出来的大模型,在实验室的测试集上表现堪称“学霸”,可一旦放到真实业…

作者头像 李华