注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
double05101的个人空间 https://home.eeworld.com.cn/space-uid-98788.html [收藏] [复制] [分享] [RSS]
日志

IAP的应用

已有 799 次阅读2011-8-31 16:34

没有硬件,自己觉得逻辑上是对着的。大家给调调错误
void main(void)
{
 UINT8 *pBUF_env , *pBUF_file;
 UINT8 flag , size_file;
 UINT8 sector;
 UINT8 readByte = 0;
 UINT8 i , j;
 UINT8 verify_file;
 initSPI();
 initTimer0();
 InitIAP();
 //读标志和升级文件的大小.pBUF_flash的第一个参数定义为升级的标志参数,第二个为升级文件的大小
 FlashRead(EXT_ENV_ADDR , pBUF_env , 2);
 //取得升级标志
 flag = pBUF_env[0];
// flag =1; //flag test
 //取得升级文件大小
  size_file = pBUF_env[1];
//  size_IAP = 65500;//size test
 if(size_file > 65536)
 {
  //更新程序超出PC计数范围————报错
  printf("\nsys>error the size of down load program");
  while(1);
 }
 else
 {
  while(flag)
  {
   //取得扇区数量
   if(size_file % 128)
   {
    sector = size_file / 128 + 1;
   }
   else
   {
    sector = size_file / 128;
   } 
   //擦除相应扇区
   for(i=0;i<sector;i++)
   { 
    for(j=0;j<128;j++)
    {
     if(byte_verify(BLOCK0_64K_ADDR + j) == 0xff)
     {
      continue;
     }
     else
     {
      sector_erase(BLOCK0_64K_ADDR + i * 128);
     }
    }
   }
   //读取升级文件
   FlashRead(EXT_APP_ADDR , pBUF_file , size_file); 
   //下载新程序
   for(j=0;j<size_file;j++)
   {
    byte_program(BLOCK0_64K_ADDR + j , pBUF_file[j]);
    verify_file = byte_verify(BLOCK0_64K_ADDR + j);
    if(verify_file !=  pBUF_file[j])
    {
     printf("\nsys>error verify of down load program");
     while(1);
    }
   }  
   //更改标志
   flag = 0;
  }
  //更改映射
  SFCF = SFCF | 0x03;
 }
 return;
}
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章