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

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

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、将APP程序从SD卡搬运到MCU中- N7 S9 a9 q, X; K- m  }
首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小7 A- b! D6 W% c* o! Q1 T+ b

: O" _' Z6 o. N* I
  1. fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件
    : w  m7 T, P" N7 c! Q' z
  2. myfree(buf);                                                                                        //释放缓存
    ! Q4 w6 W! x- W# O& ?& @: e
  3. if(fileOperionResult!=FR_OK)                                                        //文件打开失败; L& n/ V- V' {2 j4 X) k
  4.         goto ERROR;, u0 {) ~2 g- \0 R' K1 i
  5. i=updateProgFile.fsize;9 k- a: [& l. l  N" ?
  6. progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码
1 U0 @% }- w. i  J+ H8 [
然后复制程序文件到MCU中,每次搬运2K字节9 Y4 ?$ K: y! d% j- s7 U. i
8 \& u  U1 I! D4 f. k8 m
  1. while(1)
    ( Y# O/ _$ f- w  S% B
  2. {
    8 ^# M& n5 Z. P) n
  3.         if(i<2048)) @9 n- U/ ?3 ], X9 Y1 h
  4.         {% z8 Z" n) r; P8 H7 ]6 K
  5.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,i, &br); //读取文件
      B7 a4 X; }' o3 R
  6.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败) B* n9 g4 y: o8 m- O9 j
  7.                         goto ERROR;        - b) d5 d' B6 W2 v( x
  8.                 iap_write_appbin(progWriteAddr,readBuf,i);          //更新FLASH代码
    ! G! {- |  e! G
  9.                 break;
    0 ^* E. [# G1 l
  10.         }
    " j" z. p. s: G" O7 v
  11.         else9 p2 j4 j* ~5 `- w0 I
  12.         {
    4 ?- ?5 ^- x- s- ]8 q
  13.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,2048, &br); //读取文件
    1 o5 N  ?1 q* p
  14.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    : k0 a( S; Y; d' T5 T
  15.                         goto ERROR;        
    " V  Y/ H0 b- d
  16.                 iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf));          //更新FLASH代码  5 S8 |1 k2 f# y% }! t
  17.                 i-=2048;
    2 M. o3 J9 V1 ~
  18.                 progWriteAddr+=2048;5 B/ ^" K  h; [
  19.                 - B( i/ T/ y9 A* @, M7 e
  20.         }: F6 t/ u( K6 _$ w& n8 C
  21. }$ k1 E3 `8 v. t; U' \
复制代码
. q% N$ M. c# R% }4 g7 A$ ?
二、通过MD5校验搬运到MCU中的程序" b- s8 Z* F" }: @
主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。6 g# [- K7 q6 {/ P6 E

" j2 q. U8 ~9 r: ^( H) n
  1. get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf);                        //校验程序MD5值
复制代码

4 c1 Y. V2 D$ s1 R, _( H2 g7 V" P三、校验成功执行跳转$ a' n( B" k- @; M2 p

% O( R% Z2 ^+ z" [2 Z% e
  1. rt_enter_critical();            //进入临界区
    ; C7 j. h2 z9 _) Q3 ]8 @
  2. __disable_irq();                                //关闭所有中断; m/ Y9 h# o4 T3 W  y
  3. iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码
四、注意点. m' L/ C/ I6 v9 P# y
在sd卡中要新建一个目录,然后放入程序文件和信息文件。/ b2 U7 }4 W4 \
3 O' X# j) O% Q8 S

/ Z/ d  r/ @1 [, m+ P
赞 收藏 评论0 发布时间:2022-4-22 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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