AMBA APB
1 APB 协议
- APB 接口是无流水线的同步协议,每次传输至少需要两个周期。
- APB 接口用于访问外设的控制寄存器。
- APB 传输由 APB 桥/请求方(Requester)初始化,由 APB 外设/完成方(Completer)响应请求。
2 APB 接口信号
PCLKPRESETn- Requester
PADDRPSELxPENABLEPWRITEPWDATAPSTRBPPROTPNSEPWAKEUPPWUSER
- Completer
PREADYPRDATAPSLVERRPRUSERPBUSER
地址总线
- APB 接口有一条地址总线 PADDR 。
- 允许 PADDR 与数据宽度不对齐,但结果无法预测。(?)
数据总线
- APB 接口有两条独立的数据总线 PRDATA 和 PWDATA 。
- 数据总线宽度可以是 8 位、16 位、32 位,且读写总线的宽度必须相同。
- 数据传输不能同时进行,因为读/写没有独立的握手信号。
3 APB 传输
写传输
无等待状态
- Setup(T1):
PSEL断言,这表示PADDRPWRITEPWDATA是有效的。 - Access(T2):
PENABLE断言,PREADY在上升沿断言,这表示将在 T3 处接收数据。 - 传输结束时,
PSEL和PENABLE取消断言。
有等待状态
- 在 Access 阶段,
PENABLE为高电平,Completer 将PREADY设为低电平,以延长传输。 - 期间,下列信号保持不变:
PADDRPWRITEPSELxPENABLEPWDATAPSTRBPPROTPAUSERPWUSER
写选通
PSTRB表示写数据总线的相应通道包含有效数据。- 对于读传输,必须将
PSTRB所有位置低。
PSTRB
PSTRB是一个可选信号。
读传输
无等待状态
- 与写传输相同。
有等待状态
- 与写传输相同。
- 期间,下列信号保持不变:
PADDRPWRITEPSELxPENABLEPPROTPAUSER
错误响应
PSLVERR指示错误信息。PSLVERR仅在传输的最后一个周期有效,此时PSELPENABLEPREADY都为高电平。- 建议但不要求在
PSELPENABLEPREADY都为低电平时将PSLVERR设为低电平(清除 flag)。 - 外设收到错误信号不一定就会改变外设的状态,这与外设本身有关。
- 写入事务时出现错误,但外设中的寄存器可能已经更新。
- 读取事务出错时会返回无效数据(不要求在这种情况下全设为 0 ),该数据仍可使用。
- Completer 不要求支持
PSLVERR。若 Completer 不支持PSLVERR,则 Requester 的相应输入端置低。
写错误
读错误
PSLVERR 的映射
- 从 AXI 到 APB:读取时出错,映射回
RRESP;写入时出错,映射回BRESP。 - 从 AHB 到 APB:映射回
HRESP进行读写。
保护
…
4 状态机
- IDLE
- SETUP
- 需要传输时,进入 SETUP ,
PSELx被断言,期间一些信号不得发生变化。 - 在下一个周期进入 ACCESS 。
- 需要传输时,进入 SETUP ,
- ACCESS
PENABLE被断言,期间一些信号不得发生变化。- 若 Completer 将
PREADY置低,则保持 ACCESS 。 - 若 Completer 将
PREADY置高,则退出 ACCESS ;若不再需要传输,进入 IDLE ,若还需要传输,进入 SETUP 。