AMBA2 关于APB

发布时间 2023-06-17 12:21:38作者: 可达达鸭

  • 注:波形图片来自于AMBA2 APB Protocol SPEC.

1. APB的用处

  • APB不支持流水线设计,不支持突发传输。
  • APB和AHB一样,有数据总线和地址总线,读写使用PWRITE和HWRITE控制,不能同时读写数据。
  • 主要应用在低带宽需求的接口,在SOC中,一般用作连接低速外设(I2C,I2S.UART等)以及作为IP的配置接口。常使用AHB2APB/AXI2APB Bridge作为转接桥将APB挂载在系统上。

2. APB协议历史

  • APB2:主要定义了基本的总线接口,没有握手协议,只有基本的读写传输。
  • APB3:增加PREADY,PSLVERR信号,两个信号是从机向主机发起的,表示从机传输状态,完成/错误;PREADY可以像AHB一样为从机插入等待时间。AHB的HREADY信号详解见这篇博客
  • APB4:增加PPROT,PSTRB信号,观察了AHB、APB和AXI都是只有写选通,没有读选通。至于为什么没有读选通我也不是很理解,AXI的选通信号见这篇博客
  • APB5:增加PWAKEUP,PxUSER(A/W/R/B),Parity等信号
    • PWAKEUP:实现低功耗的控制,可以控制时钟只在传输时开启。
    • Parity:可以针对地址,数据以及控制信号,发送数据一端根据要传输的信号使用parity generation模块产生校验码,接收数据一端使用parity check模块对接收到的数据与校验码进行校验。

3. APB传输

3.1 状态转移

  • APB首先待在IDLE状态,当需要一个传输时,APB首先会进入SETUP阶段,根据要传输地址拉高PSEL信号,只在SETUP待一个周期,之后会无条件跳到ACCESS中。
  • 在ACCESS状态,PENABLE信号拉高,开始传输,PREADY = 0,表示slave还没有准备好接收或者被读出数据,会让它一直处于ACCESS状态;
    • 直到PREADY信号被拉高,表示当前传输已完成,因为APB不支持突发传输,一次只能传输一个数据,所以如果后面还有数据要传输,会跳到SETUP状态,如果没有则会跳到IDLE状态。
  • 从状态转移图可以看到每次传输都需要两个周期,理论上完全可以一个周期给出写地址和写数据完成传输,需要两个周期和PENABLE信号是历史遗留问题,具体解释可以看这篇回答

3.2 传输具体分析

  • 写传输
    • 从机没有wait状态
      • T1阶段,地址和数据都已经准备好,PWRITE和PSEL信号都已拉高,IDLE进入SETUP阶段;
      • T2阶段,拉高PENABLE信号,表示数据开始传输,SETUP进入ACCESS阶段;
      • T3阶段,检测PREADY被拉高了,说明传输已经完成,并将PENABLE拉低,后面没有数据传输了,再将PSEL信号拉低。
    • 从机插入wait状态
      • T1、T2阶段和没有wait相同,区别在于拉低了PREADY信号,表示从机没有准备好传输,停留在ACCESS状态,插入等待时间。
  • 读传输
    • 从机没有wait状态
      • 与写状态传输相似,PREADY拉高,说明从机被读取的数据已经准备好了。
    • 从机插入wait状态
      (url){:height="50%" width="50%"}`
  • 从机的错误传输响应
    • 从机返回PSLVERR信号表示对应的传输错误,该信号在APB中只有1bit。
    • 写传输错误
    • 读传输错误
    • 需要注意,PSLVERR信号是和Ready信号同时返回的。
    • APB SLVERR和AXI/AHB之间转接桥处理
      • APB - AXI:将PSLVERR信号映射成AXI的RRESP/BRESP信号中的SLVERR信号,AXI RESP信号解释可见这篇博客.
      • APB - AHB:将PSLVERR信号映射成AHB的HRESP信号中的ERROR信号,AHB HRESP信号解释可见这篇博客.