AMBA-APB
- 数字设计
- 2025-11-15
- 48热度
- 0评论
APB是Advanced Peripheral Bus的缩写,APB是AMBA总线协议中最简单的一个,从名字也能看出这个总线是用在外设上的,一半是一些低速外设,例如UART等等。我认为理解APB的核心就是理解握手,而且握手在AHB和AXI中都会用到,其实握手也是一种思想一种方法,不仅在AMBA中有用,在其他领域也有使用。
APB的握手是通过master发出的PENABLE和PSEL信号和slave回复的PREADY完成的握手,一次成功的传输波形图如下

PSEL和PENABLE由master驱动,PREADY由slave驱动。当PSEL和PENABLE同时被使能时代表master发起了传输,其他的控制信号在此时是有效的,当slave使能PREADY时代表slave已经处理传输,当前传输结束,握手完成。
握手一定要理清楚依赖关系,不然写代码的时候就容易陷入混乱。首先PSEL和PENABLE都是master发起的,master什么时候使能这两个信号跟slave的状态无关,即使slave没有空闲master也可以发起一次传输。PSEL信号用于选中设备,因为一个系统可能由多个设备,所以每个设备都有一个PSEL信号用来作为这个设备的使能信号。当PSEL被使能时,APB总线上由master驱动的信号就都是有效信号了,PSEL被使能的阶段被称为setup阶段。master使能PENABLE时传输进入ACCESS阶段,这个阶段master开始等待slave的回复。
PREADY就是slave的回复,如果slave已经接收到setup阶段的数据并且完成了相应的操作(写入或者把读出数据放到总线上),slave就可以使能PREADY信号,代表传输完成,这时候master和slave的握手完成,一次传输完成。PREADY同样也跟master无关,一个slave可以一直使能。
总结一下就是两个点
- 传输由master发起,通过PSEL和PENABLE控制传输的状态。master发起传输不需要关注slave的状态,不过结束传输需要slave完成握手
- 传输的结束由slave控制,slave通过使能PREADY和master完成握手表示传输结束。slave可以随时使能PREADY
在slave使能PREADY的时候传输就已经完成了,所以这时候master可以发起下一次传输,准确地说是下一次传输的setup阶段,这时的波形图为
