0x00 综述
APB的全称为Advanced Peripheral Bus,即先进外设接口,该总线主要用于和低速以及低功耗的外设通信,该总线中唯一的主设备为APB Bridge,而其它的外设均为从设备。其中,APB Bridge可以锁存总线所有的地址、数据和控制信号,并通过二级译码来产生APB从设备选择信号,通常APB Bridge本身挂在AHB等高速总线上,用于“桥接”低速的APB总线。
APB规定所有的信号必须在时钟上升沿触发时进行传递
0x01 APB总线信号
APB总线最大支持32bit的数据位宽,拥有两个独立的数据通道,分别为读通道和写通道。由于APB的两个通道没有独立的握手信号,因此两个通道不会被同时使用。
信号定义如下:
0x02 APB传输时序
读传输
读传输最简单情况的时序如下图所示:
事实上,PREADY信号可以无限延后,直到数据准备好后再拉高,如下图所示:
可以看到实际上分为五个阶段:Idle、Setup、Enable、Data Valid、Finish
进入Data Valid阶段后,数据将会准备好,数据应当在Finish阶段的时钟上升沿被采样。
读传输可能发生错误,因此可以使用PSLVERR进行错误指示(以下为读传输出错的情况):
事实上,只有当PSEL、PENABLE以及PREADY都为高时,PSLVERR才在最后一个周期(即Data Valid阶段)判断,其它情况下,建议拉低(只是建议,非强制性)。
在Data Valid完成后,若有新的数据需要传输,则会再次转移到Setup阶段。
写传输
写传输的情况也与读传输类似的,但多了一个信号PSLVERR用于指示写传输错误,下面直接给出最复杂的情况,在这种情况中,最终发生了写传输错误:
在Write Finish完成后,若有新的数据需要传输,则会再次转移到Setup阶段。
总结
为了减少功率的消耗,APB的地址和读写控制信号在下一笔数据传递前,不会发生任何改变。
0x03 APB的状态机
事实上,上述所有图中的"Enable"、"Data Valid"与"Write Finish"阶段被合称为“Access”阶段,而最后的"Finish"阶段实际为"Idle"阶段,因此状态机只有三级:Idle、Setup与Access,其状态转移图如下: