APB简介
APB(Advanced Peripheral Bus),外围总线,是一种常见的总线协议。APB属于AMBA 3 协议系列,它提供了一个低功耗的接口, 并降低了接口的复杂性。 APB接口用在低带宽和不需要高性能总线的外围设备上。 APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。APB可以与AMBA高级高性能总线(AHB-Lite) 和AMBA 高级可扩展接口 (AXI)连接。
APB主要用于低带宽的周边外设之间的连接,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。其特性包括:
- 可工作在高频下。
- 协议简单:无复杂的时序;读写只需要两个时钟周期传输;无需等待周期和回应信号。
- 控制逻辑简单,只有四个控制信号。
- 同步总线:总线上所有的transaction(读写操作)都依赖于时钟的上升沿。
- 一主多从:一般情况下,APB挂在AHB总线系统下,通过AHB-APB Bridge将事务在AHB总线系统之间进行转化,此时Bridgre即为APB的master,其他的外围设备均为slave。
- 接口简单:相对应AXI、AHB来说,接口比较简单。
- 低功耗。
- 可连接多种外围设备:I2C、SPI、Timer、Keypad、UART。
APB状态说明
APB上的传输可以用状态图来说明。
IDLE
系统初始化后为IDLE状态,此时没有传输操作,也没有选中任何从模块。
SETUP
当有传输要进行时,PSELx=1,PENABLE=0,系统进入SETUP状态,并只会在SETUP 状态停留一个周期。当PCLK的下一个上升沿时到来时,系统进入ENABLE 状态。
ACCESS
系统进入ACCESS状态后,维持之前在SETUP 状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。如果ready信号有效,传输也只会在ENABLE状态维持一个周期,在经过SETUP与ACCESS状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。
信号描述
下面给出了APB的信号。APB的支持最大32-bit的数据位宽。APB协议有两个独立的数据通道,读通道和写通道,由于APB的两个通道没有自己的handshake信号(vaild/ ready),因此两个通道不会同时使用。
- PCLK:时钟;
- PRESETn:复位信号,该信号一般直接与系统总线复位信号相连;
- PADDR:地址总线。最大可达32bit,由外围总钱桥单元驱动。
- PSEl:选择信号。
- PENABLE:使能信号。
- PWRITE:高时为写,低时为读。
- PWDATA:写数据。最高为32bit。
- PREADY:指示slave准备好信号。
- PRDATA:从slave读取的数据。最高32bit。
- PSLVERR:从slave传出的,指示传输失败信号。
除了上表的信号外,APB还有两个信号接口:
- PPROT: 保护类型,分为 normal, privileged, secure, data/instruction 访问。
- PSTRRB: 写选通信号,指示哪个字节是有效的数据,PSTRB与PWDATA之间的关系为PSTRB[n] <--> PWDATA[(8n+7):(8n)。
APB读写时序
APB的读时序有两种,一种是没有PREADY反压,另外一种有PREADY反压。
1.无反压
在PENABLE有效后一拍完成数据写。
2.有ready反压
在PENABEL有效后,需要等待PREADY有效,在PREADY有效时完成数据写。
读和写比较类似,就不在画时序。