OpenEdv-开源电子网

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

LPC1788的IAP问题

[复制链接]

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2012-10-26
在线时间
28 小时
发表于 2015-4-29 23:21:18 | 显示全部楼层 |阅读模式
5金钱
这套SD IAP程序可以升级一些不带中断的和串口中断的程序,但是稍微复杂一些比如SD卡FATFS和带Ucos的就不行了,调试很久无果
mian.c:
[mw_shl_code=c,true]__asm void JMP_Boot( uint32_t address ) { LDR SP, [R0] ;Load new stack pointer address LDR PC, [R0, #4] ;Load new program counter address } void Boot( void ) { SCB->VTOR = APP_START_SECTOR & 0x1FFFFF80; JMP_Boot(APP_START_SECTOR); } int main(void) { CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCGPIO, ENABLE); lpc1788_Uart_Init(0); printf("uart0 init success!\n\r"); lpc1788_SDRAM_Init(); lpc1788_Lcd_Init(); LCD_test(); SysTick_Init(); exfuns_init(); fs_test(); if(updata_num==1) {LCD_ShowString(10,218,608,16,16,"Updata APP SUECCED!");updata_num=0;Boot();} else {LCD_ShowString(10,218,608,16,16,"Have not Updata APP!"); Boot();} while(1); } [/mw_shl_code]
SD 卡升级部分:
[mw_shl_code=c,true]void fs_test(void) { FRESULT ceshi; char folder[255] = ""; uint32_t addr,ii; uint32_t u32Status; ceshi = (FRESULT)SD_Init() if(ceshi == FALSE) { printf("sd init error.\n\r"); LCD_ShowString(10,26,200,16,16,"Has no SD found!"); } else { LCD_ShowString(10,26,608,16,16,"Press any key to updata system in 3S:"); // 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;} // 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;} // 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;} // 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;} // 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;} // 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;} // 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;} 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;} 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;} 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;} 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;} SysTick->CTRL=0;// return; updata_APP: updata_num=1; SystemCoreClockUpdate(); LCD_ShowString(10,42,200,16,16,"Updata APP:");LCD_FillRectangle (LCD_PANEL_UPPER,176,376,42,58,skyblue); ceshi = f_mount(&fs,"0:", 1); if(ceshi != FR_OK){printf("f_mount error = %d\n\r",ceshi);} ceshi=f_open (&file, "UNIGBK.BIN", FA_READ); RES_FALT(ceshi); SIZE_UNIGBK=file.fsize; printf("\n UNIGBK.BIN ?????ù???ó????%d×??? \n",file.fsize); ceshi=f_read(&file, UNIGBK, SIZE_UNIGBK, &br); RES_FALT(ceshi); printf("\nbr ??????%d\n",br);printf("\n"); f_close(&file);br=0; LCD_FillRectangle (LCD_PANEL_UPPER,176,186,42,58,NavyBlue); scan_files(folder); //±é?úSD?¨???? LCD_FillRectangle (LCD_PANEL_UPPER,186,190,42,58,NavyBlue); __disable_irq(); if ((u32IAP_PrepareSectors(10, 21) == IAP_STA_CMD_SUCCESS) &&(u32IAP_EraseSectors (10, 21) == IAP_STA_CMD_SUCCESS)) {LCD_ShowString(10,58,200,16,16,"Erase Done!"); LCD_FillRectangle (LCD_PANEL_UPPER,190,200,42,58,NavyBlue);} else {LCD_ShowString(10,58,200,16,16,"Erase FAILED!");return;} __enable_irq(); ceshi=f_open (&file, "V002.bin", FA_READ); RES_FALT(ceshi); printf("\n V002.bin?????ù???ó????%d×??? \n\r",file.fsize);addr=0; for(ii=0;ii<((file.fsize)/512+1);ii++) { ceshi = f_read(&file, APP_CODE_ADDR, 512, &br); RES_FALT(ceshi); __disable_irq();//NVIC_DisableIRQ(DMA_IRQn); if ((ceshi == FR_OK) || (br == 512)) { printf("\n %d,%d ",br,ii); u32Status=u32IAP_PrepareSectors(10, 21); printf(" PrepareSectors:%d ",u32Status); u32Status=u32IAP_CopyRAMToFlash(APP_START_SECTOR+addr,(uint32_t)APP_CODE_ADDR,512);printf(" CopyRAMToFlash:%d \n\r",u32Status); addr += 512; LCD_FillRectangle (LCD_PANEL_UPPER,200,200+ii*176/((file.fsize)/512),42,58,NavyBlue); } __enable_irq(); }f_close(&file);br=0; NVIC_DisableIRQ(MCI_IRQn); __disable_irq(); } return; }[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

结贴:我把问题写在自己空间上了http://user.qzone.qq.com/573447508/2
无个性,不签名
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2012-10-26
在线时间
28 小时
 楼主| 发表于 2015-4-29 23:21:19 | 显示全部楼层
结贴:我把问题写在自己空间上了http://user.qzone.qq.com/573447508/2
无个性,不签名
回复

使用道具 举报

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2012-10-26
在线时间
28 小时
 楼主| 发表于 2015-4-29 23:23:10 | 显示全部楼层
升级FATFS的程序,可以跳转到APP程序,但是不能运行到SD卡部分,升级带UCOS、EmWin等程序的时候直接跳转不了,一直停在IAP程序里
无个性,不签名
回复

使用道具 举报

18

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2012-10-26
在线时间
28 小时
 楼主| 发表于 2015-4-30 10:19:17 | 显示全部楼层
大神求帮助。
无个性,不签名
回复

使用道具 举报

15

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2012-5-23
在线时间
123 小时
发表于 2015-5-5 15:43:58 | 显示全部楼层
帮顶,我最近也准备搞1788的IAP
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 20:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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