ESPHome  2024.12.2
dev_table.h
Go to the documentation of this file.
1 /*
2  stm32flash - Open Source ST STM32 flash program for Arduino
3  Copyright (C) 2010 Geoffrey McRae <geoff@spacevs.com>
4  Copyright (C) 2014-2015 Antonio Borneo <borneo.antonio@gmail.com>
5 
6  This program is free software; you can redistribute it and/or
7  modify it under the terms of the GNU General Public License
8  as published by the Free Software Foundation; either version 2
9  of the License, or (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20 #pragma once
21 
22 #include "esphome/core/defines.h"
23 #ifdef USE_SHD_FIRMWARE_DATA
24 #include "stm32flash.h"
25 
26 namespace esphome {
27 namespace shelly_dimmer {
28 
29 constexpr uint32_t SZ_128 = 0x00000080;
30 constexpr uint32_t SZ_256 = 0x00000100;
31 constexpr uint32_t SZ_1K = 0x00000400;
32 constexpr uint32_t SZ_2K = 0x00000800;
33 constexpr uint32_t SZ_16K = 0x00004000;
34 constexpr uint32_t SZ_32K = 0x00008000;
35 constexpr uint32_t SZ_64K = 0x00010000;
36 constexpr uint32_t SZ_128K = 0x00020000;
37 constexpr uint32_t SZ_256K = 0x00040000;
38 
39 /*
40  * Page-size for page-by-page flash erase.
41  * Arrays are zero terminated; last non-zero value is automatically repeated
42  */
43 
44 /* fixed size pages */
45 constexpr uint32_t p_128[] = {SZ_128, 0}; // NOLINT
46 constexpr uint32_t p_256[] = {SZ_256, 0}; // NOLINT
47 constexpr uint32_t p_1k[] = {SZ_1K, 0}; // NOLINT
48 constexpr uint32_t p_2k[] = {SZ_2K, 0}; // NOLINT
49 /* F2 and F4 page size */
50 constexpr uint32_t f2f4[] = {SZ_16K, SZ_16K, SZ_16K, SZ_16K, SZ_64K, SZ_128K, 0}; // NOLINT
51 /* F4 dual bank page size */
52 constexpr uint32_t f4db[] = {SZ_16K, SZ_16K, SZ_16K, SZ_16K, SZ_64K, SZ_128K, SZ_128K, // NOLINT
54 /* F7 page size */
55 constexpr uint32_t f7[] = {SZ_32K, SZ_32K, SZ_32K, SZ_32K, SZ_128K, SZ_256K, 0}; // NOLINT
56 
57 /*
58  * Device table, corresponds to the "Bootloader device-dependant parameters"
59  * table in ST document AN2606.
60  * Note that the option bytes upper range is inclusive!
61  */
62 constexpr stm32_dev_t DEVICES[] = {
63  /* ID "name" SRAM-address-range FLASH-address-range PPS PSize
64  Option-byte-addr-range System-mem-addr-range Flags */
65  /* F0 */
66  {0x440, "STM32F030x8/F05xxx", 0x20000800, 0x20002000, 0x08000000, 0x08010000, 4, p_1k, 0x1FFFF800, 0x1FFFF80F,
67  0x1FFFEC00, 0x1FFFF800, 0},
68  {0x442, "STM32F030xC/F09xxx", 0x20001800, 0x20008000, 0x08000000, 0x08040000, 2, p_2k, 0x1FFFF800, 0x1FFFF80F,
69  0x1FFFC800, 0x1FFFF800, F_OBLL},
70  {0x444, "STM32F03xx4/6", 0x20000800, 0x20001000, 0x08000000, 0x08008000, 4, p_1k, 0x1FFFF800, 0x1FFFF80F,
71  0x1FFFEC00, 0x1FFFF800, 0},
72  {0x445, "STM32F04xxx/F070x6", 0x20001800, 0x20001800, 0x08000000, 0x08008000, 4, p_1k, 0x1FFFF800, 0x1FFFF80F,
73  0x1FFFC400, 0x1FFFF800, 0},
74  {0x448, "STM32F070xB/F071xx/F72xx", 0x20001800, 0x20004000, 0x08000000, 0x08020000, 2, p_2k, 0x1FFFF800, 0x1FFFF80F,
75  0x1FFFC800, 0x1FFFF800, 0},
76  /* F1 */
77  {0x412, "STM32F10xxx Low-density", 0x20000200, 0x20002800, 0x08000000, 0x08008000, 4, p_1k, 0x1FFFF800, 0x1FFFF80F,
78  0x1FFFF000, 0x1FFFF800, 0},
79  {0x410, "STM32F10xxx Medium-density", 0x20000200, 0x20005000, 0x08000000, 0x08020000, 4, p_1k, 0x1FFFF800,
80  0x1FFFF80F, 0x1FFFF000, 0x1FFFF800, 0},
81  {0x414, "STM32F10xxx High-density", 0x20000200, 0x20010000, 0x08000000, 0x08080000, 2, p_2k, 0x1FFFF800, 0x1FFFF80F,
82  0x1FFFF000, 0x1FFFF800, 0},
83  {0x420, "STM32F10xxx Medium-density VL", 0x20000200, 0x20002000, 0x08000000, 0x08020000, 4, p_1k, 0x1FFFF800,
84  0x1FFFF80F, 0x1FFFF000, 0x1FFFF800, 0},
85  {0x428, "STM32F10xxx High-density VL", 0x20000200, 0x20008000, 0x08000000, 0x08080000, 2, p_2k, 0x1FFFF800,
86  0x1FFFF80F, 0x1FFFF000, 0x1FFFF800, 0},
87  {0x418, "STM32F105xx/F107xx", 0x20001000, 0x20010000, 0x08000000, 0x08040000, 2, p_2k, 0x1FFFF800, 0x1FFFF80F,
88  0x1FFFB000, 0x1FFFF800, 0},
89  {0x430, "STM32F10xxx XL-density", 0x20000800, 0x20018000, 0x08000000, 0x08100000, 2, p_2k, 0x1FFFF800, 0x1FFFF80F,
90  0x1FFFE000, 0x1FFFF800, 0},
91  /* F2 */
92  {0x411, "STM32F2xxxx", 0x20002000, 0x20020000, 0x08000000, 0x08100000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F, 0x1FFF0000,
93  0x1FFF7800, 0},
94  /* F3 */
95  {0x432, "STM32F373xx/F378xx", 0x20001400, 0x20008000, 0x08000000, 0x08040000, 2, p_2k, 0x1FFFF800, 0x1FFFF80F,
96  0x1FFFD800, 0x1FFFF800, 0},
97  {0x422, "STM32F302xB(C)/F303xB(C)/F358xx", 0x20001400, 0x2000A000, 0x08000000, 0x08040000, 2, p_2k, 0x1FFFF800,
98  0x1FFFF80F, 0x1FFFD800, 0x1FFFF800, 0},
99  {0x439, "STM32F301xx/F302x4(6/8)/F318xx", 0x20001800, 0x20004000, 0x08000000, 0x08010000, 2, p_2k, 0x1FFFF800,
100  0x1FFFF80F, 0x1FFFD800, 0x1FFFF800, 0},
101  {0x438, "STM32F303x4(6/8)/F334xx/F328xx", 0x20001800, 0x20003000, 0x08000000, 0x08010000, 2, p_2k, 0x1FFFF800,
102  0x1FFFF80F, 0x1FFFD800, 0x1FFFF800, 0},
103  {0x446, "STM32F302xD(E)/F303xD(E)/F398xx", 0x20001800, 0x20010000, 0x08000000, 0x08080000, 2, p_2k, 0x1FFFF800,
104  0x1FFFF80F, 0x1FFFD800, 0x1FFFF800, 0},
105  /* F4 */
106  {0x413, "STM32F40xxx/41xxx", 0x20003000, 0x20020000, 0x08000000, 0x08100000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F,
107  0x1FFF0000, 0x1FFF7800, 0},
108  {0x419, "STM32F42xxx/43xxx", 0x20003000, 0x20030000, 0x08000000, 0x08200000, 1, f4db, 0x1FFEC000, 0x1FFFC00F,
109  0x1FFF0000, 0x1FFF7800, 0},
110  {0x423, "STM32F401xB(C)", 0x20003000, 0x20010000, 0x08000000, 0x08040000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F,
111  0x1FFF0000, 0x1FFF7800, 0},
112  {0x433, "STM32F401xD(E)", 0x20003000, 0x20018000, 0x08000000, 0x08080000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F,
113  0x1FFF0000, 0x1FFF7800, 0},
114  {0x458, "STM32F410xx", 0x20003000, 0x20008000, 0x08000000, 0x08020000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F, 0x1FFF0000,
115  0x1FFF7800, 0},
116  {0x431, "STM32F411xx", 0x20003000, 0x20020000, 0x08000000, 0x08080000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F, 0x1FFF0000,
117  0x1FFF7800, 0},
118  {0x421, "STM32F446xx", 0x20003000, 0x20020000, 0x08000000, 0x08080000, 1, f2f4, 0x1FFFC000, 0x1FFFC00F, 0x1FFF0000,
119  0x1FFF7800, 0},
120  {0x434, "STM32F469xx", 0x20003000, 0x20060000, 0x08000000, 0x08200000, 1, f4db, 0x1FFEC000, 0x1FFFC00F, 0x1FFF0000,
121  0x1FFF7800, 0},
122  /* F7 */
123  {0x449, "STM32F74xxx/75xxx", 0x20004000, 0x20050000, 0x08000000, 0x08100000, 1, f7, 0x1FFF0000, 0x1FFF001F,
124  0x1FF00000, 0x1FF0EDC0, 0},
125  /* L0 */
126  {0x425, "STM32L031xx/041xx", 0x20001000, 0x20002000, 0x08000000, 0x08008000, 32, p_128, 0x1FF80000, 0x1FF8001F,
127  0x1FF00000, 0x1FF01000, 0},
128  {0x417, "STM32L05xxx/06xxx", 0x20001000, 0x20002000, 0x08000000, 0x08010000, 32, p_128, 0x1FF80000, 0x1FF8001F,
129  0x1FF00000, 0x1FF01000, 0},
130  {0x447, "STM32L07xxx/08xxx", 0x20002000, 0x20005000, 0x08000000, 0x08030000, 32, p_128, 0x1FF80000, 0x1FF8001F,
131  0x1FF00000, 0x1FF02000, 0},
132  /* L1 */
133  {0x416, "STM32L1xxx6(8/B)", 0x20000800, 0x20004000, 0x08000000, 0x08020000, 16, p_256, 0x1FF80000, 0x1FF8001F,
134  0x1FF00000, 0x1FF01000, F_NO_ME},
135  {0x429, "STM32L1xxx6(8/B)A", 0x20001000, 0x20008000, 0x08000000, 0x08020000, 16, p_256, 0x1FF80000, 0x1FF8001F,
136  0x1FF00000, 0x1FF01000, 0},
137  {0x427, "STM32L1xxxC", 0x20001000, 0x20008000, 0x08000000, 0x08040000, 16, p_256, 0x1FF80000, 0x1FF8001F,
138  0x1FF00000, 0x1FF02000, 0},
139  {0x436, "STM32L1xxxD", 0x20001000, 0x2000C000, 0x08000000, 0x08060000, 16, p_256, 0x1FF80000, 0x1FF8009F,
140  0x1FF00000, 0x1FF02000, 0},
141  {0x437, "STM32L1xxxE", 0x20001000, 0x20014000, 0x08000000, 0x08080000, 16, p_256, 0x1FF80000, 0x1FF8009F,
142  0x1FF00000, 0x1FF02000, F_NO_ME},
143  /* L4 */
144  {0x415, "STM32L476xx/486xx", 0x20003100, 0x20018000, 0x08000000, 0x08100000, 1, p_2k, 0x1FFF7800, 0x1FFFF80F,
145  0x1FFF0000, 0x1FFF7000, 0},
146  /* These are not (yet) in AN2606: */
147  {0x641, "Medium_Density PL", 0x20000200, 0x20005000, 0x08000000, 0x08020000, 4, p_1k, 0x1FFFF800, 0x1FFFF80F,
148  0x1FFFF000, 0x1FFFF800, 0},
149  {0x9a8, "STM32W-128K", 0x20000200, 0x20002000, 0x08000000, 0x08020000, 4, p_1k, 0x08040800, 0x0804080F, 0x08040000,
150  0x08040800, 0},
151  {0x9b0, "STM32W-256K", 0x20000200, 0x20004000, 0x08000000, 0x08040000, 4, p_2k, 0x08040800, 0x0804080F, 0x08040000,
152  0x08040800, 0},
153  {0x0, "", 0x0, 0x0, 0x0, 0x0, 0x0, nullptr, 0x0, 0x0, 0x0, 0x0, 0x0},
154 };
155 
156 } // namespace shelly_dimmer
157 } // namespace esphome
158 
159 #endif // USE_SHD_FIRMWARE_DATA
constexpr uint32_t SZ_32K
Definition: dev_table.h:34
constexpr uint32_t SZ_256K
Definition: dev_table.h:37
constexpr uint32_t SZ_64K
Definition: dev_table.h:35
struct Stm32Dev { const uint16_t id stm32_dev_t
Definition: stm32flash.h:77
constexpr uint32_t p_256[]
Definition: dev_table.h:46
constexpr uint32_t f2f4[]
Definition: dev_table.h:50
constexpr uint32_t SZ_128K
Definition: dev_table.h:36
constexpr stm32_dev_t DEVICES[]
Definition: dev_table.h:62
constexpr uint32_t SZ_128
Definition: dev_table.h:29
constexpr uint32_t f4db[]
Definition: dev_table.h:52
constexpr uint32_t SZ_256
Definition: dev_table.h:30
constexpr uint32_t f7[]
Definition: dev_table.h:55
constexpr uint32_t SZ_1K
Definition: dev_table.h:31
constexpr uint32_t p_2k[]
Definition: dev_table.h:48
constexpr uint32_t p_1k[]
Definition: dev_table.h:47
constexpr uint32_t SZ_16K
Definition: dev_table.h:33
constexpr uint32_t p_128[]
Definition: dev_table.h:45
constexpr uint32_t SZ_2K
Definition: dev_table.h:32
Implementation of SPI Controller mode.
Definition: a01nyub.cpp:7