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

基于STM32 使用 Bootloader经验分享

[复制链接]
攻城狮Melo 发布时间:2023-3-14 13:34
在生成页面中选中了 恢复出厂固件引脚 功能后,即开启了出厂固件恢复功能。开发者可以将制作好的 app 固件烧录至 factory 分区中,在系统启动前按下恢复出厂固件引脚(可选择一个或者两个引脚作为固件恢复触发引脚)并保持 10S,即可从 factory 分区中恢复出厂固件到 app 分区中。
" S9 D( K. r6 Z, d' d8 \7 g% ?
) \3 O3 o* @3 P+ C; S. o& K
由于恢复出厂设置是直接copy,所以编译的出厂固件其实和下载固件配置相同。
' z! |* v0 y6 y0 J7 P: b8 d/ K; qbootloader配置如下:& x4 R; R* Z5 y7 f9 F& H

/ b% @# D0 g. J! E6 J! o, b
20191013123338314.png 9 i# z! S( k( a1 a! Q' F# g- D' I
/ c- H) q  k" T0 V) y+ R
修改fal_cfg.h如下:( k0 Z; a7 n4 e, h* N
  1. /*
      k7 T+ m# O) _* K. |; U; @. c
  2. * Copyright (c) 2006-2018, RT-Thread Development Team. W7 e/ q/ ~: a  j
  3. *
    1 t- n* C9 Y! j/ q, `) h* f
  4. * SPDX-License-Identifier: Apache-2.08 w& a1 x  ^  V
  5. *
    : x# o9 u, G1 @0 k6 g
  6. * Change Logs:
    2 z8 Y* Y  _5 w- \' l
  7. * Date           Author       Notes
    4 S( |6 ^/ ?1 B9 Y
  8. * 2018-12-5      SummerGift   first version
    1 b. f; z) [9 a
  9. */
    ' e% i: {& C! N; ^, p% Z, P- ?1 ]

  10. ' i3 T0 i1 B* e' t. I. \
  11. #ifndef _FAL_CFG_H_
    $ t' _" g4 v3 H1 O$ H3 p9 a
  12. #define _FAL_CFG_H_
    / h+ G' w0 R3 i( ~+ B

  13. 4 ~  n6 C% {* ^$ r( \
  14. #include <rtthread.h>8 e& f. E5 |: U9 D  H
  15. #include <board.h>% u: Z9 {! j! C* I

  16. ; W$ z* _, R9 P
  17. #define RT_APP_PART_ADDR 0x80400007 ~+ B1 i, \$ y) |
  18. 1 \# O1 n( T, O* n! [; P
  19. - E  h, p0 ?* w/ L8 q3 L. j
  20. extern const struct fal_flash_dev stm32_onchip_flash;
    , B6 G& f% }* d

  21. - L, K& R% ]- n* I* [6 o3 `4 Z/ T
  22. /* flash device table */
    3 o! u  v7 X1 P  q! `9 D# l; H
  23. #define FAL_FLASH_DEV_TABLE                                          \. \% i8 V6 G% K
  24. {                                                                    \
    9 H; x9 b6 F, l2 y
  25.     &stm32_onchip_flash,                                             \
    4 c, l/ F8 `- M% e
  26. }
    # T0 B. i0 x" i! A! B
  27. /* ====================== Partition Configuration ========================== */; N/ |2 c" k( ^9 v5 D% }# C; v" l
  28. #ifdef FAL_PART_HAS_TABLE_CFG
    8 {3 c; d9 H) h% }0 ]
  29. $ Z5 j) P, |7 |; a5 {
  30. /* partition table */4 X8 }9 `' N* q. b
  31. #define FAL_PART_TABLE                                                                      \
    ; {, _# ?  J* N( k8 U0 X
  32. {                                                                                           \
    1 F8 |2 m" [5 w8 f0 s; g7 u# g
  33.         {FAL_PART_MAGIC_WROD,    "bl",       "onchip_flash",       0*128* 1024 , 128 * 1024, 0},  \- o6 y# g% ~' J" a# k) V
  34.         {FAL_PART_MAGIC_WROD,    "download", "onchip_flash",       1*128* 1024 , 128 * 1024, 0},  \
    $ K. \( U! x2 y/ i$ k  \, p4 ?
  35.         {FAL_PART_MAGIC_WROD,    "app",      "onchip_flash",       2*128* 1024 , 128 * 1024, 0},  \
    0 V1 c) x1 x1 v% K$ Z& l: t
  36.         {FAL_PART_MAGIC_WROD,    "factory",  "onchip_flash",       3*128* 1024 , 128 * 1024, 0},  \
    / G" i! e2 Z. A$ v
  37. }( y: N2 N, k& I/ e
  38. #endif /* FAL_PART_HAS_TABLE_CFG */
    / j" x( a0 b9 u/ M
  39. #endif /* _FAL_CFG_H_ */3 H: i! D' L$ A' ~6 A  n
  40. 7 Z3 c: ~. a- |0 f' i. c
复制代码

) q* w, R6 \" B4 ?# j2 a- Z修改link.sct如下:
8 b; ~6 k2 m. U" z, S% l: `, b! z
  1. ; ************************************************************** u) V& n) S3 }. C! v  E3 g$ U: Y
  2. ; *** Scatter-Loading Description File generated by uVision ***
    + {0 ^$ V' g' l7 k2 }  Y- z- g
  3. ; *************************************************************+ Q+ T) K  H) D* T
  4. 7 f/ z% i. j; W! c8 c! q) h+ s9 Z
  5. LR_IROM1 0x08040000 0x00080000  {    ; load region size_region1 y) T# j' B4 O8 y
  6.   ER_IROM1 0x08040000 0x00080000  {  ; load address = execution address
    4 d6 C- K. P) m1 R' {, \
  7.    *.o (RESET, +First)+ v2 b6 n6 Y2 ~; w+ j1 r" ]
  8.    *(InRoot$Sections)
    7 {2 r& b* l5 H' O& z
  9.    .ANY (+RO)
    / o! {: T4 r7 b- _
  10.   }  }8 g2 o2 a# q+ R
  11.   RW_IRAM1 0x20000000 0x00010000  {  ; RW data
    7 n! d0 [/ C; [- K# I9 [4 G" S
  12.    .ANY (+RW +ZI)6 w% _8 q$ d- u. Y0 l
  13.   }
    - ~' t3 I  l& j+ e; q
  14. }
    7 M& b/ `$ E5 W' D
复制代码

+ @! B2 i! w( w: R1 h编译生成bin文件。
5 l, |! D6 s4 m. F; @; e# L: k+ M( q6 X" y6 p8 d
此时如果直接使用st-link等工具烧录至0x8060000,会出现如下错误:/ }4 ~# ~7 F2 ^# s* S3 y' ~( g) a
  1. [E]Get firmware header occur CRC32(calc.crc: 43e482ba != hdr.info_crc32: 080409eb) error on 'factory' partition!
    8 U# q0 ?2 V1 E4 g' x% r5 M+ z
复制代码

, F" q, y  M$ D. e1 k( }, f  k因为无论是factory还是download,在向app分区拷贝的时候,都会做一次解密算法(因为factory分区和download分区是可以放在片外spi flash的,如果不加密直接拷出来下载就能用了,而app分区在stm32内部,设置了读保护是不用担心的)。% C0 O& ~  h, H) f7 \% d
所以需要将生成的文件用打包器加密,再重新用st-link烧录。) O1 o( V: Q3 y  l6 p

, W+ m$ z  t, }; ~/ ^0 ]" t
20191013124406867.png
' G( L: ^/ Z" a

* Z) [7 v+ X. d5 x6 K" v恢复出厂设置的日志如下:' S7 e% v2 ~4 \' T6 H2 U
  1. [SFUD]Find a Winbond flash chip. Size is 16777216 bytes.
    ) U: C* O2 F& C- y- i9 S
  2. [SFUD]spi flash device is initialize success.  V: J' j" s4 L& R8 T
  3. ! ^) {, N( y" h5 s
  4. __  ___     __   __   __  ___
    3 h3 D8 f* x& [( K. c! B
  5. |__)  |  __ |__) /  \ /  \  |  
    % S; ~) C2 A( l
  6. |  \  |     |__) \__/ \__/  |  / F( @5 Q/ l3 q  v
  7. 2006 - 2019 Copyright by rt-thread team: z- L7 a5 M& F, \2 d6 \3 V  I
  8.                 0.9.1 build Oct 13 20194 Q! `$ C. k$ A
  9. [D/FAL] (fal_flash_init:63) Flash device |             onchip_flash | addr: 0x08000000 | len: 0x00080000 | blk_size: 0x00000800 |initialized finish.* e& n( m/ [( R1 v7 F
  10. [D/FAL] (fal_flash_init:63) Flash device |                nor_flash | addr: 0x00000000 | len: 0x01000000 | blk_size: 0x00001000 |initialized finish.- |' O# @% F7 q% ?; V) z3 Z  ?8 }
  11. [I/FAL] ==================== FAL partition table ====================
    2 a0 f3 O7 Z9 \
  12. [I/FAL] | name     | flash_dev    |   offset   |    length  |2 g$ j; P( i; u
  13. [I/FAL] -------------------------------------------------------------
    * x' _' V% g* F" k9 `
  14. [I/FAL] | app      | onchip_flash | 0x00040000 | 0x00020000 |. S+ K, J0 p0 K- D- w. E
  15. [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |
    " J9 `5 S; q1 K( Y! P9 N
  16. [I/FAL] | factory  | onchip_flash | 0x00060000 | 0x00020000 |) L' d6 J1 F, r; J' y( p! h# K
  17. [I/FAL] =============================================================
    ) f* @% S, j" j5 ?
  18. [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
    8 A* c. }9 T$ T9 T1 R' |
  19. [I/FAL] System initialization successful.
    3 `% h' e, G0 L( L/ |3 C
  20. [I]RT-Thread OTA package(V0.2.1) initialize success.7 e7 U7 G& q4 g' `. s. t  d
  21. [E]Get firmware header occur CRC32(calc.crc: 7b93c5c8 != hdr.info_crc32: ffffffff) error on 'download' partition!5 G7 z1 u9 j) C' d
  22. [E]Get OTA download partition firmware header failed!
    ' ~& c* f3 X4 Z* v, ^
  23. [E]Get firmware header occur CRC32(calc.crc: 7b93c5c8 != hdr.info_crc32: ffffffff) error on 'app' partition!
    " ?& u7 ?2 ]1 i' K$ r
  24. [I]Begin to execute the program on app partition.
    ( k" G1 |0 L1 o' V$ ^! ^& ~# g
  25. [I/FAL] Find user firmware at app partition 0x08040000 successfully.
    , l: f$ i' [1 J: V) y# x
  26. [I/FAL] Bootloader jumps to user firmware now.0 ?+ Q# n  i+ {8 L
  27. ) q2 x/ K# R. I% U
  28. \ | /
    8 T- b* i0 k0 W: W& n- ?2 o
  29. - RT -     Thread Operating System8 j# y# ~- ]& K' }2 M! W
  30. / | \     4.0.0 build Oct 13 2019
    1 V. q% t7 `7 F) H
  31. 2006 - 2018 Copyright by rt-thread team/ X& @+ r# r6 w! U
  32. [D/FAL] (fal_flash_init:61) Flash device |             onchip_flash | addr: 0x08000000 | len: 0x00080000 | blk_size: 0x00000800 |initialized finish.1 V' g$ C3 W( F; H
  33. [I/FAL] ==================== FAL partition table ====================( m3 n; A9 f. \
  34. [I/FAL] | name     | flash_dev    |   offset   |    length  |
    : S6 a: c2 [2 C- C  Q: `( z
  35. [I/FAL] -------------------------------------------------------------
    & J$ P$ y. |6 B
  36. [I/FAL] | bl       | onchip_flash | 0x00000000 | 0x00020000 |
    8 u% g# u! y1 p) x' F
  37. [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |# V4 d3 |8 S) O! ?  D4 m
  38. [I/FAL] | app      | onchip_flash | 0x00040000 | 0x00020000 |. T; g) l% w$ c7 ]0 G( i0 H9 X" {
  39. [I/FAL] | factory  | onchip_flash | 0x00060000 | 0x00020000 |# R5 t% w; f# c& N' ~% T: n
  40. [I/FAL] =============================================================
    + D" A. ^8 n0 x$ s7 F4 y$ Q
  41. [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.% G9 F( t$ Z9 ]) }9 e
  42. version 2.0.0% S; g. h+ Z& `. r& n
  43. msh >
    6 w7 t0 [0 }! ]( M

  44. $ X- v2 v' H" V4 L, ]& n

  45. $ ?+ e" Y4 S8 n4 w" ~

  46. # [5 A- {% |8 V, @: U* G' B5 G$ i
  47. [SFUD]Find a Winbond flash chip. Size is 16777216 bytes.
    : _  J4 V/ c3 `- o2 _  x
  48. [SFUD]spi flash device is initialize success.
    3 i( T$ ]8 B3 D- c
  49. [D/FAL] (fal_flash_init:63) Flash device |             onchip_flash | addr: 0x08000000 | len: 0x00080000 | blk_size: 0x00000800 |initialized finish.# J6 I# k  U4 Z9 h" N, g7 i
  50. [D/FAL] (fal_flash_init:63) Flash device |                nor_flash | addr: 0x00000000 | len: 0x01000000 | blk_size: 0x00001000 |initialized finish.0 a1 W9 P, d; l
  51. [I/FAL] ==================== FAL partition table ====================
    3 E8 R) ~( `# S/ r6 }' |' L
  52. [I/FAL] | name     | flash_dev    |   offset   |    length  |
    3 Z2 N3 v2 I* T: }
  53. [I/FAL] -------------------------------------------------------------3 f) C" O; j. m2 Q: b$ u
  54. [I/FAL] | app      | onchip_flash | 0x00040000 | 0x00020000 |( U* ^3 q6 g6 `& \. V/ l- k
  55. [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |
    / l" C6 ?0 e' i& Y5 r! d( u% d
  56. [I/FAL] | factory  | onchip_flash | 0x00060000 | 0x00020000 |: a& X" p8 b9 Y1 i: C1 C& D7 M
  57. [I/FAL] =============================================================
    ! S9 s( @! q$ y/ ]
  58. [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.% ~% O$ J( N/ e. D# L. \$ ]
  59. [I]RT-Thread OTA package(V0.2.1) initialize success.- o" \" |# y/ Q7 {, _6 v
  60. [I]Verify 'factory' partition(fw ver: 2.0.0, timestamp: 1570940368) success.2 x: Z7 Z) m8 t% X. h9 p- v
  61. [E]Get firmware header occur CRC32(calc.crc: 7b93c5c8 != hdr.info_crc32: ffffffff) error on 'app' partition!
    * k. P1 P5 Q* W0 u/ `) m* h
  62. [I]OTA firmware(app) upgrade startup.
    ( m- G) z( F5 D8 O
  63. [I]The partition 'app' is erasing., y+ u/ k& D9 M4 I0 p7 X
  64. [I]The partition 'app' erase success.$ @8 E' W) a8 m+ @5 k8 K/ E2 u0 q
  65. [I]OTA Write: [====================================================================================================] 100%' ~2 u! w! Y; Q
  66. [I]Verify 'app' partition(fw ver: 2.0.0, timestamp: 1570940368) success.
    2 x& u+ O6 q/ I+ u, i4 Q
  67. [I/FAL] Find user firmware at app partition 0x08040000 successfully.+ B2 D6 @; x6 e: e; ~0 p# h/ x
  68. [I/FAL] Bootloader jumps to user firmware now.! ?# C4 _2 Y% ]' U' ?% @* t1 c

  69. ; `2 O/ Q* T* `, P! g
  70. \ | /; ]0 o. s# J+ F  K1 \
  71. - RT -     Thread Operating System
    ) W. D7 k" q! l) d9 W; u
  72. / | \     4.0.0 build Oct 13 2019
    ! f' ~& ~; z- G4 N* u- m  M% i
  73. 2006 - 2018 Copyright by rt-thread team
    7 v7 e; A0 K  J, Q8 d2 E
  74. [D/FAL] (fal_flash_init:61) Flash device |             onchip_flash | addr: 0x08000000 | len: 0x00080000 | blk_size: 0x00000800 |initialized finish.
    # F# H! `0 d# L2 E! t
  75. [I/FAL] ==================== FAL partition table ====================
    2 h5 c  j* p% M, D/ A
  76. [I/FAL] | name     | flash_dev    |   offset   |    length  |
    3 L& s( R; ]; N; _% @8 ?
  77. [I/FAL] -------------------------------------------------------------
    $ `4 s  @. L0 c3 ^% b3 z* A
  78. [I/FAL] | bl       | onchip_flash | 0x00000000 | 0x00020000 |; @) D3 g9 ^$ G+ o9 b# p
  79. [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |
    . X# v0 ~: }4 P% _: |5 w* k
  80. [I/FAL] | app      | onchip_flash | 0x00040000 | 0x00020000 |% S1 _; }9 e3 t. z! i3 a5 _  ~
  81. [I/FAL] | factory  | onchip_flash | 0x00060000 | 0x00020000 |
    5 y5 t& C) j' p
  82. [I/FAL] =============================================================( A; ]- O% E0 U
  83. [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
    ! v* \5 x. w+ j6 ~1 b
  84. version 1.0.0
    7 B, w! d( K/ \9 S! `( n6 h
  85. msh >
    % n4 @0 E! ?' i  y" Q$ W
  86.   j3 @7 N9 _! k* s
复制代码

7 Q* Q0 e+ c; m————————————————7 ?9 q& v0 f, m  g+ ~% o0 `4 `+ N
版权声明:小盼你最萌哒如有侵权请联系删除0 m) `4 y5 Q( x; f; j( E

' H. i, S8 ]; v  c/ H
+ P7 P6 ^9 g- Y, q
赞 收藏 评论0 发布时间:2023-3-14 13:34

举报

0个回答

所属标签

相似技术帖

官网相关资源

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