一、将APP程序从SD卡搬运到MCU中
( ~2 B, j6 B& C- r; s首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小
( i3 L0 Y5 {3 [% ], w y+ J
5 f, Y. N2 X1 L/ {- fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件: `, W) } N* s2 s; F
- myfree(buf); //释放缓存" a) B& Y1 h1 X R) W u
- if(fileOperionResult!=FR_OK) //文件打开失败3 Q, V7 G; t3 x9 V/ A
- goto ERROR;
3 L5 L' N3 @! n5 Q' I - i=updateProgFile.fsize;
6 `7 t/ B5 X$ y) e - progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码
8 E, a3 I; o% H" k然后复制程序文件到MCU中,每次搬运2K字节
6 Y4 ?, R( ?2 H7 c; T# M7 m
' u5 s d7 i& L9 n( |- while(1)
3 y- u0 i( t D4 Q; c; B: M# B - {
6 C% u" |; t z' e; f: {- u - if(i<2048)
& Y0 y- y. X: ^* c/ W - {' y. p$ x( n. x5 { X
- fileOperionResult = f_read (&updateProgFile, &readBuf,i, &br); //读取文件2 H. R4 ]! ^6 M# H7 `, ]
- if(fileOperionResult!=FR_OK) //文件打开失败
" M( g0 r3 h" D U1 Q) I - goto ERROR; ) d$ v$ E* {$ o1 Q
- iap_write_appbin(progWriteAddr,readBuf,i); //更新FLASH代码
* |! l6 J" D+ }4 U' x3 b+ Z" y - break;5 h* x3 p. l, ?% Y
- }! ?: J& k o1 O+ ^# ^; N
- else4 O e, v2 B" j3 V! p0 H6 _, A
- {4 t) C) k5 w6 V& Y, d9 m8 q @
- fileOperionResult = f_read (&updateProgFile, &readBuf,2048, &br); //读取文件4 \: _* C) _- N" A* @
- if(fileOperionResult!=FR_OK) //文件打开失败/ c; N E0 F; v- [2 U4 l
- goto ERROR; ! |2 H y1 ], _
- iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf)); //更新FLASH代码 9 k6 D1 o0 W: h" C) c0 r
- i-=2048;
6 Z) k( S0 g. S" H+ i- C5 ^ - progWriteAddr+=2048;8 L% B4 C2 L3 o: \: b8 `. o+ e
- " m2 a/ m. @2 |$ A
- }) Z9 ]9 J4 G& S: x
- }
( q5 J0 j, `2 ~" m7 `1 H* z: |
复制代码 ( S# ?( W" G# c' ]$ L
二、通过MD5校验搬运到MCU中的程序) b6 c; c7 x( T. o2 }5 W
主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。
$ f) ~+ N) U2 Q4 J; R r7 [9 G4 z- p+ x# Y! e
- get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf); //校验程序MD5值
复制代码
4 o! X* K' _, q9 H/ a0 B3 p1 T三、校验成功执行跳转& a6 u8 N3 v6 \- p) [1 P" G4 }
8 y( q! z) [. G9 m
- rt_enter_critical(); //进入临界区6 b5 v7 h* Z B) p* m
- __disable_irq(); //关闭所有中断3 O% d) C( c# T. r7 `. P* n3 Z# J- N8 Y
- iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码 四、注意点
) ?5 K8 a- f- N7 w在sd卡中要新建一个目录,然后放入程序文件和信息文件。
1 V }! ~9 e5 x% U( N- L y; e6 W3 P/ |6 W6 x; y' h. c3 _; M
" k, g5 [- x$ f" b3 d' @
|