由于内部闪存的内存限制,是否建议使用SPI闪存来运行代码而不是内部闪存



我们在项目中使用了LPC546xx系列微控制器,目前,在初始阶段,我们正在最终确定软件和硬件要求。目前,基本固件大小(包括RTOS、第三方堆栈、库等(为480 KB。现在,一旦开发出完整的应用程序,其大小将超过内部闪存大小(512KB(,再加上我们需要的存储空间,可以单独保存固件更新映像。

因此,我们计划使用SPI闪存(S25LP064A-JBLE,http://www.issi.com/WW/pdf/IS25LP032-064-128.pdf,串行闪存(来引导和运行固件。

是否建议从SPI闪存运行代码?如何将外部闪存直接映射到CPU内存空间?有人能举一个包含此内存映射(链接器脚本等(或LPC546xx使用SPI FLASH的演示应用程序的例子吗?

一般来说,不建议这样做,或者换句话说:离CPU越近越好。然而,S25LP064A和LPC546xx都支持XIP,因此它是可行的。

这不是一个微不足道的问题,因为许多方面都受到影响。也就是说,这个问题最好避免,而且应该在规划阶段就解决。嵌入式系统更多的是妥协,做出正确/更好的选择需要技能和经验。

  • 恩智浦论坛上回答的问题相同:链接

512K的NVRAM是巨大的。即使使用第三方库,也几乎可以肯定有优化的空间。

与此相关的是,关于XIP的讨论应该提供有价值的见解:链接。

我强烈鼓励使用文件系统,如果还没有这样做的话,因为外部存储更适合使用。计算单位越远,相关性就越强。这不是XIP,不管怎样,代价都是复制到RAM。也就是说,性能会变慢。但根据我的经验,对速度的需求往往没有得到充分考虑,至少在一定程度上被高估了。

关于您提到的RTOS和FW升级:

  • 除非是糟糕的RTOS,否则内置了文件系统意识。特别是对于固件升级(注意:您需要容纳3个映像的空间,包括出厂重置(,除非SoC供应商已经通过其他方式(OTA(支持,否则这将使生活变得更轻松,风险更小。如果没有FS意识,可以添加它。

  • 固件升级需要大量额外的存储空间。如果更简单,那就更多。然而,更简单也更安全,这对于FW升级非常重要。在最简单的情况下(二进制平面图像(,您需要的内存量至少是您已经消耗的内存量的两倍。

总而言之:我认为你要走的方向是可行的,根据实际情况可能是你唯一的选择。

最新更新