C8051F130的远程在线升级程序设计

发布者:炫酷骑士最新更新时间:2010-06-18 来源: 单片机与嵌入式系统应用 关键字:在线升级  C8051F130  监控  Keil 手机看文章 扫描二维码
随时随地手机看文章

  1. 引言

  目前,采用FLASH 存储介质来作为程序存储器的单片机种类越来越多。和其他类型如OTP、EPROM 型单片机比较起来,FLASH 具有可擦写方便,次数多,编程无需外加高电压等特点。绝大多数FLASH 型单片机都可在运行时通过指令来直接擦写内部FLASH,提供了IAP、ISP 功能,借助这个功能,就可以实现系统底层固件的在线升级功能。

  C8051F130 单片机是SILICON LABS推出的完全集成的混合信号片上系统型MCU 芯片,功能十分强大。其采用高速、流水线结构的8051 兼容的CIP-51 内核,内部PLL可倍频至100MIPS,具有2个串口,128KB 可在系统编程的FLASH 存储器,8448(8K+256)字节的片内RAM,并包含了片内JTAG 调试电路。其功能完全满足实现远程在线程序升级系统的条件。

  在专用网络系统中实现远程在线程序升级,其优点显而易见,不仅极大的为系统维护提供了方便,还节省了大量的人力财力。本文详细介绍了在某直放站监控系统中实现的基于C8051F130的远程在线程序升级系统的设计思路和方法。

  2. 设计思路

  系统组网拓扑结构如图1 所示,正常工作时,网管中心通过有线或无线通道对所属各站点下位机状态进行监控。网管中心通过查询各站点下位机参数得到下位机固件版本号,如果固件版本号和现有最新固件版本号不同,则直接发送第一帧程序升级数据启动远程程序升级过程。因为监控系统需要实时工作,所以程序的升级也就必须在站点下位机系统工作过程中完成。在网管中心发送程序升级数据的过程中,站点下位机系统依然正常工作,只有全部接收完程序升级数据并校验通过后,才跳转到Bootloader 程序进行程序升级。

系统组网拓扑结构

  下位机硬件框图如图2 所示,CPU 选择C8051F130,其他部分包括控制输入输出部分,人机接口电路,RS232 接口,EEPROM 器件24C16 等。RS232 接口作为系统的通讯接口可以外接电话MODEM或短信MODEM 等标准模块,和网管中心组成有无线网络,其所采用的具体形式不影响本文所述的远程升级系统。EEPOM 器件24C16 由于可擦写次数比FLASH 多,用来存储系统的关键参数。

下位机硬件框图

  由于51 系列单片机外部总线地址为16 位,能直接寻址的最大范围为64KB,所以C8051F130 将内部的128KB FLASH 程序存储空间被分成了4 块,BLOCK0、BLOCK1、BLOCK2、BLOCK3。每块大小为32KB,0x0000~0x7FFF 地址空间始终为BLOCK0,作为公共段。可以通过设置程序存储器空间块选择寄存器PSBANK 来选择常量操作和取指操作地址在0x8000 ~0xFFFF 所指向的块。

PSBANK寄存器

  COBANK:常量操作存储块选择位。

  这两位选择常量操作(MOVC 和FLASH MOVX)地址在0x8000 ~0xFFFF 范围的FLASH 存储块。

  •   00:常量操作指向存储块0(注意,块0 也映射到地址0x0000 ~0x7FFF)。
  •   01:常量操作指向存储块1。
  •   10:常量操作指向存储块2。
  •   11:常量操作指向存储块3。

  IFBANK:取指操作存储块选择位这两位选择取指操作(地址在0x8000 ~0xFFFF 范围)的FLASH 存储块。这两位只能由位于BLOCK0 的程序改写。

  •   00:从存储块0 取指令(注意,块0 也映射到地址0x0000 ~0x7FFF)。
  •   01:从存储块1 取指令。
  •   10:从存储块2 取指令。
  •   11:从存储块3 取指令。

  FLASH 的设计分配方案如下:

FLASH 的设计分配方案

  BLOCK0、BLOCK1 作为默认的64KB 程序存储区空间,存储正常工作时的固件程序。我们所使用的程序不会超过60KB,0x0000~0xEFFF 地址区60KB 空间用于存储系统主程序,0xF000~0xFFFF 地址地址区4KB 空间用于存储Bootloader 程序。

  BLOCK2、BLOCK3 作为64KB 常量存储区,用于存储系统运行过程中接收到的程序升级数据。

  如果要远程对某指定站点的固件进行升级时,网管中心对该站点分帧发送程序升级数据,升级数据协议格式如下:

