我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 697|回复: 0

C8051F单片机的软件IAP技术 - 单片机/处理器 - 电子工程师俱

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:39:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<strong>引言</strong>

C8051Fxxx系列高速SoC单片机是由美国Cygnal公司开发的完全集成的混合信号系统级芯片,具有与8051兼容的微处理器内核。C8051Fxxx单片机有大容量的Flash存储器,用于存储程序代码和非易失性数据,可在应用编程。以 C8051F120为例,C8051F120x 和C8051F13x 系列MCU 内部有128 KB(C8051F12x 和C8051F130/1)或64 KB(C8051F132/3)的在应用可编程Flash 存储器,用于程序代码和非易失性数据存储;另外还有256字节的Flash页,可以用于数据存储。可以通过JTAG接口对Flash存储器进行在应用编程,或由应用软件使用MOVX 指令编程。用C8051F120 MCU做成的产品到了用户处之后,用软件通过串口就可以为产品进行Flash程序的更新。笔者通过实验,在用户操作界面的PC机及C8051F120的单片机控制系统之间,通过串行口进行C8051F120 单片机控制程序的自动升级及程序加密。用户只要从互联网上下载控制程序,即可实现单片机程序的自动升级。该方案解决了升级过程意外中断、远程升级传输误码等关键技术问题,避免了传统固件升级需要更换主机、主板或芯片等问题,节约了人力和资金等资源,已在实际系统中应用并受到用户好评。以下以64 KB Flash为例,简要介绍单片机目标程序的准备及自动升级的制作过程。

<strong>1自动升级的实现方法</strong>

C8051Fxxx系列单片机将Flash程序区按512字节为一页(page)来组织。在删除控制程序区时,首先屏蔽所有中断,使能程序删除位 PSEE(PSCTL.1),同时使能PSWE(PSCTL=0x03, 即PSWE = 1, PSEE = 1,页擦除模式) ,用C51语言的一个指针指向Falsh程序区。如:

  char xdata * data address=0x0000;

每擦除一页地址指针加512,依此操作可删除所有的程序页。删除部分程序如下:

  while(address<0x0F800) {//0xF800=62KB
    *address = 0x00; //向扇区空写,启动擦除操作
    for (i=0;i<10;i++);
    address =address +512;
  }

这样就把62 KB的Flash的旧程序删除了。实际上就是应用汇编语言中MOVX指令在每一页的任一地址写0FFH,就可以将该页的所有字节都置为0FFH,从而实现了该页的删除。

擦除掉所选的区域后要关掉对Flash的写操作,否则可因其他环境造成程序的丢失:

  PSCTL &= ~0x03;// PSWE = 0; PSEE = 0
  FLSCL&=~0x01;//关闭Flash写/擦除

1.1更新程序的方法

在接收新程序部分,写入一握手程序块,以保证程序的可靠性。握手的协议可自己定义,其中包括一些需要知道的信息,如长度、头部、尾部等。

同样,“char xdata *data address=0x0000;”指向要写的区域。

   FLSCL |= 0x01;//使能Flash写/擦除
  PSCTL |= 0x01; // PSWE = 1

然后通过串口用查询的方法获得新的程序代码。

  while(len--) {
    *address++= Get_COM_Code();
  }
  PSCTL=00; // PSWE = 0; PSEE = 0
  FLSCL =00;

1.2运行新程序

在更新完程序后,有两种方法可以重新运行程序;断电再上电和软件复位。 C8051F120内部有复位寄存器,通过使能该寄存器,可以实现软件复位。

   RSTSRC=0x10;//实现软件复位
  Jmpmain();

对RSTSRC的写操作均用直接赋值方式完成(如RSTSRC = 0x02),不能用读/写指令(如ORL或ANL)来完成。例如,代码“RSTSRC |= 0x02”就是非法的。为保证完美的复位,在设置了复位寄存器后笔者还添加了汇编复位程序,以做到万无一失。

  Jmpmain:
  LJMP 0000H
  RET

这样通过一条长跳转指令跳到程序区最开始的位置。在C中调用汇编程序的方法请参考其他文档。

<strong>2引导区的编译</strong>

作为程序引导区的程序,平时不参与主程序的执行。而主程序主要用于和用户操作界面PC 机部分进行握手,当接收到PC 机部分要进行软件升级的命令时,程序跳至引导程序区,执行如下流程:

发送准备升级字节到PC 机→删除Flash 程序区→发送开始下载命令到PC 机→接收且放到相应地址。


<ignore_js_op>





2010-4-6 10:33:45 上传
<strong>下载附件</strong> (3.27 KB)




</ignore_js_op>

图1主程序流程

主程序流程如图1所示。引导区的程序要固定在一个位置,并单独编译,由 JTAG下载到MCU中。引导区的程序不能编译分配Flash地址。笔者使用的Keil编译器是一个很简单、易用的编译器。在Keil中,定位升级程序位置的实现方法非常简单,通过修改其Project菜单下的Options for target一项就可以了。

在本程序中,引导区的程序定义在62 KB之后的位置。

编者注: 硬件接口和主从机程序见本刊网站www.mesnet.com.cn

<strong>3注意的问题</strong>

① 使用内部振荡器,这样能提高系统时钟的抗干扰能力。
② 使用Flash时会限制执行写操作的速度。完成1个字节的操作最长需要40 μs ,所以最好选用9 600的波特率。
③ 减少将PSWE置1的指令操作。理想的情况是只有2个操作会将PSWE置1,即写1个Flash字节和擦除1个Flash字节。
④ 将Flash写/擦除指针指向data或idata区。
⑤ 引导区的程序应该以512字节为边界。
⑥ 升级用的HEX程序必须由PC机上的软件转化为BIN文件。
⑦ C8051F120 MCU程序的操作最大特点是:在配置寄存器时能切换到该寄存器所在的页。
⑧ 引导区的程序在擦除或者写时,不可以开中断,且要关掉所有中断。

<strong>结语</strong>

本文中的软硬件模块已被嵌入到相关的应用系统之中,提高了系统的性价比。该方案解决了升级过程中的一些关键技术问题,节约了资源,将会在一些高端控制中得到更为广泛的应用。软件IAP 技术不但适用于C8051F单片机,而且对使用其他单片机的产品设计也具有重要的参考价值。

<strong>参考文献</strong>

[1] 姜晓梅,李祥和.基于ARM的IAP在线及远程升级技术[J].计算机应用,2008(2):519521.
[2] 周立功,张华.深入浅出ARM7[M].北京:北京航空航天大学出版社, 2005: 426438.
[3] 刘忆辉,魏银库,等.片外Flash存储器IAP的一种方案[J].单片机与嵌入式系统应用, 2006(2).
[4] 王飒.用C8051F020的SPI接口扩展大容量数据存储器[J].微计算机信息, 2006(22).
[5] 李光飞,阳富民,楼然苗.基于K9F2808UOC的FAT16文件系统[J].浙江海洋学院学报:自然科学版,2006(6).
[6] K9F2808UOC datasheets[OL]. http: //www. samsung. com /Prod?ucts/datasheets. htm.

作者:广东技术师范学院 向丹杨永
来源:单片机与嵌入式系统应用 2009 (3)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表