控制器|嵌入式开发:微控制器的引导加载程序设计技术

控制器|嵌入式开发:微控制器的引导加载程序设计技术

引导加载程序(有时称为闪存加载程序)是驻留在微控制器内存中的单独应用程序(不是产品应用程序代码) , 用于帮助嵌入式开发人员更新他们的软件 , 而无需打开他们的设备并访问 JTAG 或其他调试端口 。

引导加载程序在嵌入式系统中已经存在了几十年 , 但许多团队忽视了它们的重要性 , 并且不完全理解如何去创建一个健壮的系统 。 更糟糕的是 , 有关如何创建引导加载程序的详细信息分散在整个网络中 , 没有任何一个来源为开发人员提供成功创建自己所需的所有信息 。 在这篇文章中 , 我们将讨论产品团队为他们的系统创建引导加载程序的不同选项 , 并提供一些资源来深入了解如何创建自己的引导加载程序的细节 。
开发人员可以使用多种选项来创建自己的引导加载程序 。 首先 , 许多微控制器都带有内部工厂引导加载程序 。 工厂引导加载程序存在于微控制器 ROM 中 , 开发人员可以在产品制造过程中访问以将其应用程序映像闪存到微控制器上 。 如果开发人员不需要强大的解决方案、错误处理或安全性 , 这些工厂引导加载程序可能足够聪明 , 可以开箱即用 。 设备固件更新 (DFU) 已成为通过内置在微控制器中的 USB 更新固件的流行方法 。 为了使用 dfu , 嵌入式开发人员必须:从 ST Micro 下载 DFU 实用程序 , 例如 dfu-util 或 DfuSe
将他们的代码编译成 .dfu 图像文件
在微控制器启动期间按住特定的 GPIO 引脚
使用 dfu 实用程序来更新他们的固件
dfu 选项非常适合快速原型设计 , 但在生产环境中 , 必须有一个需要拉到特定状态的特定 GPIO 可能很危险 。 如果用户不小心触发了正确的状态并重新启动会发生什么? 突然他们的系统无法工作 , 他们不知道为什么 。

开发人员可以用来为其系统创建引导加载程序的第二个选项是使用由其微控制器供应商提供的引导加载程序 。 使用供应商提供的引导加载程序可能很有意义 , 因为创建引导加载程序所需的技能需要对微控制器中发生的事情有专业的了解 。 引导加载程序嵌入式开发人员需要了解:
链接器文件
如何共同定位多个应用程序图像
检测新图像
验证新的应用程序映像(校验和、CRC、安全问题)
写入闪存
在更新中止或电源故障时恢复
从已运行的应用程序分支到新应用程序
如何调试内存中的多个应用程序
它有很多内容 , 而且列表才刚刚开始 。 使用供应商提供的引导加载程序可以帮助开发人员快速克服学习曲线障碍 。 引导加载程序甚至可以作为开发人员采用然后构建自己的解决方案的起点 。 在许多情况下 , 供应商提供的解决方案是一个很好的例子 , 它功能强大但几乎总是缺乏适当的错误处理、健壮性和安全性 。
嵌入式开发人员可以将引导加载程序添加到他们的系统的另一种选择是使用第三方供应商为他们创建一个 。 外包引导加载程序开发很有意义 , 因为它允许团队专注于他们的产品功能 , 而不是固件更新 , 这本身就是一个复杂的话题 。
最后一个选项是创建自己的引导加载程序 。 深入了解细节可能是非常有益和具有挑战性的 。 引导加载程序揭示了开发人员对他们的微控制器、嵌入式软件以及如何调试应用程序的了解程度 。 经验丰富的开发人员的典型开发工作可能需要四到六周 , 具体取决于复杂性和接口要求 。 对引导加载程序几乎没有经验的开发人员可能需要 10 到 12 周的时间 。 学习曲线和错误并非微不足道 。