单片机自编程及Bootloader设计
毕设级项目:基于单片机从零写bootloader

毕设级项目:基于单片机从零写bootloader1.项目简介在计算机系统中,bootloader是系统启动的关键组件之一。
它负责在计算机开机后首先加载并执行操作系统内核。
本项目旨在通过使用单片机,从零开始编写一个简单但完整的bootloader。
2.项目背景在嵌入式系统中,特别是在资源有限的环境中,使用单片机来编写bootloader是很常见的。
通过编写自己的bootloader,我们可以更好地了解启动过程,并可以通过添加自定义功能来满足特定的需求。
3.项目目标本项目的目标是编写一个能够在单片机上运行的bootloader,并能够加载并启动一个简单的操作系统。
为了达到这个目标,我们需要完成以下几个主要任务:3.1引导方式选择在编写bootloader之前,我们需要选择合适的引导方式。
这取决于我们所使用的单片机型号和开发环境。
常见的引导方式包括串口引导、SPI引导、CAN引导等。
3.2内存映射和堆栈设置在加载操作系统之前,我们需要进行内存映射和堆栈设置。
这些设置将确保操作系统能够正确地加载和执行。
3.3调试功能实现为了方便调试和错误排查,我们可以添加一些调试功能,如串口输出和断点设置。
这些功能将使我们能够更好地监视和分析bootloader的执行过程。
3.4操作系统加载和启动最后,我们需要编写代码来加载操作系统并启动它。
这包括读取操作系统的二进制文件,并将其加载到正确的内存位置。
一旦操作系统加载成功,bootloader应该能够跳转到操作系统的入口地址,并开始执行。
4.项目实施步骤在实施本项目时,可以按照以下步骤进行:4.1确定单片机型号和开发环境首先,我们需要确定使用的单片机型号和开发环境。
这将有助于我们选择适当的引导方式,并了解相关的开发工具和调试方法。
4.2编写引导代码根据选择的引导方式,编写引导代码。
这些代码将负责加载和执行后续的bootloader功能。
4.3实现内存映射和堆栈设置根据所使用的单片机和操作系统要求,进行内存映射和堆栈设置。
stm32f103vet bootloader例程

stm32f103vet bootloader例程摘要:1.概述:介绍STM32F103VET单片机及其bootloader2.STM32F103VET单片机简介a.性能特点b.应用领域3.Bootloader概述a.作用b.工作原理4.Bootloader例程介绍a.程序结构b.重要函数及功能5.Bootloader例程实现a.硬件连接b.程序编写c.编译下载及验证6.总结与展望正文:1.概述:介绍STM32F103VET单片机及其bootloaderSTM32F103VET是一款基于ARM Cortex-M3内核的微控制器,具有高性能、低功耗、多功能的特点。
本文将介绍如何使用STM32F103VET单片机实现bootloader功能,以及相关的例程。
2.STM32F103VET单片机简介STM32F103VET是基于ARM Cortex-M3内核的32位单片机,最高工作频率可达72MHz。
它具有丰富的外设接口,如I2C、SPI、UART等,适用于各种嵌入式应用领域。
3.Bootloader概述Bootloader(引导程序)是嵌入式系统中的一个重要组成部分,主要负责初始化系统硬件、加载和执行应用程序。
通常,bootloader存储在系统闪存中,可在系统上电或复位时自动执行。
4.Bootloader例程介绍本文以一款基于STM32F103VET单片机的bootloader例程为例,介绍其程序结构及重要函数功能。
该例程主要包括以下部分:a.程序结构- 初始化部分:配置系统时钟、GPIO等外设- 下载模式部分:与上位机通信,接收并执行固件更新- 运行模式部分:执行用户应用程序b.重要函数及功能- 系统时钟配置:根据实际需求配置系统时钟,以满足不同工作场景的性能要求- 与上位机通信:通过UART、I2C等接口与上位机通信,接收固件更新命令及数据- 固件更新:将接收到的固件数据写入系统闪存,实现固件更新- 用户应用程序:执行用户编写的应用程序,实现具体功能5.Bootloader例程实现a.硬件连接根据实际硬件设计,连接STM32F103VET单片机相关引脚,如时钟、复位、通信接口等。
stm32f030 bootloader 例程

