一、APB总线介绍

APB总线是ARM公司早期推出的一款用于设备通信的分时独占总线,目前主要用于慢速外设的寄存器配置总线。APB总线结构简单、接口信号少,可以带来更低的资源和功耗,在目前主流SoC设计中仍然使用广泛。为了简化APB接口外设的集成设计难度,APB总线的信号转换和上升沿相关联,每次传输至少需要花费2个时钟周期。APB总线目前最新版本为APB3,相比于上一版本增加了PSLVERR信号,用于反馈Slave端的错误。

二、APB总线信号

APB总线有两个独立的数据总线pwdata和prdata,一个用于写数据,另一个用于读数据。总线位宽最高支持32bits,由于每个数据总线没有独立的握手信号,因此单一时间只能有一个传输事件发生,要么是读数据要么是写数据。下表是APB总线所有接口信号和说明。

信号

方向

信号说明

PCLK

时钟->总线

时钟,上升沿数据有效。

PRESETn

复位->总线

复位,低有效,该信号可直接和系统总线复位连接。

PADDR[31:0]

总线->Slave

APB总线地址,最大32bits,用于寻找。

PPROT[2:0]

总线->Slave

保护类型信号,用于表明数据传输、指令传输的保护等级,可设置三种不同等级:normal、privileged和secure,越后面保护等级越高。

PSELx

总线->Slave

Slave选中信号,总线产生该信号用于指示哪个Slave设备被选中,被选中的Slave才会产生写数据和读数据等有效传输。

PENABLE

总线->Slave

使能信号,用于使能总线传输,配合PSELx一起使用。

PWRITE

总线->Slave

该信号用于指示APB读写操作,“1”为写操作,“0”为读操作。

PWDATA[31:0]

总线->Slave

写数据,最大32bits宽度,只有PWRITE为高时才有效。

PSTRB[3:0]

总线->Slave

写字节使能,用于指示写数据中的哪些byte数据有效,Slave只会将byte有效的数据写入对应地址。

PREADY

Slave->总线

ready信号,该信号用于指示Slave端是否准备就绪。

PRDATA[31:0]

Slave->总线

读数据,最大32bits宽度,只有PWRITE为低时有效,Slave收到读操作后的返回数据。

PSLVERR

Slave->总线

该信号用于反馈Slave出现的错误,高有效。部分APB2及以下Slave不支持该功能,总线端接常值“0”处理。

APB4新增了PSTRB信号,利用PSTRB信号,可以传输以字节为单位长度的数据,例如Slave寄存器为8bits宽度,APB总线为32bits宽度,那么只需要将32bits其中的一个字节写入Slave,利用PSTRB信号来指示哪个字节为有效数据。PSTRB信号为4bits,每一个bit对应PWDATA中的一个字节,PSRTB[0]控制PWDATA[7:0],依次对应。对于读而言,该信号建议维持全“0”。

三、APB总线传输

3.1.立即写传输

立即写传输是指PREADY为高,Slave设备就绪的情况下,进行的写传输过程。其时序如下图所示,在T1时刻总线发起一次写传输,地址PADDR、PWDATA、PWRITE、PSEL同时改变,在PCLK的上升沿同时有效。T1时刻被称为本次传输的setup phase。

在T2时刻,使能信号PENABLE拉高有效,同时PREADY反馈总线设备就绪,数据在PCLK上升沿被寄存。T2时刻称为本次传输的access phase开始,PREADY拉高表示slave可以在下个上升沿完成本次传输。

PADDR、PWDATA和控制信号将会全部保持valid,直到T3时刻。T3时刻也被称为access phase的结束。PENABLE、PSEL信号会在T3时刻后拉低,表示传输的关闭或结束。如果后续还有传输进入,则该信号不会被拉低。

3.2 等待写传输

