基于自编程功能的MCUBootloader设计_澳门十大信誉老品牌网站
本文摘要:OFweek电子工程网Bootloader是在单片机上电启动时继续执行的部分段程序。
OFweek电子工程网Bootloader是在单片机上电启动时继续执行的部分段程序。也称为固件,通过这段程序,可以初始化硬件设备、创建内存空间的同构图,从而将系统的软硬件环境带回一个适合的状态,以便为最后调用应用程序准备好准确的环境。 Boot代码由MCU启动时继续执行的指令构成。这里的loader指向MCU的Flash中载入新的应用程序。
因此,Bootloader是依赖特定的硬件而构建的,因此,在众多嵌入式产品中目前还不有可能构建标准化Bootloader。 Bootloader的仅次于优点是:在不必须外部编程器的情况下,对嵌入式产品的应用于代码展开改版升级。它使得通过局域网或者Intemet远程改版程序沦为有可能。例如,如果有5000个基于MCU的电能表应用程序必须改版,电能表制造商的技术人员就可以防止专门从事对每一个电能表新的编程的极大工作量,通过用于Bootloader的功能,由控制中心通过电能表遗文表格系统网络,远程对5000个电表新的编程。
可见,Bootloader功能对于嵌入式系统的广泛应用具备十分最重要的意义。 178K0/Fx2系列单片机概述 78K0/Fx2系列是带上CAN控制器的8位单片机,该系列单片机普遍应用于汽车电子,智能仪表等领域。其内置POC(可编程上电清零电路)/LVI(可编程低电压指示器),单电压自编程存储器,引领互相交换功能(存储器安全性维护),具备低功耗、长电压范围、超高抗干扰等性能。 78K0系列单片机反对自编程(Self-programming)。
所谓自编程,是会用Flash存储器中的待命的软件或程序对Flash存储器展开读取/编程的方法。通过单片机的自编程功能,可以设计Bootloader程序,通过串口等通信接口构建对产品新的编程、在线升级的功能。 以PD78F0881为事例。PD78F0881为78KO/Fx2系列中的一款44管脚单片机,内置32KBFlashROM,2KBRAM,自带2个串行通信接口。
其内部Flash结构如图1右图。为了便利构建读取和编程,人为地将整个Flash分为若干个block,每个block大小为1KB。block为自编程库函数中空白检测、读取、校验的大于单位。
blockO从地址0000H开始,程序都从0000H开始继续执行。block0~block3共4KB存储空间为Bootloader程序存储区域。block4~block31为应用程序存储区域。
为了避免Bootloader自身的升级告终,设计了引领互相交换功能。该功能定义2个簇,即Bootcluster0和Bootcluster1。
Bootclustee0为block0~block3的4KB存储空间,Bootcluster1为block4~block7的4KB存储空间。因此,实际运用过程中,一般把应用程序的开始定义在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)用于100BRAM(入口RAM)作为隐蔽ROM中函数的工作区,入口RAM,是Flash存储器自编程样例库所用于的RAM区域。用户程序必须保有着块区域,当调用库时,必须登录这片区域的接续地址。
入口RAM地址可以登录在FB00h~FE20h之间。 3)4~256BRAM作为数据缓冲区,必需是FE20H~FE83H以外的内部高速RAM区域。 4)仅次于39BRAM作为隐蔽ROM函数的堆栈。 5)隐蔽ROM中的函数被0000H~7FFFH中的应用程序调用。
2.2自编程流程 自编程功能利用自编程软件库已完成用户程序对Flash内容的新的编程。如果在自编程的过程中有中断再次发生,那么自编程将停止来号召中断。
中断完结,自编程模式完全恢复后,自编程过程将之后展开。使用汇编语言撰写78K0/Fx2自编程软件库,如表格1右图。 自编程操作者流程如图3右图,当单片机接到自编程继续执行信号时,开始转入自编程模式。
将FLMDO插槽设置成高电平,初始化入口RAM,为自编程库函数修筑空间。当证实FLMD0为自编程状态时,开始检查必须编程区域否为空白区域。
当被编程区域不是空白区域时,再行将其读取,然后在此区域展开编程。编程完结后展开校验。
若校验正确性,则将FLMDO插槽设置成低电平,解散自编程模式。 3引领互相交换(bootswap) 产品程序的升级还包括应用程序的升级和引领程序(Bootloader自身)的升级。
为了避免引领程序在升级的过程中再次发生错误,从而造成MCU无法启动,设计了引领互相交换功能。意欲4解释引领互相交换的构建过程。
1)原有的Boot程序首先将新的Boot程序编程到互相交换引领簇1(Bootcluster1),然后设置启动互相交换标志位,并强制看门狗废黜。 2)废黜启动后,MCU看见互相交换标志位,之后从互相交换引领簇1一处开始启动。互相交换引领簇1处的新Boot程序将检查互相交换标志位。如果互相交换标志位被改置1,则新的Boot程序将读取互相交换引领簇0(Bootcluster0)区域,并将自身读取互相交换引领簇O,然后将互相交换标志位清零,强制看门狗废黜。
本文来源:十大网投正规信誉官网-www.aon-ai.com