1.概述
APB(Advanced Peripheral Bus,先进外设接口)是AMBA3协议家族的一部分。它提供了一种低成本的接口,在优化最低功耗的同时降低了接口复杂度。由APB Bridge和APB上的从设备两部分组成,主要用于读带宽的外设。
为了让APB外设易于集成到任何设计流程中,APB规定所有信号必须在时钟上升沿触发时进行传递。
APB可以与AMBA的AHB与AXI进行接口拓展,可以使用APB来提供对外设的访问。AHB/AXI与APB之间通过Bridge进行连接。
2.APB总线传输
(1)信号描述
(2)APB的状态机
(图片来源:《AMBA3 APB Protocol v1.0 Specification》)
状态说明:
IDLE:APB的默认状态
SETUP: 建立状态。当有数据需要进行传输时,就会进入建立状态。在此状态下,选择信号PSELx会在时钟的上升沿被拉高,同时使能信号PENABLE保持低电平。该状态在保持一个时钟周期后,在下一个时钟的上升沿,状态机无条件由此状态跳转至ACCESS状态。
ACCESS:访问状态。该状态下,使能信号PENABLE被拉高,同时地址信号PADDR、写信号PWRITE以及选择信号PSEL保持稳定。若是有等待传输,则在等待信号PREADY=0时不会开始数据的传输,直到PREADY=1时数据才会开始传输。
(3)写操作
①无等待的写传输(Write transfer with no wait states)
当时钟上升沿到来时,地址信号PADDR、写信号PWRITE以及选择信号PSEL同时被拉高。数据传输的第一个周期称为建立阶段(setup phase)。在下一个时钟的上升沿,使能信号 PENABLE被拉高。此时进入访问阶段(access phase),在此阶段,地址信号、数据和控制信号保持有效。数据的传输在此周期结束时完成。
使能信号PENABLE在传输结束时拉低。选择信号PSELx也会被拉低,除非同一设备在这笔传输之后又立即有另一笔数据要传输。
②有等待的写传输(Write transfer with wait states)
与无等待传输不同,加入了PREADY信号。在使能信号PENABLE有效时,若PREADY为低,数据就不会开始传输,直到PREADY被拉高才开始传输。相当于将数据写入的时间延迟了n个周期,n为PREADY为低的周期数。
写操作时,在某个时钟上升沿时PADDR、PWRITE和PSEL同时被拉高。在这的下一个周期的上升沿,PENABLE也会被拉高。不同的是,无等待传输会在PENABLE被拉高是立即开始传输,而等待传输则需要等到PREADY被拉高后才开始传输。
(4)读操作
①无等待的读传输(Read transfer with no wait states)
与无等待的写传输类似,只是在第一个时钟上升沿是PWRITE拉低,表示进行的是读传输。
需要注意的是,slave必须在读传输结束之前提供数据。
②有等待的读传输(Read transfer with wait states)
同有等待的写传输,PWRITE拉低,不再赘述。注意有一个细节,在进行有等待的写操作的时候,在第一个时钟周期,给出地址PADDR,并且将写信号PWRITE和选择信号PSEL拉高的同时,就要把要写入slave的数据准备好,只是要等到slave的PREADY信号拉高后才会被写入;而在有等待的读操作时,由于是从slave中读出数据,所以当使能信号PENABLE为高的同时,若PREADY为低电平,表示此时的slave还没有准备好将这个数据读出(可能正在进行写入操作),必须等到PREADY为高电平的时候,Data才会给出。如下图所示。
综上,可以看出有等待传输与无等待传输的差别在于是否有从设备发出的PREADY信号来控制数据传输的启动。无等待传输时,一笔数据在两个时钟周期就能传输完毕;而有等待传输时,一笔数据的传输需要额外等待PREADY为0的周期数。