OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2599|回复: 2

LPC1788 IAP问题求助

[复制链接]

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2012-10-26
在线时间
28 小时
发表于 2015-4-30 15:27:13 | 显示全部楼层 |阅读模式
5金钱
这套SD IAP程序可以升级一些不带中断的和串口中断的程序,但是稍微复杂一些比如SD卡FATFS和带Ucos的就不行了,调试很久无果
mian.c:
01 __asm void JMP_Boot( uint32_t address )
02 {
03    LDR SP, [R0]                ;Load new stack pointer address
04    LDR PC, [R0, #4]          ;Load new program counter address
05 }
06 void Boot( void )
07 {
08     SCB->VTOR = APP_START_SECTOR & 0x1FFFFF80;  
09     JMP_Boot(APP_START_SECTOR);
10 }
11 int main(void)
12 {
13     CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCGPIO, ENABLE);
14     lpc1788_Uart_Init(0);       printf("uart0 init success!\n\r");
15     lpc1788_SDRAM_Init();  
16     lpc1788_Lcd_Init();
17     LCD_test();    
18     SysTick_Init();
19     exfuns_init();             
20     fs_test(); 
21     if(updata_num==1)     {LCD_ShowString(10,218,608,16,16,"Updata APP SUECCED!");updata_num=0;Boot();}
22     else              {LCD_ShowString(10,218,608,16,16,"Have not Updata APP!"); Boot();} 
23     while(1);
24 }
SD 卡升级部分:
01 void fs_test(void)
02 {
03     FRESULT ceshi;
04     char folder[255] = "";
05     uint32_t addr,ii;
06     uint32_t u32Status;
07     ceshi = (FRESULT)SD_Init()
08     if(ceshi == FALSE)
09   {
10     printf("sd init error.\n\r");
11         LCD_ShowString(10,26,200,16,16,"Has no SD found!");
12   }
13   else
14     {
15         LCD_ShowString(10,26,608,16,16,"Press any key to updata system in 3S:");
16 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"10S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
17 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"09S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
18 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"08S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
19 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"07S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
20 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"06S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
21 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"05S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
22 //          LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"04S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
23             LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"03S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
24             LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"02S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
25             LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"01S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
26             LCD_FillRectangle (LCD_PANEL_UPPER, 320,352,26,74, WHITE);LCD_ShowString(320,26,200,16,16,"00S");Delay(1000);if(flag==1){flag=0;goto updata_APP;}
27             SysTick->CTRL=0;//
28       return;
29 updata_APP:
30                 updata_num=1;
31                 SystemCoreClockUpdate();
32                  
33                 LCD_ShowString(10,42,200,16,16,"Updata APP:");LCD_FillRectangle (LCD_PANEL_UPPER,176,376,42,58,skyblue);
34                 ceshi = f_mount(&fs,"0:", 1);
35                 if(ceshi != FR_OK){printf("f_mount error = %d\n\r",ceshi);}
36                  
37                 ceshi=f_open (&file, "UNIGBK.BIN", FA_READ);  RES_FALT(ceshi);
38                 SIZE_UNIGBK=file.fsize;
39                 printf("\n UNIGBK.BIN ?????ù???ó????%d×??? \n",file.fsize);
40                 ceshi=f_read(&file, UNIGBK, SIZE_UNIGBK, &br);  RES_FALT(ceshi);
41                 printf("\nbr ??????%d\n",br);printf("\n");
42                 f_close(&file);br=0;
43                 LCD_FillRectangle (LCD_PANEL_UPPER,176,186,42,58,NavyBlue);
44                  
45                 scan_files(folder); //±é?úSD?¨????
46                 LCD_FillRectangle (LCD_PANEL_UPPER,186,190,42,58,NavyBlue);
47                  
48      
49                 __disable_irq();               
50                 if ((u32IAP_PrepareSectors(10, 21) == IAP_STA_CMD_SUCCESS) &&(u32IAP_EraseSectors  (10, 21) == IAP_STA_CMD_SUCCESS))
51                 {LCD_ShowString(10,58,200,16,16,"Erase Done!"); LCD_FillRectangle (LCD_PANEL_UPPER,190,200,42,58,NavyBlue);}
52                 else {LCD_ShowString(10,58,200,16,16,"Erase FAILED!");return;}
53                         __enable_irq();
54                  
55                 ceshi=f_open (&file, "V002.bin", FA_READ);  RES_FALT(ceshi);
56                 printf("\n V002.bin?????ù???ó????%d×??? \n\r",file.fsize);addr=0;
57                 for(ii=0;ii<((file.fsize)/512+1);ii++)
58                 {
59                     ceshi = f_read(&file, APP_CODE_ADDR, 512, &br); RES_FALT(ceshi);
60                     __disable_irq();//NVIC_DisableIRQ(DMA_IRQn);   
61                     if ((ceshi == FR_OK) || (br == 512))
62                     {
63                          printf("\n %d,%d ",br,ii);
64                          u32Status=u32IAP_PrepareSectors(10, 21);                                           printf(" PrepareSectors:%d ",u32Status);
65                          u32Status=u32IAP_CopyRAMToFlash(APP_START_SECTOR+addr,(uint32_t)APP_CODE_ADDR,512);printf(" CopyRAMToFlash:%d \n\r",u32Status);
66                          addr += 512;
67                          LCD_FillRectangle (LCD_PANEL_UPPER,200,200+ii*176/((file.fsize)/512),42,58,NavyBlue);
68                     }
69                     __enable_irq();
70                  }f_close(&file);br=0;
71                  NVIC_DisableIRQ(MCI_IRQn);
72                  __disable_irq();  
73   }
74     return;
75 }

无个性,不签名
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-30 22:57:31 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2012-10-26
在线时间
28 小时
 楼主| 发表于 2015-5-4 10:08:53 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
T.T不知道何原因
无个性,不签名
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 03:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表