第20卷第2期
2010年 4月
安 徽 冶金 科 技 职 业 学 院 学报
Journal of Anhui Vocational College of Metallurgy and Technology
V01.20.No.2
Apr.2010
透过 UART端口实现 C805 1 F
系列单片机的固件更新
范 森 巳 秣
(安徽冶金科技职业学院科研处 安徽马鞍山 243041)
摘 要 :针对C8051Fxxx系列单片机,通过对串行通信
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
、固件存储结构、固件擦写过程等诸多方面考虑,提出了一种通
过 UART端口实现稳定、可靠、健壮的固件更新
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
。
关键{司:C8051Fxxx;UART;FLASH页;中断向量表;监控程序;通信协议;编译指令
中图分类号:TP368.1 文献标识码:B 文章编号:1672—9994(2010)02—0053—03
单片计算机在工业 自动控制、仪器仪表中被广
泛使用,这些仪器仪表中的固件,总会存在升级更
新问题。很多情况,现场工作的仪表不方便拆卸或
不允许拆卸,那么仪表固件的更新就成了很大的问
题,本文就目前比较广泛使用的 C8051F系列单片
机,通过常用的串行通信端 口,提供一种稳定、可
靠、健壮的固件更新方案。
1 固件存储结构分析
C8051F系列单 片机所有器 件都有 内置 的
FLASH程序存储器,并且提供了比较完善的读写指
令,为固件提供了一个 自己读写 自己的平台。内置
的FLASH程序存储器擦除是按照页方式实现的,
页的大小为 512字节。也就是说用户在擦除固件
时必须按照 512字节、5 12字节擦除,无法进行单个
字节的擦除。内置的 FLASH程序存储器大体上可
以分为这样三个区域,启动中断向量区、程序区、软
件保护锁定字节,其结构如图 1。
系统启动页,也就是 FLASH的第零页,通常它
主要包括这样两部分程序,一是系统中断向量表,
另一部分是其它程序代码。从 FLASH的第一页
(0x0200)开始就是我们的自由代码区。要实现软
件的自我更新,必须编写一个管理程序,在这称其
为监控程序。它主要 完成硬件 的必要初始化:
收稿日期:2Oo9—12—06;改回日期:2010—03—10
作者简介:范森(1966一),男,安徽冶金科技职业学院管理研究与科
研开发处,工程师。
UART的数据报文解析;固件的擦除、更新。这一
段代码的存放位置至关重要,由于 C8051F的程序
存储器是按页擦除的,要使得这段代码不被破坏,
必须 占用整页的地址空问。这里将其放置在从
0x0200开始的页中。
图 1 FLASH程序存储器结构
固件的更新过程通常是:首先擦除第零页,跳
过监控程序页,然后擦除后续的程序页。程序存储
器一旦被擦除其值就会变成 OxFF(汇编指令 MOV
R7,A)。这时如果开始固件更新并出现了意外掉
电、通信异常等故障出现,只要 FLASH第零页不写
入代码在故障排除后,重新开机系统在执行 512次
“MOV R7,A”操作后就会进入监控程序,可以确保
系统不会崩溃。
2 UART通信协议的定制
为了安全可靠的通过 UART端口更新固件,制
· 54 · 安 徽 冶 金 科 技 职 业 学 院 学 报 2010年第 2期
定一套完善的通信协议是必要的。实际应用可以
采用比较常用的解决方案,定制如下的通信帧格
式:
兰 I 垒I望l l 垒!垒: l 璺I垦
其中:
SD
DA
LE
FC
DATA UNrr
FCS
ED
开始定界符
目的地址
命令及数据码长
功能码
数据
帧检查顺序
结束定界符
3 软件及编译
实际应用中监控程序完全用 C代码编写,编
译后大约有 1.6K的代码量 ,为它开了 4页空间。
下面是监控程序中要说明的两个函数:
(1)页擦除函数
void FLASH
— PageErase(uint addr){
| FLASH write pointer |
char xdata * data pwrite;
pwrite= (char xdata*)addr;
| enable H writes/erases*|
FI_SCL l= OxO1;
/* PSWE = 1:PSEE = 1*/
PSCTL l= 0x03;
l initiate page erase l
pwrite = O:
/* PSWE = 0:PSEE = 0*/
PSCTL& = ~0x03:
,* disable F1ASH writes/erases*/
FLSCL&= ~0x01;}
(2)固件擦除函数
void Erase
— AllFrmwr(void){
uint d:
| disable interrupts |
EA = 0:
FLASH
—
PageErase(Ox(K~);
f0r(d= FLASH—FIRST;d
本文档为【透过UART端口实现C8051F系列单片机的固件更新】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。