一、将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卡中要新建一个目录,然后放入程序文件和信息文件。

STM32F103 通过SD卡IAP升级程序,带MD5校验,(带源码)可在实际项目中使用_MD5校验


信息文件的格式为​​#版本号$程序文件字节数@MD5&​​​,MD5可以在线计算,参考网站:​​http://www.metools.info/other/o21.html​​四、完整工程

完整工程