等待写传输是指当PREADY没有拉高有效时,总线发起了写传输的情况。该过程的setup phase和立即写传输相同,但在access phase开始时,由于PREADY为低,总线写传输不能继续进行,必须等待PREADY拉高有效后再继续。总线将会保持下列信号不变,直到PREADY为高:PADDR、PWRITE、PSEL、PENABLE、PWDATA、PSTRB和PPROT。

PRADY在PENABLE为低时,可以为任意数值,总线只会检查access phase开始后的PREADY情况。

3.3 读传输

读传输同样可按照PREADY情况分为立即读和等待读两种情况。立即读传输和立即写传输相似,在access phase的结束时刻,也就是T3的上升沿,将数据通过PRDATA返回,同时拉高PREADY有效。T3时刻结束后,PSEL、PENABLE等信号拉低表示传输结束。

需要注意的是,如果Slave未准备好数据,可以将PREADY拉低,直到请求地址的数据准备好以后再拉高PREADY,同时将DATA返回,如下图所示。

在access phase开始时,总线如果发现PREADY为低,则会将PADDR、PWRITE、PSEL、PENABLE、PPROT信号保持住,直到PREADY拉高。

3.4 错误响应

PSLVERR信号用于指示APB传输错误,该信号只在PSEL、PENABLE和PREADY同时为高时,也就是APB传输的最后一个时钟周期时判断是否有效。建议在未发生传输时将该信号保持低,只有在Slave发生内部错误或异常时,将该信号拉高一拍有效。

总线会将该错误信号传递回请求Master,如果Master是CPU、DSP等处理器,可能会导致Master进入异常状态,但Master未必会对产生错误的Slave进行操作,这需要根据具体情况进行分析。当一次写传输接收到error时,这并不表示写到的Slave数据没有被Slave接收;当读传输收到error时,对应的读数据应该被判定为无效。

上图分别是读和写传输发生错误的时序,部分APB外设不支持PSLVERR信号,或者交付的IP中不支持该信号,那么总线接口处可将该信号赋常值“0”。

对于APB发送的PSLVERR信号,转到AXI协议上对应为RRESP/BRESP = SLVERR,也就是将PSLVERR映射到RRESP[1]/BRESP[1]。

对于APB发送的PSLVERR信号,转到AHB协议上对应为HRESP=ERROR,也就是将PSLVERR映射到HRESP[0]。

四、总线保护

为了支持复杂系统设计,使用PPROT[2:0]来标识合法的互联和传输,抢占式总线很容易被监听,因此总线保护非常有必要。APB总线提供三层访问保护,PPROT[0]表示正常或私有传输,PPROT[1]表示安全或不安全传输,PPROT[2]表示数据还是指令传输,具体如下表所示。

PPROT[2:0]

保护等级

[0]

1:私有传输

0:一般传输

[1]

1:不安全传输

0:安全传输

[2]

1:指令传输

0:数据传输

上述几种模式按照SoC系统的保护要求进行划分,APB总线用于支持SoC系统中的处理器对于数据传输安全的要求,目前在MCU等嵌入式处理器中该信号仍有一定作用。但是,随着AHB和AXI总线的提出以及处理器的升级换代,该功能逐渐变得有些无用。并且,在有些情况下,该定义无法表示其含义,比如当一个混合指令发送到Slave端,传输包含数据和指令,此时无法标记该次传输为数据或指令都不太合适。目前来看,PPROT主要用于识别安全或非安全传输,而PPROT[0]和PPROT[2]的含义可以有不同的理解。

