一、将APP程序从SD卡搬运到MCU中3 }4 B) ]/ _! ?0 u2 F6 T$ x3 p; M
首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小4 V& p' Z! d* Y+ o( e, R
. L3 x9 X6 m: S3 Z! A' B8 A/ A! S
- fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件
`) K8 P* [$ r/ Z. ~ - myfree(buf); //释放缓存
0 d4 L w& \: T* q0 l7 a0 `- X3 P - if(fileOperionResult!=FR_OK) //文件打开失败
/ l6 S7 ?* H; f4 T. ~ F - goto ERROR;
( U9 j B9 N8 i5 ?, f, m - i=updateProgFile.fsize;
( U- K# @4 W1 N# V7 U - progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码
/ ] {' P b U/ l$ I5 _% c/ j: t6 H然后复制程序文件到MCU中,每次搬运2K字节
) Q O$ E( F$ [. d" G- i- [
/ ^# M4 q4 `% [$ D- B- while(1)
6 X* x- [$ h" k3 m. Z0 s - {
P0 g: U1 u9 n* c - if(i<2048)
! x. ^9 b2 w- M& F' g) [ - {
. \7 O5 a5 P0 o' r1 }& A - fileOperionResult = f_read (&updateProgFile, &readBuf,i, &br); //读取文件
/ L X6 d+ J5 H; _4 D* \ - if(fileOperionResult!=FR_OK) //文件打开失败
4 a( M. X' s% w1 b, p$ C# e - goto ERROR;
5 h" C2 c. E, ] I - iap_write_appbin(progWriteAddr,readBuf,i); //更新FLASH代码 - E0 T- t4 j f p$ }* W4 t8 s( t
- break;* b0 l) a c2 G5 J
- }
5 b8 e8 t$ W& X9 N6 g* `$ t% } - else4 A P& }7 W# c$ M* _7 j1 k
- {
# c) b5 ~; ]4 k: G# I2 J; w5 f - fileOperionResult = f_read (&updateProgFile, &readBuf,2048, &br); //读取文件$ a2 Z2 h" u1 p+ B. m# f0 G8 t5 x; x* @
- if(fileOperionResult!=FR_OK) //文件打开失败( x5 h; I1 D7 I4 K+ l
- goto ERROR; - l! b, f" G, ` E4 _: r
- iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf)); //更新FLASH代码 . ^! i X' G% ]5 k( z# W7 w
- i-=2048;
9 K7 O. l- V3 k2 { - progWriteAddr+=2048;% |4 F8 s; w7 q" E
- 6 x, @& w) h5 N$ _3 ~: {& z% H7 f
- }
6 \8 j; O; `$ ?6 t - }
' b) W: ]/ h' i7 E x
复制代码 % r! e) W W, G6 b
二、通过MD5校验搬运到MCU中的程序
5 N. N- r% N4 P; X7 Y/ n主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。' c0 _( T) ?& S% i
6 F9 C8 ^* e! g" j" L- get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf); //校验程序MD5值
复制代码
( }- p- x/ ]( B$ A4 C; L# _$ V# h三、校验成功执行跳转
! w Y' O; E$ ^6 o* B! {& |2 m6 j" q. h
- rt_enter_critical(); //进入临界区) w. e0 E6 V" O) o/ \
- __disable_irq(); //关闭所有中断! x- {$ v& H2 A* v5 l7 a5 `9 Y6 g
- iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码 四、注意点
, f1 [7 _0 o4 \" E/ x! H在sd卡中要新建一个目录,然后放入程序文件和信息文件。
9 V# x X0 W/ j) ?1 @- y$ Q0 N
`; j% s" p- k! ?6 n# k+ W/ ]( g. |: J2 I/ r
|