【APB】APB协议(一) 协议通读

1. APB协议及其特点

APB协议是ARM公司中AMBA协议的一种。
什么是APB协议?在APB3官方文档里有这么一句话:

The APB is part of the AMBA 3 protocol family. It provides a low-cost interface that is optimized for minimal power consumption and reduced interface complexity.
The APB interfaces to any peripherals that are low-bandwidth and do not require the high performance of a pipelined bus interface. The APB has unpipelined protocol.

翻译:
APB是AMBA 3协议系列的一部分。 它提供了一种低成本接口,该接口经过了优化,可最大程度降低功耗并降低接口复杂性。 APB可以连接到任何低带宽不需要流水线总线接口高性能的外围设备。 APB是非流水线协议。
紧接着还有这么两句话:

All signal transitions are only related to the rising edge of the clock to enable the integration of APB peripherals easily into any design flow.
Every transfer takes at least two cycles.

所有信号跳变仅与时钟的上升沿相关,从而能够将APB外设轻松集成到任何设计流程中。 每次传输至少需要两个周期
虽然还没有看到具体的协议内容,但是我们已经知道了APB协议的特点:

  • 低成本
  • 低功耗
  • 低带宽
  • 无流水线
  • 所有信号都是时钟上升沿有效
  • 进行一次数据传输至少需要两个周期

2. APB协议的演变

最早的APB协议现在叫做APB2,后来又有APB3和APB4。APB协议是向下兼容的,随着时间的推移,根据实际需求,APB3在APB2的基础上添加一些功能,APB4在APB3的基础上再添加了一些功能。

2.1 APB2

APB2协议端口定义如下: Signal Source Width Description
PCLK Clock 1 时钟,所有信号跳变仅与时钟的上升沿相关
PRESETn Systme Bus reset 1 复位,PRESETn 是复位信号,低电平有效。PRESETn 通常直接连接到系统总线复位信号。
PADDR Requester ADDR_WIDTH 地址,PADDR 是 APB 地址总线。 PADDR 的宽度可达 32 位。
PSELx Requester 1 选择,Requester为每个Completer生成 PSELx信号。 PSELx表示Completer已被选择并且需要数据传输。
PENABLE Requester 1 使能,APB传输的第二个周期被拉高。
PWRITE Requester 1 读写,PWRITE在高电平时表示APB写访问,在低电平时表示APB读访问。
PWDATA Requester DATA_WIDTH 写入数据,当PWRITE为高,master通过PWDATA将数据写到slave。PWDATA 可以是 8、16 或 32 位宽。
PRDATA Completer DATA_WIDTH 读取数据,当PWRITE为低,master通过PRDATA将数据从slave读取回来。PRDATA 可以是 8、16 或 32 位宽。

说得通俗一点,APB可看成一种“线”,这种“线”是来连接两个设备的,一个就是master,一个就是slave,所有的数据传输都是master来控制的,slave来回应。
说的具体一点,APB 接口设计用于访问外围设备的可编程控制寄存器。APB 外设通常使用 APB 桥连接到主存储器系统。例如,从AXI到APB的桥可用于将多个APB外设连接到 AXI 存储系统。每次数据传输由APB 桥发起,外围接口响应请求。 因此APB 桥称为RequesterAPB 外设称为 Completer
所以,APB总线 = APB Bridge(Master) + APB上的从设备(Slave)
接下来看看APB2总线的读写时序:

  1. 写操作
    master从slave读取数据:

  • T0-T1:初始状态
  • T1-T2:在T1时刻,master把PADDR和PWDATA放在总线上,并且拉高PWRITE,表示为写操作;拉高PSEL,拉低PENABLE;第一个周期做准备工作(把PADDR,PWDATA发送到总线,拉低或者拉高相应信号)这个阶段称为Setup阶段
  • T2-T3:在T2时刻,PENABLE被拉高。数据将在T2时刻开始传输直到T3时刻完成,这个阶段称为Access阶段
  • T3时刻:数据传输结束,再次回到初始状态。PENABLE被拉低(图中仍然画了高电平有点问题,如果slave不等待的话PENABLE不会被拉高),PSEL被拉低。如果数据继续传输,并且传输的从机是同一个的话,PSEL继续保持高电平。

协议要求:PSEL有效的时候,PADDR、PWRITE、PWDATA必须是有效的;PENABLE只能在PSEL下一个clk拉高;

  1. 读操作
  • T0-T1:初始状态
  • T1-T2:在T1时刻,master把PADDR放在总线上,并且拉低PWRITE,表示为读操作;拉高PSEL,拉低PENABLE;第一个周期做准备工作(把PADDR发送到总线,拉低或者拉高相应信号)这个阶段称为Setup阶段
  • T2-T3:在T2时刻,PENABLE被拉高。数据在T2时刻开始传输直到T3时刻完成,这个阶段称为Access阶段
  • T3时刻:数据传输结束,再次回到初始状态,拉低PENABLE、PSEL(除非有另一个传输到同一外设PSEL会继续保持高电平)。
  • PS:如果是一主多从的结构,主机会有多个PSEL信号,根据地址拉高对应的SEL信号,以此选择对应的从机。

2.2 APB3

在APB2诞生后,随着行业发展,对于APB协议有了新的需求,ARM公司针对这些需求,在APB2的基础上添加了两个端口,一个是PREADYPSLVERR。PREADY是一个对于slave的准备信号,用于扩展APB的传输。PSLVERR是一个错误反馈信号,表示当前传输的数据有误。把这种协议叫做APB3。
端口定义如下:

Signal Source Width Description
PCLK Clock 1 时钟,所有信号跳变仅与时钟的上升沿相关
PRESETn Systme Bus reset 1 复位,PRESETn 是复位信号,低电平有效。PRESETn 通常直接连接到系统总线复位信号。
PADDR Requester ADDR_WIDTH 地址,PADDR 是 APB 地址总线。 PADDR 的宽度可达 32 位。
PSELx Requester 1 选择,Requester为每个Completer生成 PSELx信号。 PSELx表示Completer已被选择并且需要数据传输。
PENABLE Requester 1 使能,APB传输的第二个周期被拉高。
PWRITE Requester 1 读写,PWRITE在高电平时表示APB写访问,在低电平时表示APB读访问。
PWDATA Requester DATA_WIDTH 写入数据,当PWRITE为高,master通过PWDATA将数据写到slave。PWDATA 可以是 8、16 或 32 位宽。
PRDATA Completer DATA_WIDTH 读取数据,当PWRITE为低,master通过PRDATA将数据从slave读取回来。PRDATA 可以是 8、16 或 32 位宽。
PREADY Completer 1 ready
PSLVERR Completer 1 传输错误,PSLVERR 是一个可选信号,可由完成器将其置为高电平以指示 APB 传输上的错误情况。

有了PREADY信号之后,读写操作时序图就有了四种情况,分别是:

  1. 读操作,无等待
  • T0-T1:初始状态
  • T1-T2:在T1时刻,master把PADDR放在总线上,并且拉高PWRITE,表示为写操作;拉高PSEL,拉低PENABLE;第一个周期做准备工作(把PADDR发送到总线,拉低或者拉高相应信号)这个阶段称为Setup阶段
  • T2-T3:在T2时刻,PENABLE被拉高。PREADY信号由Completer 在PCLK上升沿拉高,表示写入数据将在T2开始被接收直至T3完成接收。此阶段内PADDR、PWDATA 和任何其他控制信号必须保持稳定,直到传输完成,这个阶段称为Access阶段
  • T3:数据传输结束,再次回到初始状态,拉低PENABLE,拉低PSEL(除非有另一个传输到同一外设PSEL会继续保持高电平)。

相对于APB2无非就是多了个PREADY,也就是说,当PSEL为高,PENABLE为高时,总线会看PREADY是否为高,如果为高,则进行数据传输,如果为低,那么等待其变为高。
我们讨论的这种情况,无等待,无错误,和APB2的没有区别。

  1. 读操作,有等待
  • T0-T1:初始状态
  • T1-T2:在T1时刻,master把PADDR放在总线上,并且拉高PWRITE,表示为写操作;拉高PSEL,拉低PENABLE。
  • T2-T5:在T2时刻,PENABLE被拉高。Completer 可通过将 PREADY 拉低来延迟数据传输,同时其他信号保持不变。直到T4时刻PREADY信号被拉高,T4时刻才进行数据传输直到T5时刻传输完成。
  • T5:数据传输结束,再次回到初始状态,拉低PENABLE、PSEL(除非有另一个传输到同一外设PSEL会继续保持高电平)。
  1. 写操作,无等待

同理

  1. 写操作,有等待

同理
和之前说的一样,也是先判断PSEL和PENABLE,都为高时再判断PREADY,如果为低,就保持现状,为高这表明数据有效,进行传输。
加了PSLVERR信号之后,可以通过使用PSLVERR来指示APB传输上的错误情况。读取和写入事务都可能发生错误。当PSEL,PENABLE和PREADY均为高电平时,仅在APB传输的最后一个周期内才认为PSLVERR有效,其他时间不考虑PSLVERR。

  1. 写操作

