一种新颖Bootloader设计方案

发布者:好的哎最新更新时间:2011-09-19 关键字:Bootloader 手机看文章 扫描二维码
随时随地手机看文章

本文基于Microchip公司的MPLAB软件开发环境设计了一种新颖的Bootloader,并配套编写了PC机端上位机界面程序。其特点是控制灵活,使用便利,系统升级安全可靠。

  1 Bootloader的实现

  1.1 Bootloader的操作模式

  Bootloader在单片机上电/复位后、用户程序之前先运行,运行后判断当前是否需要进入升级状态。如果不需要升级,就直接运行原有的程序;如果需要升级,首先擦除旧的程序,然后从串口接收用户程序,同时写入Flash中。Bootloader有2种操作模式:

  ①启动加载模式,也称为“内核启动”模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。

  ②下载模式。在这种模式下,目标机上的Bootloader将通过串口、网络连接或者USB等,从上位机下载操作系统文件,然后保存到目标机上的Flash类固态存储设备中。Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用,此外,以后的系统更新也会使用Bootl-oader的这种工作模式。

  本文设计的Bootloader同时支持这两种工作模式,一开始启动时处于正常的启动加载模式,但并不立即启动进入内核,而是提示延时3 s,上位机用户如果发送某些信息给目标机,则切换到下载模式,否则继续启动内核。

  1.2 Intel HEX文件

  Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。每个记录包含5个域:数据长度域,它代表记录当中数据字节的数量;地址域,它代表记录当中数据的起始地址;代表HEX记录类型的域;数据域,它代表一个字节的数据,一个记录可以有许多数据字节,记录当中数据字节的数量必须和数据长度域中指定的数字相符;校验和域,它表示这个记录的校验和,通过将记录当中所有十六进制编码数字对应的值相加,模除256,所得余数的补码即校验和。

  1.3 Bootloader的设计

  本文所设计的Bootloader程序采用的编译器是MPLAB软件开发环境的mcc18编译器,升级文件格式为Intel HEX格式。根据Intel HEX文件的格式,将文件内容的每一行封装成一帧,加上帧头和帧尾以确保数据传输的可靠性,并采用半双工的通信模式,对错误帧进行重传。

  主程序代码如下:

  

 

   [page]

主程序流程如图1所示。下载系统映像文件并写入程序存储器的程序流程如图2所示。

  

 

  1.4 PC端操作界面的设计

  PC端操作界面主要用来实现以下几个功能:

  ①串口参数设置。设置串口通道号、数据位数、波特率等参数。

  ②用户登录。输入用户名、密码,与下位机进行验证。

  ③选择系统映像文件。选择系统映像HEX文件,逐行读入并通过串口发送给下位机,如有错误重新选择。

  ④提示用户系统更新完成(或失败)。显示系统更新进度,提示用户系统更新结果。

  2 设计中的几项关键技术及注意事项

  ①如果一次性将HEX文件中全部数据通过串口发送给目标芯片,则在通信过程中发生一字节的错误传输,就将导致全部数据需要重新发送;并且还要考虑到芯片的写Flash处理速度与串口速率的大小关系,否则将导致接收数据的丢失。为加强通信的可靠性与串口速率的可变性,本文所设计的Bootloader采用半双工的通信模式与上位机进行通信:以HEX文件的一行作为一帧数据,每帧数据校验结束后向上位机发送回复数据,上位机根据回复数据判断发送数据帧的正误来选择重发或继续发送下一帧;并且在进行升级之前与上位机通信进行用户名和密码的核对,以确保当前的升级操作不是误操作。

  ②对PIC18系列的程序存储器的写操作每次写入8字节的块,并且程序Flash单位写入只能由1变为0。但是HEX文件的内容并不是按照需要生成的,每帧的数据长度可以不同,相邻帧的地址域的内容也可以不同。为此,在对程序存储器进行写操作时,需要根据地址域内容将数据域内容以8字节为单位合并成数据块,不足8字节的要填充0xFF。本文所设计的Bootloader程序采用一个环形Buffer的结构体来实现这一操作:

  

 

  ③芯片的默认中断向量的起始是0x08和0x18,这是不能改变的,要想改变中断向量入口地址就要在这两个地址位置添加跳转指令,以跳转到用户程序的中断向量入口地址。PIC18系列的程序存储器的部分地址区域具有写保护性,为防止此区域之外的Bootloader程序被擦除或改写,需要对接收数据的地址域内容进行判断。如果小于用户程序起始地址,则需要向上位机回复“写地址错误”,并丢弃当前数据帧。

  结语

  实验证明,本文设计的Bootloader功能稳定,且控制方便,可根据用户的需要灵活改变。譬如,在用户程序中添加系统复位机制即可实现在线升级,为PC端操作界面添加网络下载模块即可实现远程控制系统升级,这对于嵌入式产品的发布和软件升级极其重要。

 

 

关键字:Bootloader 引用地址:一种新颖Bootloader设计方案

上一篇:基于MSP430FW427的无磁水表设计
下一篇:数字电路中Multisim10单片机的应用

推荐阅读最新更新时间:2024-03-16 12:41

