在扩展MCU功能时要明智地使用外部内存接口

2019-04-15 12:37发布

  MCUs是许多嵌入式子系统设计中的关键元素,但通常需要额外的功能来实现必要的系统功能。在基于mcu的设计中,可能最受约束的元素之一是芯片内存。越来越多的应用程序需要比单片机更多的系统内存。特别是先进的人机界面设计,需要大量的只读图像和音频信息,不容易存储在单片机的闪存中。此外,越来越多的应用程序发现,对于需要大量数据缓冲和存储的高级通信通道,芯片RAM的限制过于严格。  本文将快速回顾现代MCUs上可用的一些外部内存接口。这将帮助设计人员更有效地实现基于mcu的系统,这些系统需要额外的外部存储——要么是NVM闪存,要么是volatile SRAM/DRAM。
  SDRAM的外部内存接口  扩展存储能力所需的最明显的外部内存接口可能是大型工作SRAM。通常,MCUs的芯片上的SRAM数量相对较少,通常应用程序需要的工作内存比在芯片上的要多。例如,高级用户界面可能需要大量的缓冲区内存来处理图形用户界面(gui),并创建视频或音频提示。通常,当存储或传输这些数据文件以减少本地存储需求或系统带宽需求时,将使用压缩技术。这意味着可能需要大量的工作存储来解压这些文件。通常,通信应用程序或数字信号处理应用程序需要大量的工作记忆作为缓冲存储。  许多MCUs为控制外部SDRAM设备提供了特殊电路的外部存储器接口控制器。一个例子MCU强调支持SDRAM接口的关键硬件元素是NXP LPC1787单片机。图1所示的外存储器控制器外围设备有几个可编程的延迟元件,用于调整关键的SDRAM信号中使用的关键接口信号的时间。例如,两个潜在的SDRAM时钟(CLKOUT1和CLKOUT2)的延迟值可以根据内存的需要调整到位置。此外,另一个可编程延迟调整了从内存中读取数据的时间。这样的时间调整,以及它们的范围和精度对于简化内存接口、董事会布局和相关的信号时间检查至关重要。  NXP LPC1787 MCU外存储器控制器图。
  图1:NXP LPC1787 MCU外存储器控制器。  NXP LPC1787外部内存接口还包括其他几个重要的硬件特性,使外部SDRAM接口更加高效。例如,在框图顶部显示的数据缓冲区可以用作读取缓冲区、写入缓冲区或组合。作为写缓冲区,它们允许将事务分组,以减少外部写操作的数量,提高系统带宽和减少功耗。作为读取缓冲区,它们充当本地数据副本,因此对同一位置的进一步访问可以使用on-chip缓冲版本。这减少了外部读取操作的数量,提高了系统带宽和减少了功耗。  注意,NXP内存控制器还支持RAM、ROM和Flash的静态内存接口。这是大多数现代MCU内存控制器外围设备中使用的典型方法,因为大多数硬件在应用程序和应用程序之间都很常见,通常应用程序不同时需要两种类型的内存。
  配置外部存储器  通常,外部内存用于多个目的——应用程序不认为它是存储的整体“块”。为了简化应用程序编码,一种配置非芯片内存块来简化内存访问的方法是很有帮助的。这种技术的一个例子是硅实验室C8051F70x/71x MCU家庭。在此MCU外部存储器中使用特殊的MOVX指令访问。为了使对芯片和非芯片内存的访问更加容易,芯片上的一部分内存可以映射到外部内存空间。图2显示了用于将内部和外部内存映射到外部内存地址空间的四种配置模式。在模式1中,如图2所示,内部XRAM被映射到完整的外部内存空间,当on-chip XRAM内存地址超过内存芯片时,地址“包装”。这可能是一种有用的模式,当将芯片从复位中取出来避免启动问题时,没有初始化的外部内存。一旦成功地配置了内存接口并测试了外部内存空间,就可以启用它。如果不使用外部内存,此模式也可用。  硅实验室的图像C8051F70x/71x外部存储器配置。
  图2:硅实验室C8051F70x/71x外部内存配置。  在模式2和3中,从图2中左边的第二个和第三个,地址空间在芯片和非芯片访问之间分割。在模式2中,银行选择不用于将较高的订单地址位驱动到地址总线上;用户可以控制这些地址值以提供额外的灵活性。在模式3中,芯片上的银行地址自动被用来驱动外部地址总线,提供一种简单但不那么灵活的方法。在模式4中,在图2的最右边,芯片内存被完全映射到外部地址空间。这使得可以访问其他地址模式中可能无法访问的外部数据,从而充分利用可用内存。如果您的应用程序有几种不同类型的外部内存需求——代码、数据缓冲区、转换表或音频/视频处理,那么它可以简化设计,以使用带有地址映射和块访问特性的外部内存控制器。
  外部存储器接口的灵活性  在某些应用程序中,对于MCU外部内存接口来说,它可以支持多种内存类型,同时最小化设备pin计数。一个常见的组合是Flash、程序存储和SRAM,用作工作内存。如果在单片机上使用多个内存接口,则可以在包中添加20个或更多的引脚,增加成本、功耗和板空间需求。一些MCUs在外部内存控制器中提供了额外的灵活性,可以很容易地适应各种内存设备。例如,流行的Microchip PIC18F MCU家族提供了一个灵活的内存接口,可以扩展到多种设备类型。图3显示了一种方法,该方法将标准的闪存和标准的SRAM与一个外部总线连接起来。在本例中,使用了一些外部组件(两个373个锁存器和一个138个解码器)来最小化在单片机上使用的引脚的数量。(一个更简单的实现也可能是一个8位接口,只需要一个373锁存器)。具有这种灵活性的外部内存接口允许“保存”的IOs用于其他功能,最大限度地提高pin效率,这是基于mcu的设计中最重要的元素之一。  微晶片PIC18F MCU外存储器接口示意图。
  图3:Microchip PIC18F MCU externalmemory接口框图。
  界面时间的灵活性  除了IO互连的灵活性之外,外部接口通常需要在时间上有一定的灵活性。例如,如果内存比MCU时钟周期慢,则可能需要插入等待状态。理想情况下,不同的外部内存块可以分配不同的等待状态特性。当外部接口不仅可以用于标准内存,还可以用于内存映射器外围设备(如液晶显示、模拟-数字转换器和数字-模拟转换器)时,这种功能更加重要。Atmel ATmega MCU家庭可以将两个不同的等待状态值分配给外部内存空间。如下面的图4所示,内存配置A允许将外部内存划分为两个扇区——上扇区和下扇区。扇区大小可以有8个不同的值,调整上段和下段之间的分隔线,从0x2000递增到0xE000。  Atmel ATmega64外部内存空间的图像。
  图4:Atmel ATmega64外部内存空间。  将外部内存空间划分为两个扇区,可以方便地将具有较大等待状态值的设备组合在一起,并将具有较小等待状态值的设备组合在一起。也许最重要的是,如果一个零等待状态内存用于频繁访问的程序数据,那么即使速度较慢的设备共享相同的内存总线,也可以使用零等待状态值。这样可以最小化MCU的pin需求,同时提高性能和节约电能。
  结论  MCUs有时需要使用外部内存接口来扩展可用的芯片内存。了解这些接口的功能可以减少设计时间,降低成本,提高系统性能。