目录
APB简介
- APB(Advanced Peripheral Bus) 作为高级外设总线是AMBA协议之一,也是最基本的总线协议。按照ARM官方定义,APB是一种低成本的接口协议,可以实现低功耗以及精简的接口设计,降低接口设计的复杂度。
- APB协议不支持流水线设计,它主要应用在低带宽设计需求的接口中,高性能带宽需求可以使用AXI总线。APB协议的实现与时钟沿对齐,以简化外设接口的设计。每次传输至少需要消耗两个时钟周期。
- 在SOC设计中,APB一般作为IP的配置接口,包括低速IP如I2C,UART,I2S等,也包括DDR,PCIe,Ethernet等高速IP,可以方便的实现CPU对外设IP的寄存器配置。系统中一般会实现一个AXI2APB或者AHB2APB的转换桥将APB口挂载在系统上。
APB的演进
- APB2(2003年)协议主要定义了基本的总线接口,没有握手协议,只有基本的读写传输。
- APB3(2004年)增加了PREADY,PSLVERR信号。
- PREADY用于表示APB传输的完成,可以实现slave的等待功能。
- PSLVERR用以指示slave的错误状态。
- APB4(2010年)增加了PPROT,PSTRB。
- PPROT信号实现安全和非安全的数据传输,可实现系统在不同安全属性的控制传输,保证系统的安全性。
- PSTRB信号用于实现部分数据的写操作,可以指示一笔传输中的一部分数据有效。
- APB5(2021年)增加了wake-up信号,userr信号,pairty保护等。
- wake-up用于实现低功耗的控制,通过控制时钟只在传输的时候开启,减少动态功耗的消耗。
- user则增加了基本信号之后的用户自定义信号。
- parity主要针对安全系统设计中的保护功能。 E版本支持ARM RME系统架构(2023年)
APB总线特点
- APB总线只有一个master,其他的都是slave。
- APB 总线传输是对数据目标的读写操作,总是至少需要 2个总线周期。
- 可在高频下工作
- 协议简单:无复杂的时序;
- 只有三个控制信号(PSEL,PWRITE,PENABLE)
- 同步总线:总线上所有的transaction(读写操作)都依赖于时钟的上升沿;
- 一主多从:一般情况下,APB挂在AHB总线系统下,通过AHB-APB Bridge将事务在AHB总线系统之间进行转化,此时Bridgre即为APB的master,其他的外围设备均为slave。
- APB主要用于低带宽的周边外设之间的连接,例如UART、I2C等
APB4的信号
APB状态机
- IDLE :APB的默认状态,此时没有数据传输,PSELx,PENABLE均为default 0
- SETUP:当需要进行一个传输的时候,APB 首先进入这个状态;PSELx 信号首先拉高;总线仅仅在 SETUP 状态停留一个时钟周期,然后接着在下一个时钟的上升沿进入 ACCESS 状态;
- ACCESS:在 SETUP 状态转换到 ACCESS,PENABLE 信号被拉高;在 SETUP 状态转换到 ACCESS 状态这段时间里,PADDR,PWRITE,PSELx和 PWDATA信号必须保持稳定;
- ACCESS状态的跳转取决于slave 输出的PREADY信号状态:
- 如果 PREADY 为 0,表示slave还没有准备接受传输的数据,或者没有准备好输出的数据,会让其继续处于 ACCESS 状态;
- 如果PREADY 为 1,表示slave已完成数据,可以跳转到其他状态。如果后面有连续的数据传输则直接跳转到 SETUP -> ACCESS ,如果没有传输,直接回到 IDLE;
APB数据传输
1.没有等待状态的写
- T1 时刻 :在PCLK的上升沿,APB 将地址信息 PADDR 和数据 PWDATA 准备好,拉高 PWRITE 表示进入写,同时拉高 PSEL,从 IDLE 进入 SETUP
- T2 时刻:也就是下一个时钟周期拉高 PENABLE,表示开始进行数据传输,状态进入 ACCESS
- T3 时刻:检测到 PREADY 被拉高,也就是说 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低 。
- 一直到T3时刻所有数据传输完成之前所有的信号PADDR,PWDATA以及控制信号需要保持不变。
2. 有等待状态的写
slave可以通过pready拉低,来延长slave的响应时间。此时需要注意,其他信号需要保持不变。
3. 没等待状态的读
- T1 时刻 :在PCLK的上升沿,APB 将地址信息 PADDR ,此时 PWRITE 为低表示读操作,同时拉高 PSEL,从 IDLE 进入 SETUP
- T2 时刻:也就是下一个时钟周期拉高 PENABLE,表示开始进行数据传输,状态进入 ACCESS
- T3 时刻:检测到 PREADY 被拉高,也就是说 Slave 已经将PRDATA准备好,MASTER可以接收SLAVE的数据,然后PENABLE 拉低,PSEL 拉低 。
- 读操作是SLAVE将准备好的数据放到PRDATA总线上,然后通过PREADY通知MASTER。
- 注意:slave需要在T2时刻将需要读取的数据准备好
4. 有等待状态的读
slave可以通过pready拉低,来延长slave的响应时间。此时需要注意,其他信号需要保持不变。
写选通PSTRB
- PSTRB确保了在写数据总线上的稀疏传输。每一位PSTRB对应写数据总线上的1byte。当置为高时,PSTRB表明写数据总线的字节通道的有效信息。
- 写数据总线的每8bit有一个写选通,因此PSTRB[n]对应PWDATA[(8n+7):(8n)]。
- 可选。不支持的时候PSTRB所有的组合都兼容。
错误响应PSLVERR
- PSLVERR信号用于指示APB读写传输错误,在读和写的时候都有可能出现。
- 该信号只在APB传输的最后一个时钟周期, 当PSEL、PENABLE和PREADY同时为高时,才被视为有效。
- 建议当PSEL、PENABLE或PREADY为低时,PSLVERR拉低,但不要求。
- 接收到错误的传输可能已经改变了外围设备的状态,也可能没有改变。这是外围设备特定的,任何一种状态都是可以接受的。
- 当写传输接收到一个错误时,并不意味着外围设备中的寄存器没有被更新。
- 接收到错误的读传输可能会返回无效的数据。对于读取错误,不要求外围设备将数据总线置为全0。接收到读传输错误响应的master可能仍然会使用读取到的数据。slave不能依赖错误响应来防止读取PRDATA上的数据。
- 不支持PSLVERR的从设备,需拉低。
总线保护PPROT
- 为了支持复杂的系统设计,通常需要为互连和系统的其他设备提供保护,防止非法操作。对于APB接口,这种保护功能由PPROT[2:0]信号提供。
- APB总线提供三层访问保护。
- PPROT是可选的。
APB5新增的信号 —— PNSE
- APB5支持ARM的RME(Realm Management Extension)系统架构。
- RME将Root和Realm物理地址空间添加到Arm体系结构中,当APB传输时可用于权限检查。
- PNSE扩展保护类型,当PSEL有效时,PNSE必须有效。
- 高有效,只有APB5支持。 如果支持PNSE,也必须支持PPROT。
- PNSE信号使用PCTRLCHK信号进行奇偶校验保护。
APB5新增的信号 —— 唤醒信号PWAKEUP
- PWAKEUP高电平有效,用于指示本次传输是否有效。
- 只有APB5支持PWAKEUP。
- 唤醒与PCLK同步,并且必须适配不同时钟域中的异步采样。
- PWAKEUP允许在PSELx有效之前、期间或之后有效。
- 允许slave等到PWAKEUP有效后,再拉高PREADY。如果有PWAKEUP但一直不拉高,接口可能会死锁。
- 如果在同一周期中PWAKEUP和PSELx都同时拉高,PWAKEUP必须维持高电平,直到PREADY拉高。
- 建议在拉高PSELx之前PWAKEUP至少拉高一个时钟周期,防止传输被延迟。
- 不需要继续读写时,拉低PWAKEUP。
- 允许没有读写操作的时候拉低再拉高PWAKEUP。 推荐主从的连接一起进行时钟门控。如果从接口进行单独的时钟门控时,用PWAKEUP去唤醒从时钟时,可能从会错过读写的setup阶段。
APB5新增的信号 —— 用户信号PAUSER
- APB协议的用户可能会遇到需要使用APB协议之外的额外信令的应用场景。用户信号定义了将此信号添加到传输中的标准方法,而不定义信号的用法。
- 一般情况下,建议不使用用户信号。APB协议接口没有定义这些信号的功能,如果两个组件以不兼容的方式使用相同的用户信号,就会导致互操作性问题。
- 只有APB5支持用户信号。
- 所有的用户信号都是可选的。
APB5新增的信号 ——接口校验保护
- 实现端到端保护的一种方式是在组件中利用定制的EDC(Error Detection and Correction)方案,并在组件中实现简单的错误侦测方案。在这些组件之间,没有逻辑,而且单比特错误不会传播到多比特错误。这一部分描述了一个在组件间的接口上检测单比特错误的校验方案。如果发生在不同的校验信号组,多比特可以被侦测到。
- 只有APB5支持接口校验保护。
- 接口的EDC方案是由Check_Type属性定义。
- Check_Type为false,不支持校验保护;
- Check_Type为Odd_Parity_Byte_All, 所有信号都包括奇校验。校验信号的每位覆盖8位。
从APB代码示例
APB5协议下载网址
APB的协议总共不超过50页,相对比较简单,推荐大家去读原文。下面是AMBA官网上面AMBA各个版本的协议下载入口:
https://www.arm.com/architecture/system-architectures/amba/amba-specifications