- 注:波形图片来自于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状态,插入等待时间。
- T1、T2阶段和没有wait相同,区别在于拉低了PREADY信号,表示从机没有准备好传输,停留在ACCESS状态,插入等待时间。
- 从机没有wait状态
- 读传输
- 从机没有wait状态
- 与写状态传输相似,PREADY拉高,说明从机被读取的数据已经准备好了。
- 与写状态传输相似,PREADY拉高,说明从机被读取的数据已经准备好了。
- 从机插入wait状态
(url){:height="50%" width="50%"}`
- 从机没有wait状态
- 从机的错误传输响应