1. APB介绍
APB(Advance Peripheral Bus)是AMBA总线的一部分。它是一个低成本的接口,是以最低功耗和减少端口复杂性为目标进行设计的。
APB接口用在低带宽和不需要高性能总线的外围设备上。例如:UART,1248,键盘和鼠标等。并且,可以用它来访问外围设备的可编程控制寄存器。
它的主要特性如下:
-
是非流水的
-
所有信号仅与时钟上升沿有关(简化了外围设备的集成设计流程)
-
每个事务至少需要两个时钟周期,无需等待周期和回应信号
-
只有一个master——APB Bridge
-
控制逻辑简单,只有四个控制信号
-
可以和AXI和AHB进行连接
从1998年第一版至今共有3个版本。
- AMBA 2 APB:定义最基本的信号 interface, 读写 transfer, APB bridge, APB slave.
- AMBA 3 APB:增加定义信号 PREADY, PSLVERR 来完成对 wait state 和 Error reporting 的功能。
- AMBA 4 APB:增加定义信号 PPROT, PSTRB 来支持Transaction protection和 sparse data transfer 的功能。
2. 接口描述
Signal | Source | Width | Description |
---|---|---|---|
PCLK | 时钟源 | 1 | 系统时钟,传输发生在上升沿 |
PRESETn | 复位源 | 1 | 复位信号,低使能 |
PPORT | APB Bridge | 3 | 保护类型,该信号指示事务的正常、特权或安全保护级别,以及该事务是数据访问还是指令访问。 |
PADDR | APB Bridge | 地址信号,最高可达32位 | |
PSELx | APB Bridge | 由APB bridge产生的信号,针对每一个Peripheral Bus Slave片选信号,表示x从机是否被选中 | |
PENABLE | APB Bridge | 1 | 使能信号,标记传输使能 |
PWRITE | APB Bridge | 1 | 读/写控制信号,高位写,低为读 |
PWDATA | APB Bridge | 32 | 写数据 |
PREADY | Slave interface | 1 | 标记从机是否已将数据发送到总线,高为ready |
PRDATA | Slave interface | 32 | 读数据 |
PSLVERR | Slave interface | 1 | 故障信号,高为发生故障 |
APB的读写数据总线是独立的,都是32bit。因为它们没有独立的握手信号,所以不可能在同时发生数据传输。
3. 运行状态
IDLE:这个是 APB 的默认状态,也就是没有传输时候的状态;
SETUP:当需要进行一个传输的时候,APB 首先进入这个状态;PSELx 信号首先拉高;总线仅仅在 SETUP 状态停留一个时钟周期,然后接着在下一个时钟的上升沿进入 ACCESS 状态;
ACESS:在 SETUP 状态转换到 ACCESS,PENABLE 信号被拉高;在 SETUP 状态转换到 ACCESS 状态这段时间里,address,write,select 和 write data 信号必须保持稳定;处于 ACESS 状态下,如果 PREADY 为 0,会让其继续处于 ACCESS 状态;否则,PREADY 为 1,如果还有传输则再次进入 SETUP -> ACCESS ,如果没有传输,直接回到 IDLE;
4. 事务
4.1. Write transfer
4.1.2. With no wait states
4.1.1. With wait state
在写等待状态时:需要保持以下信号不能改变:
PADDR,PWRITE,PSEL,PENABLE,PWDATA,PSTRB,PPROT
建议地址和写入信号在传输后不要立即改变,而是保持稳定,直到另一个访问发生。这降低了功耗。
4.1.3. Write strobe
PSTRB,使稀疏数据传输在写数据总线上。每bit对应于写数据总线的一个字节。当断言为HIGH时,指示写数据总线的相应字节包含有效信息。
4.2. Read transfer
4.2.1. With no wait states
4.2.2. With wait state
在读等待状态时:需要保持以下信号不能改变:
PADDR,PWRITE,PSEL,PENABLE,PPROT
4.3. Error respond
使用PSLVERR来对读写过程中产生的错误进行指示。PSLVERR只在APB事务的最后一周期被认为是有效的,也就是当PSEL,PENABLE,PREADY全部为高电平。
建议在PSEL,PENABLE,PREADY中任意一个为低电平时,将PSLVERR也保持为低电平。
接收错误的事务可能改变了外设的状态,也可能没有,这两者都是可以接受的。当一个写事务收到一个错误时,这并不意味着外围设备中的寄存器没有被更新,接收错误的读取事务可能返回无效的数据。在发生读数据错误时,也没有必要把读数据总线置为全0。
PSLVERR在外围设备中不是一定非要实现的,如果外设中不包含该引脚。APB Bridge对应的输入被恒置为低电平。
4.3.1. PSLVERR的映射
当AXI和APB进行桥接时:读操作产生的PSLVERR映射到AXI的RRESP[1]信号,写操作产生的PSLVERR映射AXI到BRESP[1]信号。
当AHI和APB进行桥接时:读写PSLVERR都映射到AHB的HRESP[0]信号。
4.4. Protection unit support
为了支持复杂的系统设计,互连线和系统中的其他设备通常都需要提供防止非法传输的保护。对于APB接口,这种保护是由PPROT[2:0]信号提供的。
Normal or privileged, PPROT[0]:LOW表示一个正常访问,HIGH表示一个特权级访问。这是一些master用来指示其处理模式的。特权处理模式通常在系统中具有更高级别的访问。
Secure or non-secure, PPROT[1]:LOW表示一个安全访问,HIGH表示一个非安全访问。在处理模式需要更大程度区别的系统中使用。
Data or Instruction, PPROT[2]:LOW表示一个数据访问,HIGH表示一个指令访问。该指示做为一个提示出现,并不是所有的情况下都是准确的。当一个访问是指令数据混合项时,默认情况下建议将其标记为一个数据访问,除非明确知道它是一个指令访问。
使用PPORT主要目的是标记一个事务是secure还是no-secure。PPORT[0]和PPORT[2]被允许赋予其他含义。
5. ISSUE
5.1. 什么情况下会报ERROR?
PSLVERR是在PPORT之前引入的。
5.2. PPORT状态不匹配会报ERR吗?
5.3. 连接到APB Bridge的PRDATA是多个还是一个?
参考文献:https://blog.csdn.net/zhoutaopower/article/details/103729440
参考文献:IHI0024C_amba_apb_protocol_spec.pdf