; -------------------------------------------------------------------------------- ; @Title: Example for flash declaration of ST STM32L4xx internal flash ; @Description: ; Script arguments: ; ; DO stm32l4xx [PREPAREONLY] [CPU=] ; ; PREPAREONLY only declares flash but does not execute flash programming ; ; CPU= selects CPU derivative ; ; Example: ; ; DO ~~/demo/arm/flash/stm32l4xx CPU=STM32L476ZG PREPAREONLY ; ; List of STM32L4xx derivatives and their configuration: ; ; CPU-Type Flash size Page size SRAM size ; [Byte] [Byte] [Byte] ; -------------------------------------------------------------------------------- ; STM32L431CB 0x20000 0x800 0x10000 ; STM32L431CC 0x40000 0x800 0x10000 ; STM32L431KB 0x20000 0x800 0x10000 ; STM32L431KC 0x40000 0x800 0x10000 ; STM32L431RB 0x20000 0x800 0x10000 ; STM32L431RC 0x40000 0x800 0x10000 ; STM32L431VC 0x40000 0x800 0x10000 ; STM32L432KB 0x20000 0x800 0x10000 ; STM32L432KC 0x40000 0x800 0x10000 ; STM32L433CB 0x20000 0x800 0x10000 ; STM32L433CC 0x40000 0x800 0x10000 ; STM32L433RB 0x20000 0x800 0x10000 ; STM32L433RC 0x40000 0x800 0x10000 ; STM32L433VC 0x40000 0x800 0x10000 ; STM32L442KC 0x40000 0x800 0x10000 ; STM32L443CC 0x40000 0x800 0x10000 ; STM32L443RC 0x40000 0x800 0x10000 ; STM32L443VC 0x40000 0x800 0x10000 ; STM32L451CC 0x40000 0x800 0x20000 ; STM32L451CE 0x80000 0x800 0x20000 ; STM32L451RC 0x40000 0x800 0x20000 ; STM32L451RE 0x80000 0x800 0x20000 ; STM32L451VC 0x40000 0x800 0x20000 ; STM32L451VE 0x80000 0x800 0x20000 ; STM32L452CC 0x40000 0x800 0x20000 ; STM32L452CE 0x80000 0x800 0x20000 ; STM32L452RC 0x40000 0x800 0x20000 ; STM32L452RE 0x80000 0x800 0x20000 ; STM32L452VC 0x40000 0x800 0x20000 ; STM32L452VE 0x80000 0x800 0x20000 ; STM32L462CE 0x80000 0x800 0x20000 ; STM32L462RE 0x80000 0x800 0x20000 ; STM32L462VE 0x80000 0x800 0x20000 ; STM32L471QE 0x80000 0x800 0x20000 ; STM32L471QG 0x100000 0x800 0x20000 ; STM32L471RE 0x80000 0x800 0x20000 ; STM32L471RG 0x100000 0x800 0x20000 ; STM32L471VE 0x80000 0x800 0x20000 ; STM32L471VG 0x100000 0x800 0x20000 ; STM32L471ZE 0x80000 0x800 0x20000 ; STM32L471ZG 0x100000 0x800 0x20000 ; STM32L475RC 0x40000 0x800 0x20000 ; STM32L475RE 0x80000 0x800 0x20000 ; STM32L475RG 0x100000 0x800 0x20000 ; STM32L475VC 0x40000 0x800 0x20000 ; STM32L475VE 0x80000 0x800 0x20000 ; STM32L475VG 0x100000 0x800 0x20000 ; STM32L476JE 0x80000 0x800 0x20000 ; STM32L476JG 0x100000 0x800 0x20000 ; STM32L476ME 0x80000 0x800 0x20000 ; STM32L476MG 0x100000 0x800 0x20000 ; STM32L476QE 0x80000 0x800 0x20000 ; STM32L476QG 0x100000 0x800 0x20000 ; STM32L476RC 0x40000 0x800 0x20000 ; STM32L476RE 0x80000 0x800 0x20000 ; STM32L476RG 0x100000 0x800 0x20000 ; STM32L476VC 0x40000 0x800 0x20000 ; STM32L476VE 0x80000 0x800 0x20000 ; STM32L476VG 0x100000 0x800 0x20000 ; STM32L476ZE 0x80000 0x800 0x20000 ; STM32L476ZG 0x100000 0x800 0x20000 ; STM32L486JG 0x100000 0x800 0x20000 ; STM32L486QG 0x100000 0x800 0x20000 ; STM32L486RG 0x100000 0x800 0x20000 ; STM32L486VG 0x100000 0x800 0x20000 ; STM32L486ZG 0x100000 0x800 0x20000 ; STM32L496AE 0x80000 0x800 0x50000 ; STM32L496AG 0x100000 0x800 0x50000 ; STM32L496QE 0x80000 0x800 0x50000 ; STM32L496QG 0x100000 0x800 0x50000 ; STM32L496RE 0x80000 0x800 0x50000 ; STM32L496RG 0x100000 0x800 0x50000 ; STM32L496VE 0x80000 0x800 0x50000 ; STM32L496VG 0x100000 0x800 0x50000 ; STM32L496ZE 0x80000 0x800 0x50000 ; STM32L496ZG 0x100000 0x800 0x50000 ; STM32L4A6AG 0x100000 0x800 0x50000 ; STM32L4A6QG 0x100000 0x800 0x50000 ; STM32L4A6RG 0x100000 0x800 0x50000 ; STM32L4A6VG 0x100000 0x800 0x50000 ; STM32L4A6ZG 0x100000 0x800 0x50000 ; ; @Author: FLC ; @Chip: STM32L4* ; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 10516 $ ; $Id: stm32l4xx.cmm 10516 2022-02-02 11:39:30Z bschroefel $ PRIVATE ¶meters ENTRY %LINE ¶meters PRIVATE ¶m_prepareonly ¶m_cpu ¶m_prepareonly=(STRing.SCAN(STRing.UPpeR("¶meters"),"PREPAREONLY",0)!=-1) ¶m_cpu=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"CPU=","") ; ------------------------------------------------------------------------------ ; Setup CPU IF SYStem.MODE()<5 ( SYStem.RESet IF "¶m_cpu"!="" SYStem.CPU ¶m_cpu IF !CPUIS(STM32L4*) SYStem.CPU STM32L4* IF CABLE.TWOWIRE() SYStem.CONFIG.DEBUGPORTTYPE SWD SYStem.Option.ResBreak OFF SYStem.Up ) ; ------------------------------------------------------------------------------ ; Flash declaration FLASH.RESet GOSUB FlashDeclaration ; Flash script ends here if called with parameter PREPAREONLY IF ¶m_prepareonly ENDDO PREPAREDONE ; ------------------------------------------------------------------------------- ; Flash programming example DIALOG.YESNO "Program flash memory?" LOCAL &progflash ENTRY &progflash IF &progflash ( FLASH.ReProgram.ALL Data.LOAD.auto * FLASH.ReProgram.off ; Reset device SYStem.Down SYStem.Up ) ENDDO ; -------------------------------------------------------------------------------- ; Flash declaration depending on selected CPU FlashDeclaration: ( PRIVATE &FlashSize &FlashDualBank &FlashDriver IF CPUIS(STM32L431?B)||CPUIS(STM32L432?B)||CPUIS(STM32L433?B)||CPUIS(STM32L442?B)||CPUIS(STM32L443?B) ( &FlashSize=0x20000 &FlashDualBank=FALSE() &FlashDriver="stm32l4b.bin" ) ELSE IF CPUIS(STM32L431?C)||CPUIS(STM32L432?C)||CPUIS(STM32L433?C)||CPUIS(STM32L442?C)||CPUIS(STM32L443?C)||CPUIS(STM32L451?C)||CPUIS(STM32L452?C) ( &FlashSize=0x40000 &FlashDualBank=FALSE() &FlashDriver="stm32l4b.bin" ) ELSE IF CPUIS(STM32L451?E)||CPUIS(STM32L452?E)||CPUIS(STM32L462?E) ( &FlashSize=0x80000 &FlashDualBank=FALSE() &FlashDriver="stm32l4b.bin" ) ELSE IF CPUIS(STM32L476?C)||CPUIS(STM32L475?C) ( &FlashSize=0x40000 &FlashDualBank=TRUE() &FlashDriver="stm32l4c.bin" ) ELSE IF CPUIS(STM32L476?E)||CPUIS(STM32L475?E)||CPUIS(STM32L471?E)||CPUIS(STM32L496?E) ( &FlashSize=0x80000 &FlashDualBank=TRUE() &FlashDriver="stm32l4e.bin" ) ELSE IF CPUIS(STM32L476?G)||CPUIS(STM32L475?G)||CPUIS(STM32L486?G)||CPUIS(STM32L471?G)||CPUIS(STM32L496?G)||CPUIS(STM32L4A6?G) ( &FlashSize=0x100000 &FlashDualBank=TRUE() &FlashDriver="stm32l4g.bin" ) IF (&FlashSize==0x20000) ( FLASH.Create 1. 0x08000000--0x0801FFFF 0x800 TARGET Quad ) ELSE IF (&FlashSize==0x40000)&&(!&FlashDualBank) ( FLASH.Create 1. 0x08000000--0x0803FFFF 0x800 TARGET Quad ) ELSE IF (&FlashSize==0x40000)&&(&FlashDualBank) ( FLASH.Create 1. 0x08000000--0x0801FFFF 0x800 TARGET Quad FLASH.Create 2. 0x08020000--0x0803FFFF 0x800 TARGET Quad ) ELSE IF (&FlashSize==0x80000)&&(!&FlashDualBank) ( FLASH.Create 1. 0x08000000--0x0807FFFF 0x800 TARGET Quad ) ELSE IF (&FlashSize==0x80000)&&(&FlashDualBank) ( FLASH.Create 1. 0x08000000--0x0803FFFF 0x800 TARGET Quad FLASH.Create 2. 0x08040000--0x0807FFFF 0x800 TARGET Quad ) ELSE IF (&FlashSize==0x100000) ( FLASH.Create 1. 0x08000000--0x0807FFFF 0x800 TARGET Quad FLASH.Create 2. 0x08080000--0x080FFFFF 0x800 TARGET Quad ) ELSE ( PRINT %ERROR "FLASH size of CPU type is unknown" ENDDO ) FLASH.TARGET 0x20000000 0x20001000 0x1000 ~~/demo/arm/flash/byte/&FlashDriver RETURN )