APB协议
一、APB协议的介绍
1.1APB的产生
APB的全称为Advanced Peripheral Bus(高级外设总线)。顾名思义,其设计之初的主要目的就是用该协议连接外设。但由于APB总线自发布至今已经过去了20多年了,因此以现在的眼光看,该总线没有什么高级一说,其连接的外设也往往是低速且低功率的外设,如I2C、UART、SPI等,除了连接低速外设之外,APB总线还广泛用于配置各种IP的寄存器(这些IP预留用户控制信号,由软件进行配置,这个时候就可以选择使用APB总线来配置这些寄存器)。
1.2APB的功能
一个典型的APB总线架构如下图所示:APB使用的目的是实现与外围低功耗设备,低速设备进行数据传输。在APB总线中,唯一的M为APB bridge,其他的一些低速低功率的外围设备均为slave。

此外为了使得APB能够容易的被整合进大部分的设计流程中,APB规定所有的信号必须在时钟的上升沿进行传递。
1.3APB的功能
- 低成本。
- 低功耗。
- 低带宽。
- 无流水线结构。
- 所有信号的跳变仅与时钟上升沿相关。
- 每次传输至少需要两个时钟周期。
1.4APB的信号

APB 协议有两条独立的数据总线,一条用于读数据,一条用于写数据。总线的宽度可达 32 位。因为总线没有自己单独的握手
信号,所以数据传输不可能同时发生在两条总线上。
二、APB协议的时序
写操作时序:

可以看到写操作非常的简单:
-
T2->T3这一个周期
-
- PSEL信号拉高,意味着要发起一次新的传输了。
- PWRITE信号为1,因此此次传输为写操作。
- PWDATA为要传输的数据,PADDR为要写的地址。二者都应该保持不变,直到此次传输结束。
- 而PSEL拉高的第一个时钟周期,PENABLE应该为0。
-
T3->T4这一个周期
-
- PSEL信号继续拉高
- PWRITE、PADDR、PWDATA应该保持不变
- PENABLE信号拉高,用于代表这已经是写传输的第二个周期了
至此一次传输结束。可以看到,APB对每一笔数据的传输,需要花费两个时钟周期。且APB的数据传输不支持流水线操作(即不可以重叠)。因此APB是非常低效的。
理论上写数据完全可以同时给出写地址和写数据,一拍就搞定,为什么APB要大费周章弄成两拍呢?这主要是那个年代的芯片本身的制程工艺以及片上互连线导致的。一个周期可能无法完成从Master向Slave写入数据的整个操作流程。因此采用两拍的方式,第一拍告诉你,我要开始传输啦!(称为setup phase)第二拍才真正的完成数据的传输。(称为access phase)。
如果Master想要马上发起一次新的传输,可以不拉低PSEL让其继续为1,但是必须要将PENABLE拉低。否则Slave侧的判断逻辑就会出现问题!
由于APB向下兼容,这一历史遗留问题一直延续至今。不过好在APB应用的场景本身就是配置寄存器等操作,因此多花一个时钟周期也没什么大不了的。
APB3在APB2的基础上增加了两个端口,PREADY和PSLVERR。PREADY用于扩展APB的传输。PSLVERR是一个错误反馈信号,表示当前传输发生了错误。

当PSEL和PENABLE都为高的时候,PREADY为低,说明slave没有准备好,再给他一点时间,在T4时刻这条虚线,发现PSEL和PENABLE为高,但是PREADY还是为低,继续等待。在T5时刻这条虚线,发现PSEL,PENABLE,PREADY都为高,说明这个时候采样的Data是我们想要读取的data。


三、工作状态

IDLE
APB 的默认状态。
SETUP
当需要传输时,总线会进入 SETUP 状态,此时响应的选择信号 PSELx 拉高。总线仅在 SETUP 状态下保持一个时钟周期,并始
终在时钟的下一个上升沿进入 ACCESS 状态。
ACCESS
使能信号 PENABLE 在 ACCESS 状态下拉高。在从 SETUP 到 ACCESS 状态的转换过程中,写入、地址、选择和写入数据信号必
须保持稳定。
退出 ACCESS 状态由从机的 PREADY 信号控制:
-
如果 PREADY 被从机保持为低电平,则外围总线保持在 ACCESS 状态。
-
如果 PREADY 被从机驱动为高电平,则退出 ACCESS 状态,如果不再需要传输,则总线返回 IDLE 状态。或者,如果随后
有另一次传输,则总线直接进入 SETUP 状态。
PREADY 被从机驱动为高电平,则退出 ACCESS 状态,如果不再需要传输,则总线返回 IDLE 状态。或者,如果随后
有另一次传输,则总线直接进入 SETUP 状态。

2万+

被折叠的 条评论
为什么被折叠?



