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

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

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、将APP程序从SD卡搬运到MCU中7 q. e# O# c, J. Z% \! i
首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小. L: ?2 [2 M  x; L1 B# N: q8 A+ Q

4 }& M" G0 {, G4 L5 A, b
  1. fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件
    7 M# i. n/ f  I" A
  2. myfree(buf);                                                                                        //释放缓存
    / j& a; r6 R4 Y$ B
  3. if(fileOperionResult!=FR_OK)                                                        //文件打开失败
    & E/ j) X4 M+ z( f: q$ Z% e0 G& R
  4.         goto ERROR;
    9 P) C! h. I2 \% O1 T6 b
  5. i=updateProgFile.fsize;' Z1 D8 ?: ?* j) e! C8 `
  6. progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码

* @3 i9 A8 K1 Z6 b; e然后复制程序文件到MCU中,每次搬运2K字节5 E# S# l/ `7 [6 Y  |: w4 t) J2 ~
+ {4 w1 j5 c- a5 M! Q
  1. while(1)8 I. W. J9 B' J, L
  2. {1 ^0 m. {3 U; ~) q7 z
  3.         if(i<2048)
    * x7 e5 b1 {( v  Y' V
  4.         {
    ; m4 \" o# Z( E
  5.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,i, &br); //读取文件1 T( S- h5 g* o. w
  6.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    , Y7 q2 ]1 I9 k
  7.                         goto ERROR;        
    * P. n! A& S& w9 [
  8.                 iap_write_appbin(progWriteAddr,readBuf,i);          //更新FLASH代码
      i0 q2 c8 h( a/ k2 K5 Z
  9.                 break;
    - J0 {3 @' u  @4 B4 b) A% ^0 ?
  10.         }
    ! Y2 Z( w. ^$ H( W& W
  11.         else  T0 W3 q9 @( O" {4 G5 ^
  12.         {- U8 ?/ z: c3 f) Q, y2 v% p" v: |2 ^
  13.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,2048, &br); //读取文件5 Y1 F( v: U/ k, j
  14.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    - q! G% w6 \; U% v
  15.                         goto ERROR;        
    # X$ x) J6 Z3 ~6 X6 B0 W
  16.                 iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf));          //更新FLASH代码  ! @9 ^1 ~/ b  }$ N$ @; b! @
  17.                 i-=2048;
    6 Z2 j0 {; e3 b3 M9 W- s  Q
  18.                 progWriteAddr+=2048;' A9 y5 {! L5 Y6 U5 B4 x, ^
  19.                 ( G0 K9 g7 a# S
  20.         }! Y" A7 F- V* |( K3 Z- V2 H! ^- {% I
  21. }
      P1 {: |) l+ l9 _4 F
复制代码
4 S2 o# F1 N& K- K
二、通过MD5校验搬运到MCU中的程序: q4 q  t8 `  |  b6 o/ w. Q. w
主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。
7 ^' B" Z  c- d8 L5 Z/ B- H; f; X0 A) K/ G* |% L
  1. get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf);                        //校验程序MD5值
复制代码
, F2 j. z7 E+ {# W  p' @
三、校验成功执行跳转7 p6 ^6 z$ C3 D$ H

$ x) @* i" V5 ]5 R7 ]1 M6 f5 [$ F
  1. rt_enter_critical();            //进入临界区" k3 B: d7 z9 N% x- p+ F
  2. __disable_irq();                                //关闭所有中断
    + _5 I: L- o# \, H* `% O: l
  3. iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码
四、注意点
! |6 I% U. n7 ?$ C, J) L在sd卡中要新建一个目录,然后放入程序文件和信息文件。# g5 Y" z: i1 F2 m5 v
, y# a+ ?/ G& s5 ~2 b
* }4 \+ m' V0 b& I
赞 收藏 评论0 发布时间:2022-4-22 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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