你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、将APP程序从SD卡搬运到MCU中
# W  x% z8 x. a& a+ C3 S2 B首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小
, s+ S( L6 U5 \( l5 @* U6 x  s0 [$ `) y
  1. fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件/ Y' r" j9 ^- u) p8 E
  2. myfree(buf);                                                                                        //释放缓存
    1 v# m& b5 U9 U% R/ q, T
  3. if(fileOperionResult!=FR_OK)                                                        //文件打开失败
    - i; q! ~1 f: \, ^: |& N
  4.         goto ERROR;
    7 J  }0 A3 |) b! ?7 \7 L
  5. i=updateProgFile.fsize;  x0 {4 a: D9 D- b$ W2 o/ \6 M$ Z$ ~
  6. 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
  1. while(1)
    4 f/ D# u: C5 H6 ~! }4 _
  2. {3 t6 e5 S. Q5 k/ I* ]" K" L, P
  3.         if(i<2048)
    : I3 n, u) m+ }9 m/ A4 u) ~
  4.         {4 n0 l& W, x  f4 `" }
  5.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,i, &br); //读取文件2 l. `: G: p- p- `& `) e- G  Q3 ?9 J
  6.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    9 J+ L) b6 b' j4 x& G
  7.                         goto ERROR;        # A; F, s6 m8 B
  8.                 iap_write_appbin(progWriteAddr,readBuf,i);          //更新FLASH代码
    . r/ I$ j% `" X+ A' z& U& `) f+ R
  9.                 break;
    6 o. X$ @- e, u( }* t- m
  10.         }
    8 q. k/ V' [6 X; ]& d
  11.         else
    8 X% W2 L- n8 F7 {
  12.         {+ }7 Y; |; H2 _
  13.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,2048, &br); //读取文件
    ) u% ?7 j6 f1 V2 K+ ^! T
  14.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    - j; U$ o5 X4 }: W
  15.                         goto ERROR;        ' x8 ?/ W6 I( r5 g% n
  16.                 iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf));          //更新FLASH代码  
    ' [& ~% q" g- Q4 {% _* V
  17.                 i-=2048;) d  f1 D" J3 i; @5 f
  18.                 progWriteAddr+=2048;5 I" n  N# @$ t( S; k, x
  19.                
    2 m6 b, F0 c: f, w" ^  R
  20.         }& j; t# W3 i9 \0 X$ @( L% L
  21. }, 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
  1. 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
  1. rt_enter_critical();            //进入临界区
    4 f, E) z* @- `* d6 u8 Z3 m' f
  2. __disable_irq();                                //关闭所有中断
    ) G$ K; u3 K% O3 a
  3. 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 \
收藏 评论0 发布时间:2022-4-22 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版