一、将APP程序从SD卡搬运到MCU中
% z9 p8 G r5 Q8 I3 q, i3 J* p首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小
% @$ k6 Y3 }, V4 N8 ^0 _3 h0 w
* D% ~& l1 H/ B+ x- fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件7 y' x& p( A0 x
- myfree(buf); //释放缓存& C, B4 t! d4 \3 e e$ s, @
- if(fileOperionResult!=FR_OK) //文件打开失败
) [' `, o h& ]- c, H% J4 Y @- s" X - goto ERROR;; t8 e! s9 d) B' N
- i=updateProgFile.fsize;# V! N; |0 K6 p% H
- progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码
3 y% ?. j c6 W. a% _) g* {- v然后复制程序文件到MCU中,每次搬运2K字节
. _5 l ?9 F% u; ?: O8 |1 L2 i( Z& `' M# R k
- while(1)
9 @4 |" }( a4 n1 d - {
8 P- J. g/ r( Z V+ k0 @8 @ - if(i<2048). |, f# s) ~: i& d6 k
- {
6 L% O u7 X& R( C - fileOperionResult = f_read (&updateProgFile, &readBuf,i, &br); //读取文件
0 J1 C# s) O: S7 R( ^" P - if(fileOperionResult!=FR_OK) //文件打开失败 s9 \3 s, n( U5 m: c, g" D8 n H0 F R
- goto ERROR; 9 N/ U) D6 C. W, p9 y) X/ E
- iap_write_appbin(progWriteAddr,readBuf,i); //更新FLASH代码
5 k) F/ H6 i4 z, \ X - break;6 y: f- Z! T8 L9 ? I7 `
- } ?3 c; f3 x7 u* c6 Y' d
- else
& K M6 x4 ]' m4 O& k - {
1 [; f% V9 g% D - fileOperionResult = f_read (&updateProgFile, &readBuf,2048, &br); //读取文件
! ]) W- A8 ^' w; [1 S" M) ^0 R - if(fileOperionResult!=FR_OK) //文件打开失败: h9 i. Z1 `! R o
- goto ERROR; & {' B& J# q1 [
- iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf)); //更新FLASH代码 * C3 X6 k( T( U3 V) \1 Z+ a
- i-=2048;
- r4 S" L- o+ S F+ f - progWriteAddr+=2048;
) A, i# B* h" W; J2 i T - ! w) T! ~+ S- k0 l
- }' o7 Q) |! N' Z8 d- W
- }, q$ x4 F, T1 r) c# P% l
复制代码 # G( u4 @6 ~; Q* d7 C5 q0 l* b
二、通过MD5校验搬运到MCU中的程序& B4 J W0 _. D$ [6 Z; j9 i9 W% V
主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。
# }! T3 N& {+ t. t1 X/ Y% S6 Q" k* b% R, Q
- get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf); //校验程序MD5值
复制代码
& A3 X, A( y$ i; A7 b7 L三、校验成功执行跳转
2 s( K6 U: G5 C0 w% R$ A( ]
) P: e! I( p* @: t0 M- rt_enter_critical(); //进入临界区" T0 U# j% F# C& Y# C \3 ]
- __disable_irq(); //关闭所有中断5 y0 b3 O4 X* t, T+ ^
- iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码 四、注意点: D4 |& c' C* F* E: v; `) U
在sd卡中要新建一个目录,然后放入程序文件和信息文件。. S+ L0 [, `4 E# p5 [
! Q9 u+ Y' v( H) G+ c g4 o: I
- t7 Z7 V7 x: h) g- ^4 S! U
|