升级数据协议格式

  网管中心发送程序升级数据帧时,每帧数据大小固定为512 字节,帧序号从1 开始。从功能标志处起到数据部分最后一字节做累加和作为校验码。最后一帧不足512 字节部分加0xFF 补足。在发送过程中,由于每帧数据以0x1002 开始,0x1003 结束,中间碰到0x10 时,要再补发0x10。接收时除了帧头帧尾,在帧中间时如果连续接收到两个0x10,则需要去掉一个。

  指定站点在成功接收完一帧程序升级数据后,如果校验通过则擦除对应的BLOCK2 或者BLOCK3中的扇区。这里需要注意的是,C8051F130 的FLASH 扇区大小是1024 字节,而我们的数据帧大小定为512 字节,所以应该接收到每两帧数据才擦除对应的扇区。将程序升级数据写入FLASH 中,同时对每帧512 字节的程序升级数据做累加,并将其累加和作为校验码写入EEPROM 指定位置,最后给出正确回应。如果校验错误,则回应错误。网管中心接收到错误回应时应该重发上一帧数据,否则继续发送下一帧数据。如果帧序号等于总帧数,说明指定站点接收到最后一帧数据,置需要进行程序升级标志,此标志至关重要,因此将其存储在EEPROM 中,为增加其可靠性,另外还存储其反码作为校验,然后直接跳转Bootloader 程序,以升级主程序。

流程图

  程序跳转到Bootloader 程序执行后,首先必须要检查程序升级标志,如果为真,再检查其校验码,只有两者都符合预设的值,才认为确实需要进行程序升级。否则跳转到主程序区执行。

  程序升级过程如下:首先读出24C16 中存储的程序升级数据的总帧数,为防止写入到BLOCK2/3中的程序升级数据有错误,从BLOCK2/3 中读出每一帧512 字节的数据进行累加,检查其是否和存储在24C16 中的对应数据帧的累加校验码相等。如果所有的的程序升级数据校验都通过,则说明数据正确,开始擦除主程序区FLASH,并再次读出BLOCK2/3 中的程序升级数据写入主程序区FLASH。完成后擦除程序升级标志,跳转到主程序区开始执行新版本固件程序。在读出校验过程中,只要有一帧数据校验通不过,则认为写入到BLOCK2/3 的程序升级数据发生错误,为保证系统安全,擦除程序升级标志,跳转到主程序区执行原版本程序,并等待下一次升级。

[page]

  3. 需要注意的问题

  3.1 项目管理问题

  下位机固件程序中实际包含两个独立的部分,Bootloader 程序和主程序。我们在KEIL 中分别为这两部分的建立独立的项目文件,分别编译。烧写编译后产生的HEX 文件时,应该先擦除FLASH 后,烧写Bootloader 程序,然后在不擦除之前内容的情况下烧写主程序。

  3.2 Bootloader 的存储位置

  Bootloader 程序必须保证在上电过程后立即运行,而51 单片机的中断向量存放在低地址处。所以Bootloader 程序不能存储在低地址处,必须存放到高地址处,本例中,留出0xF000~0xFFFF 4KB 的FLASH 空间作为Bootloader 程序存储区。在KEIL 开发环境中,默认会为项目文件提供初始化文件STARTUP.A51 来清空RAM 空间,以及调用初始化全局变量代码段。其默认起始地址安排在0x0000处。为保证上电过程后立即运行Bootloader,我们在起始处还必须要手动修改汇编指令如下:

程序

  以上代码编译时强制在0x0000 处放置一条跳转到 0xF000 处的指令,这就保证了保证在上电过程后立即跳转到Bootloader 程序运行。为了将Bootloader 程序的所有代码定位在0xF000~0xFFFF 范围内,要对KEIL 的BL51 定位选项设置如下:

对KEIL 的BL51 定位选项设置

  主程序同样有代码定位的问题。为保证程序升级后能正常工作,修改主程序的STARTUP.A51 文件如下:

