@@ -55,6 +55,14 @@ macro_rules! mem {
5555 access: Some ( access( stringify!( $access) ) ) ,
5656 }
5757 } ;
58+ ( @row $name: ident $addr: literal $size: literal bytes $access: ident) => {
59+ Mem {
60+ name: stringify!( $name) ,
61+ address: $addr,
62+ size: $size,
63+ access: Some ( access( stringify!( $access) ) ) ,
64+ }
65+ } ;
5866
5967 ( $( $name: ident{ $( $row: tt) * } ) ,* ) => {
6068 & [
@@ -240,33 +248,69 @@ static MEMS: RegexMap<&[&[Mem]]> = RegexMap::new(&[
240248 ( "STM32H7A..G" , & [ mem ! ( BANK_1 { 0x08000000 512 } , BANK_2 { 0x08100000 512 } , ITCM { 0x00000000 64 } , DTCM { 0x20000000 128 } , AXISRAM { 0x24000000 1024 } , AHBSRAM { 0x30000000 128 } ) ] ) ,
241249 ( "STM32H7B..B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , ITCM { 0x00000000 64 } , DTCM { 0x20000000 128 } , AXISRAM { 0x24000000 1024 } , AHBSRAM { 0x30000000 128 } ) ] ) ,
242250 // L0
243- ( "STM32L0...3" , & [ mem ! ( BANK_1 { 0x08000000 8 } , SRAM { 0x20000000 2 } ) ] ) ,
244- ( "STM32L0...6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } ) ] ) ,
245- ( "STM32L0...B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } ) ] ) ,
246- ( "STM32L0...Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } ) ] ) ,
247- ( "STM32L0[12]..4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 2 } ) ] ) ,
248- ( "STM32L0[156]..8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } ) ] ) ,
249- ( "STM32L0[34]..4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 8 } ) ] ) ,
250- ( "STM32L0[78]..8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 20 } ) ] ) ,
251+ // L0x0
252+ ( "STM32L010.4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 2 } , EEPROM { 0x08080000 128 bytes rw } ) ] ) , // STM32L010F4, K4
253+ ( "STM32L010.6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 256 bytes rw } ) ] ) , // STM32L010C6
254+ ( "STM32L010.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 256 bytes rw } ) ] ) , // STM32L010K8, R8
255+ ( "STM32L010.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM { 0x08080000 512 bytes rw } ) ] ) , // STM32L010RB
256+ // L0x1 Category 1
257+ ( "STM32L011.3" , & [ mem ! ( BANK_1 { 0x08000000 8 } , SRAM { 0x20000000 2 } , EEPROM { 0x08080000 512 bytes rw } ) ] ) , // STM32L011D3, E3, F3, G3, K3
258+ ( "STM32L011.4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 2 } , EEPROM { 0x08080000 512 bytes rw } ) ] ) , // STM32L011D4, E4, F4, G4, K4
259+ ( "STM32L021.4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 2 } , EEPROM { 0x08080000 512 bytes rw } ) ] ) , // STM32L021D4, F4, G4, K4
260+ // L0x1 Category 2
261+ ( "STM32L031.4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 1024 bytes rw } ) ] ) , // STM32L031C4, E4, F4, G4, K4
262+ ( "STM32L031.6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 1024 bytes rw } ) ] ) , // STM32L031C6, E6, F6, G6, K6
263+ ( "STM32L041.4" , & [ mem ! ( BANK_1 { 0x08000000 16 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 1024 bytes rw } ) ] ) , // STM32L041C4
264+ ( "STM32L041.6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 1024 bytes rw } ) ] ) , // STM32L041C6, E6, F6, G6, K6
265+ // L0x1, L0x2, L0x3 Category 3
266+ ( "STM32L051.6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L051C6, K6, R6, T6
267+ ( "STM32L051.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L051C8, K8, R8, T8
268+ ( "STM32L052.6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L052C6, K6, R6, T6
269+ ( "STM32L052.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L052C8, K8, R8, T8
270+ ( "STM32L053.6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L053C6, R6
271+ ( "STM32L053.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L053C8, R8
272+ ( "STM32L062.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L062C8, K8
273+ ( "STM32L063.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 2048 bytes rw } ) ] ) , // STM32L063C8, R8
274+ // L0x1, L0x2, L0x3 Category 5 (64KB Flash, only EEPROM bank 2)
275+ ( "STM32L071.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 20 } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L071C8, K8, V8
276+ ( "STM32L072.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 20 } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L072V8
277+ ( "STM32L073.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 20 } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L073V8
278+ ( "STM32L083.8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 20 } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L083V8
279+ // L0x1, L0x2, L0x3 Category 5 (128KB and 192KB Flash, dual EEPROM banks)
280+ ( "STM32L071.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L071CB, KB, RB, VB
281+ ( "STM32L071.Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L071CZ, KZ, RZ, VZ
282+ ( "STM32L072.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L072CB, KB, RB, VB
283+ ( "STM32L072.Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L072CZ, KZ, RZ, VZ
284+ ( "STM32L073.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L073CB, RB, VB
285+ ( "STM32L073.Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L073CZ, RZ, VZ
286+ ( "STM32L081.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L081CB
287+ ( "STM32L081.Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L081CZ, KZ
288+ ( "STM32L082.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L082KB
289+ ( "STM32L082.Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L082CZ, KZ
290+ ( "STM32L083.B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L083CB, RB, VB
291+ ( "STM32L083.Z" , & [ mem ! ( BANK_1 { 0x08000000 192 } , SRAM { 0x20000000 20 } , EEPROM_BANK_1 { 0x08080000 3072 bytes rw } , EEPROM_BANK_2 { 0x08080C00 3072 bytes rw } ) ] ) , // STM32L083CZ, RZ, VZ
251292 // L1
252- ( "STM32L1...C.." , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 32 } ) ] ) ,
253- ( "STM32L1...D.." , & [ mem ! ( BANK_1 { 0x08000000 192 } , BANK_2 { 0x08030000 192 } , SRAM { 0x20000000 80 } ) ] ) ,
254- ( "STM32L1...D" , & [ mem ! ( BANK_1 { 0x08000000 192 } , BANK_2 { 0x08030000 192 } , SRAM { 0x20000000 48 } ) ] ) ,
255- ( "STM32L1...E" , & [ mem ! ( BANK_1 { 0x08000000 256 } , BANK_2 { 0x08040000 256 } , SRAM { 0x20000000 80 } ) ] ) ,
256- ( "STM32L1[56]..C" , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 32 } ) ] ) ,
257- ( "STM32L10..6.." , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 4 } ) ] ) ,
258- ( "STM32L10..6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 4 } ) ] ) ,
259- ( "STM32L10..8.." , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } ) ] ) ,
260- ( "STM32L10..8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } ) ] ) ,
261- ( "STM32L10..B.." , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 16 } ) ] ) ,
262- ( "STM32L10..B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 10 } ) ] ) ,
263- ( "STM32L10..C" , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 16 } ) ] ) ,
264- ( "STM32L15..6.." , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 16 } ) ] ) ,
265- ( "STM32L15..6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 10 } ) ] ) ,
266- ( "STM32L15..8.." , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 32 } ) ] ) ,
267- ( "STM32L15..8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 10 } ) ] ) ,
268- ( "STM32L15..B.." , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 32 } ) ] ) ,
269- ( "STM32L15..B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 16 } ) ] ) ,
293+ ( "STM32L1...C.." , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 32 } , EEPROM { 0x08080000 8192 bytes rw } ) ] ) , // Cat.3
294+ ( "STM32L1...D" , & [ mem ! ( BANK_1 { 0x08000000 192 } , BANK_2 { 0x08030000 192 } , SRAM { 0x20000000 48 } , EEPROM_BANK_1 { 0x08080000 6144 bytes rw } , EEPROM_BANK_2 { 0x08081800 6144 bytes rw } ) ] ) , // Cat.4
295+ ( "STM32L1...D.." , & [ mem ! ( BANK_1 { 0x08000000 192 } , BANK_2 { 0x08030000 192 } , SRAM { 0x20000000 80 } , EEPROM_BANK_1 { 0x08080000 8192 bytes rw } , EEPROM_BANK_2 { 0x08082000 8192 bytes rw } ) ] ) , // Cat.5/6 (e.g., STM32L151VD-X)
296+ ( "STM32L1...E" , & [ mem ! ( BANK_1 { 0x08000000 256 } , BANK_2 { 0x08040000 256 } , SRAM { 0x20000000 80 } , EEPROM_BANK_1 { 0x08080000 8192 bytes rw } , EEPROM_BANK_2 { 0x08082000 8192 bytes rw } ) ] ) , // Cat.5/6
297+ ( "STM32L10..6.." , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 4 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L100C6-A)
298+ ( "STM32L10..6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 4 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L100C6)
299+ ( "STM32L10..8.." , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L100R8-A)
300+ ( "STM32L10..8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 8 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L100R8)
301+ ( "STM32L10..B.." , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 16 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L100RB-A)
302+ ( "STM32L10..B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 10 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L100RB)
303+ ( "STM32L10..C" , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 16 } , EEPROM { 0x08080000 8192 bytes rw } ) ] ) , // Cat.3 (STM32L100RC)
304+ ( "STM32L15..6.." , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 16 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L151C6-A, etc.)
305+ ( "STM32L15..6" , & [ mem ! ( BANK_1 { 0x08000000 32 } , SRAM { 0x20000000 10 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L151C6, etc.)
306+ ( "STM32L15..8.." , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 32 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L151C8-A, etc.)
307+ ( "STM32L15..8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 10 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L151C8, etc.)
308+ ( "STM32L15..B.." , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 32 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L151CB-A, etc.)
309+ ( "STM32L15..B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 16 } , EEPROM { 0x08080000 4096 bytes rw } ) ] ) , // Cat.1/2 (STM32L151CB, etc.)
310+ ( "STM32L15..C" , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 32 } , EEPROM { 0x08080000 8192 bytes rw } ) ] ) , // Cat.3
311+ ( "STM32L16..C" , & [ mem ! ( BANK_1 { 0x08000000 256 } , SRAM { 0x20000000 32 } , EEPROM { 0x08080000 8192 bytes rw } ) ] ) , // Cat.3
312+ ( "STM32L16..D" , & [ mem ! ( BANK_1 { 0x08000000 384 } , SRAM { 0x20000000 48 } , EEPROM_BANK_1 { 0x08080000 6144 bytes rw } , EEPROM_BANK_2 { 0x08081800 6144 bytes rw } ) ] ) , // Cat.4
313+ ( "STM32L16..E" , & [ mem ! ( BANK_1 { 0x08000000 512 } , SRAM { 0x20000000 80 } , EEPROM_BANK_1 { 0x08080000 8192 bytes rw } , EEPROM_BANK_2 { 0x08082000 8192 bytes rw } ) ] ) , // Cat.5/6
270314 // L4
271315 ( "STM32L4...8" , & [ mem ! ( BANK_1 { 0x08000000 64 } , SRAM { 0x20000000 32 } , SRAM2 { 0x20008000 8 } , SRAM2_ICODE { 0x10000000 8 } ) ] ) ,
272316 ( "STM32L4[12]..B" , & [ mem ! ( BANK_1 { 0x08000000 128 } , SRAM { 0x20000000 32 } , SRAM2 { 0x20008000 8 } , SRAM2_ICODE { 0x10000000 8 } ) ] ) ,
@@ -479,6 +523,15 @@ pub fn get(chip: &str) -> Vec<Vec<Memory>> {
479523 } ) ,
480524 access : mem. access ,
481525 } ) ;
526+ } else if mem. name . starts_with ( "EEPROM" ) {
527+ res. push ( Memory {
528+ name : mem. name . to_string ( ) ,
529+ address : mem. address ,
530+ size : mem. size ,
531+ kind : memory:: Kind :: Eeprom ,
532+ settings : None ,
533+ access : mem. access ,
534+ } ) ;
482535 } else {
483536 let mut kind = memory:: Kind :: Ram ;
484537 if mem. name . contains ( "FLASH" ) || mem. name . contains ( "AXIICP" ) {
0 commit comments