一、将APP程序从SD卡搬运到MCU中
# W x% z8 x. a& a+ C3 S2 B首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小
, s+ S( L6 U5 \( l5 @* U6 x s0 [$ `) y
- fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件/ Y' r" j9 ^- u) p8 E
- myfree(buf); //释放缓存
1 v# m& b5 U9 U% R/ q, T - if(fileOperionResult!=FR_OK) //文件打开失败
- i; q! ~1 f: \, ^: |& N - goto ERROR;
7 J }0 A3 |) b! ?7 \7 L - i=updateProgFile.fsize; x0 {4 a: D9 D- b$ W2 o/ \6 M$ Z$ ~
- progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码 8 j5 v' T8 v& D6 o5 ~
然后复制程序文件到MCU中,每次搬运2K字节
0 z; L/ N2 P; {8 d6 e2 w4 w6 c& b+ k; W6 k o" n A7 c" g5 L
- while(1)
4 f/ D# u: C5 H6 ~! }4 _ - {3 t6 e5 S. Q5 k/ I* ]" K" L, P
- if(i<2048)
: I3 n, u) m+ }9 m/ A4 u) ~ - {4 n0 l& W, x f4 `" }
- fileOperionResult = f_read (&updateProgFile, &readBuf,i, &br); //读取文件2 l. `: G: p- p- `& `) e- G Q3 ?9 J
- if(fileOperionResult!=FR_OK) //文件打开失败
9 J+ L) b6 b' j4 x& G - goto ERROR; # A; F, s6 m8 B
- iap_write_appbin(progWriteAddr,readBuf,i); //更新FLASH代码
. r/ I$ j% `" X+ A' z& U& `) f+ R - break;
6 o. X$ @- e, u( }* t- m - }
8 q. k/ V' [6 X; ]& d - else
8 X% W2 L- n8 F7 { - {+ }7 Y; |; H2 _
- fileOperionResult = f_read (&updateProgFile, &readBuf,2048, &br); //读取文件
) u% ?7 j6 f1 V2 K+ ^! T - if(fileOperionResult!=FR_OK) //文件打开失败
- j; U$ o5 X4 }: W - goto ERROR; ' x8 ?/ W6 I( r5 g% n
- iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf)); //更新FLASH代码
' [& ~% q" g- Q4 {% _* V - i-=2048;) d f1 D" J3 i; @5 f
- progWriteAddr+=2048;5 I" n N# @$ t( S; k, x
-
2 m6 b, F0 c: f, w" ^ R - }& j; t# W3 i9 \0 X$ @( L% L
- }, i' A/ X. K8 H% [
复制代码
) R5 E( F* Q+ R& p二、通过MD5校验搬运到MCU中的程序
6 k2 ?& P) e8 t( ?9 x主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。
0 N. U2 q0 _ w6 D
7 P; o, |2 g4 V/ ] j- get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf); //校验程序MD5值
复制代码
- s/ T* K# v# n/ ~& ^5 {* j7 c' r三、校验成功执行跳转
5 a2 x% p: `5 M1 i7 _ `: X3 w9 ~2 U; O0 W
- rt_enter_critical(); //进入临界区
4 f, E) z* @- `* d6 u8 Z3 m' f - __disable_irq(); //关闭所有中断
) G$ K; u3 K% O3 a - iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码 四、注意点, ~+ @% W( `9 e# T" ~$ Q5 u
在sd卡中要新建一个目录,然后放入程序文件和信息文件。+ q# ~! U+ n$ d; Y
9 l% f& ^% F1 T$ W
; Y. F$ n7 j: g) K! g3 \
|