AVR_M8 BootLoader应用范例
//meg8 bootloader //BOOTSZ1 BOOTSZ0=00 //meg8 bootloader //BOOTSZ1 BOOTSZ0=00 #include iom8v.h #define SPM_PAGESIZE 64 //M8的一个Flash页为64字节(32字) #define BAUD 38400 //波特率采用38400bps #define CRYSTAL 8000000 //系统时钟8MHz //计算和定义M128的波特率设置参数 #define BAUD_SETTING (unsigned char)((unsigned long)CRYSTA
[单片机]
__main() 和 main()
__main() 和 main()(转载) 因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可能会与我们的初始化发生冲突,故在我们做好初始化后最好别调用__main()。仿真时若调了__main()且没设置entry会报警告,__main()库函数代码不太了解,估计跟ADS初始化有关,库函数__main()要慎用。 当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是: IMPORT main B
[单片机]
PIC32MX795F512L BootLoader的linker script文档移植过程
本人参照官方资料,做的学习笔记,有理解不对的地方请大神指出。 IDE:MPLAB X IDE v5.35 编译器 MPLAB C32 v2.02 参考材料:PIC32 Bootloader (AN1388)与MPLAB Assembler, Linker and Utilities for PIC32 MCUs User’s Guide(51833A) 链接如下: PIC32 Bootloader (AN1388) MPLAB Assembler, Linker and Utilities for PIC32 MCUs User’s Guide(51833A) 1.在工程目录下,新建.txt文本,然后改后缀为* .ld添加到工
[单片机]
PIC32MX795F512L <font color='red'>BootLoader</font>的linker script文档移植过程
stm32 中bootloader、startup_stm32f10x_md.s的作用
一、启动文件的作用是: 1. 初始化堆栈指针 SP; 2. 初始化程序计数器指针 PC; 3. 设置堆、栈的大小; 4. 设置异常向量表的入口地址; 5. 配置外部 SRAM 作为数据存储器(这个由用户配置,一般的开发板可没 有外部 SRAM); 6. 设置 C 库的分支入口__main(最终用来调用 main 函数); 7. 在 3.5 版的启动文件还调用了在 system_stm32f10x.c 文件中的 SystemInit() 函数配置系统时钟,在旧版本的工程中要用户进入 main 函数自己调用 SystemInit() 函数。 二、关于启动文件的介绍,可以参考: 1、http://www.360doc.com/cont
[单片机]
stm32 中<font color='red'>bootloader</font>、startup_stm32f10x_md.s的作用
MC9S12XS128MAL Bootloader(1)
首先BootLoader和用户程序是两个工程,两个工程代码通过修改PRM文件存储在不同的flash中,在通过PC指针的跳转实现两个工程的切换; BootLoader程序 关中断 初始化时钟; 初始化CAN 初始化flash读写; 开中断,开CAN中断; 计时判断CAN是否收到bootloader开始报文; 时间到后没收到跳转到原用户程序启动向量; 收到后,开始读写flash,读写完后,PC指针跳转到用户程序地址(EEFE); 其中flash程序在读写flash时,要把代码copy到RAM中,因读写时不能再读flash中的代码 extern char __SEG_START_RAM_CODE ; extern c
[单片机]
ARM移植之BootLoader(4)
4. BootLoader第二阶段   vivi Bootloader的第二阶段又分成了八个小阶段,在main函数中分别调用这几个小阶段的相关函数: int main(int argc, char *argv ) { int ret; /* * Step 1: */ putstr( \r\n ); putstr(vivi_banner); reset_handler(); /* * Step 2: */ ret = board_init(); if (ret) { putstr( Failed a board_init() procedure\r\n ); error();
[单片机]
多核DSP Bootloader代码加载方法
引言 无线通信产业不断推进创新,像WCDMA、WiMAX、MIMO和4G都需要增强的性能.性能增强,提供更大通信带宽的同时意味着越来越大的数据流量。多内核DSP强大的处理能力,兼具FPGA的扩展特性和阵列优点以及DSP的相似性和效率。提供了一种高效、易于开发的解决方案,倍受设备商的青睐。而无线协议标准从2G的GSM到3G的WCDMA,冉到4G的LTE,其协议标准的不断更新,以及运营商、设备商对低硬件成本的要求,需要实现一种平滑的协议标准软升级方案,即不改变硬件平台就可实现协议标准的升级。TI公司推出的3内核DSP芯片TCl6488以其强大的数据处理能力,同时支持多种 代码加载 方式,在满足数据处理要求的同时,支持网络式代
[嵌入式]
多核DSP <font color='red'>Bootloader</font>代码加载方法
WinCE系统下BootLoader的开发
摘要:介绍WinCE.NET系统的旧方法;说明板级支持包(BSP)的基本构成;从开发实际出发,详细阐述如何开发BSP中的重要部件--BootLoader。 关键词:WinCE.NET BSP BootLoader DOC 引言 Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的丰富功能,同时又副入了许多新特性,以适应嵌入式领域的实际情况和要求。无论是商业应用需求,还是人们的多媒体消费需求,都能被采用CE操作系统的设备很轻松的满足。最新的.NET版本较之3.0版本,在实时性和稳定性上有大幅度提高,开始广泛地被平板电脑、数码相机、彩屏手机、PDA等多种高性能产品
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved