首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
» 基于自编程功能的MCU Bootloader设计
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
基于自编程功能的MCU Bootloader设计
发短消息
加为好友
我是MT
当前离线
UID
1023166
帖子
6651
精华
0
积分
3328
阅读权限
90
来自
燕山大学
在线时间
230 小时
注册时间
2013-12-19
最后登录
2016-1-5
论坛元老
UID
1023166
性别
男
来自
燕山大学
1
#
打印
字体大小:
t
T
我是MT
发表于 2015-11-6 20:32
|
只看该作者
基于自编程功能的MCU Bootloader设计
嵌入式
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,然后将交换标志位清零,强迫看门狗复位。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议