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的功能和具体实现有了初步了解):

时间: 2024-08-26 01:21:16

LM3S之boot loader学习笔记-1的相关文章

LM3S之boot loader学习笔记-2

彭会锋 () 上一篇中介绍了bootloader的基础知识,对于bootloader的作用和如何编写bootloader也有了大概的了解了,这一篇主要讲解bootloader启动引导的三大基础知识:LM3S的存储分布.cotex-m3的启动机制.flash编程,这三者是编写bootloader之前必须要了解的相关知识! LM3S flash存储分布

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.但是在我们分析之前,我们应该先回顾一些关于C语言的基础知识. Exercise 4: 阅读关于C语言的指针部分的知识.最好的参考书自然是"The C Programming Language". 阅读5.1到5.5节.然后下载pointers.c的代码,并且编译运行它,确保你理解在屏幕上打印出来的所

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

Part 2: The Boot Loader 对于PC来说,软盘,硬盘都可以被划分为一个个大小为512字节的区域,叫做扇区.一个扇区是一次磁盘操作的最小粒度.每一次读取或者写入操作都必须是一个或多个扇区.如果一个磁盘是可以被用来启动操作系统的,就把这个磁盘的第一个扇区叫做启动扇区.这一部分介绍的boot loader程序就位于这个启动扇区之中.当BIOS找到一个可以启动的软盘或硬盘后,它就会把这512字节的启动扇区加载到内存地址0x7c00~0x7dff这个区域内. 对于6.828,我们将采用

Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文主要围绕以下几点进行说明: Spring Boot 简介 使用Spring Boot快速搭建一个Web应用如有不对的地方,请指正. 1. Spring Boot简介 Spring Boot是一个基于Spring的衍生框架,其主要的目的是帮助我们快速构建独立.生产级别的Spring的应用,其崇尚的理念

Spring boot 学习笔记 (二)- 整合MyBatis

Spring boot 学习笔记 (二)- 整合MyBatis Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 以Spring boot 学习笔记 (一)- Hello world 为基础项目,在pom.xml中添加如下依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&l

Spring boot 学习笔记 - Hello world

Spring boot 学习笔记 - Hello world spring boot介绍: spring-boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. Hello world 通过官网https://start.spring.io/

我的第一个spring boot程序(spring boot 学习笔记之二)

第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相关知识点时会再次理解.要运行起第一个Spring boot特别简单,用IDEA包含了Spring Boot的引导,直接新建一个spring boot项目. 注意: 1.第一次新建Spring boot项目的时候,maven会下载大量的依赖到本地,所以特别慢,耐心等待或者用国内的maven公库都行(自

Linux 操作系统学习笔记

一,unix 1.unix 特点 伸缩性强,开放性好, 2.基本原则 所有对象,硬件都是文件 配置数据以文本形式保存 短小的单目的程序构成 多个程序合作完成复杂任务 3.gnu 基本原则是共享,建立自由开放的unix系统 1984年 richard stallman 发起 基本体系是micro kernel 4.gpl Copyleft 原作者所有权 5.linux起源 Linustorvalds, 自由的类unix操作系统, 遵循gnu和gpl 6.linux 可以实现unix功能 遵循开源许

GRUB学习笔记(转自http://www.cnblogs.com/evilzy/archive/2008/03/30/1130173.html)

grub学习笔记1 首先要了解的几个概念 1.1 启动管理器 启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic Input/Output System)将控制传送给MBR.然后存储在MBR中的这段程序将运行.这段程序被称为启动管理器.它的任务就是将控制传送给操作系统,完成启动过程>有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Load