关于APB协议
高级外设总线(APB)是高级微控制器总线架构(AMBA)协议家族的一部分。它定义了一个低成本的接口,该接口针对最小功耗和降低接口复杂性进行了优化。
APB协议不是流水线化的,用于连接不需要AXI协议高性能的低带宽外设。
APB协议将信号转换与时钟的上升沿相关联,以简化APB外设集成到任何设计流程中。每次传输至少需要两个周期。
APB可以连接到以下接口:
- AMBA高级高性能总线(AHB)
- AMBA高级高性能总线Lite(AHB-Lite)
- AMBA高级可扩展接口(AXI)
- AMBA高级可扩展接口Lite(AXI4-Lite)
可以使用APB来访问外设设备的可编程控制寄存器。
1. APB信号
APB最大地址位宽是32位,PADDR
APB最大数据位宽是32位,PRDATA/PWDATA
2. 数据总线
APB协议有两条独立的数据总线,一条用于读取数据,一条用于写入数据。这些总线可以宽达32位。由于这些总线没有它们自己独立的握手信号,因此不可能让数据传输同时在两条总线上发生。
APB总线读写数据不能同时发生。
3. 写传输
3.1 无等待状态的写传输
图3-1显示了无等待状态的基本写传输。
- T0: 时钟信号PCLK的一个上升沿。
- T1: 在PCLK的上升沿,写传输开始,地址PADDR、写数据PWDATA、写信号PWRITE和选择信号PSEL被采样并存储在寄存器中。这称为写传输的设置阶段。
- T2: 在PCLK的上升沿,使能信号PENABLE和准备信号PREADY被采样并存储在寄存器中。
- PENABLE被断言时,表示传输的访问阶段开始。
- PREADY被断言时,表示slave可以在下一个PCLK的上升沿完成传输。
- T3: 传输在PCLK的上升沿结束,访问阶段结束。
地址PADDR、写数据PWDATA和控制信号在传输完成之前一直保持有效,直到T3,访问阶段结束。
使能信号PENABLE在传输结束时被取消断言。选择信号PSEL也被取消断言,除非传输紧接着要被对该同一外设的另一个传输所跟随。
3.2 带有等待状态的写传输
图3-2展示了slave如何使用PREADY信号来扩展传输。
在访问阶段(Access phase),当PENABLE为高电平时,slave通过将PREADY置为低电平来扩展传输。只要PREADY保持低电平,以下信号保持不变:
- 地址信号,PADDR
- 写信号,PWRITE
- 选择信号,PSEL
- 使能信号,PENABLE
- 写数据,PWDATA
- 写字节使能(strobe),PSTRB
- 保护类型,PPROT
当PENABLE为低电平时,PREADY可以取任何值。这确保了那些固定两个周期访问的外设可以将PREADY连接到高电平。
注意 建议在一次传输之后不要立即改变地址和写信号,而是保持它们稳定,直到另一次访问发生。这有助于减少功耗。
4. 写字节使能(write strobes)
写字节使能PSTRB启用了写数据总线上的稀疏数据传输。每个写字节使能位对应于写数据总线上的一个字节。当被置为高电平时,表明写数据总线上相应的字节传输通道包含有效信息。
对于写数据总线上的每八个bit,就有一个写字节使能,因此PSTRB[n]对应于PWDATA[(8n + 7):(8n)]。图3-3展示了在32位数据总线上的这种关系。
注意
- 对于读传输,总线主设备必须将PSTRB的所有位驱动为低电平。
5. 读传输
5.1 无等待状态
图3-4显示了一个读传输的过程。地址、写、选择和使能信号的时序。slave必须在读取传输结束之前提供数据。
- T0: 时钟信号PCLK的一个上升沿。
- T1: 在PCLK的上升沿,读传输开始,地址PADDR、写信号PWRITE、选择信号PSEL和使能信号PENABLE被采样并存储在寄存器中。
- T2: 根据需要,PENABLE信号在下一个PCLK上升沿保持高电平,以维持传输,PREADY为高,传输将在下一个CLK上升沿完成。
- T3: 在PCLK的上升沿,slave必须提供数据PRDATA。
5.2 有等待状态的读传输
图3-5展示了PREADY信号如何延长传输。如果在访问阶段(Access phase)期间PREADY被驱动为低电平,则传输会被延长。协议确保以下信号在额外的周期中保持不变:
- 地址信号,PADDR
- 写信号,PWRITE
- 选择信号,PSEL
- 使能信号,PENABLE
- 保护类型,PPROT
图3-5显示了使用PREADY信号增加了两个周期。然而,你可以从零开始增加任意数量的额外周期。
6. 错误响应
可以使用PSLVERR来指示APB传输中的错误条件。错误条件可能发生在读和写事务中。
PSLVERR仅在APB传输的最后一个周期内被认为有效,当PSEL、PENABLE和PREADY都为高电平时。
建议(但不是强制性的)在PSLVERR不被采样时将其驱动为低电平。也就是说,当PSEL、PENABLE或PREADY中的任何一个为低电平时。
接收到错误的事务可能或可能没有改变外设的状态。这是外设规定的,两种情况都是可以接受的。当写事务接收到错误时,并不意味着外设内的寄存器没有被更新。接收到错误的读事务可以返回无效数据。对于外设来说,没有要求在读取错误时将数据总线驱动为全0。
APB外设不要求支持PSLVERR引脚。这对于现有的和新的APB外设设计都是如此。如果外设没有包含此引脚,则APB桥的对应的输入被连接到低电平。
6.1 写传输的错误响应
图3-6展示了一个写传输失败并在完成时出现错误的例子。
6.2 读传输的错误响应
读传输也可能以错误响应完成,表明没有有效的读数据可用。图3-7展示了一个以错误响应完成的读传输。
6.3 PSLVERR的映射
当进行桥接时:
-
从AXI到APB:一个APB错误被映射回RRESP/BRESP = SLVERR。这是通过将读操作时PSLVERR映射到AXI信号的RRESP[1],以及写操作时映射到BRESP[1]来实现的。
-
从AHB到APB:PSLVERR被映射回HRESP = ERROR,用于读操作和写操作。这是通过将PSLVERR映射到AHB信号的HRESP[1]来实现的。
8. 保护单元支持
为了支持复杂的系统设计,通常需要互连和系统中的其他设备提供对非法事务的保护。对于APB接口,这种保护由PPROT[2:0]信号提供。
访问保护有三个级别:
普通或特权(Normal or privileged),PPROT[0]
- 低电平(LOW)表示普通访问
- 高电平(HIGH)表示特权访问
这种访问由某些master用来指示其处理模式。特权处理模式通常在系统中具有更高级别的访问权限。
安全或非安全(Secure or non-secure),PPROT[1]
- 低电平表示安全访问
- 高电平表示非安全访问
在需要更高程度区分处理模式的系统中使用。
注意 这个位被配置为,当它是高电平时,事务被认为是非安全的;当是低电平时,事务被认为是安全的。
数据或指令(Data or Instruction),PPROT[2]
- 低电平表示数据访问
- 高电平表示指令访问 这个位提供了事务是数据访问还是指令访问的指示。
注意 这种指示被提供作为一个提示,并不在所有情况下都是准确的。例如,当一个事务包含指令和数据项的混合时。建议默认情况下,将访问标记为数据访问,除非它被明确知道是指令访问。
PPROT的主要用作安全或非安全事务的标识符。对于PPROT[0]和PPROT[2]标识符使用不同的解释是可以接受的。
9. 操作状态
图4-1显示了APB的转台转移图。
状态机通过以下状态运行:
-
IDLE(空闲) 这是APB的默认状态。
-
SETUP(设置) 当需要传输时,总线进入SETUP状态,其中适当的选择信号PSELx被断言。总线只在SETUP状态中保持一个时钟周期,并且在下一个时钟上升沿总是转移到ACCESS状态。
-
ACCESS(访问) 在ACCESS状态中断言使能信号PENABLE。在从SETUP到ACCESS状态的转换期间,地址、写入、选择和写入数据信号必须保持稳定。
ACCESS状态的退出由slave的PREADY信号控制:
- 如果PREADY被slave保持为低电平,则外设总线保持在ACCESS状态。
- 如果PREADY被slave驱动为高电平,则退出ACCESS状态,并且如果不需要更多的传输,则总线返回到IDLE状态。或者,如果另一个传输跟随,则总线直接转移到SETUP状态。