1.协议详解
APB接口用在低带宽和不需要高性能总线的外围设备上。 APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。APB可以与AMBA高级高性能总线(AHB-Lite) 和AMBA 高级可扩展接口 (AXI)连接;
APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。其特性包括:两个时钟周期传输;无需等待周期和回应信号;控制逻辑简单,只有四个控制信号。
1.1协议发展
协议已经从APB2.0发展到现在的APB4.0。具体区别如下;
APB2.0 :该版本协议定义基本的接口信号(具体可见端口信号章节,删除APB3.0有的接口就行);
APB3.0:增加信号PREADY用以指示slave准备好数据,增加信号PSLAVERR代表传输错误;
APB4.0:增加信号PROT保护类型,增加信号PSTRB来支持byte级的访问;
需要注意的是高版本是向下兼容低版本的;如APB4.0里面是拥有APB3.0里所有的特点的;
1.2master与slave区别
对于apb中master与slave之间的关系;可以这么理解,apb作为一捆线(端口列表里面就是一根根线),连接master与slave,如下图;
中间两个箭头就是APB的内容;master主动发起一次操作,slave配合master完成一次传输,还是可以认为slave作为内存,master来这边取东西;
2.APB3.0端口列表
信号名 | 来源 | 作用说明 |
---|---|---|
pclk | 时钟源 | 系统时钟,上升沿触发 |
presetn | 复位源 | 复位信号,低有效复位 |
paddr | master | 读写地址 |
psel | master | 选择信号,只有在该位为高的slave才会进行读写 |
penable | master | 读操作下,指示master可接受数据;写操作下,指示写数据有效 |
pwrite | master | 读写信号,高为写,低为读 |
pwdata | master | 写数据 |
pready(apb3.0加的) | slave | slave是否已经发送读数据到master,或获取到master的写数据; |
prdata | slave | slave读数据 |
pslverr(apb3.0加的) | slave | 错误信号,代表了发生了故障,如地址错误等 |
一般来说apb信号都是以p开头的一组信号;
3.读写时序
1.写数据无等待
解释如下:
在第2拍master将写地址(paddr),写指示信号(pwrite),写数据(pwdata)等信号发送给slave,第3拍slave返回pready信号,代表已经将写数据存下;
2.写数据有等待
解释如下;
第一拍于无等待的一致,在第二拍由于slave没有做好接受写数据的准备,所以将pready置底,此时master需要保持总线信号(paddr/pwdata/psel/pwrite/penable)待到slave给出pready,slave成功接收数据,后方可释放总线;
3.读数据无等待
第2拍master给出指示,第3拍slave将数据返回到总线,并给出pready代表读数据已经返回,总线可以进行下一次传输;
4.读数据有等待
同无等待操作;
中间插入等待时序,master需保持相关信号不变,等到slave侧成功返回数据已经pready信号后方可释放总线;
总结一下:
- pwrite信号作为master侧读写的区别指示;
- penable既代表了master侧的读ready,又代表了写侧的ready;master侧的penable与slave侧返回的pready进行握手,该握手过程可以是写动作的握手,也可以是读过程的握手;
- slave侧可通过拉低pready实现master的读写等待动作,也就是可以理解由于slave侧的原因,拉低了pready,使得握手动作被延迟了。
slaverr、pstrb、pprot信号一般是不用的,这里就不提了;多说几句,psel信号的存在是因为在系统中可能存在许多外设拥有相同的apb总线,此时我们的master侧为了能确保apb的读写操作只发送给特定的一个外设,所以加入了这个信号;