“闪存现在完全主导着微控制器 (MCU),但随着处理器升级到 32 位架构并且外设变得更加强大,存储器考虑变得更加复杂。很容易忘记外设中的内存,这些外设使 MCU 更像是一个包含高级电机控制、图形用户界面 (GUI) 和网络的片上系统 (SoC)。
”作者:Tom Starnes
闪存现在完全主导着微控制器 (MCU),但随着处理器升级到 32 位架构并且外设变得更加强大,存储器考虑变得更加复杂。很容易忘记外设中的内存,这些外设使 MCU 更像是一个包含高级电机控制、图形用户界面 (GUI) 和网络的片上系统 (SoC)。
尽管如此,Flash 和其他存储器类型的细节仍值得关注,以确保所选 MCU 具有符合系统需求的存储器。在 MCU 中以更高速度快速使用 ARM® Cortex™-M 处理器架构也需要更仔细地检查内存支持。供应商对其片上存储器选项采取不同的方法,这可能会影响选择哪个 MCU 的平衡。
如今,在更大的 MCU 上可以使用多达 1 兆字节的闪存。随着 MCU 发现新应用并具有新功能,程序存储、数据表和暂存器 RAM 的比例发生了变化。高端 MCU 可能使用高级语言 (HLL) 进行编程,运行实时操作系统 (RTOS),并使用现成的堆栈和软件包。这些因素中的每一个都会影响内存需求和使用。
通常用于 MCU 的闪存的访问时间可以跟上 25 到 50 MHz 的处理器时钟。当高性能处理器内核的时钟频率超过 200 MHz 时,可能会有一个巨大的差距来填补耗时耗电的等待状态。多个片上总线和特殊的路由机制对于缓解一些繁忙的微控制器中的流量问题非常有益。
ARM 处理器内核架构由于其紧凑的 Thumb2® 指令而具有非常好的代码密度,该指令仅需要 16 位来存储指令,而不是预期的 32 位。ARM Cortex-M0、Cortex-M3 和 Cortex-M4 内核在众多供应商的微控制器中都很流行,这里将研究一些内存选择。
NXP Semiconductors LPC4000 – 实时辅助数据处理
NXP Semiconductors自从很久以前将 ARM7TDMI® 内核用于 MCU 以来,它就在基于 ARM 的微控制器上取得了成功。恩智浦在 Cortex-M 内核推出后迅速将其添加到其产品组合中,并且一直是将 Cortex-M3、Cortex-M0 和 Cortex-M4 集成到一端高速的 MCU 中的领导者之一,同时将价格推低至另一个。恩智浦是最早使用超宽闪存组织来缓冲后续内存位置以确保无延迟可用性的公司之一。
恩智浦最新的 MCU 系列LPC4000(参见图 1),它之所以有趣有几个原因,例如包含 Cortex-M4——它具有数字信号处理 (DSP)、单指令多数据 (SIMD) 和可选的浮点指令——以及作为每个单独的 Cortex-M0 处理器内核。为了保持 Cortex-M4 足够快的供电速度并保持低功耗,恩智浦将片上闪存扩展至 256 位宽,是业内最宽的。
图 1:NXP LPC4000 架构(由 NXP 提供)。
NXP 使用一个相当简单的缓冲系统来保存 32 行最近的闪存访问,使最近获取的指令立即可用。与使用更奇特的方案相比,这提供了更一致的执行性能。一些缓存替换算法可以针对编译器生成的代码工作,并且可能更难以模拟和调试。NXP 发现他们的闪存执行可以在 RAM 的 5% 范围内运行,在当前 90 nm 工艺中运行速度高达 150 MHz。
两个闪存组提供隔离和分区,当应用程序继续从另一组运行时重新刷新一个组时也提供绝对的信心。
LPC4000 具有高达 1 MB 的闪存和高达 264 KB 的片上 SRAM——程序与数据存储器的比例为 4:1。如果需要,可以在零等待状态下直接从大部分 RAM 执行指令——非常适合最快的确定性实时处理,而无需担心代码在细粒度级别上反弹。可以使用各种 SRAM 块,因此不同的例程和输入/输出 (I/O) 不会争夺总线时间。
LPC4000 可以很容易地使用廉价的外部闪存来扩展程序空间、将首先复制到 SRAM 中以实现最快执行的代码,甚至是用于显示屏幕的大型图形图像。现成的带有串行外围接口(SPI)端口的Flash,包括quad-SPI Flash,实际上可以直接映射到处理器的正常存储空间中,程序员不必考虑它是片上的还是连接的串行芯片外。SPI Flash 接口 (SPIFI) 为外部 Flash 提供了四个通道,并允许 Flash 中的图像以高达 40 MBps 的速度直接 DMA 到 LCD 控制器。
Cortex-M0 拥有自己的 8 KB 程序内存,并通过共享内存将消息传递给更大的兄弟 Cortex-M4。
该系列 MCU 还包括 32 KB ROM,其中包含软件驱动程序、启动代码和其他方便的代码位,以使系统设计人员不必编写此代码,而将更多宝贵的闪存留给更多特定于应用的例程。ROM 执行的速度和功率效率自然也优于 Flash。一些 MCU 提供了执行可靠的固定时间除法运算的库。
恩智浦早期版本的 ARM Cortex MCU 可能在更大的 180 nm 或 140 nm 工艺节点上,并且大多数使用 128 位宽的闪存,而不是刚刚描述的 256 位架构。所有闪存都是由 NXP 专门为 MCU 开发的,它具有内置的单错误纠正/双错误检测和日志记录,以实现更好的闪存完整性和监控。恩智浦拥有广泛的基于 ARM 的 MCU,其中包含 Cortex-M0、Cortex-M3 和 Cortex-M4,最小的只有 16 引脚封装,并以 8 位 MCU 的价格出售。
STMicroelectronics STM32 – 快速、巧妙的记忆
是另一家在将较早的 ARM7™ 和 ARM9™ 内核用于 32 位 MCU 之后,很快通过其 STM32 产品线在微控制器中采用 ARM Cortex-M3 的公司。STMicroelectronics 最新的 STM32F4 系列(参见图 2)可以在 90 nm 工艺中将 Cortex-M4 推至 168 MHz,同时提供高达 1 MB 的闪存和 192 KB 的片上 RAM。
图 2:STMicroelectronics STM32F4 架构(由 STMicroelectronics 提供)。
为了获得这种性能,意法半导体开发了自适应实时内存加速器 (ART Accelerator™)。这是一个类似微处理器系统的高速缓存控制器,专为满足从闪存执行的程序的需要而设计。闪存由 128 位组成,因此单次读取包含 4 条 32 位指令,而 Thumb2 指令可以是 6 到 8 条实际指令。
ART 加速器使用一个预取队列和一个 64 条目的分支缓存来减轻由于分支、子程序调用,甚至可能是系统调用或中断而导致的指令流变化的延迟。如果重定向的程序计数器想要一个最近获取的位置,则目标可能仍驻留在分支缓存中,在这种情况下,它可以立即加载到预取队列中执行,从而节省周期。片上逻辑的更智能(自适应)缓存管理应该比更简单的方法产生更积极的结果(更高的比特率)。
为了缓解闪存在数据访问(例如数据查找表或图像数据)时的停顿,ART 加速器具有 8 个 128 位缓冲区。Locality-of-reference 对数据来说是很差的,但是可以通过基于对它在程序中的使用的详细理解巧妙地安排数据来改进它。这类似于汇编中的手动编码。
STMicroelectronics 发现闪存执行速度高达 168 MHz,而零等待状态存储器的执行速度仅为 2.5%。它吹捧CoreMark™ 基准作为其效率和速度的证明,尽管编译器的有效性和设置也会影响这些结果。首先,一个 168 MHz 的STM32F4 MCU 执行例程的速度比同类中的任何其他 MCU 都要快得多,并且在频率上表现出线性。其次,“Coremarks/MHz”(每个时钟周期完成的有效功)是最高的之一。
STM32F4 上的实时时钟模块包括一个 4 KB 电池供电 SRAM,用于在极低功耗条件下保存变量和状态信息。更独特的是,528 字节的一次性可编程 ROM 可用于序列号、MAC 地址、加密密钥、校准设置以及存储每个出厂设备独有的其他数据。
STMicroelectronics 还利用 7 级 ARM 高速总线(AHB) 矩阵,允许在 ARM 处理器等主设备、通用 DMA、与 USB 或网络控制器相关的 DMA 以及众多外设和存储器等从设备之间同时传输数据。
STMicroelectronics 拥有众多 ARM Cortex-M0 和原始 Cortex-M3 的 MCU 配置,从低成本、轻负载的控制器到具有复杂外设的快速时钟设备。他们还有一条低功率线。STMicroelectronics 声称在基于 Cortex-M 的 MCU 的累计出货量中占有 45% 的市场份额,因此其中许多产品已被使用。
Freescale Semiconductor KineTIs – 灵活的内存
基于 ARM 处理器的主要微控制器需要一段时间才能起步,尽管它已经销售了数十年基于 Power Architecture™ 及其专有 ColdFire® 架构的 32 位 MCU。飞思卡尔在 ARM Cortex-M4 内核及其增强功能上迅速跃升,其新的 KineTIs™ 产品系列得到了很好的补充(参见图 3)。
图 3:飞思卡尔 KineTIs 架构(由飞思卡尔提供)。
从较小的 K10 到今天的全口径 K70,片上闪存的大小从 32 KB 到 1 MB,根据芯片的不同,其宽度从 32 位到 128 位不等。闪存在 90 nm 工艺节点上制造,响应电压约为 30 ns,但 KineTIs MCU 运行速度高达 100 MHz,有望实现双倍速度。飞思卡尔的薄膜存储(TFS) 闪存可以在低至 1.71 伏的电压下读取、擦除和写入,这很好,因为它在两个几乎用完的 1.5 伏 AA 电池的限制内(一旦它们达到 0.9 伏,它们就会迅速退化)。
Kinetis MCU
有自己的指令和数据缓存来帮助克服闪存读取延迟,并且它们还可以寻址片外存储器。这足够有效,以至于 Kinetis MCU 在 Kinetis 的额定速度下看起来与其他 MCU 一样高效。内存保护单元帮助操作系统防止一个任务的程序进入另一个任务的内存空间。
主闪存辅以飞思卡尔称之为 FlexMemory 的东西,这是一种特殊的闪存,也可以作为 E2PROM 运行。程序员决定将多少用作程序闪存,其余用作 E2 - 最多 16 KB。作为 E2 运行的部分会自动使用执行磨损均衡和写入算法的特殊逻辑,以获得 100 万次甚至可能高达 1000 万次的耐用周期,因为更多的 FlexFlash 是专用的。
与其他一些供应商的情况一样,飞思卡尔利用交叉开关让总线主控器同时访问主闪存、FlexFlash、SRAM 和各种外围设备,以保持数据以最佳方式移动。
Texas Instruments Stellaris – 包含固件
Stellaris® 微控制器是第一批使用新 ARM Cortex-M3 架构的产品,当时它们由主要合作伙伴 Luminary Micro 开发,现在归德州仪器所有。Stellaris 拥有丰富的 MCU 集合,服务于从电机控制到网络和用户界面的应用。
德州仪器 MCU 以适中的 80 MHz 速度运行,具有高达 512 KB 的错误检查闪存、高达 96 KB 的数据 RAM,有些还拥有自己的 2 KB 片上传统 E2PROM。Stellaris 的闪存可以执行高达 50 MHz 的单周期读取,在此频率以上,预取缓冲器的作用通过每次读取读取 64 位并使用推测分支来最大限度地减少延迟。
虽然现在 ROM 在大多数 MCU 上似乎已经消失了,但许多Stellaris LM3S和基于 Cortex-M4 的 LM4F MCU(参见图 4)特别使用紧凑型 ROM 来存储可能被所有应用程序使用的一些基本且经常访问的代码。这些驱动程序和例程称为 StellarisWare®,由外围驱动程序库、引导加载程序和向量表、抢先式实时调度程序 SafeRTOS™、循环冗余校验(CRC) 错误检测操作和用于高级加密的密码表组成标准 (AES)函数。将这些有用的功能和数据放入快速、廉价的 ROM(在适当的情况下)可以释放大量闪存,这些闪存可以更好地用于增强终端设备的自定义代码。
图 4:德州仪器 Stellaris LM4F 架构(德州仪器提供)。
记住您的应用程序——内存可能使您受益
每个应用程序的需求都不同,在选择微控制器时需要考虑许多因素。此处回顾了来自各种供应商的与高端 MCU 相关的许多闪存、SRAM、ROM 和特殊存储器功能。虽然没有一个部件可能具有完全适合您的应用程序的理想特性,但许多内存选项现在应该更加清晰。
分享到:
猜你喜欢