APB(Advanced Peripheral Bus)
1、APB的概述与特点
APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。其特性包括:两个时钟周期传输;无需等待周期和回应信号;控制逻辑简单,只有四个控制信号。
2、APB的组成部分
3、 APB的数据传输
APB上的传输可以用如下图所示的状态图来说明。
- 系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。
- 当有传输要进行时,PSELx=1,PENABLE=0,系统进入SETUP状态,并只会在SETUP 状态停留一个周期。当PCLK的下一个上升沿时到来时,系统进入ENABLE 状态。
- 系统进入ENABLE状态时,维持之前在SETUP 状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。
- 之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。
4、传输时序
4.1、Write
写传输分为不带等待信号的写,和带等待信号的写:
无等待状态
下图显示了一个基本的无等待状态的写传输。
- T1 时刻 APB 将地址信息 PADDR 和写的数据 PWDATA 准备好,拉高 PWRITE 表示进入写,同时拉高 PSEL,从 IDLE 进入 SETUP
- T2 时刻也就是下一个时钟周期拉高 PENABLE,使得状态进入 ACCESS
- T3 时刻检测到 PREADY 被拉高,也就是说 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低
有等待状态
下图展示了 PREADY 信号是如何扩展了从器件的传输。
- T1 时刻 APB 将地址信息 PADDR 和写的数据 PWDATA 准备好,同时拉高 PSEL,从 IDLE 进入 SETUP
- T2 时刻也就是下一个时钟周期拉高 PENABLE,使得状态进入 ACCESS
- T3 时刻检测到 PREADY 为 0,也就是说 Slave 还没有接收完数据,所以在此刻,PADDR 地址信号、PWRITE 数据方向信号、PSEL 片选信号、PENABLE 使能信号以及PWDATA 数据必须保持,以便 Slave 能够继续采样。
- T4 时刻 PREADY 依然 为 0,所以还是保持不变
- T5 时刻,PREADY 为 1,说明 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低
注意:即便是传输结束了,Address 和 data 信号也不会立即改变,直到下一次传输才会刷新新的地址和数据信号,这样做的原因是减少功耗;
4.2、Read
读数据和写的流程几乎差不多,也分为了等待和非等待
无等待状态
同非等待写一样,图示如下:
- T1 时刻 APB 将地址信息 PADDR 准备好,拉低 PWRITE 表示进入读,同时拉高 PSEL,从 IDLE 进入 SETUP
- T2 时刻也就是下一个时钟周期拉高 PENABLE,使得状态进入 ACCESS
- T3 时刻检测到 PREADY 被拉高,也就是说 Slave 已经完成收据发送,PRDATA 上就是来自 Slave 的数据,传输完成;PENABLE 拉低,PSEL 拉低
有等待状态
加等待的读时序如下:
时序过程和上述一样,只不过 PREADY 被拉低了两个周期,真正从 Slave 读的数据到 T5 时刻才真正有效;这里不在多说;
4.3、Error Respond
在读和写的过程,可能出现错误,错误通过 PSLVERR 信号来指明;
APB外围设备不要求必须支持PSLVERR引脚,当不使用该引脚时,应被置低
写失败后时序
下面这个是写失败后的时序:
可以看到,在写失败后,PSLERR 信号被拉高了
读失败后时序
下面这个是读失败后的时序:
读失败后,PRDATA 上的数据不再有效