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

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

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、将APP程序从SD卡搬运到MCU中
( ~2 B, j6 B& C- r; s首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小
( i3 L0 Y5 {3 [% ], w  y+ J
5 f, Y. N2 X1 L/ {
  1. fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件: `, W) }  N* s2 s; F
  2. myfree(buf);                                                                                        //释放缓存" a) B& Y1 h1 X  R) W  u
  3. if(fileOperionResult!=FR_OK)                                                        //文件打开失败3 Q, V7 G; t3 x9 V/ A
  4.         goto ERROR;
    3 L5 L' N3 @! n5 Q' I
  5. i=updateProgFile.fsize;
    6 `7 t/ B5 X$ y) e
  6. progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码

8 E, a3 I; o% H" k然后复制程序文件到MCU中,每次搬运2K字节
6 Y4 ?, R( ?2 H7 c; T# M7 m
' u5 s  d7 i& L9 n( |
  1. while(1)
    3 y- u0 i( t  D4 Q; c; B: M# B
  2. {
    6 C% u" |; t  z' e; f: {- u
  3.         if(i<2048)
    & Y0 y- y. X: ^* c/ W
  4.         {' y. p$ x( n. x5 {  X
  5.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,i, &br); //读取文件2 H. R4 ]! ^6 M# H7 `, ]
  6.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    " M( g0 r3 h" D  U1 Q) I
  7.                         goto ERROR;        ) d$ v$ E* {$ o1 Q
  8.                 iap_write_appbin(progWriteAddr,readBuf,i);          //更新FLASH代码
    * |! l6 J" D+ }4 U' x3 b+ Z" y
  9.                 break;5 h* x3 p. l, ?% Y
  10.         }! ?: J& k  o1 O+ ^# ^; N
  11.         else4 O  e, v2 B" j3 V! p0 H6 _, A
  12.         {4 t) C) k5 w6 V& Y, d9 m8 q  @
  13.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,2048, &br); //读取文件4 \: _* C) _- N" A* @
  14.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败/ c; N  E0 F; v- [2 U4 l
  15.                         goto ERROR;        ! |2 H  y1 ], _
  16.                 iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf));          //更新FLASH代码  9 k6 D1 o0 W: h" C) c0 r
  17.                 i-=2048;
    6 Z) k( S0 g. S" H+ i- C5 ^
  18.                 progWriteAddr+=2048;8 L% B4 C2 L3 o: \: b8 `. o+ e
  19.                 " m2 a/ m. @2 |$ A
  20.         }) Z9 ]9 J4 G& S: x
  21. }
    ( q5 J0 j, `2 ~" m7 `1 H* z: |
复制代码
( S# ?( W" G# c' ]$ L
二、通过MD5校验搬运到MCU中的程序) b6 c; c7 x( T. o2 }5 W
主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。
$ f) ~+ N) U2 Q4 J; R  r7 [9 G4 z- p+ x# Y! e
  1. get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf);                        //校验程序MD5值
复制代码

4 o! X* K' _, q9 H/ a0 B3 p1 T三、校验成功执行跳转& a6 u8 N3 v6 \- p) [1 P" G4 }
8 y( q! z) [. G9 m
  1. rt_enter_critical();            //进入临界区6 b5 v7 h* Z  B) p* m
  2. __disable_irq();                                //关闭所有中断3 O% d) C( c# T. r7 `. P* n3 Z# J- N8 Y
  3. iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码
四、注意点
) ?5 K8 a- f- N7 w在sd卡中要新建一个目录,然后放入程序文件和信息文件。
1 V  }! ~9 e5 x% U( N- L  y; e6 W3 P/ |6 W6 x; y' h. c3 _; M
" k, g5 [- x$ f" b3 d' @
收藏 评论0 发布时间:2022-4-22 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

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