当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]C8051FXXX单片机FLASH程序的自动升级

作者Email:  wolfman6353@sina.com

引言:

  C8051FXXX系列高速SOC单片机是由美国Cygnal公司开发的完全集成的混合信号系统级芯片,具有与8051兼容的微处理器内核,内部集成FLASH程序存储器,具有在系统重新编程能力,以C8051F020为例,内部集成64K的FLASH程序存储器。在系统控制软件的开发调试阶段,可用集成开发环境来下载及测试系统,但当将C8051F020目标系统集成到产品后,则由于操作系统及软硬件接口不一样等等原因,不能在最终产品中用集成开发环境来下载FLASH程序,故产品到了用户处之后,如要再进行FLASH程序的更新,则必须更换相应的集成电路印刷板,造成很多麻烦及不可靠因素。笔者通过实验,在用户操作界面的PC机及C8051F020的单片机控制系统之间,通过串行口进行C8051F020单片机控制程序的自动升级及程序加密,从而使用户只要从互联网上下载控制程序,即可实现单片机程序的自动升级。以下以64KBFLASH RAM为例简要介绍单片机目标程序的准备及自动升级的制作过程。

1)系统简介及自动升级的实现方法

PC机(80486/DX2以上)  具有1.44吋软驱及串行口。单片机控制系统(具有串行口及内置的FLASH程序区)。PC与C8051FXXX之间通过九针串行接口线相连。设置传送速率为115200BIT/S。

C8051F020单片机的FLASH RAM分为用户程序区(0000H~0FDFDH),厂家保留及加密区(0FDFEH~0FFFFH)两部分。现将用户程序区(0000H~0FDFDH)的0000H~0DFFFH部分用于装载用户程序,而0E000H~0FDFDH部分作为引导程序区,引导程序区在升级时不能改变,它用于与用户操作界面的PC机部分进行程序接收及装载等工作。

在控制程序区0000H~0DFFFH中,做一握手程序块,在上电时,用于和用户操作界面PC机部分进行握手,当接收到PC机部分要进行软件升级的命令时,程序跳至引导程序区,执行如下流程:

->发送准备升级字节到PC机

->删除FLASH程序区

->发送开始下载命令到PC机

->接收且放到相应地址

->加密

为了达到自动升级的目的,需要在用户界面的PC机引导时,自动检测PC机外设,软盘控制器,一旦检索到软盘中有升级文件及其索引文件,且其版本比现有的单片机控制程序的版本高,则开始执行PC机中的下载程序。 

2)删除0000H~ODFFFH的FLASH程序区
C8051FXXX系列单片机将FLASH程序区按512字节为一页(PAGE)来组织,在删除控制程序区0000H~ODFFFH时,首先屏蔽掉所有中断,使能程序删除位PSEE(PSCTL.1),同时使能PSWE(PSCTL.0)MOVX指令指向FALSH程序区。应用MOVX指令在每一页的任意一地址写0FFH,则将该页的所有字节都置为0FFH,从而实现了该页的删除。依此操作可删除所有的程序页。删除部分程序如下:


//删除0000H’ODFFFH的FLASH程序区
DEL_NEXT_PAGE:    
  CLR EA 
  MOV A,FLSCL
  ANL A,#0FEH
  ORL A,#01H
  MOV FLSCL,A
MOV A,PSCTL
ANL A,#0FCH
ORL A,#03H
  MOV PSCTL,A;#03H  //使能页删除及页写操作
  MOV A,#0FFH
  MOVX @DPTR,A    //将该页全填充为0FFH
INC DPH
  INC DPH     //调节页指针
MOV A,PSCTL
ANL A,#0FDH
MOV PSCTL,A;#03H
MOV A,DPH
  CJNE A,#0E0H,DEL01_NEXT_PAGE
DEL01_NEXT_PAGE:
  JC DEL_NEXT_PAGE

3)从PC中接收FLASH字节
以下程序用于从PC机中接收程序并放到相应的FLASH地址。在此仅使能PSWE(PSCTL.0)位,使MOVX指令指向FALSH程序区。
MOV DPTR,#0000H
MOV FLSCL,#01H
   MOV PSCTL,#01H;
