首页 > 代码库 > LM3S之boot loader学习笔记-1

LM3S之boot loader学习笔记-1

LM3S之boot loader学习笔记-1

彭会锋

首先声明,此系列文章编写参考了很多资料,其中一些内容是原版内容的引用和整理,并加入了一些自己的见解,我已经尽量标明引用部分,如有未全部标注部分,还望见谅!

      最近项目需要能够对光伏系统监控器和dsp代码进行在线升级,为此特意学习了下lm3s的bootloader编写,程序已经编写调试完毕,特写一下相关的知识点总结,也供各位进行相关参考!


bootloader作用

      "BootLoader是位于Flash起始地址处的一小段代码,占据空间大小依据Boot所实现的功能而不同。如果没有BootLoader,硬件启动成功后,将直接运行用户应用程序(Application)。反之,BootLoader的启动代码(Start-up Code)将先被执行,进行一系列的初始化操作后,根据预先设定的条件,选择执行用户应用程序(Application)或升级控制程序(Updater)。

      系统在实际应用过程中,如果需要更新软件功能,那么为了避免重新拆装设备,可以借助“在线升级”方式。目前,在线升级是很多系统都必需的一个功能,对于LM3S系列微控制器来说,利用Flash控制器接口即可实现系统在线升级。Boot程序接收新的代码编译文件,然后调用Flash操作函数将新的代码编程到Flash 扇区中,即可实现系统的在线升级。依照我查找的资料来看,嵌入式中很大部分编写bootloader是为了升级程序之用的。"参考“LM3S 系列单片机远程升级应用笔记”

      首先介绍bootloader程序的编写,lm3s系列bootloader编写可以采用两种方法:

      1 rom中自带bootloader

      lm3s系列芯片中在ROM中固化了很多的程序,其中就包括bootloader,可以通过rom中的bootloader通过串口(UART)\SSI\I2C\ETHERNET控制程序传输,然后使用flash读写函数将程序写入flash中,从而实现程序烧写升级

     2 flash烧写自己编写的bootloader

     bootloader也可以用户自行编写,其实bootloader也是一段程序而已,用户完全可以自己编写,这样的灵活性更大,可以针对自己的设计进行有针对性的更改,我这次的设计也是自行编写,其实写完了回头再看就是基于我以前程序的缩减版!

     为了能够对bootloader能够首先从整体上有一个认识,我先给出bootloader、应用程序以及其他一些东西在芯片flash中的一些分布,以期能够从整体上对bootloader有个完整的认知:

    技术分享

      由上图可知,从flash空间占用来说,bootloader位于flash的起始位置,然后才是应用程序flash占用,所以程序上电也是先运行bootloader程序,然后在bootloader跳转程序控制下决定是运行bootloader引导程序还是用户应用程序!

     为了实现bootloader升级程序的功能,我们就需要自己编写bootloader控制逻辑,下面是我的bootloader的控制逻辑流程图(其实看完流程图,你大概就知道bootloader的功能和具体实现有了初步了解)

 技术分享

 

LM3S之boot loader学习笔记-1