• LM3S之boot loader学习笔记-1


    LM3S之boot loader学习笔记-1

    彭会锋

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

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

    参考网址:

    http://wapapp.baidu.com/wh2152/item/2e9ee419bb416a3bb93180ec LM4F232的bootloader过程

    http://blog.sina.com.cn/s/blog_5f18cbd10100da5t.html  揭开BOOT LOAD升级过程的神秘面纱

    http://wenku.baidu.com/view/e610a30fba1aa8114431d9cc.html  BootLoader应用说明

    后面这两组是为了加深对存储器映射的理解的文章:

    http://blog.sina.com.cn/s/blog_5f18cbd10100da6f.html  如何让静态局部和全局变量或数组存在指定地址的Flash

    http://blog.sina.com.cn/s/blog_5f18cbd10100d4xr.html  Keil平台中如何让程序在RAM中跑起来 


    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)SSII2CETHERNET控制程序传输,然后使用flash读写函数将程序写入flash中,从而实现程序烧写升级

         2 flash烧写自己编写的bootloader

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

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

        

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

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

     

     

  • 相关阅读:
    Golang语言编程规范
    关于redis的几件小事(三)redis的数据类型与使用场景
    关于redis的几件小事(二)redis线程模型
    关于redis的几件小事(一)redis的使用目的与问题
    关于MQ的几件小事(七)如果让你设计一个MQ,你怎么设计
    关于MQ的几件小事(六)消息积压在消息队列里怎么办
    关于MQ的几件小事(五)如何保证消息按顺序执行
    关于MQ的几件小事(四)如何保证消息不丢失
    关于MQ的几件小事(三)如何保证消息不重复消费
    关于MQ的几件小事(二)如何保证消息队列的高可用
  • 原文地址:https://www.cnblogs.com/qiufenghui/p/4224768.html
Copyright © 2020-2023  润新知