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)\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的更多相关文章

  1. LM3S之boot loader学习笔记-2

    LM3S之boot loader学习笔记-2 彭会锋 () 上一篇中介绍了bootloader的基础知识,对于bootloader的作用和如何编写bootloader也有了大概的了解了,这一篇主要讲解 ...

  2. Spring BOOT的学习笔记

    1,静态文件夹src/main/resources/static下的,图片必须放在images文件夹下才能访问,直接放在static下不能访问 2,配置热部署,否则修改下Html,图片都得重启 htt ...

  3. Spring boot + jdbc学习笔记

    pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  4. Spring Boot + WebSocket 学习笔记

    首先需要了解一下背景,什么是WebSocket以及为什么要用WebSocket. 在常见的Web应用中,客户端与服务器通信,都是通过HTTP协议进行通信,客户端一次请求,服务端一次响应.而WebSoc ...

  5. Spring boot ----RestTemplate学习笔记

    ****spring boot-----restTemplate 封装了HttpURLConnection,HttpClient,Netty等接口访问实现库 restTemplet包含以下部分 Htt ...

  6. MIT 6.828 JOS学习笔记7. Lab 1 Part 2.2: The Boot Loader

    Lab 1 Part 2 The Boot Loader Loading the Kernel 我们现在可以进一步的讨论一下boot loader中的C语言的部分,即boot/main.c.但是在我们 ...

  7. MIT 6.828 JOS学习笔记4. Lab 1 Part 2.1: The Boot Loader

    Part 2: The Boot Loader 对于PC来说,软盘,硬盘都可以被划分为一个个大小为512字节的区域,叫做扇区.一个扇区是一次磁盘操作的最小粒度.每一次读取或者写入操作都必须是一个或多个 ...

  8. MIT JOS学习笔记01:环境配置、Boot Loader(2016.10.22)

    未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴 ...

  9. 《xv6 Appendices: PC Hardware and Boot loader》学习笔记

    MIT 6.828 Lecture 2的preparation要求阅读<xv6 book>的附录部分,附录包括"PC Hardware"和"The Boot ...

随机推荐

  1. 爬虫——请求库之selenium模块

      阅读目录 一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被加载 六 元素交互操作 七 其他 八 项目练习 一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解 ...

  2. Creating an AVI in memory with C++

    Creating an AVI in memory with C++        The following example demonstrates how an avi file is comp ...

  3. 读取Android设备的MAC地址

    读取Android设备的MAC地址   AndroidUtil.java package com.csdn.android.util; import com.csdn.android.framewor ...

  4. discuz debug下载地址

      Discuz!X会自带Debug模式,主要是用于排查性能问题.垃圾站建议当如果您的站点调试完之后,一定要把debug模式关闭,以免其他用户会获取到一些敏感信息.在调试过程中,config文件配置的 ...

  5. c++之旅:模板库中的容器

    容器 C++中的容器包括array, vector, list,map,set 数组 array不可变长,创建时其大小就固定了,array中可以存储各种数据类型包括对象,不过array是在栈上分配的, ...

  6. java中元注解

    java中元注解有四个: @Retention @Target @Document @Inherited:  @Retention:注解的保留位置 @Retention(RetentionPolicy ...

  7. Greatest Common Increasing Subsequence

    /*HDU1423 最长公共递增*/ #include <stdio.h> #include <string.h> #include <iostream> usin ...

  8. linux把软件安装到指定目录

    1.安装包带configure文件的: ./configure --prefix=安装目录 2.安装包不带configure文件,只带MakeFile 2.1 make install PREFIX= ...

  9. Qt+VS编译出错:Two or more files with the name of moc_Geometry.cpp will produce outputs to the same location

    warning MSB8027: Two or more files with the name of moc_Geometry.cpp will produce outputs to the sam ...

  10. vi在行首插入注释符号#

    1.ctrl+v 2.上下键选中要插入的位置 3.按下shift+i,接着输入#符号 4.按键ESC(稍等一下,就会自动插入了)