AMBA APB总线协议(APB4)相关推荐

  1. (原创)LEON3入门教程(四):基于AMBA APB总线的七段数码管IP核设计

    摘要:这一小节将介绍下如何设计用户自定义的APB IP,并将IP嵌入到SOPC中去.一个APB IP核的主要分为三个部分:逻辑单元.寄存器单元和接口单元.所设计的IP是一个简单的七段数码管显示IP,只 ...

  2. AMBA总线---APB总线协议

    APB(Advanced Peripheral Bus)是AMBA总线体系的一部分.相较于AMBA总线体系中的其他总线,APB总线具有低功耗,低复杂度的特征.APB总线主要应用于对性能要求不太高的低带 ...

  3. AMBA总线协议(一)——一文看懂APB总线协议

    0.AMBA总线概括 AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMBA总线协议(三)--一文看懂 ...

  4. [AMBA]AHB总线协议简介

    AHB总线协议简介 一.简介 AHB 总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-perfor ...

  5. AMBA总线协议 之 APB总线协议

    AMBA总线协议概念: AMBA(Advanced Microcontroller Bus Architecture) 总线是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有 ...

  6. AMBA总线—APB总线协议详解

    文章目录 一.APB总线介绍 1.1.什么是APB总线 1.2.典型的基于 AMBA 总线的系统架构 1.3.APB信号列表(重点) 二.APB总线传输(时序) 2.1.APB 状态机 2.2.写操作 ...

  7. 数字IC设计入门篇:APB总线协议学习心得

    声明:本文章是本人学习AMBA  APB协议的一些个人理解,仅用于学习交流之用.本人学习APB协议时参考的是ARM公司官方的APB协议技术规范文档(编号:IHI0024D).受限于本人的知识水平,本文 ...

  8. AMBA AHB总线协议详细说明(AHB5协议)

    一. AHB总线介绍 AHB总线用于性能要求较高的系统互连,比如内部memory.高带宽的外设.GMAC.eMMC/SD等,其仍然为分时独占式总线,也就是说一个时间点总线只会完成一个传输事件.下图是一 ...

  9. (6)APB总线协议——(官方文档阅读APB3.0)

    第一章:简介 1.1APB3介绍 低速总线协议 时钟上升沿采样,每次数据传输需要两个时钟周期 可与AHB/AXI接口连接 第二章:数据传输 2.1写传输 2.1.1无等待状态 分析: 写传输从地址.写 ...

最新文章

  1. 全球股市巨震,如何用深度学习预测股价?
  2. PostGIS之路——线性参考
  3. win8.1 计算机放在桌面,Win8.1怎么把开始屏幕中的程序放到桌面?
  4. 查询GC得到森林里主域和子域的帐号
  5. JVM体系结构:JVM类加载器和运行时数据区
  6. matlab7.0 6.5,任何处理matlab6.5与7.0.1的兼容问题
  7. 彻底禁用chrome请停用以开发者模式运行的扩展程序弹框
  8. Modularity(模块化-AMD规范)
  9. php自动滚动到页尾,让DOM元素自动滚到视野内ScrollIntoView
  10. NIO 02 (转)
  11. flex, swf 不能访问网络/本地资源
  12. 【系统】lsof 命令简介
  13. Maven插件介绍:spring-boot-maven-plugin
  14. 最长递增子序列(LIS longest-increment-subsequence)最长连续递增子序列 最大连续子序列和
  15. python主函数怎么写_python怎么写函数
  16. Cesium的坐标拾取
  17. python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)
  18. 玩转数据可视化之R语言ggplot2:(一)ggplot2实现箱线图、小提琴图、直方图等图形(快速入门)
  19. throw 关键字,throw 必须写在方法体中,并且 throw new xxxException的话,如果是运行时的异常可以不用管,如果是编译的异常需要进行处理
  20. 清除U盘内所占的隐藏空间(U盘容量突然变小了)

热门文章

  1. NAT(地址转换模式)
  2. Android自定义壁纸预览界面,Android自定义动态壁纸开发(时钟)
  3. abort()函数使用
  4. 项目管理-项目开发相关
  5. 虚拟存储器 与虚拟内存详解
  6. JAVA JMS 简介
  7. kali Linux的 安装详细步骤
  8. ucenter 简单分析与同步机制
  9. 编译filament
  10. RALL机制的线程锁