主题:STM32F030 Bootloader 例程一、简介STM32F030是STMicroelectronics公司推出的一款32位ARM Cortex-M0内核的微控制器。
它具有丰富的外设,如GPIO、UART、SPI、I2C等,适用于各种嵌入式系统应用。
在嵌入式系统开发中,Bootloader是一个重要的组成部分,它能够实现固件的更新和管理,提高系统的灵活性和可靠性。
本文将介绍如何使用STM32F030的Bootloader例程进行固件升级。
二、准备工作在使用STM32F030的Bootloader例程之前,我们需要准备好以下工具和材料:1. STM32F030开发板2. USB转TTL串口模块3. ST-Link下载器4. 针对STM32F030系列的Bootloader例程源码三、下载和安装Bootloader例程源码1. 在STMicroelectronics官全球信息站下载针对STM32F030的Bootloader例程源码2. 将下载的源码解压缩到本地3. 打开Keil MDK-ARM开发环境,导入源码并进行编译四、烧录Bootloader程序1. 使用ST-Link下载器将编译好的Bootloader程序烧录到STM32F030开发板上2. 确保烧录成功后,通过串口工具连接USB转TTL串口模块到STM32F030的串口引脚上五、固件升级测试1. 将需要升级的固件通过串口工具上传到开发板2. 在Bootloader程序中编写相关代码来实现固件的升级和校验3. 运行Bootloader程序,进行固件升级测试六、总结通过本文的介绍,我们了解了如何使用STM32F030的Bootloader 例程进行固件升级。
在实际的嵌入式系统开发中,Bootloader的作用不仅局限于固件升级,还可以实现固件的管理和安全验证。
掌握Bootloader的开发和使用对于提高系统的稳定性和可靠性是非常重要的。
毕设级项目:基于单片机从零写bootloader

毕设级项目:基于单片机从零写bootloader摘要:1.引言2.单片机bootloader 简介3.单片机bootloader 设计与实现a.目标平台与工具选择b.代码烧写流程c.代码结构与组织d.重要函数与实现4.遇到的问题及解决方案a.硬件问题b.软件问题5.总结与展望正文:基于单片机的毕设项目,从零开始编写bootloader,对于学习和实践嵌入式系统的设计与开发具有很大的价值。
本文将详细介绍这一过程,包括bootloader 的设计思路、实现步骤以及遇到的问题和解决方案。
首先,我们需要了解什么是bootloader。
bootloader(引导加载程序)是嵌入式系统中的一个关键部分,它负责在系统加电后初始化硬件并执行系统启动代码。
通常情况下,bootloader 会被固化在单片机的非易失性存储器中,以保证系统能够从断电状态恢复。
接下来,我们将详细讨论单片机bootloader 的设计与实现。
首先,我们需要选择一个合适的单片机平台和相应的开发工具。
这里我们以STC89C52 单片机为例,采用Keil uVision5 作为开发环境。
在设计和实现bootloader 时,我们需要关注代码烧写流程。
一般来说,bootloader 的烧写过程可以分为以下几个步骤:1.下载程序到单片机:通过ISP(In-System Programming)或JTAG 接口将程序下载到单片机内部的非易失性存储器中。
2.跳转到bootloader 入口:单片机加电后,会从非易失性存储器中执行bootloader 的入口地址。
3.初始化硬件:bootloader 会对单片机内部和外部的硬件进行初始化,例如初始化时钟、复位和串口等。
4.烧写应用程序:bootloader 会将从串口接收到的应用程序代码烧写至单片机的程序存储器中。
5.跳转到应用程序入口:完成代码烧写后,bootloader 会跳转到应用程序的入口地址,开始执行。
stc单片机bootloader程序编写