在前面的有等待的写操作的基础上,添加PSLVERR,也就是在T4时刻采样,发现PSEL,PENABLE和PREADY均为高电平的前提下,PSLVERR为高,说明这次数据传输有错误。

  1. 读操作

2.3 APB4

APB4在APB3的基础上添加了两个端口,一个是PPROT,一个是PSTRB。 (其实在平时工作中几乎用不到这两个,主要还是APB3)
PPROT:一种保护信号,可支持APB上的非安全传输和安全传输。
PSTRB:一个写选通信号,用于在写数据总线上进行稀疏数据传输。

Signal Source Width Description
PCLK Clock 1 时钟,所有信号跳变仅与时钟的上升沿相关
PRESETn Systme Bus reset 1 复位,PRESETn 是复位信号,低电平有效。PRESETn 通常直接连接到系统总线复位信号。
PADDR Requester ADDR_WIDTH 地址,PADDR 是 APB 地址总线。 PADDR 的宽度可达 32 位。
PSELx Requester 1 选择,Requester为每个Completer生成 PSELx信号。 PSELx表示Completer已被选择并且需要数据传输。
PENABLE Requester 1 使能,APB传输的第二个周期被拉高。
PWRITE Requester 1 读写,PWRITE在高电平时表示APB写访问,在低电平时表示APB读访问。
PWDATA Requester DATA_WIDTH 写入数据,当PWRITE为高,master通过PWDATA将数据写到slave。PWDATA 可以是 8、16 或 32 位宽。
PRDATA Completer DATA_WIDTH 读取数据,当PWRITE为低,master通过PRDATA将数据从slave读取回来。PRDATA 可以是 8、16 或 32 位宽。
PREADY Completer 1 ready
PSLVERR Completer 1 传输错误,PSLVERR 是一个可选信号,可由完成器将其置为高电平以指示 APB 传输上的错误情况。
PPROT Requester 3 保护类型,PPROT指示事务的正常、特权或安全保护级别以及事务是数据访问还是指令访问。
PSTTRB Requester DATA_WIDTH 写选通,PSTRB 指示在写传输期间要更新哪些字节通道。写数据总线的每 8 位有 1 个写选通。 PSTRB[n] 对应于 PWDATA[(8n + 7):(8n)]

我们直接来看看官方文档里对这两个端口的解释

  1. PPROT
    为了支持复杂的系统设计,通常需要互连和系统中的其他设备提供针对非法交易的保护。 对于APB接口,此保护由PPROT [2:0]信号提供。
    这个信号位宽为3,每一位代表不同的作用。
    PPROT [0]:普通或特权

    • 低代表正常
    • 高代表特权
      一些master使用它来指示其处理模式。特权处理模式通常在系统内具有更高级别的访问权限。

PPROT [1]:安全还是非安全

  • 低代表安全
  • 高代表非安全
    这用于需要更大程度区分处理模式的系统中。
    PPROT [2]:数据还是指令
  • 低代表数据
  • 高代表指令
    该位指示事务是数据访问还是指令访问。此指示仅作为提示,并非在所有情况下都是准确的。 例如,传输包含指令和数据项的混合。 建议默认情况下,除非明确将其称为指令访问,否则将访问标记为数据访问。
    总结一张表就是这样:

  1. PSTRB
    写选通信号PSTRB使写数据总线上的稀疏数据传输成为可能。 每个写选通信号对应于写数据总线的一个字节。 当置为高电平时,写选通脉冲指示写数据总线的相应字节通道包含有效信息。 写数据总线的每八位有一个写选通脉冲,因此PSTRB [n]对应于PWDATA [(8n + 7): ( 8n)]。 下图显示了32位数据总线上的这种关系。

3. 状态转换图

状态机有三个状态:
IDLE:APB接口的默认状态
SETUP:当需要传输时,接口进入 SETUP 状态,此时适当的选择信号 PSELx 被置位。接口仅在一个时钟周期内保持 SETUP 状态,并始终在下一个时钟上升沿移至 ACCESS 状态。
ACCESS:使能信号 PENABLE 在 ACCESS 状态下被置位。在 SETUP 和 ACCESS 之间跳变以及 ACCESS阶段期间,以下信号不得改变。

  • PADDR
  • PPROT
  • PWRITE
  • PWDATA(only for write transactions)
  • PSTRB
  • PAUSER
  • PWUSER
    如果Completer发出的PREADY信号为低,则接口保持在ACCESS状态。如果PREADY信号为高电平,总线将返回到 IDLE 状态。或者,如果随后进行另一次传输,总线会直接进入 SETUP 状态。
来自广东
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