apb总线
APB发展
- APB2
该规范定义了接口信号,基本的读写传输以及APB的两个组件APB bridge和APB slave
- APB3
定义了下面两个附件功能
- 等待状态,参见Transfer
- 错误报告,参见Error response
对应增加的信号如下
PREADY:准备就绪信号,表示APB传输完成
PSLVERR:传输失败的错误信号
- APB4
定义了以下附加功能:
- 事务的保护,参见Protection unit support
- 稀疏数据传输,参见Write stobes
对应的信号如下
PPROT:一种保护信号,用于支持非安全事务和安全事务
PSTRB:一种写掩码信号,用于在写数据总线上实现稀疏数据传输
- APB5
定义了以下附加功能
- PWAKEUP信号
- User信号
- Parity protection and check信号
- Reaml Management Extension(RME)支持
APB信号

数据总线
- APB协议有两个独立的数据总线,一个用于读取数据,一个用于写入数据
- 总线可以达到32位宽
- 由于总线没有各自的握手信号,因此数据传输不可能同时发生在两个总线上
APB时序
APB写传输
写传输的类型:可以分为没有等待状态和具有等待状态
- 没有等待状态
下图展示的是没有等待的基本写传输

在T1时,写传输开始于地址PADDR、写数据PWDATA、写信号PWRITE、选择信号PSE,寄存器在PCLK上升沿,这称为写传输的起始阶段
T2时,使能信号PENABLE和准备信号PREADY寄存器在PCLK上升沿
当断言时,PENABLE表示传输的访问阶段开始
当断言时,PREDY表示Slave可以在PCLK的下一个上升边沿完成传输
地址PADDR、写数据PWDATA和控制信号都保持有效,直到传输在访问阶段的T3完成结束。
使能信号PENABLE在传输结束时被撤销。
选择信号PSEL也被去断言,除非在此传输之后立即有另一个传输到同一Slave。
对于burst的写如下所示:

- 具有等待状态
下图显示的是如何在访问阶段使用PREADY信号扩展传输,当PENABLE为高,而Slave驱动PREADY为低时扩展传输。其他信号保持不变,而PREADY保持低

当PENABLE为低时,PREADY可以取任何值,这确保了具有两个周期访问的外围设备可以让PREDY保持为1
建议地址和写信号在传输后不要立即改变,而是保持稳定,直到发生另一次访问,这能降低功耗
写掩码
写掩码信号PSTRB在写数据总线上实现稀疏数据传输
每个写掩码信号对应写数据的一个字节。当断言为高时,写掩码指示写数据总线的相应字节通道包含在32位数据总线上,这种关系如下图所示:

读传输时,Master必须驱动PSTRB的所有位为低
读传输
- 没有等待状态的读传输

对于burst读的例子:

- 具有等待状态的读传输
下图显示了PREADY信号如何扩展传输。如果PREADY在访问阶段都为低,则传输被扩展
该协议确保其他信号在额外的周期内保持不变
下图使用了PREADY信号添加了两个周期,然后,可以添加在0开始的任何数量的额外周期。

错误响应
可以使用PSLVERR指示APB传输上的错误条件,读和写事务都可能错误
当PSEL、PENABLE和PREADY均为高、PSLVERR仅在APB传输的最后一个周期被认为有效
建议(但非强制)在当PSEL、PENABLE或PREADY中的任何一个为低时,即未进行采样时驱动PSLVERR为低。
接收到错误事务可能(也可能没有)改变了Slave的状态,这是特定于外围设备的,两者都是可以接受的。当写事务收到一个错误时,这并不意味着外围设备中的寄存器没有更新。接收到错误读事务可能返回无效数据,但没有要求Slave要驱动data总线为全0。
APB外设不需要支持PSLVERR引脚,现有的和新的APB外围设计都是如此。如果外设没有这个引脚,那么Slave的合适输入为固定0。
图3-6给出了一个写传输失败并报错的例子

读传输也可以在错误响应后完成,这表明没有有效的读数据可用。如图3-7所示,读传输完成后出现错误响应。

PSLAVERR映射
当桥接时:
从AXI到APB,PSLVERR被映射回RRESP/BRESP = SLVERR。这是通过将PSLVERR映射到用于读取的AXI信号的RRESP(对于读)和BRESP(对于写)来实现的
对AHB到APB,PSLVERR被映射回 HRESP = ERROR(对于读和写)。这是通过将PSLVERR映射到AHB信号的HRESP[0]来实现的。
保护单元支持
为了支持复杂的系统设计,通常需要系统中的互连和其他设备提供防止非法交易的保护。对于APB接口,这种保护由PPROT[2:0]信号提供。访问保护的三个级别分别是:
(1) Normal或Privileged,PPROT[0]
- 0表示正常访问
- 1表示特权访问
这被一些Master用来表示它们的处理模式。Privileged处理模式通常在系统中具有更高级别的访问权限。
(2) Secure或non-Secure,PPROT[1]
- 0表示安全访问
- 1表示非安全访问
这用于需要在处理模式之间进行更大程序区分的系统
这个位的配置是这样的:当它为1时,事务被认为是非安全的;当它为0时,事务被认为是安全的。
(3) Data or Instruction,PPROT[2]
- 0表示数据访问
- 1表示指令访问
该位表示该事务时数据访问还是指令访问
此指示只是作为提示,并非在所有情况下都是准确的。例如里面事务包含指令和数据项的混合。默认情况下,建议将访问标记为数据访问,除非明确知道它是指令访问。

