APB(Advanced Peripheral Bus)协议规范
Posted 夏风喃喃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APB(Advanced Peripheral Bus)协议规范相关的知识,希望对你有一定的参考价值。
APB(Advanced Peripheral Bus)协议规范
参考:ARM (IHI 0024D) AMBA APB Protocol Specification
一. 介绍
1.1 关于APB协议
APB协议是一种低成本接口,针对最低功耗和降低的接口复杂性进行了优化。APB接口不是流水线式的,而是一种简单的同步协议。每次传输至少需要两个周期才能完成。
APB接口设计用于访问外围设备的可编程控制寄存器。 APB外设通常使用APB桥连接到主存储器系统。例如,从AXI到APB的桥可以用于将多个APB外围设备连接到AXI存储系统。
APB传输由APB桥发起。APB桥也可以称为请求者。 外围接口响应请求。APB外围设备也可以称为完成者。 本规范将使用请求者和完成者。
二. 信号描述
2.1 AMBA APB 信号
本节描述了APB接口信号。APB接口上的一些信号具有固定的宽度,一些信号可以采用多种宽度。当宽度不固定时,使用属性进行描述。如果属性值为零,这意味着信号不在接口上。表2-1描述了APB协议接口信号。
2.1.1 地址总线
APB接口有一个地址总线PADDR
,用于读写传输。
PADDR
表示一个字节地址。允许PADDR
相对于数据宽度不对齐,但是结果是不可预测的。例如,完成者可能使用未对齐的地址、对齐的地址或发出错误响应信号。
2.1.2 数据总线
APB协议有两条独立的数据总线,一条用于读取数据,一条用于写入数据。总线可以是8、16或32位宽。读写数据总线必须具有相同的宽度。
数据传输不能同时发生,因为读数据和写数据总线没有各自的握手信号。
三. 传输
3.1 写传输
本节介绍以下类型的写传输:
- 无等待状态
- 有等待状态
本节显示的所有信号都是在PCLK
上升沿采样的。
3.1.1 无等待状态
图3-1显示了没有等待状态的基本写传输。
在图3-1中,写传输的设置阶段发生在T1。选择信号PSEL
被置位,这意味着PADDR
、PWRITE
和PWDATA
必须有效。
写入传输的访问阶段如T2所示,其中PENABLE
被置位。PREADY
由完成者在PCLK
上升沿置位,表示写数据将在T3被接受。PADDR
、PWDATA
和任何其他控制信号必须保持稳定,直到传输完成。
传输结束时,PENABLE
被取消置位。PSEL
也被取消了资格,除非向同一外围设备进行另一次传输。
3.1.2 有等待状态
图3-2显示了Completer如何使用PREADY
扩展传输。
在访问阶段,当PENABLE
为高时,完成者通过将PREADY
为低来延长传输。当PREADY
保持低电平时,以下信号保持不变:
- 地址信号,
PADDR
- 方向信号,
PWRITE
- 选择信号,
PSELx
- 使能信号,
PENABLE
- 写数据信号,
PWDATA
- 写选通信号,
PSTRB
- 保护类型信号,
PPROT
- 用户请求属性,
PAUSER
- 用户写数据属性,
PWUSER
当PENABLE
为低时,PREADY
可以取任何值。这确保了具有固定两个周期访问的外设可以将PREADY
拉高。
3.2 写选通
PSTRB
支持写数据总线上的稀疏数据传输。每个PSTRB
对应于写数据总线的1个字节。当置位为高电平时,PSTRB指示写数据总线的相应字节通道包含有效信息。
写数据总线的每8位有一个写选通,因此PSTRB[n]
对应于PWDATA[(8n + 7):(8n)]
。
图3-3显示了32位数据总线上的这种关系。
对于读传输,请求者必须将PSTRB
的所有位驱动为低电平。
3.2.1 PSTRB的存在和兼容性
PSTRB
是可选信号。APB外围设备可能支持一组有限的访问类型,必须为程序员记录这些类型。这意味着,如果本文档声明不支持稀疏写入,PSTRB
存在的所有组合可能都是兼容的。
表3-1描述了连接请求者和完成者时PSTRB
的兼容性。
3.3 读传输
本节描述了两种类型的读取传输:
- 无等待状态
- 有等待状态
本节显示的所有信号都在PCLK
上升沿进行采样。
3.3.1 无等待状态
图3-4显示了读取传输。
地址,PADDR
,写,PWRITE
,选择,PSEL
和使能,PENABLE
信号的时序与写传输中描述的相同。完成者必须在读取传输结束前提供数据。
3.3.2 有等待状态
图3-5显示了PREADY
信号如何延长传输。
如果在访问阶段PREADY
被驱动为低电平,则传输会延长。当PREADY
保持低电平时,以下信号保持不变:
- 地址信号,
PADDR
- 方向信号,
PWRITE
- 选择信号,
PSEL
- 使能信号,
PENABLE
- 保护信号,
PPROT
- 用户信号,
PAUSER
3.4 错误响应
PSLVERR
可用于指示APB传输中的错误情况。读取和写入事务都可能出现错误情况。
PSLVERR
仅在APB传输的最后一个周期有效,此时PSEL
、PENABLE
和PREADY
均为高电平。
当PSEL
、PENABLE
或PREADY
为低电平时,建议但不是必须将PSLVERR
驱动为低电平。
收到错误的事务可能会也可能不会改变外围设备的状态。这是特定于外围设备的,两种状态都可以接受。
当写事务接收到错误时,这并不意味着外设内的寄存器没有更新。收到错误的读取事务可能会返回无效数据。
对于读取错误,外设不需要将数据总线驱动为全0。收到读取传输错误响应的请求者可能仍在使用数据。完成者不能依靠错误响应来阻止读取PRDATA
上的值。
不要求完成者支持PSLVERR
。如果完成者不包括PSLVERR
,则请求者的适当输入为低。
3.4.1 写传输
图3-6显示了一个失败的写传输的例子,它以一个错误结束。
3.4.2 读传输
读传输也可能以错误响应结束,这表明没有有效的读数据可用。图3-7显示读取传输完成,并有一个错误响应。
3.4.3 PSLVERR的映射
桥接时:
从AXI到APB——PSLVERR
上的APB错误被映射回RRESP
用于读取,而BRESP
用于写入。
从AHB到APB——PSLVERR
上的APB错误被映射回HRESP
进行读取和写入。
3.5 保护单元支持
为了支持复杂的系统设计,通常需要系统中的互连和其他设备提供保护以防止非法事务。对于APB接口,这种保护由PPROT[2:0]
信号提供。
表3-2显示了使用保护级别编码的三个访问保护级别。
该协议的主要用途是作为安全或非安全交易的标识符。可以接受对PPORT[0]
和PPORT[2]
标识符使用不同的解释。
3.5.1 PPROT的存在和兼容性
PPROT
是请求者和完成者接口上的可选信号。
表3-3描述了将完成者连接到请求者时的PPROT
兼容性。
3.6 唤醒信号
3.6.1 介绍
唤醒信号PWAKEUP
用于指示与任何APB接口相关的任何活动。PWAKEUP
提供一个无毛刺信号,可以路由到时钟控制器或类似的组件,使能连接组件的电源和时钟。
唤醒信号属性用于指示组件是否支持唤醒信号:
True——存在唤醒信号。
False——唤醒信号不存在。如果未声明Wakeup_Signal属性,则认为该属性为假。
唤醒信令只能添加到APB5协议接口。
3.6.2 PWAKEUP信号
表3-4描述了PWAKEUP
信号。
PWAKEUP
的规则和建议如下:
PWAKEUP
与PCLK
同步,必须适合在不同的时钟域异步采样。这要求PWAKEUP
无毛刺。例如,这可以通过直接从寄存器或无毛刺OR树中产生来实现。PWAKEUP
允许在PSELx
置位之前、期间或之后置位。- 在断言
PREADY
之前,允许完成者等待PWAKEUP
被断言。如果PWAKEUP
存在但从未被断言,接口可能会死锁。 - 如果
PWAKEUP
和PSELx
在同一周期内为高电平,则PWAKEUP
必须保持有效,直到PREADY
有效。 - 建议在
PSELx
断言之前至少一个周期断言PWAKEUP
,以防止新交易的接受被延迟。 - 当不需要进一步传输时,建议取消对
PWAKEUP
的置位。 - 允许(但不建议)置位
PWAKEUP
,然后在不发生传输的情况下解除置位。 - 建议连接的请求方和完成方一起进行时钟门控。如果完成者接口时钟独立于请求者时钟门控,并且
PWAKEUP
用于启用完成者时钟,则完成者可能会错过传输的设置阶段。
3.7 用户信号
3.7.1 介绍
APB协议的用户可能会遇到需要添加APB协议中未指定的信号的应用。用户信号定义了将该信号添加到事务中的标准方法,而不定义信号使用。
通常,建议不要使用用户信号。 APB协议接口没有定义这些信号的功能,如果两个组件以不兼容的方式使用相同的用户信号,就会导致互操作性问题。
用户信号只能添加到APB5协议接口。
3.7.2 信号
所有信号都是可选的。如果相关的宽度属性为零,则信号不存在。
表3-5提供了用户信号的描述。
3.7.3 用户信号建议
实施用户信号时,本规范不要求支持所有用户信号。用户定义信号的宽度由实现方式定义,对于请求、数据和响应可以不同。
建议在跨域网桥或互连上提供所有用户信号。但是,不要求将它们包含在完成者中。
建议USER_DATA_WIDTH是数据总线宽度的整数倍(以字节为单位),以帮助进行数据宽度和协议转换。
四. 运行状态
4.1 运行状态
图4-1显示了APB接口的运行状态。
状态机通过以下状态运行:
IDLE——这是APB接口的默认状态。
SETUP——当需要传输时,接口进入SETUP状态,在该状态下,适当的选择信号PSELx
被置位。接口仅在一个时钟周期内保持SETUP状态,并且总是在下一个时钟上升沿进入ACCESS状态。
ACCESS——使能信号PENABLE
在ACCESS状态下置位。在设置和访问之间以及访问状态的周期之间的转换中,下列信号不得改变:
- PADDR
- PPROT
- PWRITE
- PWDATA,仅用于写事务
- PSTRB
- PAUSER
- PWUSER
从ACCESS状态退出由来自完成器的PREADY
信号控制:
- 如果
PREADY
被完成者保持为低电平,则接口保持在ACCESS状态。 - 如果
PREADY
被完成者驱动为高电平,则退出ACCESS状态,如果不再需要传输,总线返回IDLE状态。或者,如果接下来有另一个传输,总线直接进入SETUP状态。
五. 接口奇偶保护
5.1 使用奇偶校验的保护
对于安全关键型应用,有必要检测并纠正SoC中单根导线上的瞬态和功能错误。
系统组件中的错误会在连接的组件之间传播并导致大量错误。端到端操作需要错误检测和纠正(EDC),涵盖从源到目的地的所有逻辑和线路。
实现端到端保护的一种方法是在组件中采用定制的EDC方案,并在组件之间实现简单的错误检测方案。这些组件之间没有逻辑,单比特错误不会传播到多比特错误。本节介绍一种奇偶校验方案,用于检测组件之间接口上的单比特错误。如果多位错误出现在不同的奇偶校验信号组中,则可以检测到多位错误。
图5-1显示了可以使用奇偶校验的位置。
5.2 接口保护的配置
接口的EDC方案由Check_Type属性定义。定义了以下检查类型值:
False——接口上没有检查信号。
Odd_Parity_Byte_All——所有信号都包括奇数奇偶校验。奇偶信号的每一位最多覆盖8位。
如果未声明Check_Type,则认为它为False。检查信号只能添加到APB5接口。
5.3 奇偶校验
为字节奇偶校验接口保护添加的校验信号具有以下共同属性:
- 使用奇数奇偶校验。奇数奇偶校验意味着在接口信号和校验信号之间总是有奇数个位。检查信号与每个接口信号相关联。
- 每个奇偶校验位覆盖的有效载荷不超过8位。这种限制假设在生成每个奇偶校验位的时序余量中最多有三个逻辑电平可用。
- 覆盖关键控制信号的奇偶校验信号由单个奇偶校验位定义。单个奇数奇偶校验位是原始关键控制信号的反转。关键控制信号可能具有较小的可用时序余量。
- 对于宽于1位的校验信号:校验位
[n]
对应于有效载荷中的[(8n+7):8n]
。如果有效负载不是整数字节数,则检查信号的最高有效位在有效负载的最高有效部分覆盖的位数少于8位。 - 在Check Enable条件为真的每个周期中,必须正确驱动检查信号。
- 奇偶校验信号必须被适当地驱动到相关有效载荷中的所有位,无论这些位是否在传输中被有效使用。例如,必须正确驱动
PWDATACHK
的所有位,即使某些字节不是有效的数据字节。 - 如果检查信号覆盖的一些信号不在接口上,那么丢失的信号被认为是低电平。
- 如果接口上不存在检查信号覆盖的信号,则从接口中省略检查信号。
5.4 错误检测行为
当检测到奇偶校验错误时,本规范不涉及组件或系统行为。根据系统和受影响的信号,翻转的位会有各种各样的效果。它可能是无害的,会导致性能问题、数据损坏、安全违规或死锁。
当检测到错误时,完成者可以:
- 终止或传播传输。
- 纠正奇偶校验信号或传播错误。
- 更新其内存或保持不变。
- 通过其他方式发出错误响应信号,例如中断。
5.5 奇偶校验信号
检查信号与PCLK
同步,并且必须在检查使能项为真的每个周期正确驱动。
表5-1显示了奇偶校验信号。
附录A. 信号有效性
本附录总结了描述信号何时必须有效的规则。
以下信号必须始终有效:
PSEL
PWAKEUP
断言PSEL
时,以下信号必须有效:
PADDR
PPROT
PENABLE
PWRITE
PAUSER
PSTRB
PWDATA
,仅激活写数据通道PWUSER
,仅写
断言PSEL
和PENABLE
时,以下信号必须有效:
PREADY
当PSEL
、 PENABLE
和PREADY
置位时,以下信号必须有效:
PRDATA
,只读PSLVERR
PRUSER
,只读PBUSER
建议将不要求有效的信号驱动至零。
附录B. 信号列表
本附录总结了APB接口上的所有信号。
表B-1描述了APB信号的列表。表B-2描述了APB检查信号的列表。可选信号有一个默认值,应该用于任何非驱动输入。
表B-1和表B-2中使用的下列代码是:
Y——必选
N——不得存在
O——输入和输出可选
OO——输出端口可选,输入必选
C——有条件,如果属性为真,则必须存在
OC——可选条件,可选但只能在属性为真时出现
表B-3显示了接口属性。
如果条目不是Y,则该接口类型的属性必须为假或未声明。
以上是关于APB(Advanced Peripheral Bus)协议规范的主要内容,如果未能解决你的问题,请参考以下文章
STM32Cube库和standard peripheral library有啥区别
PAT Advanced level 1001 A+B Format