一、將APP程序從SD卡搬運到MCU中
首先從sd卡通過FAFTS文件操作系統打開程序文件,然後記錄下複製開始地址和程序文件大小
fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只讀類型打開文件
myfree(buf); //釋放緩存
if(fileOperionResult!=FR_OK) //文件打開失敗
goto ERROR;
i=updateProgFile.fsize;
progWriteAddr=SAVE_PROGRAM_ADDR;
然後複製程序文件到MCU中,每次搬運2K字節
while(1)
{
if(i<2048)
{
fileOperionResult = f_read (&updateProgFile, &readBuf,i, &br); //讀取文件
if(fileOperionResult!=FR_OK) //文件打開失敗
goto ERROR;
iap_write_appbin(progWriteAddr,readBuf,i); //更新FLASH代碼
break;
}
else
{
fileOperionResult = f_read (&updateProgFile, &readBuf,2048, &br); //讀取文件
if(fileOperionResult!=FR_OK) //文件打開失敗
goto ERROR;
iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf)); //更新FLASH代碼
i-=2048;
progWriteAddr+=2048;
}
}
二、通過MD5校驗搬運到MCU中的程序
主要原理將搬運到MCU中的程序讀出來然後計算MD5,然後將計算得到的MD5和給定的MD5比較。
get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf); //校驗程序MD5值
二、校驗成功執行跳轉
rt_enter_critical(); //進入臨界區
__disable_irq(); //關閉所有中斷
iap_load_app(SAVE_PROGRAM_ADDR);//執行FLASH APP代碼
三、注意點
在sd卡中要新建一個目錄,然後放入程序文件和信息文件。
信息文件的格式爲#版本號$程序文件字節數@MD5&
,MD5可以在線計算,參考網站:http://www.metools.info/other/o21.html
四、完整工程
完整工程