本系列内容来自ARM官方Spec
APB协议是一个低成本的接口,为了优化功耗并降低接口复杂性。APB接口不是流水线的,是一个简单的同步协议。每次传输至少需要两个周期才能完成。
APB接口用于访问外围设备的可编程控制寄存器。APB外设通常使用APB桥接器连接到主存系统。例如,从AXI到APB的桥接器可用于将多个APB外设连接到AXI存储系统。APB传输由APB桥接器发起。APB桥接器也可以称为Requester。外设接口响应请求。APB外设也可以称为Completer。本规范将使用Requester和Completer。
APB接口的某些信号是固定宽度的,某些信号是可变宽度的。当宽度不是固定值时,可认为它使用了某种特性。如果该值为0,意味着该信号未出现在接口上。
信号 | 源 | 位宽 | 描述 |
---|---|---|---|
PCLK | CLOCK | 1 | 时钟,所有APB信号都是基于上升沿操作的 |
PRESETn | 系统总线复位 | 1 | 复位。PRESETn是低电平有效的。 |
PADDR | Requester | ADDR_WIDTH | 地址。最多32bits |
PPROT | Requester | 3 | 保护类型,PPROT表示事务的正常、优先级或安全保护等级,以及该事务是数据访问还是指令访问。 |
PSELx | Requester | 1 | 选中信号。Requester为每个Completer产生HSELx信号。该信号表示该Completer被选中,并进行一次数据传输。 |
PENABLE | Requester | 1 | 使能信号,表示APB传输的第二个和后续时钟周期。 |
PWRITE | Requester | 1 | 方向,高电平表示一次写操作,低电平表示一次读操作 |
PWDATA | Requester | DATA_WIDTH | 写数据,该总线在PWRITE为高电平时被APB桥驱动。可以是8,16,32bits宽。 |
PSTRB | Requester | DATA_WIDTH/8 | 写选通。PSTRB表示在写传输过程中要更新的字节通道。对于写数据总线的每8位,都有一个写选通。PSTRB[n]对应PWDATAI[(8n + 7):(8n)]。在读取传输期间,PSTRB必须无效。 |
PREADY | Completer | 1 | 准备信号,由Completer驱动来扩展一次APB传输。 |
PRDATA | Completer | DATA_WIDTH | 读数据。在PWRITE为低电平时被Completer驱动,可以是8,16,32bits宽。 |
PSLVERR | Completer | 1 | 传输错误,PSLVERR是一个可选的信号,它可以被Completer拉高,以指示APB传输上的错误情况。 |
PWAKEUP | Requester | 1 | 唤醒,PWAKEUP表示与APB接口关联的任何活动。 |
PAUSER | Requester | USER_REQ_WIDTH | 用户请求属性。建议PAUSER的最大宽度为128位。 |
PWUSER | Requester | USER_DATA_WIDTH | 用户写数据属性。建议PWUSER的最大宽度为DATA_WIDTH/2。 |
PRUSER | Completer | USER_DATA_WIDTH | 用户读数据属性。建议PRUSER的最大宽度为DATA_WIDTH/2。 |
PBUSER | Completer | USER_RESP_WIDTH | 建议PBUSER的最大宽度为16位。 |
地址总线:APB的读写传输都只用一个地址总线。
数据总线:APB对于读传输和写传输有2个相互独立的总线,总线宽度可以是8,16,32bits宽,读写数据总线必须一样宽。数据传输不能同时出现因为读写数据总线没有独立的握手信号。