APB 基本原理

1、APB简介

APB是AMBA总线体系中的一员,因其具备低功耗、接口和控制简单的特点,广泛被运用于低带宽和不带总线的高性能外设接口,ASIC芯片中寄存器访问。

APB的传输信号只与时钟上升沿有关,故其具备以下优点:

  1. 易于实现高频操作;
  2. 性能与时钟占空比无关;
  3. 静态时序分析简单;
  4. 易于与基于上升沿的寄存器访问;
  5. 易于集成到基于周期的仿真器中。

在ASIC设计中,APB作为系统中的从机,与系统中的主总线通过Bridge(AHB to APB 或 AXI to APB)连接,APB从机包含以下接口规则:

  1. 整个访问中地址和控制信号有效(不分通道);
  2. 当无外设总线活动时接口功耗为零(外设总线不适用时为静态);
  3. 通过选通脉冲时序译码产生时序(无时钟接口);
  4. 整个访问过程中写数据有效(允许无毛刺透明锁存工具)。

2、APB基本原理

AMBA系统设计框图如下,其中AHB/ASB为系统中的main bus,而APB为次级bus,且AHB/ASB与APB通过BRIDGE进行桥接,APB适用于低带宽、低功耗的数据传输。

Bridge就是为了适配AHB和APB的读写操作,如果CPU需要访问UART接口,则先通过AHB总线发出读写指令,然后Bridge转成适配APB指令对UART进行读写transfer。

blob.png

2.1、APB信号

名字

描述

PCLK

系统时钟。

PRESETn

复位,低电平有效。

PADDR[31:0]

地址,32bit。

PSELx

Slave选中信号。

PENABLE

APB transfer使能信号。

PWRITE

1、写操作;

0、读操作。

PRDATA

读数据,32bit。

PWDATA

写数据,32bit。

2.2、APB地址空间

图2

APB连接3个外设,分别是UART、Timers和Int Cont。APB地址空间为0xc000_0000 ~ 0xcfff_ffff,而外设的地址空间分别为0xc300_0000 ~ 0xcfff_ffff、0xc100_0000 ~ 0xc2ff_ffff和0xc000_0000 ~ 0xc000_ffff。

2.3、Transfer

2.3.1、传输状态图

APB的传输状态图由PSELx和PENABLE构成,状态:IDLE、SETUP、ENABLE,APB的访问延迟为2个clk。

注意:

  1. SETUPENABLE状态仅保持1clk
  2. 完成一次操作后,PENABLE必须置0
  3. 若后续没有操作,PSELx置0,否则置1。

总结:

  1. 为了保证ENABLE采样的addr、data以及select是stale status,故需要两拍操作;
  2. ENABLE to SETUP时,允许addr、data、select存在glith,因为只有在ENABLE状态才会采样;
  3. PSELx必须早PENABLE一拍。

2.3.2、Write Transfer

PWRITE=1时,写操作。T3时刻准备稳定的data和addr。

  1. T2时刻,PSEL=0,PENABLE=0,state=IDLE,总线无操作;
  2. T3时刻,PSEL=1,PENABLE=0,state=SETUP,总线提供addr和data,供下一拍采样;
  3. T4时刻,PSEL=1,PENABLE=1,state=ENABLE,采样有效addr和data;
  4. T5时刻,PSEL=0,PENABLE=0,state=IDLE,总线空闲。

2.3.3、Read Transfer

PWRITE=0时,读操作。T3时刻准备稳定的addr,T4时刻采取有效数据。

  1. T2时刻,PSEL=0,PENABLE=0,state=IDLE,总线无操作;
  2. T3时刻,PSEL=1,PENABLE=0,state=SETUP,总线提供addr和data,供下一拍采样;
  3. T4时刻,PSEL=1,PENABLE=1,state=ENABLE,采样有效addr和data;
  4. T5时刻,PSEL=0,PENABLE=0,state=IDLE,总线空闲。

3、APB Bridge

APB Bridge实现AHB到APB的时序转换,系统框图如下:

blob.png

  1. 锁存地址并将其有效传输;
  2. 解析地址产生PSELx,且PSELx只有一个有效;
  3. 将数据传输到APB总线上;
  4. 产生定时strobe、PENABLE。

3.1、Read Transfer

AMBA总线—APB总线协议详解_第10张图片

注:读操作,每次3clk

  1. T2时刻:

AHB:HWRITE=0,ddr1有效,HREADY=1指示上一次有效操作;

APB:PSEL=0,PENABLE=0,state=IDLE。

  1. T3时刻:

AHB:HWRITE=0,addr2有效,HREADY=0指示addr1操作未生效;

APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1。

  1. T4时刻:

AHB:HWRITE=0,addr2有效,HREADY=1指示addr1操作生效,PRDATA1 -> HRDATA1;

APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA1。

  1. T5时刻:

AHB:HWRITE=0,addr3有效,HREADY=0指示addr2操作未生效;

APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR2 -> PADDR2。

  1. T6时刻:

AHB:HWRITE=0,addr3有效,HREADY=1指示addr2操作生效,PRDATA2 -> HRDATA2;

APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA2。

  1. T7时刻:

AHB:HWRITE=0,addr4有效,HREADY=0指示addr3操作未生效;

APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR3 -> PADDR3。

  1. T8时刻:

AHB:HWRITE=0,addr4有效,HREADY=1指示addr3操作生效,PRDATA3 -> HRDATA3;

APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA3。

  1. T9时刻:

AHB:HWRITE=0,HREADY=0指示addr4操作未生效;

APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR4 -> PADDR4。

  1. T10时刻:

AHB:HWRITE=0,HREADY=1指示addr4操作生效,PRDATA4 -> HRDATA4;

APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读数据PRDATA4。

3.2、Write Transfer

注:单次写操作,4clkBurst写操作n4*n-2clk

  1. T2时刻:

AHB:HWRITE=1,ddr1有效,HREADY=1指示上一次有效操作;

APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。

  1. T3时刻:

AHB:HWRITE=1,addr2有效,HREADY=1指示addr1操作生效,准备HWDATA1/HADDR1

APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。

  1. T4时刻:

AHB:HWRITE=1,addr3有效,HREADY=0指示addr2操作未生效;

APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1、HWDATA1 -> PWDATA1。

  1. T5时刻:

AHB:HWRITE=1,addr3有效,HREADY=1指示addr2操作生效,准备HWDATA2/HADDR2

APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA1

  1. T6时刻:

AHB:HWRITE=1,addr4有效,HREADY=0指示addr3操作未生效;

APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 2-> PADDR2、HWDATA2 -> PWDATA2。

  1. T7时刻:

AHB:HWRITE=1,addr4有效,HREADY=1指示addr3操作生效,准备HWDATA3/HADDR3

APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA2

  1. T8时刻:

AHB:HWRITE=1,addrx有效,HREADY=0指示addr4操作未生效;

APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 3-> PADDR3、HWDATA3 -> PWDATA3。

  1. T9时刻:

AHB:HWRITE=1,addrx有效,HREADY=1指示addr4操作生效,准备HWDATA4/HADDR4

APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA3。

  1. T10时刻:

AHB:HWRITE=1,addrx有效,HREADY=x,无操作;

APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 4-> PADDR4、HWDATA4 -> PWDATA4。

  1. T11时刻:

AHB:HWRITE=1,addrx有效,HREADY=x,无操作;

APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA4。

3.3、Back to Back Transfer

AMBA总线—APB总线协议详解_第13张图片

  1. T2时刻:

AHB:HWRITE=1,ddr1写有效,HREADY=1指示上一次有效操作,准备HADDR1

APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。

  1. T3时刻:

AHB:HWRITE=0,ddr2读有效,HREADY=1指示addr1操作有效,准备HWDATA1HADDR2

APB:PWRITE=x,PSEL=0,PENABLE=0,state=IDLE。

  1. T4时刻:

AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效,准备HADDR3

APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 1-> PADDR1、HWDATA1 -> PWDATA1

  1. T5时刻:

AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效;

APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PWDATA1

  1. T6时刻:

AHB:HWRITE=1,addr3写有效,HREADY=0指示addr2操作未生效;

APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 2-> PADDR2

  1. T7时刻:

AHB:HWRITE=0,addr3写有效,HREADY=1指示addr2读操作生效,读取HRDATA2

APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读取数据PRDATA2。

  1. T8时刻:

AHB:HWRITE=0,addr4读有效,HREADY=1指示addr3写操作生效,准备HRDATA3;

APB:PWRITE=0,PSEL=0,PENABLE=0,state=IDLE。

  1. T9时刻:

AHB:HWRITE=x,addrx有效,HREADY=x无操作;

APB:PWRITE=1,PSEL=1,PENABLE=0,state=SETUP,且HADDR 3-> PADDR3、HWDATA3 -> PWDATA3。

  1. T10时刻:

AHB:HWRITE=x,addrx有效,HREADY=x无操作;

APB:PWRITE=1,PSEL=1,PENABLE=1,state=ENABLE,APB写操作,写入数据PRDATA3。

  1. T11时刻:

AHB:HWRITE=x,addrx有效,HREADY=x无操作;

APB:PWRITE=0,PSEL=1,PENABLE=0,state=SETUP,且HADDR 4-> PADDR4。

  1. T12时刻:

AHB:HWRITE=x,addrx有效,HREADY=x无操作,读取PRDATA4

APB:PWRITE=0,PSEL=1,PENABLE=1,state=ENABLE,APB读操作,读取数据PRDATA4

4、总结

APB协议作为系统中的次级bus,原理简单且不支持pipeline操作,每次读写操作都是SETUP和ENABLE状态的切换,故其读写操作均消耗2个clk。APB与主bus(AHB)通过bridge互联,如果主bus支持pipeline操作且需访问APB设备,访问效率随着APB的处理而降低。在bridge设计中,pipeline写比单次写少2个clk,而pipeline读缺没有变化。

版权声明:本文为CSDN博主「威龙王子_2021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hu491199877/article/details/121749629

生成海报
点赞 0

威龙王子_2021

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

stm32f373利用esp8266连接onenet平台

学习目标: 1.注册onenet平台 2.esp8266引脚连接 3.stm32373代码移植编写 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 一、注册onene

STM32CubeMx hal 驱动sg90舵机

一、舵机的控制原理 舵机通过接收PWM信号,使其进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。即给舵机一个