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

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

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、将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
  1. fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件7 y' x& p( A0 x
  2. myfree(buf);                                                                                        //释放缓存& C, B4 t! d4 \3 e  e$ s, @
  3. if(fileOperionResult!=FR_OK)                                                        //文件打开失败
    ) [' `, o  h& ]- c, H% J4 Y  @- s" X
  4.         goto ERROR;; t8 e! s9 d) B' N
  5. i=updateProgFile.fsize;# V! N; |0 K6 p% H
  6. 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
  1. while(1)
    9 @4 |" }( a4 n1 d
  2. {
    8 P- J. g/ r( Z  V+ k0 @8 @
  3.         if(i<2048). |, f# s) ~: i& d6 k
  4.         {
    6 L% O  u7 X& R( C
  5.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,i, &br); //读取文件
    0 J1 C# s) O: S7 R( ^" P
  6.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败  s9 \3 s, n( U5 m: c, g" D8 n  H0 F  R
  7.                         goto ERROR;        9 N/ U) D6 C. W, p9 y) X/ E
  8.                 iap_write_appbin(progWriteAddr,readBuf,i);          //更新FLASH代码
    5 k) F/ H6 i4 z, \  X
  9.                 break;6 y: f- Z! T8 L9 ?  I7 `
  10.         }  ?3 c; f3 x7 u* c6 Y' d
  11.         else
    & K  M6 x4 ]' m4 O& k
  12.         {
    1 [; f% V9 g% D
  13.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,2048, &br); //读取文件
    ! ]) W- A8 ^' w; [1 S" M) ^0 R
  14.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败: h9 i. Z1 `! R  o
  15.                         goto ERROR;        & {' B& J# q1 [
  16.                 iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf));          //更新FLASH代码  * C3 X6 k( T( U3 V) \1 Z+ a
  17.                 i-=2048;
    - r4 S" L- o+ S  F+ f
  18.                 progWriteAddr+=2048;
    ) A, i# B* h" W; J2 i  T
  19.                 ! w) T! ~+ S- k0 l
  20.         }' o7 Q) |! N' Z8 d- W
  21. }, 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
  1. 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
  1. rt_enter_critical();            //进入临界区" T0 U# j% F# C& Y# C  \3 ]
  2. __disable_irq();                                //关闭所有中断5 y0 b3 O4 X* t, T+ ^
  3. 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
收藏 评论0 发布时间:2022-4-22 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版