目录
1.APB 协议
2.APB信号列表
3.数据传输
3.1写传输(2种)
3.1.1 无等待状态的写传输
3.1.2有等待状态的写传输
3.2写选通信号 (PSTRB)
字节通道映射
3.3读传输(2种)
3.3.1 无等待状态的读传输
3.3.2有等待状态的读传输
时序说明
3.4错误响应
3.4.1 写传输
3.4.2读传输
4.信号有效性
说明:
1.APB 协议
APB(高级外设总线)协议是一种低成本接口,针对最低功耗和接口复杂性最小化进行了优化。APB 的接口不是流水线化的(一次数据传输必须完全完成后,才能启动下一次数据传输。换句话说,APB的操作是逐步完成的,没有重叠或并行的传输阶段),它是一个简单的同步协议。每次传输至少需要两个时钟周期完成。
APB 的接口专为访问外设设备的可编程控制寄存器而设计,外设通常通过 APB 桥接到主内存系统。例如,可以使用从 AXI 到 APB 的桥接器将多个 APB 外设连接到 AXI 内存系统中。APB 传输由 APB 桥发起。APB 桥也称为请求方(Requester)。外设接口响应传输请求,外设也被称为完成方(Completer)。
2.APB信号列表
信号名称 | 来源 | 宽度 | 描述 |
---|---|---|---|
PCLK | 时钟源 | 1 位 | 时钟信号,所有 APB 信号与 PCLK 的上升沿同步。 |
PRESETn | 系统总线复位信号 | 1 位 | 复位信号,低电平有效,通常直接连接到系统总线复位信号。 |
PADDR | 请求方 (Requester) | ADDR_WIDTH (≤32 位) | 地址总线,用于表示字节地址,必须保持稳定直到传输完成。 |
PENABLE | 请求方 (Requester) | 1 位 | 使能信号,指示 APB 传输的第二个周期或后续周期。 |
PWDATA | 请求方 (Requester) | DATA_WIDTH | 写数据总线,传输写入完成方的数据,可为 8 位、16 位或 32 位。 |
PRDATA | 完成方 (Completer) | DATA_WIDTH | 读数据总线,完成方在读周期传输数据,可为 8 位、16 位或 32 位。 |
PSELx | 请求方 (Requester) | 1 位 | 选择信号,用于选择对应的完成方 (Completer),指示数据传输需要访问该外设。 |
PWRITE | 请求方 (Requester) | 1 位 | 方向信号,高电平表示写操作,低电平表示读操作。 |
PREADY | 完成方 (Completer) | 1 位 | 准备就绪信号,完成方可延长传输,用于指示当前传输是否可以完成。 |
PSLVERR | 完成方 (Completer) | 1 位(可选) | 错误信号,高电平表示传输发生错误。 |
PSTRB | 请求方 (Requester) | DATA_WIDTH / 8 | 写选通信号,指示写传输中哪些字节有效。 |
PPROT | 请求方 (Requester) | 3 位 | 保护类型,包括普通、特权、安全访问和数据/指令访问类型。 |
PNSE | 请求方 (Requester) | 1 位 | 保护类型的扩展信号,支持领域管理扩展 (RME)。 |
PWAKEUP | 请求方 (Requester) | 1 位 | 唤醒信号,指示 APB 接口的活动。 |
PAUSER | 请求方 (Requester) | USER_REQ_WIDTH | 用户请求属性信号,最大宽度建议为 128 位。 |
PWUSER | 请求方 (Requester) | USER_DATA_WIDTH | 用户写数据属性信号,最大宽度建议为 DATA_WIDTH / 2 。 |
PRUSER | 完成方 (Completer) | USER_DATA_WIDTH | 用户读数据属性信号,最大宽度建议为 DATA_WIDTH / 2 。 |
PBUSER | 完成方 (Completer) | USER_RESP_WIDTH | 用户响应属性信号,最大宽度建议为 16 位。 |
APB 协议具有两个独立的数据总线:用于读取数据的 PRDATA和用于写入数据的 PWDATA。这些总线的宽度可以是 8 位、16 位或 32 位。读取数据总线和写入数据总线的宽度必须相同。
由于读取数据和写入数据总线没有各自独立的握手信号,数据传输无法同时进行,即不能并发传输。APB 使用非流水线的两阶段传输,包括 设置阶段 (Setup Phase) 和 访问阶段 (Access Phase)。
APB 接口具有单一的地址总线 PADDR,用于读和写的传输。PADDR表示字节地址, 可以与数据宽度不对齐,但其结果是不可预测的。例如,响应方(Completer)可能会使用未对齐的地址、对齐的地址,或者发出错误响应信号。
3.数据传输
所有显示的信号都在 PCLK 上升沿采样
3.1写传输(2种)
- 无等待状态的写传输
- 有等待状态的写传输
3.1.1 无等待状态的写传输
传输阶段描述:
-
设置阶段(Setup phase):
- 在 T1 时刻开始设置阶段,选择信号 PSEL 被置为有效。
- 此时,PADDR(地址)、PWRITE(写方向)以及 PWDATA(写数据)必须有效。
-
访问阶段(Access phase):
- 在 T2 时刻,PENABLE 信号被置为有效,进入访问阶段。
- 在 PCLK 的上升沿,PREADY 由响应方(Completer)置为有效,表示写数据将在 T3 时刻被接收。
- 在整个传输完成之前,PADDR、PWDATA 以及任何其他控制信号都必须保持稳定。
-
传输结束:
- 传输完成后,PENABLE 信号被释放(无效)。
- 如果没有向同一外设进行另一轮传输,PSEL 信号也会被释放(无效)。
3.1.2有等待状态的写传输
访问阶段中的延长: 通过控制 PREADY 信号来延长传输时间。
- 当 PENABLE 信号为高电平(有效)时,响应方可以通过将 PREADY 驱动为低电平(无效)来延长传输时间。
延长期间保持不变的信号:
在 PREADY 信号保持低电平的期间,下列信号保持不变:
- 地址信号(PADDR)
- 方向信号(PWRITE)
- 选择信号(PSELx)
- 使能信号(PENABLE)
- 写数据信号(PWDATA)
- 写选通信号(PSTRB)
- 保护类型信号(PPROT)
- 用户请求属性信号(PAUSER)
- 用户写入数据属性信号(PWUSER)
PREADY 的状态规则:
- 当 PENABLE 为低电平时,PREADY 信号可以取任意值。
- 这保证了那些固定两周期访问的外设可以将 PREADY 信号直接连接为高电平。
3.2写选通信号 (PSTRB)
PSTRB 信号用于在写数据总线上启用稀疏数据传输。每个 PSTRB 对应写数据总线的 1 个字节。当 PSTRB 被拉高时,它表示相应的字节通道包含有效数据。
字节通道映射
- 每 8 位的写数据总线上有一个写选通信号,因此 PSTRB[n] 对应于 PWDATA[(8n + 7):(8n)]。
- 图 3-3 显示了在 32 位数据总线上的这种关系。
对于读取传输,发起者(Requester)必须将所有的 PSTRB 信号拉低。
PSTRB 信号的存在与兼容性: PSTRB 是一个可选信号,一个 APB 外设可能只支持一部分访问类型,具体支持的访问类型需要在文档中说明,这意味着如果文档声明不支持稀疏写入(sparse writes),则所有 PSTRB 信号的组合可能是兼容的。
3.3读传输(2种)
- 无等待状态
- 有等待状态
所有信号都在 PCLK 的上升沿进行采样
3.3.1 无等待状态的读传输
无等待状态的读取传输时序
- 地址信号 PADDR、写入信号 PWRITE、选择信号 PSEL、使能信号 PENABLE 的时序与写传输部分中描述的相同。
- 对于读取传输,响应方(Completer)必须在读取传输结束前提供数据。
时序说明:在无等待状态的读取传输中,数据必须立即响应,不存在额外的延迟等待状态。
3.3.2有等待状态的读传输
图 3-5 展示了 PREADY 信号如何扩展传输。
有等待状态的读取传输时序
- 在访问阶段,如果 PREADY 被拉低,传输将被延长。
- 在 PREADY 保持为低电平期间,以下信号保持不变:
- 地址信号 PADDR
- 方向信号 PWRITE
- 选择信号 PSEL
- 使能信号 PENABLE
- 保护信号 PPROT
- 用户信号 PAUSER
时序说明
- 如图 3-5 所示,在有等待状态的读取传输中,PREADY 可以增加两个周期。然而,实际上可以增加任意数量的附加周期,从零个周期开始。
这意味着在等待状态期间,数据传输可以根据外部设备的响应时间灵活调整,直到传输完成。
3.4错误响应
PSLVERR 可以用于指示 APB 传输中的错误条件,错误条件可能发生在读或写传输中。
PSLVERR 仅在 APB 传输的最后一个周期有效,即当 PSEL、PENABLE 和 PREADY 都为高电平时。建议当 PSEL、PENABLE 或 PREADY 为低电平时,PSLVERR 被驱动为低电平。
发生错误的传输可能会或不会改变外围设备的状态,这取决于具体的外围设备设计。当写传输发生错误时,这并不意味着外围设备中的寄存器没有被更新。当读传输发生错误时,可能会返回无效数据。外围设备没有要求在读错误时将数据总线驱动为全零,请求者接收到读传输的错误响应后,仍然可能使用返回的数据,完成者不能依赖错误响应来阻止读取 PRDATA 上的值。
完成者不需要支持 PSLVERR。如果完成者不支持 PSLVERR,则适当的输入会被连接为低电平。
3.4.1 写传输
图 3-6 显示了一个写传输失败并以错误完成的示例
3.4.2读传输
读传输也可以以错误响应完成,表明没有有效的读数据可用。
3-7 显示了一个读传输以错误响应完成的示例
PSLVERR的映射
当进行桥接时:
- 从AXI到APB:APB上的PSLVERR错误会映射回AXI的RRRESP(读响应)和BRESP(写响应)。
- 从AHB到APB:APB上的PSLVERR错误会映射回AHB的HRESP(读写响应)。
这说明了当APB总线发生错误时,PSLVERR信号会通过桥接机制映射到其他总线(如AXI或AHB)的相应错误响应信号。
4.信号有效性
以下是信号有效性要求
信号 | 始终有效 | 当 PSEL 被激活时必须有效 | 当 PSEL 和 PENABLE 被激活时必须有效 | 当 PSEL、PENABLE 和 PREADY 被激活时必须有效 | 说明 |
---|---|---|---|---|---|
PSEL | ✓ | 选择信号,指示外设被选中进行操作 | |||
PWAKEUP | ✓ | 唤醒信号,可能用于低功耗管理 | |||
PADDR | ✓ | 地址 | |||
PENABLE | ✓ | 指示当前周期是事务的有效部分 | |||
PWRITE | ✓ | 事务是写操作(1)还是读操作(0) | |||
PREADY | ✓ | 目标是否准备好完成事务的信号 | |||
PWDATA | ✓ | 写数据,在有效的写数据线上传输,仅在写操作时有效 | |||
PRDATA | ✓ | 读数据,仅在读操作时有效 | |||
PSLVERR | ✓ | 从设备错误信号,表示事务发生错误 | |||
PPROT | ✓ | 保护信号,指示访问类型(如读/写、用户/特权模式) | |||
PNSE | ✓ | 非安全标志,可能指示事务是否为非安全模式 | |||
PAUSER | ✓ | 暂停或停顿请求信号 | |||
PSTRB | ✓ | 字节使能信号,指示数据的哪些字节有效 | |||
PWUSER | ✓ | 用户定义信号,仅在写操作时有效 | |||
PRUSER | ✓ | 用户定义信号,仅在读操作时有效 | |||
PBUSER | ✓ | 用户定义信号,可能用于附加信息传输 |
说明:
- 始终有效: 表示该信号在任何时刻都必须有效。
- 当 PSEL 被激活时有效: 表示该信号在 PSEL 被激活时必须有效。
- 当 PSEL 和 PENABLE 被激活时有效: 表示该信号在 PSEL 和 PENABLE 都被激活时必须有效。
- 当 PSEL、PENABLE 和 PREADY 被激活时有效: 表示该信号在 PSEL、PENABLE 和 PREADY 都被激活时必须有效。