
依据ARM《AMBA 3 APB Protocol Specification v1.0》文档编号 ARM IHI 0024B。AMBA APB Protocol Specification Version B1. APB简介APB全称为Advanced Peripheral Bus是AMBA 3协议族的一部分主要用于连接低带宽、低功耗、控制逻辑较简单的外设例如UARTGPIOTimerWatchdogInterrupt Controller外设控制寄存器APB具有以下特点非流水线协议。接口和控制逻辑简单。面向低带宽外设。所有传输都与PCLK上升沿相关。每笔传输至少需要两个时钟周期。支持通过PREADY插入等待周期。支持通过PSLVERR返回错误响应。可以通过桥接器连接AHB-Lite或AXI系统总线。APB主要规定总线传输方式不规定外设内部寄存器如何设计。2. APB信号信号驱动方方向相对从机说明PCLK时钟源输入APB时钟所有传输以其上升沿为时序基准PRESETn系统输入低有效复位PADDRAPB桥/主机输入地址总线最大可为32位PSELxAPB桥/主机输入从机选择信号每个从机通常有独立的PSELxPENABLEAPB桥/主机输入ACCESS阶段指示信号PWRITEAPB桥/主机输入1表示写传输0表示读传输PWDATAAPB桥/主机输入写数据最大可为32位PREADY从机输出完成信号从机可以用它延长ACCESS阶段PRDATA从机输出读数据最大可为32位PSLVERR从机输出错误响应信号可选AMBA 3 APB没有以下信号PSTRBPPROT这些信号是后续APB版本增加的。3. APB工作状态APB包含三个工作状态IDLE - SETUP - ACCESS3.1 IDLE状态总线当前没有传输。典型信号PSEL 0 PENABLE 0当主机准备发起传输时从IDLE进入SETUP。3.2 SETUP状态SETUP是传输的第一个阶段。典型信号PSEL 1 PENABLE 0主机在SETUP阶段给出PADDRPWRITEPWDATA仅写传输需要PSELSETUP阶段固定只持续一个时钟周期下一周期必然进入ACCESS阶段。3.3 ACCESS状态ACCESS是传输的第二个阶段。典型信号PSEL 1 PENABLE 1从机通过PREADY决定传输是否完成。如果PREADY 0则继续停留在ACCESS阶段。如果PREADY 1则当前传输完成。传输完成条件可以写成PSEL PENABLE PREADY如果没有下一笔传输则返回IDLE如果紧接着还有传输则进入下一笔传输的SETUP阶段。4. APB基本时序一笔无等待传输至少需要两个周期时钟周期 第1周期 第2周期 总线阶段 SETUP ACCESS PSEL 1 1 PENABLE 0 1 PREADY 任意 1传输过程主机进入SETUP阶段给出地址和控制信号。下一周期主机拉高PENABLE进入ACCESS阶段。如果从机拉高PREADY传输在该ACCESS周期末完成。5. 写传输5.1 无等待写传输SETUP阶段PSEL 1 PENABLE 0 PWRITE 1 PADDR 有效写地址 PWDATA 有效写数据ACCESS阶段PSEL 1 PENABLE 1 PWRITE 1 PREADY 1传输在ACCESS周期末完成。从机通常在以下条件成立的时钟上升沿采样写数据PSEL PENABLE PREADY PWRITE注意规范要求PADDR、PWRITE、PSEL、PENABLE和PWDATA在ACCESS阶段保持稳定。5.2 带等待状态的写传输如果从机暂时不能完成写操作可以在ACCESS阶段令PREADY 0此时ACCESS阶段被延长。等待期间主机必须保持以下信号不变PADDRPWRITEPSELPENABLEPWDATA当从机准备好以后将PREADY 1传输在该周期末完成。从机不能仅根据PSEL PENABLE修改寄存器否则有多个等待周期时同一笔传输可能被执行多次。正确的写使能条件通常是PSEL PENABLE PREADY PWRITE建议在传输完成后不要立即改变地址和写信号而是保持稳定直到下一次访问发生。这可以降低功耗。6. 读传输6.1 无等待读传输SETUP阶段PSEL 1 PENABLE 0 PWRITE 0 PADDR 有效读地址ACCESS阶段PSEL 1 PENABLE 1 PWRITE 0 PREADY 1 PRDATA 有效读数据从机必须在读传输结束前提供有效的PRDATA。主机在传输完成时采样读数据即PSEL PENABLE PREADY !PWRITE6.2 带等待状态的读传输如果从机暂时不能提供数据可以在ACCESS阶段拉低PREADY。等待期间以下信号必须保持稳定PADDRPWRITEPSELPENABLE在最后一个ACCESS周期中PREADY 1 PRDATA 有效数据主机在该周期末采样PRDATA。规范只要求从机在传输结束前提供有效读数据并没有强制规定从机必须在哪个内部时刻生成PRDATA。例如从机可以在SETUP阶段组合译码地址。在SETUP转入ACCESS的上升沿寄存读数据。在ACCESS等待期间准备读数据。在最终完成周期前提供有效数据。具体方式由从机设计决定。7. 等待状态PREADY由从机驱动用于延长APB传输。不插入等待周期ACCESS阶段PREADY 1插入等待周期第1个ACCESS周期PREADY 0 第2个ACCESS周期PREADY 0 第3个ACCESS周期PREADY 1传输只在最后一个PREADY1的ACCESS周期完成。等待周期数量可以是0、1、2、3……协议没有规定最大等待周期数。当PENABLE0时规范允许PREADY取任意值。因此一个固定两周期完成传输的简单从机可以将PREADY保持为高电平。8. 连续传输如果一笔传输完成后没有下一笔传输ACCESS - IDLE主机撤销PSEL 0 PENABLE 0如果紧接着还有下一笔传输ACCESS - SETUP - ACCESS即使下一笔传输仍然访问同一个从机PENABLE也必须先拉低一个周期形成新的SETUP阶段。对于连续访问同一从机PSEL可以保持为高电平第1笔 ACCESSPSEL1PENABLE1 第2笔 SETUP PSEL1PENABLE0 第2笔 ACCESSPSEL1PENABLE19. 错误响应PSLVERR用于表示读传输或写传输失败。PSLVERR只有在以下三个信号同时为高时才有效PSEL PENABLE PREADY也就是说PSLVERR只能在传输完成的最后一个ACCESS周期有效。推荐在其他时间将其保持为低电平PSEL0或 PENABLE0或 PREADY09.1 写错误写传输返回PSLVERR并不必然表示外设寄存器没有被修改。协议允许两种实现返回错误同时不修改寄存器。返回错误但寄存器已经被修改。具体行为由外设设计决定必须在外设设计文档中说明。9.2 读错误读传输返回错误时PRDATA可以是无效数据。协议不要求错误读操作将PRDATA置零。9.3 PSLVERR是可选信号APB从机可以不实现PSLVERR。如果外设没有该信号APB桥对应的错误输入应连接为低电平。9.4 错误向其他总线映射APB连接到AXI时APB PSLVERR - AXI RRESP/BRESP SLVERRAPB连接到AHB时APB PSLVERR - AHB HRESP ERROR10. 主机和从机的职责10.1 APB主机职责主机负责驱动PADDRPSELPENABLEPWRITEPWDATA主机必须先产生SETUP阶段再产生ACCESS阶段。SETUP固定持续一个周期。等待期间保持地址和控制信号不变。写等待期间保持PWDATA不变。只在PREADY1时结束ACCESS阶段。连续传输之间插入新的SETUP阶段。10.2 APB从机职责从机负责驱动PREADYPRDATAPSLVERR从机必须在读传输结束前提供有效PRDATA。需要延长传输时在ACCESS阶段拉低PREADY。准备完成传输时拉高PREADY。仅在最终完成周期返回有效PSLVERR。避免在等待期间重复执行同一笔写操作。11. 低功耗建议规范建议在一笔传输结束以后如果没有新的访问不要立即改变地址和写控制信号而是保持原值直到下一次访问。这样可以减少总线翻转降低动态功耗。从机设计也可以采用类似方法非读传输期间保持PRDATA不变。无新传输时保持内部地址译码结果。写寄存器只在传输完成拍更新。等待期间保持读数据输出稳定。其中非读传输期间保持PRDATA属于具体从机的低功耗实现选择不是APB协议强制要求。12. APB协议不规定的内容AMBA 3 APB不规定以下内容外设必须包含多少个寄存器。每个寄存器的地址。寄存器是只读、只写还是可读写。寄存器复位值。地址最低位如何使用。是否要求地址对齐。非对齐地址如何处理。外设内部存储器深度。错误地址的具体范围。写错误时是否更新寄存器。从机必须在SETUP还是ACCESS阶段生成读数据。这些都属于具体外设的设计规范。