新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C8051F130的远程在线升级程序设计

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

作者:时间:2010-06-18来源:网络收藏

  1. 引言

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

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

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

  2. 设计思路

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

系统组网拓扑结构

  下位机硬件框图如图2 所示,CPU 选择,其他部分包括控制输入输出部分,人机接口电路,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 的设计分配方案如下:

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

  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 的程序升级数据发生错误,为保证系统安全,擦除程序升级标志,跳转到主程序区执行原版本程序,并等待下一次升级。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