一、前言
在之前的文章中,我们详细地介绍了AHB的相关内容,在这篇文章里我们会开始APB总线的学习,由于APB总线协议的内容真的非常少(手册才34页,比起那些动辄成百上千页的手册来说真的太友好啦),我们会在这一篇文章中全部讲完。
文章合集:AMBA总线协议(0)——目录与传送门
二、什么是APB总线
三、APB 传输
1、APB 写传输
APB写传输包括两种类型:无等待状态写传输和有等待状态写传输:
1.1 无等待状态写传输
在时钟上升沿后,改变地址、数据、写信号和选择信号
(1)T1周期:写传输开始于地址总线信号 PADDR、写数据信号 PWDATA、访问方向信号 PWRITE 和选择信号 PSEL。这些信号在 PCLK 的上升沿寄存。T1 周期称为写传输的建立周期。
(2)T2周期:在 PCLK 的上升沿寄存使能信号 PENABLE 和准备信号 PREADY。
① 当确认时,使能信号 PENABLE 表示传输访问周期的开始。
② 当确认时,准备信号 PREADY 表示在 PCLK 的下一个上升沿从设备可以完成传输。
(3)地址总线信号 PADDR、写数据信号 PWDATA 和控制信号一直保持有效,直到在 T3周期完成传输后,结束访问周期。
(4)在输出结束后,使能信号 PENABLE 变成无效。选择信号 PSEL 也变成无效,除非相同的外设立即开始下一个传输,这些信号才重新有效。
1.2 有等待状态写传输
上图说明了从设备如何使用准备信号 PREADY 扩展传输。在访问周期,当使能信号 PENABLE 为高时,可以通过拉低准备信号 PREADY 来扩展传输。
下面这些信号保持不变:
(1)地址信号,PADDR
(2)访问方向信号,PWRITE
(3)选择信号,PSEL
(4)使能信号,PENABLE
(5)写数据信号,PWDATA
(6)写选通信号,PSTRB
(7)保护类型信号,PPROT
当使能信号 PENABLE 为低时,准备信号 PREADY 可以为任意值。确保外部器件使用两个固定的周期来使使能信号 PREADY 为高。
注意:建议在传输后不要立即更改地址和写信号,而是保持稳定,直到发生另一次访问。这降低了功耗。
2、APB 读传输
APB 读传输包括无等待状态读传输和有等待状态读传输:
2.1 无等待状态读传输
上图显示了无等待状态读传输。图中给出了地址信号 PADDR、访问方向信号 PWRITE、选择信号 PSEL 和使能信号 PENABLE 的。在读传输结束以前,从设备必须主动提供数据。
2.2 有等待状态读传输
下图展示了PREADY信号如何扩展传输。如果在访问阶段PREADY被驱动为低,则传输被扩展。该协议确保以下内容在其他周期中保持不变:
(1)地址信号:PADDR
(2)访问方向信号:PWRITE
(3)选择信号:PSEL
(4)使能信号:PENABLE
(5)保护类型信号:PPROT
3、错误传输
在传输过程中,可以使用 PSLVERR 信号表示 APB 传输的错误条件。在读和写的交易过程中,可能发生错误条件。
在一个 APB 传输中的最后一个周期,当PSEL、PENABLE和PREADY信号都为高时,PSLVERR信号才是有效的。
当外设接收到一个错误的交易时,外设的状态可能发生改变。当接收到一个错误时,写交易并不意味着没有更新外设内的寄存器;当接收到一个错误时,读交易能够返回无效的数据。对于一个读错误,并不要求外设将数据总线驱动为0 。
3.1 读传输和写传输的错误响应
(1)读传输错误
(2)写传输错误
3.2 PSLVERR 映射
(1)从 AXI 到 APB
将一个 APB 错误映射到 RRESP/BRESP = SLVERR,通过PSLVERR 映射到 RRESP[1] 信号(用于读)和 BRESP[1] 信号(用于写)来实现该映射。
(2)从 AHB 到 APB
用于读和写,将 PSLVERR 信号映射到 HRESP = SLVERR,通过将 PSLVERR 信号映射到AHB 信号 HRESP[0]来实现该映射。
四、操作状态
1、IDLE(初始状态)
表示空闲,这是默认的APB状态。
2、SETUP(建立状态)
表示建立。当请求传输时,总线进入 SETUP状态,设置选择 PSELx。总线仅在 SETUP 状态停留一个时钟周期,并在下一个时钟周期进入 ACCESS状态。
3、ACCESS(访问状态)
表示访问,这里多提一句,这是AMBA 3 的协议,在AMBA 2 中这个状态为ENABLE状态,所以如果看到 ENABLE 状态,这是因为使用的是AMBA 2的文档。在ACCESS 状态中使能信号 PENABLE 置为1。在从 SETUP 状态到 ACCESS 状态转变的过程中,地址信号、写信号、选择信号和写数据信号保持不变。是否从 ACCESS 状态退出,由器件的准备信号 PREADY 控制。
(1)如果准备信号 PREADY为低,保持 ACCESS 不变。
(2)如果准备信号 PREADY为高,则退出 ACCESS 状态。如果此时没有其他传输请求,总线返回 IDLE 状态,否则进入 SETUP状态。
五、总结
在本文中,我们介绍了 AMBA APB 协议,分别介绍了APB传输(读传输,写参数,错误传输),其中读写又可以分别分成有等待状态和无等待状态,最后介绍了APB的操作状态。APB相对于AHB来说会简单很多,但是也是非常有用的。至此我们已经介绍了APB和AHB,接下来还有本系列最后的AXI协议,也是本系列最重要的部分。(毕竟笔者是学FPGA的,前者只是用于Soc,但AXI哪里都有)