stc单片机bootloader程序编写随着科技的不断发展,单片机在各个领域的应用越来越广泛。
而在单片机的开发过程中,Bootloader程序的编写是非常重要的一环。
本文将介绍STC单片机Bootloader程序的编写方法。
首先,我们需要了解什么是Bootloader程序。
Bootloader程序是位于单片机内部的一段特殊代码,它的作用是在单片机上电或复位时,负责初始化硬件设备,并加载用户程序到内存中运行。
因此,Bootloader程序的编写质量直接影响到单片机的启动速度和稳定性。
在STC单片机中,编写Bootloader程序需要以下几个步骤:1. 确定Bootloader程序的存储空间:在STC单片机中,Bootloader 程序通常存储在内部Flash中。
因此,我们需要确定Bootloader程序的存储地址和大小。
一般情况下,Bootloader程序的大小应该尽量小,以便为用户程序留出更多的空间。
2. 编写Bootloader程序的初始化代码:在Bootloader程序中,我们需要编写初始化代码,用于初始化单片机的硬件设备,如时钟、GPIO 等。
这些初始化代码的编写需要根据具体的单片机型号和硬件配置来进行。
3. 实现用户程序的加载功能:Bootloader程序的核心功能是加载用户程序到内存中运行。
在STC单片机中,我们可以通过串口通信或其他外部设备来实现用户程序的加载。
例如,我们可以通过串口接收用户程序的数据,并将其写入到内存中。
4. 实现用户程序的跳转功能:当用户程序加载完成后,Bootloader 程序需要实现跳转到用户程序的功能。
在STC单片机中,我们可以通过设置程序计数器(PC)的值来实现跳转。
具体的跳转地址需要根据用户程序的存储地址来确定。
5. 添加Bootloader程序的升级功能:为了方便后续的固件升级,我们可以在Bootloader程序中添加升级功能。
通过升级功能,我们可以通过串口或其他外部设备将新的Bootloader程序写入到单片机中,从而实现Bootloader程序的更新。
PIC18单片机的一种新颖的Bootloader设计

PIC18单片机的一种新颖的Bootloader设计
字节的块,并且程序Flash单位写入只能由1变为0。但是HEX文件内容并不是按照需要生成的,每帧的数据长度可以不同,相邻帧的地址域的内容也可以不同。为此,在对程序存储器进行写操作时,需要根据地址域内容将数据域内容以8字节为单位合并成数据块,不足8字节的要填充0xFF。本文所设计的Bootloader程序采用一个环形Buffer的结构体来实现这一操作:③芯片的默认中断向量的起始是0x08和0x18,这是不能改变的,要想改变中断向量入口地址就要在这两个地址位置添加跳转指令,以跳转到用户程序的中断向量入口地址。PIC18系列的程序存储器的部分地址区域具有写保护性,为防止此区域之外的Bootloader程序被擦除或改写,需要对接收数据的地址域内容进行判断。如果小于用户程序起始地址,则需要向上位机回复“写地址错误”,并丢弃当前数据帧。结语 实验证明,本文设计的Bootloader功能稳定,且控制方便,可根据用户的需要灵活改变。譬如,在用户程序中添加系统复位机制即可实现在线升级,为PC端操作界面添加网络下载模块即可实现远程控制系统升级,这对于嵌入式产品的发布和软件升级极其重要。
毕设级项目:基于单片机从零写bootloader

毕设级项目:基于单片机从零写bootloader
在现代电子系统中,单片机作为一种常见的微控制器,被广泛应用于各种领域。
然而,对于大多数开发者来说,直接编写和调试单片机的程序是一项复杂的任务。
bootloader的作用在于,在单片机启动时加载和初始化硬件设备,从而为应用程序的运行提供一个稳定的环境。
因此,从零开始编写bootloader对于单片机开发来说是一项非常重要的技能。
在本次毕设级项目中,我们将以一个常见的单片机——STM32为例,从零开始编写bootloader。
我们将首先了解单片机的启动过程,然后逐步编写引导程序,包括初始化硬件、设置中断向量表、加载应用程序等。
在编写bootloader的过程中,我们需要注意以下几点:
1.硬件初始化:在bootloader运行之前,需要先初始化单片机的硬件设备,
如时钟、GPIO、串口等。
2.中断向量表设置:bootloader需要设置中断向量表,以便在发生中断时
能够正确地跳转到相应的处理函数。
3.应用程序加载:bootloader需要从外部存储器或其他设备加载应用程序,
并将其加载到内存中。
4.错误处理:在bootloader运行过程中,可能会遇到各种错误,如硬件故
障、存储器错误等。
因此,我们需要编写相应的错误处理程序,以确保系统的稳定性。
通过本次毕设级项目,我们将深入了解单片机的启动过程和bootloader的编写
方法,提高自己的单片机开发能力。
同时,我们也将在实践中学习到团队协作和项目管理的方法,为今后的工作和学习打下坚实的基础。
STM8 Bootloader

