Skip to content

Commit a7dbd68

Browse files
committed
Add dual bank information for the G4
1 parent d8d67d7 commit a7dbd68

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

stm32-data-gen/src/chips.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -808,14 +808,14 @@ fn process_chip(
808808
) -> Result<(), anyhow::Error> {
809809
let chip = chips.get(chip_name).unwrap();
810810
let docs = docs.documents_for(chip_name);
811-
let chip = stm32_data_serde::Chip {
811+
let mut chip = stm32_data_serde::Chip {
812812
name: chip_name.to_string(),
813813
family: group.family.clone().unwrap(),
814814
line: group.line.clone().unwrap(),
815815
die: group.die.clone().unwrap(),
816816
device_id: u16::from_str_radix(&group.die.as_ref().unwrap()[3..], 16).unwrap(),
817817
packages: chip.packages.clone(),
818-
memory: memory::get(chip_name),
818+
memory: memory::get(chip_name, false).unwrap(),
819819
docs,
820820
cores: cores.to_vec(),
821821
};
@@ -824,6 +824,14 @@ fn process_chip(
824824

825825
let dump = serde_json::to_string_pretty(&chip)?;
826826
std::fs::write(format!("build/data/chips/{chip_name}.json"), dump)?;
827+
828+
if let Some(dbank_memory) = memory::get(chip_name, true) {
829+
chip.memory = dbank_memory;
830+
crate::check::check(&chip);
831+
832+
let dump = serde_json::to_string_pretty(&chip)?;
833+
std::fs::write(format!("build/data/chips/{chip_name}_dual-bank.json"), dump)?;
834+
}
827835
Ok(())
828836
}
829837

stm32-data-gen/src/memory.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ static MEMS: RegexMap<&[Mem]> = RegexMap::new(&[
185185
("STM32G4[34]..B", mem!(BANK_1 { 0x08000000 128 }, CCMRAM_ICODE { 0x10000000 10 }, SRAM1 { 0x20000000 16 }, SRAM2 { 0x20004000 6 }, CCMRAM_DCODE { 0x20005800 10 })),
186186
("STM32G49..C", mem!(BANK_1 { 0x08000000 256 }, CCMRAM_ICODE { 0x10000000 16 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 16 })),
187187
("STM32G4[9A]..E", mem!(BANK_1 { 0x08000000 512 }, CCMRAM_ICODE { 0x10000000 16 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 16 })),
188+
("dual-bank_STM32G47..B", mem!(BANK_1 { 0x08000000 64 }, BANK_2 { 0x08040000 64 }, CCMRAM_ICODE { 0x10000000 32 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 32 })),
189+
("dual-bank_STM32G47..C", mem!(BANK_1 { 0x08000000 128 }, BANK_2 { 0x08040000 128 }, CCMRAM_ICODE { 0x10000000 32 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 32 })),
190+
("dual-bank_STM32G4[78]..E", mem!(BANK_1 { 0x08000000 256 }, BANK_2 { 0x08040000 256 }, CCMRAM_ICODE { 0x10000000 32 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 32 })),
188191
("STM32G47..B", mem!(BANK_1 { 0x08000000 128 }, CCMRAM_ICODE { 0x10000000 32 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 32 })),
189192
("STM32G47..C", mem!(BANK_1 { 0x08000000 256 }, CCMRAM_ICODE { 0x10000000 32 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 32 })),
190193
("STM32G4[78]..E", mem!(BANK_1 { 0x08000000 512 }, CCMRAM_ICODE { 0x10000000 32 }, SRAM1 { 0x20000000 80 }, SRAM2 { 0x20014000 16 }, CCMRAM_DCODE { 0x20018000 32 })),
@@ -322,6 +325,7 @@ static FLASH_INFO: RegexMap<FlashInfo> = RegexMap::new(&[
322325
("STM32F7[4567].*", FlashInfo{ erase_value: 0xFF, write_size: 16, erase_size: &[( 32*1024, 4), (128*1024, 1), ( 256*1024, 0)] }),
323326
("STM32F7.*", FlashInfo{ erase_value: 0xFF, write_size: 16, erase_size: &[( 16*1024, 4), (64*1024, 1), ( 128*1024, 0)] }),
324327
("STM32G0.*", FlashInfo{ erase_value: 0xFF, write_size: 8, erase_size: &[( 2*1024, 0)] }),
328+
("dual-bank_STM32G4[78].*", FlashInfo{ erase_value: 0xFF, write_size: 8, erase_size: &[( 2*1024, 0)] }),
325329
("STM32G4[78].*", FlashInfo{ erase_value: 0xFF, write_size: 8, erase_size: &[( 4*1024, 0)] }),
326330
("STM32G4.*", FlashInfo{ erase_value: 0xFF, write_size: 8, erase_size: &[( 2*1024, 0)] }),
327331
("STM32H5.*", FlashInfo{ erase_value: 0xFF, write_size: 16, erase_size: &[( 8*1024, 0)] }),
@@ -342,9 +346,9 @@ static FLASH_INFO: RegexMap<FlashInfo> = RegexMap::new(&[
342346
("STM32.*", FlashInfo{ erase_value: 0xFF, write_size: 8, erase_size: &[( 2*1024, 0)] }),
343347
]);
344348

345-
pub fn get(chip: &str) -> Vec<Memory> {
346-
let mems = *MEMS.must_get(chip);
347-
let flash = FLASH_INFO.must_get(chip);
349+
pub fn get(chip: &str, dual_bank_variant: bool) -> Option<Vec<Memory>> {
350+
let mems = *MEMS.get(&format!("{}{chip}", if dual_bank_variant { "dual-bank_" } else { "" }))?;
351+
let flash = FLASH_INFO.get(&format!("{}{chip}", if dual_bank_variant { "dual-bank_" } else { "" }))?;
348352

349353
let mut res = Vec::new();
350354

@@ -421,5 +425,5 @@ pub fn get(chip: &str) -> Vec<Memory> {
421425

422426
res.sort_by_key(|m| (m.address, m.name.clone()));
423427

424-
res
428+
Some(res)
425429
}

0 commit comments

Comments
 (0)