如何利用SPI XiP闪存扩展微控制器程序存储器的原因和方法

发布时间:2019/5/27

随着微控制器应用日益复杂化,开发人员需要使用更多闪存程序存储器来存储应用固件。尤其对于开始执行相对复杂的边缘计算的物联网 (IoT) 端点,就更是如此。然而,有时候应用可能扩展到需要外部程序存储器的程度,此时开发人员则需要在并行或串行闪存之间进行选择。

添加外部并行闪存芯片会占用 I/O 线,增加复杂性,并占用额外的电路板空间。本文将介绍如何通过添加 Adesto Technologies 支持 SPI 芯片内执行 (XiP) 接口的外部串行闪存芯片,来扩展微控制器的闪存程序存储器。本文还将阐述 XiP 闪存如何映射到 Microchip Technology 微控制器的存储空间中,以使代码执行对固件几乎是透明的。

扩展外部存储器的原因

在应用开发之初,开发人员应尽量选择有计划推出具有更大存储空间的引脚兼容器件的微控制器。如果在开发期间,应用固件扩展到超过目标器件闪存的程度,那么就可以轻松换用具有更大闪存的引脚兼容器件。这样既能扩展应用存储器,又无需为不同的微控制器重新设计印刷电路板。

但是,应用需要的程序存储器可能会超过兼容微控制器系列片上所能提供的存储器极限,这就需要使用片外闪存。这种现象日益普遍,其原因是多方面的,包括:

  • 在开发阶段,系统范围可能扩大,以致超出初始设计。这可能是由于应用的临时变更、特征蔓延或未准确预测应用的存储器需求而造成的。解决办法是用闪存程序存储器更大的引脚兼容微控制器进行升级,或增加外部闪存程序存储器。如果开发已经接近结束,后者可能会导致项目延迟。
  • 将来在现场进行固件升级所需的闪存程序存储器,可能比系统板上已有的微控制器所能提供的存储器要大。在这种情况下,解决办法很有限:要么在现场换用带更大闪存程序存储器的系统,要么取消升级。
  • 系统级产品系列开发可能需要一种新产品,该产品需要的闪存程序存储器比引脚兼容微控制器系列所能提供的存储器要大。解决办法是使用新的微控制器系列重新设计系统,或添加外部闪存程序存储器。

显然,对于开发人员来说,需要预判当前和未来系统对存储器扩展的需求并为此进行规划,这一点相当重要。如果项目有可能需要外部闪存程序存储器,开发人员应为将来扩展印刷电路板预留空间。虽然闪存芯片不需要安装在电路板上,但为保险起见,最好还是预留空间。

扩展闪存程序存储器的传统办法是使用具有地址和数据线的并行闪存接口。然而,在不牺牲速度的情况下,即使最有效的使用并行闪存的方式,也只能使用 16 位地址、16 位数据和四个或更多控制信号。而这需要 36 个或更多微控制器引脚。

这不光使微控制器资源使用效率低下,还会将微控制器选择局限于带有外部总线的器件,因为这能增加微控制器的引脚数。可外部并行总线会占用相当大的印刷电路板空间,高速地址和数据总线也会增加电磁干扰 (EMI) 的可能性。

SPI XiP 代码执行

更有效的解决办法是使用支持 SPI XiP 接口的外部闪存程序存储器件。SPI XiP 接口只需使用六个引脚就可连接主机微控制器。与传统 SPI 接口不同,外部闪存器件上的存储器不是通过 SPI 固件驱动程序直接访问,而是在微控制器的程序存储器进行映射。

设计使用 SPI XiP 接口的串行闪存器件的典型范例是来自 Adesto Technologies 的 AT25SL321-UUE-T(图 1)。这是一款 32 兆位 (Mbit) 闪存,支持单通道、双通道和四通道 SPI 模式。它支持 104 兆赫 (MHz) 的 SPI 时钟,在双通道 SPI 模式下提供 266 MHz 的等效时钟速率,而在四通道 SPI 模式下提供 532 MHz 的等效时钟速率。