为嵌入式应用选择合适的闪存容量极具挑战性。你需要确保有足够的内存来保护未来的功能、固件更新等。然而,与此同时,即使内存是“廉价的”,你也不想过度使用它。
你的产品可能会被大量生产,这意味着你节省的每一分钱都会对你公司的财务成功产生重大影响。在某些情况下,这可能是在公司稳定而成功的职业生涯,或者是充满压力、动荡不安的职业生涯之间的差异。
让我们来看看为嵌入式应用选择合适闪存容量的几种最佳实践。
区分内存类型
在选择内存大小之前,区分你可能选择的不同类型的内存非常重要。虽然有不同类型的闪存和RAM,但我们将着眼于一个非常简单的类型:内部与外部存储器。
内部闪存是微控制器的板载存储器。当你去你最喜欢的供应商那里查找微控制器时,你会发现它们有不同的尺寸和不同的内存。内部存储器用于存储数据,例如:
l 应用代码
l 引导装载者
l 配置数据
l 客户数据
l 信任根
外部存储器是与微控制器无关的存储器。你可以从微控制器中单独选择该存储器。它通常通过QSPI、SDHC等连接到微控制器。外部存储器通常用于:
l 应用程序映像存储(在固件更新过程中)
l 客户数据
l 文件系统
我们将专门探讨选择微控制器片上闪存的最佳实践。
从内存映射草案开始
当你第一次开始一个新项目时,你基本上不知道你将需要多少内存。你的申请将包括:
l 业务逻辑(应用程序)
l 配置
l 库(中间件)
l 低级驱动程序
很难知道你需要多少闪存空间,尤其是因为你可能需要额外的空间来存储备用固件映像和产品发布后添加的未来功能。但是,你可以获得一个初步的估计,这将有助于你确定你需要的基准或最小闪存量。
几乎每个微控制器供应商都提供某种类型的配置工具。这些工具旨在帮助你快速启动并运行微控制器!你可以快速配置RTOS,设置USB或文件系统,等等。我说的快,是指一个小时左右。
你可以使用微控制器配置工具来构建一个快速应用程序,大致获得你的最低闪存使用量。如果你看一下你的,你也会有一个总的记忆图。告诉你每个库有多大的映射文件。
“最低限度有什么好处?”你可能会想,但是最小值将帮助你限制你应该查看的内存大小。它让你知道什么是可接受的下限。
有了最小内存映射和默认内存映射,你就可以在内存映射的基础上估计所需的额外内存。我将包括应用程序、应用程序图像空间等等。
从引脚兼容的“大”存储器开始
一旦有了内存使用的下限,就需要确定它的上限。这是真正的工作需要做的地方。一般的经验法则是开始开发你的应用程序,使用你选择的微控制器系列中最大的内存。
不过,你必须小心一点,不要把自己封闭起来。虽然开发人员可能会使用最大的内存部件来开始,但硬件团队在某些时候需要限制硬件设计。最好的方法是识别具有引脚兼容器件的微控制器。
例如,你可能会选择供应商A的B系列微控制器,它提供50种不同的引脚兼容器件,闪存从32 kB到1 MB不等。如果引脚兼容,硬件团队可以设计硬件,而软件团队则处理应用程序并量化他们真正需要多少内存。
量化你的“额外”空间
在某种程度上,选择闪存大小的最大挑战不是你的应用。它决定了你要为将来的特性、错误修复和固件更新留出多少额外的空间。
我的一般经验是确保应用程序至少有20%的空闲闪存空间。不幸的是,这20%只是一个任意的数字。我不知道有任何研究着眼于嵌入式应用,并确定在产品的生命周期中使用了多少额外的内存。
这再次意味着你必须检查你的产品路线图,以确定你可能需要多少额外的内存。通常,初始发布包含最多的功能。这是最小可行产品(MVP ),但这个最小值将使用最大量的闪存。
最好是根据当前应用程序的大小以及将添加到产品中的附加功能的预期数量和类型来估计你需要多少额外空间。如果你为客户添加了很少有价值的特性,那么20%可能就足够了。然而,如果你计划推出并添加机器学习,那就是完全不同的场景了。你可能需要确保有一到十倍的可用内存。
固件更新也会显著影响你选择的闪存大小。一种潜在的设计模式是在微控制器内部存储两个图像。这意味着,如果你的整个应用程序适合128 kB的闪存,你将需要额外的128 kB的闪存来存储任何新的图像!
对于微控制器来说,内部闪存通常比外部闪存贵得多。因此,我们通常使用外部闪存来存储图像,这些图像可以在更新期间传输到内部存储器。
正如你所看到的,决定你需要多少额外空间很大程度上取决于你在部署系统后将如何处理它。你可能会发现10%就足够了,或者你需要100%或更多的额外空间。
采取下一步行动
在本帖中,我们探讨了为嵌入式系统选择合适闪存容量的几种最佳实践。这些最佳实践包括在开发周期的早期生成内存映射,以及在应用程序完成后留出20%的空闲空间。
根据你的最终目的和目标,什么适合你的应用程序的具体细节会有所不同。真的没有放之四海而皆准的方法或指导可以应用。然而,本帖中讨论的最佳实践可以帮助你获得一些想法,并帮助你为嵌入式系统选择合适大小的闪存。