AMBA APB总线 学习笔记

时间:2024-05-19 09:12:50

APB:
主要用于寄存器和外设的访问
AMBA APB总线 学习笔记
APB的优点:
1、协议简单,方便模块设计,比如APB slave和APB MUX
2、功耗低,因为时钟频率低

APB2信号
AMBA APB总线 学习笔记

时序:
AMBA APB总线 学习笔记
AMBA APB总线 学习笔记
读操作跟写操作唯一不同的就是PWRITE信号

问题:PENABLE是干嘛的
AMBA APB总线 学习笔记
这个PENABLE是给组合逻辑用的

问题:APB2协议上的从器件没有ready信号,如果2 cycle响应不了怎么办?
对于APB来说,挂着的都是外设,访问和写入的都是寄存器,通过软件查询,也就是读的方式看状态寄存器里的值,来判断是否需要写入,整个过程不需要等待从器件的响应。

APB3引入了READY信号和SLAVE ERROR信号,
APB3相较于APB2多了PREADY和PSLVERR两个信号。在讲到APB2的时候提到系统通常是通过软件的方式去轮询Peripheral的status register(两个clock cycle),APB3加了硬件的解决方法,Slave通过PREADY信号直接来告诉maste示现在Slave已经READY了,可以接受读写操作,如果此时不READY,那么master就要wait到它Ready,这样就不需要软件时刻去轮询status register了。对于PSLVERR而言,加入了Slave反馈给master error response功能
APB3的读写时序:
AMBA APB总线 学习笔记
AMBA APB总线 学习笔记

APB2的从器件对上APB3的主器件bus interface,只要将PREADY接高,PSLVERR接低就行
即没有来自slave的wait-state和error

APB2的Master如何和APB3的slave互联?
APB2的master和APB3的slave相连接,会比较麻烦一点,因为APB2的master要求和它相连的slave会在access阶段的时候就要把读数据给它,但是APB3的slave有可能没办法马上给出读数据,所以就比较麻烦了,因此我们不建议这么互联!
对于这种情况,最好的方式是把master也改成APB3的master!

APB4的协议又在APB3的基础上加入了PPROT和PSTRB信号
AMBA APB总线 学习笔记
PPROT用于防止非法的访问,有三个bit,代表不同的含义
AMBA APB总线 学习笔记
一般不太用得上

为什么要定义这个信号?
对于CPU而言,可以工作在用户模式下也可以工作在特权模式下
对于支持trustzone的CPU,可以工作在secure world下,也可以工作在secure world下。
因为系统现在越来越复杂,一些外设也要求只能在secure下或者privileged模式下访问。

PSTRB信号:
支持sparse transfers
AMBA APB总线 学习笔记
PSTRB对于写来说,能对从器件说明哪些位是有效的
读的时候只要拉低就行了,因为这个信号只是针对写操作。

小结:
PPROT信号主要就是为了表示当前的这个访问/transaction是secure的还是non-secure的,从而和整个系统的security保持一致性。 PSTRB的信号的加入,能够使APB对某个byte进行读写操作。

APB4和APB3的兼容性问题
AMBA APB总线 学习笔记
对于APB4的master和APB3的slave互连时,最好的方式是把slave也改成APB4的!

【APB设计要点和规则】
一、APB协议的选择
1.1 APB不同协议的使用场景
前面我们讲过APB2,APB3,和APB4他们之间的区别,那么在实际使用的时候到底应该选择哪个协议?
APB2由于不支持ppready,也就是slave必须要及时响应,但是使用APB的模块基本都是慢速设备,往往没办法及时响应,因此APB2被淘汰了,不建议大家使用;
APB3适用于以AHB2,AHB-lite为基础的Bus系统,因为他们不支持secure/non-secure和write strobe,因此在这样的系统中没必要使用APB4;
APB4适用于以AHB5,AXI为基础的Bus系统中,因为他们都支持secure/non-secure的访问,而且AXI是支持write strobe的,所以这种情况下使用APB4是比较合适的。
1.2 APB协议和Arm处理器
在一个SoC系统中,如果用到Arm处理器的时候,那么SoC系统中的APB slave应该使用哪个协议?
Cortex-A/R处理器
对于Arm Cortex系列处理器来说,Cortex-A/R系列处理器有使用AXI,ACE,和CHI协议,支持secure/non-secure访问和Write Strobe,因此在一个基于Cortex-A/R处理器的SoC系统中,APB的slave使用APB4;
Cortex-M处理器
Cortex-M0/M0+/M3/M4使用AHB-lite协议,因此外设使用APB3更合适
Cortex-M7可以选择支持AXI协议,如果是支持AXI协议的话,外设选择APB4更合适
Cortex-M23和Cortex-M33使用AHB5协议,可以支持secure/non-secure,外设选择APB4更合适
!!!如果系统不支持secure/non-secure和Write Strobe的话,使用APB3是最好的选择

二、什么情况下产生Error response?
APB的外设可以选择产生或者不产生error response,如果不产生的话,只需要把连接APB外设的模块(比如APB bridge)对应PSLVERR端口接0即可
在以下情况下,APB的模块需要产生error response:
在访问APB外设的寄存器的时候,APB外设在功能设计的时候,认为此时应该产生error,具体情况要取决于外设的设计
对于APB4的外设,如果能支持secure的话,当外设的secure寄存器被non-secure的transfer访问的时候,这时候需要产生error
如果APB对unused(没有分配地址空间)的地址空间访问时候,这时候需要产生error。

三、关于APB的时钟频率
前面我们讲过APB的使用场景,一般情况下都是对寄存器的访问,或者一些慢速的外设(比如uart,SPI,I2C,gpio)才会使用。所以完全没必要使用很快的频率。以下列出了常见外设模块的传输频率:
UART
使用RS232通信标准,传输速率一般不超过20Kbps
使用RS422和RS485通信标准,传输速率最大为10Mbps
I2C
半双工,只有2根线。数据线和时钟线。
标准速度:100kbps
快速模式:400kbps
高速模式:3.4Mbps
SPI
全双工通信,传输速率比I2C快,可高达30Mbps
APB的时钟频率受两方面因素的影响:
AHB/AXI时钟频率
APB的外设一般是挂在AHB2APB,或者AXI2APB的bridge上,AHB/AXI的bus interconnect的频率比较高些,一般情况下,APB时钟频率是AHB/AXI时钟频率的n分频
外设的带宽
在定义芯片规范(spec)的时候,需要确定外设的带宽,然后再确定APB的时钟频率。以上面的外设为例的话,最快的也就是SPI了,以30Mbps传输速率来算,对于一个32-bit的APB Bus来说,跑个2M( > 30mbps/32-bit)的APB时钟频率也就够了。