修改主程序的STARTUP.A51 文件

  这里保证执行主程序也是先跳转到Bootloader 程序,而将0x0006 设为了主程序的起始地址,避免了对中断向量表的占用。

  另外还要将主程序的编译代码进行定位。设置和图4 中类似,只是将Code Ranger 设为主程序的代码空间:0x0000~0xEFFF。

  3.3 程序跳转时的PLL 设置

  C8051F130 内部带有PLL,最高主频可达100MHz。在本系统设计中,外部晶振频率为11.0592MHz,在Bootloader 程序和主程序中都通过使能PLL,倍频至99.5328MHz 作为系统时钟。在上电后,C8051F130 默认是以内部时钟作为系统时钟的,通过执行初始化程序,系统再切换到以PLL 输出为系统时钟的工作环境上来。如果通过Silicon Labs 公司提供的初始化软件CONFIG2 来配置初始化C8051F130 的代码的话,在初始化PLL 的过程中,会关闭PLL 模块。

  // 一个由 CONFIG2 生成的系统时钟初始化程序,

  // 注意:在调用此函数时,系统时钟是由内部振荡器产生。

程序

  如果使用这段代码初始化PLL 模块,在主程序跳转到Bootloader 程序,或者由Bootloader 程序跳转到主程序时,必须考虑PLL 的设置问题。因为原工作时钟是PLL 的输出,而直接切换到另外一个程序中时,执行以上代码会关闭PLL 系统时钟,导致系统时钟丢失,工作不正常。一个更安全的做法是在程序间互相跳转之前,将系统时钟切换到上电后默认的内部时钟上。代码如下所示:

程序

  3.4 寄存器页的切换

  C8051F130 内部功能模块多,其控制寄存器也多,为了合理安排控制寄存器位置,采用了寄存器页控制寄存器SFRPAGE 来将相同的地址切换到不同的控制寄存器。除了中断函数自动切换到对应的寄存器页外,当在程序中对某个寄存器操作前,需要设置SFRPAGE 切换到对应的寄存器页。因此,在C51 语言编写的程序中,涉及到寄存器操作的模块函数中,需要在执行之前保存SFRPAGE 寄存器值,处理完毕后再恢复先前的SFRPAGE 寄存器值。相当于对SFRPAGE 寄存器值做一次出入栈。示例代码如下:

程序

  4. 总结

  通过在系统工作过程中接收程序升级数据,存入内部FLASH,全部接收完成后再集中升级主程序的方法,充分利用了C8051F130 的内部FLASH 空间,对系统的实时工作影响小,仅在Bootloader 程序运行期间不能正常工作,减小了通讯网络通讯状况差时对远程在线更新程序造成的风险。

  基于以上方法,已经成功设计出可远程在线升级程序的直放站监控系统,使用情况表明,该系统能稳定可靠工作,且为系统的维护节省了大量的工作量。本文介绍的在线程序升级设计方案,虽然是基于C8051F130 单片机的,但对其他类型的在线程序升级设计都有很好的参考作用。

关键字:在线升级  C8051F130  监控  Keil 引用地址:C8051F130的远程在线升级程序设计

上一篇:基于C8051F021和RA8835的液晶显示系统设计
下一篇:用89C51单片机控制红外线通信接口电路设计

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

