新闻中心

EEPW首页>嵌入式系统>设计应用> C8051F单片机的软件IAP技术

C8051F单片机的软件IAP技术

作者: 时间:2016-12-02 来源:网络 收藏
引言

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为例,简要介绍单片机目标程序的准备及自动升级的制作过程。

1自动升级的实现方法

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内部有复位寄存器,通过使能该寄存器,可以实现软件复位。

上一页 1 2 下一页

评论


技术专区

关闭