自制Stm8 bootloader由于本人项目需要,要做STM8L052R8的bootloader,用于远程程序升级功能,为了安全考虑,不使用ST自带的bootloader,而是自制bootloader。
基本的功能是这样的,首先程序运行在一个V1.0的版本上,且带了BOOT,当程序收到一条命令后,程序跑入死循环,等待硬件看门狗复位;程序复位后进入bootload区,等待第二条命令的接收,接收到正确的数据帧后,bootloader开始擦除FLASH,并接收数据包,直到最后一个数据包接收完毕,通过指示灯以2HZ的频率闪烁,指示升级完成。
第一步:boot区程序设计,首先修改link文件,define region NearFuncCode = [from 0x8000 to 0xAFFF];define region FarFuncCode = [from 0x8000 to 0xAFFF];define region HugeFuncCode = [from 0x8000 to 0xAFFF];place at start of NearFuncCode { block INTVEC };以上是link文件部分,可以看出flash地址为0x8000开始,结束于0x17FFF; 长度为64kB,中断向量地址为0x8000,这样,知道了这个我们就可以修改BOOT程序的link和主程序的link了,这里我把BOOTLOAD区划分为8K,应用区为48K设置link文件如下,这样把boot区和APP区分开,互不干扰,你也可以根据需要调整他们的大小。
program:define region NearFuncCode = [from 0xB000 to 0xFFFF];define region FarFuncCode = [from 0xB000 to 0xFFFF]| [from 0x10000 to0x17FFF];define region HugeFuncCode = [from 0xB000 to 0x17FFF];place at start of NearFuncCode { block INTVEC };bootload:define region NearFuncCode = [from 0x8000 to 0xAFFF];define region FarFuncCode = [from 0x8000 to 0xAFFF];define region HugeFuncCode = [from 0x8000 to 0xAFFF];place at start of NearFuncCode { block INTVEC };像STM32这样的芯片中断向量地址可以任意定,所有boot区和APP区都可以使用中断,且互不干扰,但是STM8的中断向量表固定在0X8000地址,不能修改,所以BOOT 区不能开中断,否则会和APP区的中断打架,但是APP区的一但开启中断后就会跳转到0x8000地址,这样就跳到了BOOT区,因此需要使用跳转指令将中断跳回到APP区,__root const long reintvec[]@".intvec"={ 0x82008080,0x8200b004,0x8200b008,0x8200b00c, //当应用程序地址不是0xB000时则要相应改掉除第一个0x8200b010,0x8200b014,0x8200b018,0x8200b01c, //0x82008080以外的数值0x8200b020,0x8200b024,0x8200b028,0x8200b02c,0x8200b030,0x8200b034,0x8200b038,0x8200b03c,0x8200b040,0x8200b044,0x8200b048,0x8200b04c,0x8200b050,0x8200b054,0x8200b058,0x8200b05c,0x8200b060,0x8200b064,0x8200b068,0x8200b06c,0x8200b070,0x8200b074,0x8200b078,0x8200b07c,};这里大概的含义就是重定义STM8的中断,STM8中断向量重定义,至于这里为什么这样写,请网上自己去看,我也不是很清楚。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•Bootloader是在单片机上电启动时执行的一小段程序。
也称作固件,通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用应用程序准备好正确的环境。
Boot代码由MCU启动时执行的指令组成。
这里的loader指向MCU的Flash中写入新的应用程序。
因此,Bootloader是依赖于特定的硬件而实现的,因此,在众多嵌入式产品中目前还不可能实现通用Bootloader。
Bootloader的最大优点是:在不需要外部编程器的情况下,对嵌入式产品的应用代码进行更新升级。
它使得通过局域网或者Intemet远程更新程序成为可能。
例如,如果有5 000个基于MCU的电能表应用程序需要更新,电能表制造商的技术人员就可以避免从事对每一个电能表重新编程的巨大工作量,通过使用Bootloader的功能,由控制中心通过电能表抄表系统网络,远程对5 000个电表重新编程。
可见,Bootloader功能对于嵌入式系统的广泛应用具有十分重要的意义。
1 78K0/Fx2系列单片机简介78K0/Fx2系列是带CAN控制器的8位单片机,该系列单片机广泛应用于汽车电子,智能仪表等领域。
其内置POC(可编程上电清零电路)/LVI(可编程低电压指示器),单电压自编程闪存,引导交换功能(闪存安全保护),具有低功耗、宽电压范围、超高抗干扰等性能。
78K0系列单片机支持自编程(Self-programming)。
所谓自编程,是指用Flash存储器中的驻留的软件或程序对Flash存储器进行擦除/编程的方法。
通过单片机的自编程功能,可以设计Bootloader程序,通过串口等通信接口实现对产品重新编程、在线升级的功能。
以μPD78F0881为例。
μPD78F0881为78KO/Fx2系列中的一款44管脚单片机,内置32 KB Flash ROM,2 KB RAM,自带2个串行通信接口。
其内部Flash结构如图1所示。
为了方便实现擦除和编程,人为地将整个Flash分成若干个block,每个block 大小为1 KB。
block为自编程库函数中空白检测、擦除、校验的最小单位。
blockO从地址0000H开始,程序都从0000H开始执行。
block0~block3共4 KB存储空间为Bootloader程序存储区域。
block4~block31为应用程序存储区域。
为了防止Bootloader自身的升级失败,设计了引导交换功能。
该功能定义2个簇,即Boot cluster0和Boot cluster1。
Boot clustee0为block0~block3的4 KB存储空间,Boot cluster1为block4~block7的4 KB存储空间。
因此,实际运用过程中,一般把应用程序的开始定义在2000H,也就是从block8开始。
Flash地址为0000H~FFFFH。
7FFFFH~FFFFH存储空间为保留区域以及特殊功能寄存器区域等,用户无法对其进行编程。
2 自编程2.1 自编程环境2.1.1 硬件环境FLMDO引脚是78KO/Fx2系列单片机为Flash编程模式设置的,用于控制MCU进入编程模式。
在通常操作情况下,FLMDO引脚下拉到地。
要进入自编程模式,必须使FLMDO引脚置成高电平。
因此,通过一个普通I/O接口控制FLMD0引脚的电平。
如图2所示。
2.1.2 软件环境1)使用通用寄存器bank3,自编程库函数,需要调用通用寄存器bank3。
因此,在自编程时,不能对通用寄存器bank3操作。
2)使用100 B RAM(入口RAM)作为隐藏ROM中函数的工作区,入口RAM,是Flash存储器自编程样例库所使用的RAM区域。
用户程序需要保留着块区域,当调用库时,需要指定这片区域的起始地址。
入口RAM地址可以指定在FB00h~FE20h之间。
3)4~256 B RAM作为数据缓冲区,必须是FE20H~FE83H以外的内部高速RAM 区域。
4)最大39 B RAM作为隐藏ROM函数的堆栈。
5)隐藏ROM中的函数被0000H~7FFFH中的应用程序调用。
2.2 自编程流程自编程功能利用自编程软件库完成用户程序对Flash内容的重新编程。
如果在自编程的过程中有中断发生,那么自编程将暂停来响应中断。
中断结束,自编程模式恢复后,自编程过程将继续进行。
采用汇编语言编写78K0/Fx2自编程软件库,如表1所示。
自编程操作流程如图3所示,当单片机收到自编程执行信号时,开始进入自编程模式。
将FLMDO引脚设置成高电平,初始化入口RAM,为自编程库函数开辟空间。
当确认FLMD0为自编程状态时,开始检查需要编程区域是否为空白区域。
当被编程区域不是空白区域时,先将其擦除,然后在此区域进行编程。
编程结束后进行校验。
若校验无误,则将FLMDO引脚设置成低电平,退出自编程模式。
3 引导交换(boot swap)产品程序的升级包括应用程序的升级和引导程序(Bootloader自身)的升级。
为了防止引导程序在升级的过程中发生错误,从而导致MCU无法启动,设计了引导交换功能。
以图4说明引导交换的实现过程。
1)旧的Boot程序首先将新的Boot程序编程到交换引导簇1(Boot cluster 1),然后设置启动交换标志位,并强迫看门狗复位。
2)复位启动后,MCU看到交换标志位,便从交换引导簇1处开始启动。
交换引导簇1处的新Boot程序将检查交换标志位。
如果交换标志位被置1,则新的Boot程序将擦除交换引导簇0(Boot cluster 0)区域,并将自身复制到交换引导簇O,然后将交换标志位清零,强迫看门狗复位。
3)复位启动后,MCU看到交换标志位被清零。
又从交换引导簇0处开始执行。
这样就完成了boot程序自身的升级。
即使在升级过程中遇到断电等异常情况,在重新上电后也能重新完成Boot程序升级。
有效地防止在升级过程中出现断电等等异常情况而导致升级失败,MCU无法启动的问题,使Boot程序的升级变得安全可靠。
• 4 Bootloadler设计4.1 简单的Bootloader一个简单的Bootload包括5个元素。
1)启动Bootloader的信号Bootloader程序是在执行应用程序之前所执行的一小段程序,当Bootloader程序把控制权转交给应用程序后,在MCU复位前,Bootloader 程序将不再执行。
因此,需要产生一个信号触发MCU开始Bootloader程序。
该信号可以是中断,也可以通过串口传送的一条指令,或者是别的程序触发的信号。
2)执行Bootloader的信号单片机程序启动时,MCU是装载新的应用程序还是执行已经存在的程序取决于外部信号。
该信号可以是上电时的一个端口信号,用来控制MCU装载新程序还是执行旧程序,也可以是从串口接收到的指令等。
3)将新的代码传送给MCU 通过RS485、I2C、CAN或者USB传送新的应用程序数据。
因为要传送的代码一般会超过MCU的RAM容量,因此需要一些控制数据流量的措施。
一般使用XON/XOFF软件握手协议,传送代码的格式一般选择Intel hex格式。
4)Flash新代码的自动编程每次MCU接收到一批新的数据,就要将其编程到正确的Flash地址。
如果该地址非空白,MCU在编程前必须先擦除。
一般在编程中或者编程后还需要检查存储器的内容。
5)将控制权转移给有效的应用程序在接收和编程了新的代码后,Bootloader写一个校验和或者其他唯一字节序列到一个固定的存储单元。
Bootloader检测该值,如果该值存在,Bootloader就将控制权传给应用程序。
4.2 Intelhex格式在线升级的程序代码采用编译器输出的Intel hex格式文件。
Intel hex文件常用来保存单片机或其他微处理器的程序代码。
它保存物理程序存储区中的目标代码映象。
一般的编程器都支持这种格式。
Intel hex文件记录中的数字都是十六进制格式。
在InteI hex 文件中,每一行包含一个HEX记录。
Intel hex文件通常用于传输将被存于Flash或者EEPROM中的程序和数据。
Intel hex由任意数量的十六进制记录组成。
每个记录包含5个域,它们按照图5所示格式排列。
每一个部分至少由2个十六进制编码字符组成。
它们构成1个字节。
每一个部分的意义如下所述:1)每个Intel hex记录都由冒号开头,自编程的过程中以此判断一个Intel hex记录的开始。
2)数据长度代表当前记录中数据字节的数量。
3)地址代表当前记录中数据在存储区域中的起始地址。
4)HEX记录类型有如下4种:00-数据记录;01-文件结束记录;02-扩展段地址记录;03-转移地址记录。
NEC编译器输出的Intel hex文件中。
只包含数据类型00和01。
其中O1作为自编程过程中数据结束的判定标志。
5)数据域分用于存储需要写入Flash中的内容,一个记录可以有许多数据字节。
记录中的数据字节数量必须与数据长度中的值相符。
6)校验和是取记录中从数据长度到数据域最后一个字节的所有字节总和的2的补码。
根据以上说明,必须在程序中对接收到的Inter hex文件进行解码,获取数据以及数据地址,并对收到的数据进行校验,然后将接收正确的数据编程到Flash相应的地址上。
4.3 Bootloader设计思路单片机收到启动信号后,重新启动程序。
启动的时候首先执行Boot代码,Boot代码检查是否收到执行升级信号。
如果需要升级程序,则通过串口或者其他通信接口接收新的应用程序,loader程序向单片机Flash中写入新的应用程序代码。
最后通过检查校验位检测程序是否有效。
如果有效,则Bootloader将CPUMCU控制权交给应用程序。
整个升级过程完成。
Bootloader执行过程如图6所示。
需要注意的是Bootloader自身的更新和应用程序的更新还需区别处理。
通过辨别接收到数据的编程地址来判断是Bootloader更新还是应用程序更新。
若编程地址从0000H 开始,则为Bootloader更新。
Bootloader更新则需要执行引导交换(boot swap)功能;若为应用程序更新,自编程结束后,直接将CPU交给应用程序。
5 结束语本文探讨了78KO/FC2系列μPD78F0881单片机的自编程功能以及Bootloader的设计方法。
具体描述了通过单片机串口对相应的应用程序通过Bootloader进行升级。
此版本的Bootloader使用晶振20 MHz,通过串口Uart60,设置波特率为115 200,在μPD78F0881单片机上成功实现了用户应用程序的升级更新。
在接下来的工作中,Bootloader的设计应当面向更多的通信接口。