STM32开发笔记67: 在keil中使用ST-Link不能成功下载的解决方法
单片机型号:STM32F091RCT6 在Keil中使用ST-Link对STM32F091RCT6单片机下载程序,第1次可下载成功,第2次就不可以成功下载,如下图所示,找不到单片机。 但是使用STVP进行程序下载是没有问题的,这就说明硬件线路板没有问题,问题出现在Keil中。 经反复测试,发现只需将connect连接方式更改为under Reset就可以正确解决,如下图所示。
[单片机]
STM32开发笔记67: 在<font color='red'>keil</font>中使用ST-Link不能成功下载的解决方法
“92年少女”怼周鸿祎,水滴直播为何“招人恨”?
360 摄像头 泄露公众隐私,92年少女与周鸿祎论战时间持续升级。在今天下午周鸿祎召开记者会后,晚间,“92年少女”再度发声,对周鸿祎观点进行反驳。     陈菲菲最新回复全文如下: 今天我很心寒地看到周鸿祎先生不去正面事实,承认错误,反而怀着阴谋论的心污蔑我收黑钱,做黑公关,还要悬赏比特币要找到幕后黑手。我再此郑重声明:我在此事中,从始至终没有收一分钱;我也没有花一分钱用来推广,花钱找大v来转发。   我就是写了文章,第二天大家都在讨论。这说明了什么?不是我一个人的呐喊,而是民意。   您在今天下午对媒体说在想得罪了谁,我来告诉您得罪了谁,您得罪了消费者,得罪了普罗大众;您想知道幕后黑手是谁,幕后黑手就是他们。当我看到他们在
[嵌入式]
智能驾驶新突破:威盛驾驶员监控系统(DMS)首当其冲
从人工智能诞生之初,科学家们就一直在探寻能够将人工智能落地的实际应用场景,从能够和人类下棋的“深蓝”到“阿尔法狗”,从亚马逊的智能语音助手“Alexa”到和苹果智能手机一起席卷全球的语音助手“Siri”,人们探寻的脚步从未停止。作为能够培养人工智能技术快速发展迭代更新的领域并且能够带来客观的实际效益,智能驾驶吸引了国内外各大厂商的目光,国外的苹果、谷歌、脸书、特斯拉,国内的BAT三巨头,乐视等等。     威盛电子作为全球高集成嵌入式平台及解决方案的领导厂商,很早就致力于人工智能、物联网系统与智慧交通等方面的应用。威盛电子对于智能驾驶解决方案有其独到的见解,从技术发展的角度来说,他们以半主动驾驶向全面智能驾驶,以低效使用向高效使
[嵌入式]
Milbeaut ISP技术向单反手机和安防监控应用迈进
英国19岁男孩丹尼·鲍曼疯狂沉迷自拍,曾为一张完美自拍花去10小时,一石激起千层浪,“爱自拍是病”成为微博热门话题。虽然这只是极个别事件,但却反映出一个事实——消费者对手机的拍照性能的追求是永无止境的。虽然我们追求不到所谓完美的图像效果,但是设计良好的图像处理器(ISP)却能够帮助实现10%~15%的图像质量提升,展现更加出彩的画质。 Milbeaut——专业影像处理器的代名词 毫无疑问,富士通半导体的Milbeaut已经成为专业影像处理器的代名词。“Milbeaut占据全球数码相机ISP市场超过50%的份额,全球知名数码相机厂商几乎都与我们有合作,在单反数码相机中同样有大量的成功应用。”富士通半导体(上海)有限公司市
[手机便携]
Milbeaut ISP技术向单反手机和安防<font color='red'>监控</font>应用迈进
上汽启动全球最大规模汽车在线升级
    “全球首款量产互联网汽车”荣威RX5是升级主力车/视觉中国   互联网汽车已彻底颠覆了汽车进化的方式,在线升级就是汽车能够以最低成本实现换代的解决方案。   上汽荣威正式启动基于AliOS的智联网汽车整体解决方案-斑马智行2.0空中升级。接下来的4个月内,将有近40万辆互联网汽车陆续完成升级,这是全球最大规模的汽车在线升级。此次升级,上汽与阿里共同打造的“全球首款量产互联网汽车”荣威RX5将作为首发,引领旗下互联网汽车进入2.0时代。   据悉,基于近40万互联网汽车用户的体验反馈,升级后的互联网汽车将针对用户最关心的沉浸式人工智能语音、个性化大数据导航、智慧出行娱乐、手机远程车控等四大功能板块更新进化。   此次在线升
[嵌入式]
从“华山事件” 看我国景区监控的现状
    刚刚过去的这个十一长假我们盼的很辛苦,可过的也很辛苦,交通拥堵导致事故不断,因交通事故死亡人数为794人,虽同比下降46.4%,但还是让我们痛心。今年的十一不仅路上堵,各大景区也很“堵”,故宫单日接待量达18.2万人次;2日华山大量游客滞留山顶,部分游客封堵入口要求退票……十一这几天来,暴涨的游客人数让部分热点景区“难以招架”,更可怕的是因为人多,也由于管理不善导致了惨案的发生,从“华山被捅案件”中,我们看到了景区监控已经越来越成为景区建设的重中之重。 从“华山事件” 看我国景区监控的现状     人员密集、环境复杂是大多数景区面临的共同问题     现代社会经济不断发展,人们生活水平也随之提高,旅游和休
[安防电子]
基于条形码技术的车间监控系统的实时信息采集
    摘 要 探讨了使用条形码作为信息载体的车间监控系统信息采集的实现,分析了所需要的信息及其条码编码,介绍了Windows95环境下用RS-232串口中断方式数据实时采集的实现方法,以及客户/服务器机构模式下数据采集模块与监控模块之间实现动态数据传送(DDE)的手段。     关键词 条形码 数据采集 动态数据交换(DDE) 中断         随着计算机的广泛应用,生产技术发生了革命性的变化,柔性制造系统(FMS)已在国外得到较广泛应用。但对目前我国的大多数企业来说,高度柔性化的制造系统仍是一个难以承受的负担,在一些生产量大的电器行业,如电冰箱、洗衣机、空调器等,以人工装配为主、生产工
[测试测量]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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