一、将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
四、完整工程
完整工程