微控制器已经扩散到我们日常生活的每个角落,从控制烤面包机烤箱的简单8位设备到为我们提供丰富媒体和娱乐的强大32位DSP。在嵌入式开发中,没有微控制器,我们的生活不会那么令人兴奋,这是生活中不可或缺的。每年售出数十亿个微控制器,而且这个数字还在不断攀升。
当这些基于微控制器的产品已经售出数百万台,并且需要进行软件“增强”时,会发生什么情况?是不是每次软件更新都需要把每个单元都退回给厂家?电视、蓝光播放器和其他设备是否会定期返还给制造商,以便客户能够继续在他们的设备上运行最新、最好的软件?对这些问题的显而易见的答案是绝对没有,主要原因是大多数系统都自带了引导加载程序。
引导加载程序是一个应用程序,其主要目的是允许系统软件更新,而不需要使用专门的硬件,如JTAG编程器。在某些情况下,它也可以是检查嵌入式系统完整性的最早时间点。引导加载程序管理系统映像。嵌入式引导加载程序有许多不同的大小和风格,它们可以通过各种协议进行通信,如USART、can、I2C、以太网、USB等,现有的协议不胜枚举。在嵌入式开发中,具有引导加载程序的系统至少有两个程序映像共存于同一微控制器上,并且必须包括分支代码,该分支代码执行检查以查看更新软件的尝试是否正在进行中。
在产品开发的初始阶段,开发团队经常会忽略引导加载程序。这样做的主要原因是,引导加载程序不是将要出售给客户的主要终端产品,但是引导加载程序可能是该产品最重要的部分。引导加载程序允许一家公司用只实现其最终功能集的一部分的软件来推出他们的产品,然后在产品投放市场后向其添加功能。它还允许他们修复系统发布后发现的错误。
对于嵌入式软件工程师来说,引导加载程序需要完全了解处理器如何工作,如何利用其内存,以及如何在处理器的最底层工作。引导加载程序开发可能是一项极具挑战性的工作,但绝对是值得的。一旦嵌入式开发人员完成了这个过程,通过遵循一个通用且一致的引导加载程序设计方法,每个额外的引导加载程序都会变得越来越容易实现。