文章目录
- APB 总线历史
- 1.1 APB 总线介绍
- 1.1.1 APB 使用场景
- 1.1.2 APB 信号列表
- 1.1.3 APB 状态机
- 1.2 APB 传输时序
- 1.2.1 APB 写传输时序
- 1.2.1.1 Write transfer with no wait states
- 1.2.1.2 Write transfer with wait states
- 1.2.2 APB 读时序
- 1.2.2.1 Read transfer with no wait states
- 1.2.2.1 Read transfer with wait states
- 1.2.3 Error Respond
- 1.2.3.1 Error response Write transfer
- 1.2.3.2 Error response Read transfer
- 1.2.3.3 Mapping of PSLVERR
APB 总线历史
ARM APB总线(Advanced Peripheral Bus)是ARM公司推出的一种高速、低功耗的外设总线。它主要用于连接处理器和外设之间的通信,具有简单、灵活、可靠等特点。以下是APB总线的发展历史:
- APB v1.0:最初的APB总线发布于1996年,它是一种基于8位数据传输的低速总线,主要用于连接一些简单的外设。
- APB v2.0:随着ARM处理器性能的提升,APB总线也在不断升级。1998年,APB v2.0发布,它支持16位数据传输,速度提高了一倍,同时增加了一些新的特性。
- APB v3.0:2000年,APB v3.0发布。它进一步提高了总线的速度和可靠性,并增加了一些新的特性,如支持burst传输和split-transaction。
- APB v4.0:随着SoC(System on Chip)的广泛应用,APB总线也在不断演进。2003年,APB v4.0发布,它支持更高的数据传输速度和更多的特性,如支持DMA(Direct Memory Access)传输和pipelined burst传输。
- AMBA3 APB:2004年,ARM发布了AMBA3协议,这是一种新的总线架构,它包括了APB、AXI(Advanced eXtensible Interface)和ATB(Advanced Trace Bus)三种总线。其中,APB总线成为AMBA3协议中的低速总线,主要用于连接一些简单的外设。
- AMBA4 APB:2010年,ARM发布了AMBA4协议,这是一种全新的总线架构,它针对SoC的需求进行了优化,支持更高的数据传输速度和更多的特性。在AMBA4协议中,APB总线仍然作为低速总线的角色存在,但它的性能和可靠性得到了进一步提升。
以上是APB总线的发展历史,随着ARM处理器和SoC的不断发展,APB总线也将不断演进和完善。
—以上内容来自ChatGPT
1.1 APB 总线介绍
1.1.1 APB 使用场景
在SOC设计中,APB 一般作为IP的配置接口,包括低速外设如 I2C, UART, I2S等,也包括 DDR, PCIe, Ethernet 等高速IP,可以方便的实现CPU对外设IP的寄存器配置。系统中一般会实现一个AXI2APB 或者 AHB2APB 的桥接器将 APB 口挂载在系统上。
1.1.2 APB 信号列表
Y: Mandatory
N: Must not be preset
O: Optional for inputs and outputs
OO: Optional for output ports, mandatory for inputs
C: Conditional, must be present if the property is True
OC: Optional conditional, optional but can only be present if True
Signal | Source | Description |
---|---|---|
PCLK | 时钟源 | 系统时钟,传输发生在上升沿 |
PRESETn | 复位源 | 复位信号,低使能 |
PADDR | APB桥 | 地址信号,最高可达32位 |
PSELx | APB桥 | 由APB bridge产生的信号,针对每一个Peripheral Bus Slave片选信号,表示x从机是否被选中 |
PENABLE | APB桥 | 使能信号,标记传输使能 |
PWRITE | APB桥 | 读/写控制信号,高位写,低为读 |
PWDATA | APB桥 | 写数据 |
PREADY | 从机 | 标记从机是否已将数据发送到总线,高为ready |
PRDATA | 从机 | 读数据 |
PSLVERR | 从机 | 故障信号,高为发生故障 |
APB 总线架构不支持多个主模块,其唯一的主模块(master)就是 APB桥, 此外,在 APB 总线中分别有 PWDATA
和 PRDATA
,但这并不表示它支持同时读写。
1.1.3 APB 状态机
- 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;
1.2 APB 传输时序
1.2.1 APB 写传输时序
写传输分为不带等待信号的写,和带等待信号的写。
1.2.1.1 Write transfer with no wait states
- T1 时刻 APB 将地址信息 PADDR 和写的数据 PWDATA 准备好,拉高 PWRITE 表示进入写,同时拉高 PSEL,从 IDLE 进入 SETUP;
- T2 时刻也就是下一个时钟周期拉高 PENABLE,使得状态进入 ACCESS;
- T3 时刻检测到 PREADY 被拉高,也就是说 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低。
1.2.1.2 Write transfer with wait states
- T1 时刻 APB 将地址信息 PADDR 和写的数据 PWDATA 准备好,同时拉高 PSEL,从 IDLE 进入 SETUP
- T2 时刻也就是下一个时钟周期拉高 PENABLE,使得状态进入 ACCESS
- T3 时刻检测到 PREADY 为 0,也就是说 Slave 还没有接收完数据,所以在此刻,下面信号必须保持,以便 Slave 能够继续采样:
- PADDR 地址信号
- PWRITE 数据方向信号
- PSEL 片选信号
- PENABLE 使能信号
- PWDATA 数据
- T4 时刻 PREADY 依然 为 0,所以还是保持不变
- T5 时刻,PREADY 为 1,说明 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低
注意:即便是传输结束了,Address 和 data 信号也不会立即改变,直到下一次传输才会刷新新的地址和数据信号,这样做的原因是减少功耗;
1.2.2 APB 读时序
1.2.2.1 Read transfer with no wait states
- T1 时刻 APB 将地址信息 PADDR 准备好,拉低 PWRITE 表示进入读,同时拉高 PSEL,从 IDLE 进入 SETUP;
- T2 时刻也就是下一个时钟周期拉高 PENABLE,使得状态进入 ACCESS;
- T3 时刻检测到 PREADY 被拉高,也就是说 Slave 已经完成收据发送,PRDATA 上就是来自 Slave 的数据,传输完成;PENABLE 拉低,PSEL 拉低。
1.2.2.1 Read transfer with wait states
时序过程和上述一样,只不过 PREADY 被拉低了两个周期,真正从 Slave 读的数据到 T5 时刻才真正有效;
1.2.3 Error Respond
在读和写的过程,可能出现错误,错误通过 PSLVERR 信号来指明;APB外围设备不要求必须支持PSLVERR引脚,当不使用该引脚时,应被置低
1.2.3.1 Error response Write transfer
下面这个是写失败后的时序:
可以看到,在写失败后,PSLERR 信号被拉高了
1.2.3.2 Error response Read transfer
下面这个是读失败后的时序:
读失败后,PRDATA 上的数据不再有效。
1.2.3.3 Mapping of PSLVERR
如果发生了失败的情况 PSLVERR 信号会反馈到桥接的 AHB/AXI 总线上的回复信号上。
推荐阅读:
https://blog.csdn.net/zhoutaopower/article/details/103729440