RECEIVE_NEXT_DOWNLOAD_CHAR: 
   MOV FLSCL,#01H
   MOV PSCTL,#01H;
   JNB RI,$
   CLR RI
 MOV A,SBUF0
   MOVX @DPTR,A
   INC DPTR
   MOV A,DPH
   CJNE A,#0E0H,RECEIVE_NEXT_DOWNLOAD_CHAR
   MOV FLSCL,#01H //FLASH 写使能
   MOV PSCTL,#01H
   MOV DPTR,#0FDFEH
   CLR A
   MOVX @DPTR,A
   MOV DPTR,#0FDFFH
   MOVX @DPTR,A
   MOV PSCTL,#00H
   MOV FLSCL,#00H
   CYCLE_FOREVER:SJMP CYCLE_FOREVER;死循环
   RET


4)FLASH程序的准备

为了更快地得到—下载到C8051F020的FLASH程序,先在CYGNAL IDE开发环境中,将做好的控制程序编泽,链按,然后用厂家提供的串行适配器将PC与目标板连接起来,传送FLASH程序到目标系统中去。接下来用“UPLOAD MEMORY T0 PILE…”(如图示)功能将0000H~OEOOOH的FLASH代码程序上载到硬盘存储器中,再将此ASCII文件转化为16进制的HE文件,注意将其十的0DH,0AH等回车换行字节取消,最后生成的HEX文件即可被直接下载到FLASH的0000H~0DFFFH的相应地址中。此HEX文件即可发送至用户处,用于升级用户的单片机FLASH程序。

5)C程序的准备
//发送FLASH程序文件到单片机中去
BOOL SendFileToFlash()
{
 unsigned  char ch;
 FILE *fp;
 long int flen,wi=0;
 int i,j;

 if ((fp = fopen("flashwl","rb"))==NULL)
 {
  return FALSE;
 }
 //初使化串口,且与单片机系统握手
 InitialCommuClass();

 //发送数据
 for (wi=0,j=0;wi<flen;wi++)
 {
  if (feof(fp)!=0)//到达文件结束
   break;

  fread(&ch,sizeof(unsigned char),1,fp);
        for (;;)
   if (SendAByte(ch)==TRUE)
    break;
     
  Printf("%ld bytes is transmitted! ",wi); }
 fclose(fp);
 for (;;)
 {
  Printf("All bytes is transmitted! ");
 }

}

//转换上载文件为可下载的HEX目标文件
BOOL ConvertFileToFlash()
{
 unsigned  char ch,ru;
 FILE *fp,*fpw;
 long int flen,wi=0;
 int i,j;

 if ((fp = fopen("SOURCEC","rb"))==NULL)
 {
  return FALSE;
 }
 if ((fpw = fopen("HEXOBJECT","wb"))==NULL)
 {
  return FALSE;
 }

 for (wi=0,j=0;;wi++)
 {
  if (feof(fp)!=0)
   break;
  ru=0;
  fread(&ch,sizeof(unsigned char),1,fp);
  if ((ch>=0x30) && (ch<=0x39))
   ru+=(ch-0x30)*16;
  else if ((ch>=0x61) && (ch<=0x66))
   ru+=((ch-0x61)+0x0a)*16;
        fread(&ch,sizeof(unsigned char),1,fp);
  if ((ch>=0x30) && (ch<=0x39))
   ru+=ch-0x30;
  else if ((ch>=0x61) && (ch<=0x66))
   ru+=(ch-0x61)+0x0a;
  fwrite(&ru,sizeof(unsigned char),1,fpw);
  fread(&ch,sizeof(unsigned char),1,fp);/*0x0d*/
  fread(&ch,sizeof(unsigned char),1,fp);/*0x0d*/
  fread(&ch,sizeof(unsigned char),1,fp);/*0x0a*/
  j++;
  if (j==255)
  {
   j=0;
   fread(&ch,sizeof(unsigned char),1,fp);
            fread(&ch,sizeof(unsigned char),1,fp);
   fread(&ch,sizeof(unsigned char),1,fp);
   fread(&ch,sizeof(unsigned char),1,fp);
            fread(&ch,sizeof(unsigned char),1,fp);
   continue;
  }
 }
 fclose(fp);fclose(fpw);
}
结束语

以上所介绍的FLASH自动升级程序的PC部分在VC6.0及TC2.0中开发,并与805lFXXX系列的单片机联机成功,并最后用于在用户处的单片机FLASH程序升级。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