APB协议翻译
AMBA APB 协议
1、介绍
1.1关于APB协议
高速外围设备总线APB(Advanced Peripheral Bus)是高速微控制器总线架构AMBA(Advanced Microcontroller Bus Architecture)协议的一元。它描述了一个low-cost接口,主要适用于低功耗和接口简单的场景。
APB协议不支持流水线,主要用在不需要高性能的低带宽外设上,若需要高性能,则需要AXI协议。
APB协议状态转换同时钟上升沿对其,每一笔操作需要至少两个周期。
APB可以连接
- AMBA Advanced High-performance Bus(AHB)
- AMBA Advanced High-performance Bus Lite (AHB-Lite)
- AMBA Advanced Extensible Interface (AXI)
- AMBA Advanced Extensible Interface Lite (AXI-Lite)
可以通过APB协议来访问外围设备的可编程寄存器。
1.2APB版本修正
APB规范最开始在1998年发布,现在已经由以下三个版本取代
- AMBA 2 APB Specification
- AMBA 3 APB Protocol Specification v1.0
- AMBA APB Protocol Specification v2.0
1.2.1 AMBA 2 APB Specification
AMBA 2 APB Specification来自于AMBA spec REV2。此版本规定了接口信号、基本读写传输以及APB bridge和APB Slave。
这个版本称为APB2。
1.2.2 AMBA 3 APB Protocol Specification v1.0
此版本定义了以下附加功能
- 传输等待,详见第三章
- 错误报告,详见3.4
添加以下接口信号支持以上功能
- PREADY :指示传输就绪的信号
- PSLVERR:指示传输失败的信号
这个版本称为APB3。
1.2.2 AMBA APB Protocol Specification v2.0
此版本增加功能
- 传输保护,详见3.5
- 选通传输,SParse操作。
增加信号
- PPROT:使APB支持安全传输和非安全传输
- PSTRB:写入选通,在写操作时实现稀疏数据传输。
这个版本称为APB4。
2、信号描述
2.1AMBA APB信号
信号 | 来源 | 信号描述 |
---|---|---|
PCLK | 时钟源 | APB协议与时钟上升沿对对齐 |
PRESETn | 全局复位信号 | APB采用复位低有效,该信号一般直接连接系统总线复位信号。 |
PADDR | 主机(APB桥) | 地址最先,最多32位,由主机发送用来寻址。 |
PPROT | 主机 | 保护类型。这个信号可以指示当前传输安全级别,和是数据访问还是指令访问。 |
PSELx | 主机 | 片选信号。每个从机都有一个sel信号,拉高表示当前从机被选中。 |
PENABLE | 主机 | 使能信号。一般指示APB传输的第二个周期或者后续周期。 |
PWRITE | 主机 | 1为写,0为读。 |
PWDATA | 主机 | 写数据,最高32位。 |
PSTRB | 主机 | 写入选通,。写入数据总线的每个byte都有一个写入选通指示位,一个word需要4个指示位。读操作时写入选通关闭 |
PREADY | 从机 | 从机ready信号,从机使用此信号扩展APB传输,其实就是等待操作。 |
PTDATA | 从机 | 从机发给主机要读的数据,最高32位。 |
PSLVERR | 从机 | 指示传输失败。若选择不支持此功能,则直接连低电平。 |
APB总线同一时刻只能进行一次握手,因此读写不能同时进行。
3、传输
3.1写传输
写传输分为无等待传输和等待传输
3.1.1无等待传输
在T1时刻,PSEL拉高,通过PADDR选中从机,同时PWRITE拉高指示写传输开始,并给出数据信息PWDATA。此阶段称为setup阶段。
在T2时刻,主机拉高PENABLE,进入enable状态,此时表示主机随时等待从机接收数据。
在T2时刻,从机拉高PREADY,表示从机已经准备好在这个时钟周期内接收数据吗,不用等待,PENABLE和PREADY完成握手,正式传输。在此期间,其他相关信号要一直保持不变,直到传输完成。
传输结束后,PSEL和PENABLE都拉低,下次传输时再拉高。
3.1.2有等待传输
从机通过拉低PREADY信号,来实现传输扩展,在传输等待过程中,其他信号保持不变。
注意比对这张图和上张图。PENABLE拉高后说明主机已经准备好,但此时PREADY拉低,从机没有准备好,握手失败。,此时主机保持在enable状态进行等待直到PREADY拉高与PENABLE握手成功。
3.2写选通
写选通信号用来启用写操作时的字节选择功能,对应选通位置1,该字节才有效。
读传输时PSTRB所有位必须置0.
3.3读传输
3.3.1无等待传输
与写操作类似,注意主机在第二个时钟周期进行数据采采样。从机在第一个周期和第二个周期给出数据都可以。
3.3.2有等待传输
读等待期间,其他相关信号保持不变,数据准备好的同时拉高PREADY,与PENABLE握手。握手成功,则主机进行数据采样。
3.4错误response
读写传输都有可能发生错误,错误情况由PSLVERR指示。
PSLVERR指示信息仅在APB传输的最后一个周期认为是有效的,此时PSEL,LENABLE,PREADY均为高电平。
建议在PSEL/PENBALE/PREADY中任意一个为低电平时,将PSLVERR驱动为低电平。即在非采样时刻,将其驱动为低电平。
收到错误的传输,可能会也可能不会改变外围设备的状态。
写传输收到error并不意味着外围设备内部寄存器更新失败,读传输收到error可能会返回无效数据。在发生读传输错误时,没必要将数据总线驱动为全0.
APB外设不需要强制支持PSLVERR。
3.4.1写传输错误
3.4.2读传输错误
PSLVERR在数据采样状态时拉高
3.4.3PSLVERR的映射
当存在bridge时
- fromAXItoAPB:PSLVERR读操作时映射为RRESP[1],写操作时映射为BRESP[1]。
- fromAHBtoAPB:PSLVERR无论读写都映射为HRESP[0]。
3.5保护单元支持
为了支持复杂的系统设计,系统中的设备互联需要提供对非法传输的保护。对于APB总线,这一操作由PPROT[2:0]来实现。
访问保护分为三个级别
- 普通或特权,PPROT[0]:低电平代表普通,高电平代表特权。这被一些master用来指示他们的处理模式,特权处理模式通常在系统中具有更高级别的访问权限。
- 安全或非安全,PPROT[1]:低电平代表安全,高电平代表非安全。这用于需要对处理模式细分的系统中,用来指示当前传输是否安全。
- 指令或数据,PPROT[2]:低电平代表数据访问,高电平代表指令访问。这一位仅作为提示,并非所有情况都准确。比如这一笔传输时指令和数据项的混合。建议默认情况下将访问标记为数据访问,除非明确知道它是指令访问。
4、操作状态
4.1操作状态
APB状态机如图所示
IDLE:默认状态
SETUP:当需要传输时总线进入SETUP状态,此时给出PSEL和PADDR信号进行从机选通。并无条件跳转到ACCESS状态。
ACCESS:进入ACCESS状态,PENABLE信号拉高,此时若未检测到PREADY拉高,握手失败,则状态保持,等待握手成功。握手成功后,若还有数据,则跳转到SETUP状态,进行下一笔传输,否则进入IDLE状态。
补充
error response
什么时候需要产生error response?
- 在访问APB外设的寄存器的时候,APB外设在功能设计的时候,认为此时应该产生error,具体情况要取决于外设的设计
- 对于APB4的外设,如果能支持secure的话,当外设的secure寄存器被non-secure的transfer访问的时候,这时候需要产生error
- 如果APB对unused(没有分配地址空间)的地址空间访问时候,这时候需要产生error
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】