在生成页面中选中了 恢复出厂固件引脚 功能后,即开启了出厂固件恢复功能。开发者可以将制作好的 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
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
- /*
k7 T+ m# O) _* K. |; U; @. c - * Copyright (c) 2006-2018, RT-Thread Development Team. W7 e/ q/ ~: a j
- *
1 t- n* C9 Y! j/ q, `) h* f - * SPDX-License-Identifier: Apache-2.08 w& a1 x ^ V
- *
: x# o9 u, G1 @0 k6 g - * Change Logs:
2 z8 Y* Y _5 w- \' l - * Date Author Notes
4 S( |6 ^/ ?1 B9 Y - * 2018-12-5 SummerGift first version
1 b. f; z) [9 a - */
' e% i: {& C! N; ^, p% Z, P- ?1 ]
' i3 T0 i1 B* e' t. I. \- #ifndef _FAL_CFG_H_
$ t' _" g4 v3 H1 O$ H3 p9 a - #define _FAL_CFG_H_
/ h+ G' w0 R3 i( ~+ B
4 ~ n6 C% {* ^$ r( \- #include <rtthread.h>8 e& f. E5 |: U9 D H
- #include <board.h>% u: Z9 {! j! C* I
; W$ z* _, R9 P- #define RT_APP_PART_ADDR 0x80400007 ~+ B1 i, \$ y) |
- 1 \# O1 n( T, O* n! [; P
- - E h, p0 ?* w/ L8 q3 L. j
- extern const struct fal_flash_dev stm32_onchip_flash;
, B6 G& f% }* d
- L, K& R% ]- n* I* [6 o3 `4 Z/ T- /* flash device table */
3 o! u v7 X1 P q! `9 D# l; H - #define FAL_FLASH_DEV_TABLE \. \% i8 V6 G% K
- { \
9 H; x9 b6 F, l2 y - &stm32_onchip_flash, \
4 c, l/ F8 `- M% e - }
# T0 B. i0 x" i! A! B - /* ====================== Partition Configuration ========================== */; N/ |2 c" k( ^9 v5 D% }# C; v" l
- #ifdef FAL_PART_HAS_TABLE_CFG
8 {3 c; d9 H) h% }0 ] - $ Z5 j) P, |7 |; a5 {
- /* partition table */4 X8 }9 `' N* q. b
- #define FAL_PART_TABLE \
; {, _# ? J* N( k8 U0 X - { \
1 F8 |2 m" [5 w8 f0 s; g7 u# g - {FAL_PART_MAGIC_WROD, "bl", "onchip_flash", 0*128* 1024 , 128 * 1024, 0}, \- o6 y# g% ~' J" a# k) V
- {FAL_PART_MAGIC_WROD, "download", "onchip_flash", 1*128* 1024 , 128 * 1024, 0}, \
$ K. \( U! x2 y/ i$ k \, p4 ? - {FAL_PART_MAGIC_WROD, "app", "onchip_flash", 2*128* 1024 , 128 * 1024, 0}, \
0 V1 c) x1 x1 v% K$ Z& l: t - {FAL_PART_MAGIC_WROD, "factory", "onchip_flash", 3*128* 1024 , 128 * 1024, 0}, \
/ G" i! e2 Z. A$ v - }( y: N2 N, k& I/ e
- #endif /* FAL_PART_HAS_TABLE_CFG */
/ j" x( a0 b9 u/ M - #endif /* _FAL_CFG_H_ */3 H: i! D' L$ A' ~6 A n
- 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- ; ************************************************************** u) V& n) S3 }. C! v E3 g$ U: Y
- ; *** Scatter-Loading Description File generated by uVision ***
+ {0 ^$ V' g' l7 k2 } Y- z- g - ; *************************************************************+ Q+ T) K H) D* T
- 7 f/ z% i. j; W! c8 c! q) h+ s9 Z
- LR_IROM1 0x08040000 0x00080000 { ; load region size_region1 y) T# j' B4 O8 y
- ER_IROM1 0x08040000 0x00080000 { ; load address = execution address
4 d6 C- K. P) m1 R' {, \ - *.o (RESET, +First)+ v2 b6 n6 Y2 ~; w+ j1 r" ]
- *(InRoot$Sections)
7 {2 r& b* l5 H' O& z - .ANY (+RO)
/ o! {: T4 r7 b- _ - } }8 g2 o2 a# q+ R
- RW_IRAM1 0x20000000 0x00010000 { ; RW data
7 n! d0 [/ C; [- K# I9 [4 G" S - .ANY (+RW +ZI)6 w% _8 q$ d- u. Y0 l
- }
- ~' t3 I l& j+ e; q - }
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
- [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
' G( L: ^/ Z" a
* Z) [7 v+ X. d5 x6 K" v恢复出厂设置的日志如下:' S7 e% v2 ~4 \' T6 H2 U
- [SFUD]Find a Winbond flash chip. Size is 16777216 bytes.
) U: C* O2 F& C- y- i9 S - [SFUD]spi flash device is initialize success. V: J' j" s4 L& R8 T
- ! ^) {, N( y" h5 s
- __ ___ __ __ __ ___
3 h3 D8 f* x& [( K. c! B - |__) | __ |__) / \ / \ |
% S; ~) C2 A( l - | \ | |__) \__/ \__/ | / F( @5 Q/ l3 q v
- 2006 - 2019 Copyright by rt-thread team: z- L7 a5 M& F, \2 d6 \3 V I
- 0.9.1 build Oct 13 20194 Q! `$ C. k$ A
- [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
- [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 }
- [I/FAL] ==================== FAL partition table ====================
2 a0 f3 O7 Z9 \ - [I/FAL] | name | flash_dev | offset | length |2 g$ j; P( i; u
- [I/FAL] -------------------------------------------------------------
* x' _' V% g* F" k9 ` - [I/FAL] | app | onchip_flash | 0x00040000 | 0x00020000 |. S+ K, J0 p0 K- D- w. E
- [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |
" J9 `5 S; q1 K( Y! P9 N - [I/FAL] | factory | onchip_flash | 0x00060000 | 0x00020000 |) L' d6 J1 F, r; J' y( p! h# K
- [I/FAL] =============================================================
) f* @% S, j" j5 ? - [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
8 A* c. }9 T$ T9 T1 R' | - [I/FAL] System initialization successful.
3 `% h' e, G0 L( L/ |3 C - [I]RT-Thread OTA package(V0.2.1) initialize success.7 e7 U7 G& q4 g' `. s. t d
- [E]Get firmware header occur CRC32(calc.crc: 7b93c5c8 != hdr.info_crc32: ffffffff) error on 'download' partition!5 G7 z1 u9 j) C' d
- [E]Get OTA download partition firmware header failed!
' ~& c* f3 X4 Z* v, ^ - [E]Get firmware header occur CRC32(calc.crc: 7b93c5c8 != hdr.info_crc32: ffffffff) error on 'app' partition!
" ?& u7 ?2 ]1 i' K$ r - [I]Begin to execute the program on app partition.
( k" G1 |0 L1 o' V$ ^! ^& ~# g - [I/FAL] Find user firmware at app partition 0x08040000 successfully.
, l: f$ i' [1 J: V) y# x - [I/FAL] Bootloader jumps to user firmware now.0 ?+ Q# n i+ {8 L
- ) q2 x/ K# R. I% U
- \ | /
8 T- b* i0 k0 W: W& n- ?2 o - - RT - Thread Operating System8 j# y# ~- ]& K' }2 M! W
- / | \ 4.0.0 build Oct 13 2019
1 V. q% t7 `7 F) H - 2006 - 2018 Copyright by rt-thread team/ X& @+ r# r6 w! U
- [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
- [I/FAL] ==================== FAL partition table ====================( m3 n; A9 f. \
- [I/FAL] | name | flash_dev | offset | length |
: S6 a: c2 [2 C- C Q: `( z - [I/FAL] -------------------------------------------------------------
& J$ P$ y. |6 B - [I/FAL] | bl | onchip_flash | 0x00000000 | 0x00020000 |
8 u% g# u! y1 p) x' F - [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |# V4 d3 |8 S) O! ? D4 m
- [I/FAL] | app | onchip_flash | 0x00040000 | 0x00020000 |. T; g) l% w$ c7 ]0 G( i0 H9 X" {
- [I/FAL] | factory | onchip_flash | 0x00060000 | 0x00020000 |# R5 t% w; f# c& N' ~% T: n
- [I/FAL] =============================================================
+ D" A. ^8 n0 x$ s7 F4 y$ Q - [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.% G9 F( t$ Z9 ]) }9 e
- version 2.0.0% S; g. h+ Z& `. r& n
- msh >
6 w7 t0 [0 }! ]( M
$ X- v2 v' H" V4 L, ]& n
$ ?+ e" Y4 S8 n4 w" ~
# [5 A- {% |8 V, @: U* G' B5 G$ i- [SFUD]Find a Winbond flash chip. Size is 16777216 bytes.
: _ J4 V/ c3 `- o2 _ x - [SFUD]spi flash device is initialize success.
3 i( T$ ]8 B3 D- c - [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
- [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
- [I/FAL] ==================== FAL partition table ====================
3 E8 R) ~( `# S/ r6 }' |' L - [I/FAL] | name | flash_dev | offset | length |
3 Z2 N3 v2 I* T: } - [I/FAL] -------------------------------------------------------------3 f) C" O; j. m2 Q: b$ u
- [I/FAL] | app | onchip_flash | 0x00040000 | 0x00020000 |( U* ^3 q6 g6 `& \. V/ l- k
- [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |
/ l" C6 ?0 e' i& Y5 r! d( u% d - [I/FAL] | factory | onchip_flash | 0x00060000 | 0x00020000 |: a& X" p8 b9 Y1 i: C1 C& D7 M
- [I/FAL] =============================================================
! S9 s( @! q$ y/ ] - [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.% ~% O$ J( N/ e. D# L. \$ ]
- [I]RT-Thread OTA package(V0.2.1) initialize success.- o" \" |# y/ Q7 {, _6 v
- [I]Verify 'factory' partition(fw ver: 2.0.0, timestamp: 1570940368) success.2 x: Z7 Z) m8 t% X. h9 p- v
- [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 - [I]OTA firmware(app) upgrade startup.
( m- G) z( F5 D8 O - [I]The partition 'app' is erasing., y+ u/ k& D9 M4 I0 p7 X
- [I]The partition 'app' erase success.$ @8 E' W) a8 m+ @5 k8 K/ E2 u0 q
- [I]OTA Write: [====================================================================================================] 100%' ~2 u! w! Y; Q
- [I]Verify 'app' partition(fw ver: 2.0.0, timestamp: 1570940368) success.
2 x& u+ O6 q/ I+ u, i4 Q - [I/FAL] Find user firmware at app partition 0x08040000 successfully.+ B2 D6 @; x6 e: e; ~0 p# h/ x
- [I/FAL] Bootloader jumps to user firmware now.! ?# C4 _2 Y% ]' U' ?% @* t1 c
; `2 O/ Q* T* `, P! g- \ | /; ]0 o. s# J+ F K1 \
- - RT - Thread Operating System
) W. D7 k" q! l) d9 W; u - / | \ 4.0.0 build Oct 13 2019
! f' ~& ~; z- G4 N* u- m M% i - 2006 - 2018 Copyright by rt-thread team
7 v7 e; A0 K J, Q8 d2 E - [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 - [I/FAL] ==================== FAL partition table ====================
2 h5 c j* p% M, D/ A - [I/FAL] | name | flash_dev | offset | length |
3 L& s( R; ]; N; _% @8 ? - [I/FAL] -------------------------------------------------------------
$ `4 s @. L0 c3 ^% b3 z* A - [I/FAL] | bl | onchip_flash | 0x00000000 | 0x00020000 |; @) D3 g9 ^$ G+ o9 b# p
- [I/FAL] | download | onchip_flash | 0x00020000 | 0x00020000 |
. X# v0 ~: }4 P% _: |5 w* k - [I/FAL] | app | onchip_flash | 0x00040000 | 0x00020000 |% S1 _; }9 e3 t. z! i3 a5 _ ~
- [I/FAL] | factory | onchip_flash | 0x00060000 | 0x00020000 |
5 y5 t& C) j' p - [I/FAL] =============================================================( A; ]- O% E0 U
- [I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
! v* \5 x. w+ j6 ~1 b - version 1.0.0
7 B, w! d( K/ \9 S! `( n6 h - msh >
% n4 @0 E! ?' i y" Q$ W - 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 |