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

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

[复制链接]
STMCU小助手 发布时间:2022-4-22 22:00
一、将APP程序从SD卡搬运到MCU中3 }4 B) ]/ _! ?0 u2 F6 T$ x3 p; M
首先从sd卡通过FAFTS文件操作系统打开程序文件,然后记录下复制开始地址和程序文件大小4 V& p' Z! d* Y+ o( e, R
. L3 x9 X6 m: S3 Z! A' B8 A/ A! S
  1. fileOperionResult = f_open(&updateProgFile,buf,FA_READ); //只读类型打开文件
      `) K8 P* [$ r/ Z. ~
  2. myfree(buf);                                                                                        //释放缓存
    0 d4 L  w& \: T* q0 l7 a0 `- X3 P
  3. if(fileOperionResult!=FR_OK)                                                        //文件打开失败
    / l6 S7 ?* H; f4 T. ~  F
  4.         goto ERROR;
    ( U9 j  B9 N8 i5 ?, f, m
  5. i=updateProgFile.fsize;
    ( U- K# @4 W1 N# V7 U
  6. progWriteAddr=SAVE_PROGRAM_ADDR;
复制代码

/ ]  {' P  b  U/ l$ I5 _% c/ j: t6 H然后复制程序文件到MCU中,每次搬运2K字节
) Q  O$ E( F$ [. d" G- i- [
/ ^# M4 q4 `% [$ D- B
  1. while(1)
    6 X* x- [$ h" k3 m. Z0 s
  2. {
      P0 g: U1 u9 n* c
  3.         if(i<2048)
    ! x. ^9 b2 w- M& F' g) [
  4.         {
    . \7 O5 a5 P0 o' r1 }& A
  5.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,i, &br); //读取文件
    / L  X6 d+ J5 H; _4 D* \
  6.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败
    4 a( M. X' s% w1 b, p$ C# e
  7.                         goto ERROR;        
    5 h" C2 c. E, ]  I
  8.                 iap_write_appbin(progWriteAddr,readBuf,i);          //更新FLASH代码 - E0 T- t4 j  f  p$ }* W4 t8 s( t
  9.                 break;* b0 l) a  c2 G5 J
  10.         }
    5 b8 e8 t$ W& X9 N6 g* `$ t% }
  11.         else4 A  P& }7 W# c$ M* _7 j1 k
  12.         {
    # c) b5 ~; ]4 k: G# I2 J; w5 f
  13.                 fileOperionResult =        f_read (&updateProgFile, &readBuf,2048, &br); //读取文件$ a2 Z2 h" u1 p+ B. m# f0 G8 t5 x; x* @
  14.                 if(fileOperionResult!=FR_OK)                                                                        //文件打开失败( x5 h; I1 D7 I4 K+ l
  15.                         goto ERROR;        - l! b, f" G, `  E4 _: r
  16.                 iap_write_appbin(progWriteAddr,readBuf,sizeof(readBuf));          //更新FLASH代码  . ^! i  X' G% ]5 k( z# W7 w
  17.                 i-=2048;
    9 K7 O. l- V3 k2 {
  18.                 progWriteAddr+=2048;% |4 F8 s; w7 q" E
  19.                 6 x, @& w) h5 N$ _3 ~: {& z% H7 f
  20.         }
    6 \8 j; O; `$ ?6 t
  21. }
    ' b) W: ]/ h' i7 E  x
复制代码
% r! e) W  W, G6 b
二、通过MD5校验搬运到MCU中的程序
5 N. N- r% N4 P; X7 Y/ n主要原理将搬运到MCU中的程序读出来然后计算MD5,然后将计算得到的MD5和给定的MD5比较。' c0 _( T) ?& S% i

6 F9 C8 ^* e! g" j" L
  1. get_bin_md5(SAVE_PROGRAM_ADDR,progFileSize,buf);                        //校验程序MD5值
复制代码

( }- p- x/ ]( B$ A4 C; L# _$ V# h三、校验成功执行跳转
! w  Y' O; E$ ^6 o* B! {& |2 m6 j" q. h
  1. rt_enter_critical();            //进入临界区) w. e0 E6 V" O) o/ \
  2. __disable_irq();                                //关闭所有中断! x- {$ v& H2 A* v5 l7 a5 `9 Y6 g
  3. iap_load_app(SAVE_PROGRAM_ADDR);//执行FLASH APP代码
复制代码
四、注意点
, f1 [7 _0 o4 \" E/ x! H在sd卡中要新建一个目录,然后放入程序文件和信息文件。
9 V# x  X0 W/ j) ?1 @- y$ Q0 N
  `; j% s" p- k! ?6 n# k+ W/ ]( g. |: J2 I/ r
收藏 评论0 发布时间:2022-4-22 22:00

举报

0个回答

所属标签

相似分享

官网相关资源

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