; -------------------------------------------------------------------------------- ; @Title: Example Script for programming of ST STM32F2xx internal flash ; ; @Description: ; Script arguments: ; ; DO stm32f2xx [PREPAREONLY] [CPU=] [DUALPORT=0|1] ; ; PREPAREONLY only declares flash but does not execute flash programming ; ; CPU= selects CPU derivative ; ; DUALPORT default value is 0 (disabled). If DualPort mode is enabled ; flash algorithm stays running until flash programming is ; finished. Data is tranferred via dual port memory access. ; ; Example: ; ; DO ~~/demo/arm/flash/stm32f2xx CPU=STM32F207ZG DUALPORT=1 PREPAREONLY ; ; List of STM32F2xx derivatives and their configuration: ; ; CPU-Type Flash size ; [kByte] ; ------------------------- ; STM32F205RB 128. ; STM32F205RC 256. ; STM32F205RE 512. ; STM32F205RF 768. ; STM32F205RG 1024. ; STM32F205VB 128. ; STM32F205VC 256. ; STM32F205VE 512. ; STM32F205VF 768. ; STM32F205VG 1024. ; STM32F205ZC 256. ; STM32F205ZE 512. ; STM32F205ZF 768. ; STM32F205ZG 1024. ; ------------------------- ; STM32F207IC 256. ; STM32F207IE 512. ; STM32F207IF 768. ; STM32F207IG 1024. ; STM32F207VC 256. ; STM32F207VE 512. ; STM32F207VF 768. ; STM32F207VG 1024. ; STM32F207ZC 256. ; STM32F207ZE 512. ; STM32F207ZF 768. ; STM32F207ZG 1024. ; ------------------------- ; STM32F215RE 512. ; STM32F215RG 1024. ; STM32F215VE 512. ; STM32F215VG 1024. ; STM32F215ZE 512. ; STM32F215ZG 1024. ; ------------------------- ; STM32F217IE 512. ; STM32F217IG 1024. ; STM32F217VE 512. ; STM32F217VG 1024. ; STM32F217ZE 512. ; STM32F217ZG 1024. ; ; Flash base address is 0x08000000 ; SRAM base address is 0x20000000 ; ; @Author: WRD ; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only ; @Chip: STM32F2* ; -------------------------------------------------------------------------------- ; $Rev: 10516 $ ; $Id: stm32f2xx.cmm 10516 2022-02-02 11:39:30Z bschroefel $ LOCAL ¶meters ¶m_prepareonly ENTRY %LINE ¶meters ¶m_prepareonly=(STRing.SCAN(STRing.UPpeR("¶meters"),"PREPAREONLY",0)!=-1) LOCAL ¶m_cpu ¶m_cpu=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"CPU=","") LOCAL ¶m_dualport ¶m_dualport=0 IF VERSION.BUILD.BASE()>=43441. ¶m_dualport=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"DUALPORT=","0") ; -------------------------------------------------------------------------------- ; CPU setup IF SYStem.MODE()<5 ( SYStem.RESet IF "¶m_cpu"!="" SYStem.CPU ¶m_cpu IF !CPUIS(STM32F2*) ( IF VERSION.BUILD()>=37389. SYStem.CPU STM32F2* ELSE SYStem.CPU STM32F205ZG ) IF CABLE.TWOWIRE() SYStem.CONFIG.DEBUGPORTTYPE SWD SYStem.Up ) ; -------------------------------------------------------------------------------- ; Flash declaration FLASH.RESet GOSUB FlashDeclaration ¶m_dualport ; 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 /Erase Data.LOAD.auto * FLASH.ReProgram off ; Reset device SYStem.Down SYStem.Up ) ENDDO ; -------------------------------------------------------------------------------- ; Flash declaration depending on selected CPU FlashDeclaration: LOCAL &DualPort ENTRY &DualPort LOCAL &FlashSize IF CPUIS("STM32F20??B")||CPUIS("STM32F21??B") ( &FlashSize=0x20000 ) ELSE IF CPUIS("STM32F20??C")||CPUIS("STM32F21??C") ( &FlashSize=0x40000 ) ELSE IF CPUIS("STM32F20??E")||CPUIS("STM32F21??E") ( &FlashSize=0x80000 ) ELSE IF CPUIS("STM32F20??F")||CPUIS("STM32F21??F") ( &FlashSize=0xC0000 ) ELSE IF CPUIS("STM32F20??G")||CPUIS("STM32F21??G") ( &FlashSize=0x100000 ) ELSE ( PRINT %ERROR "FLASH size of CPU type is unknown" ENDDO ) IF &FlashSize>=0x20000 ( FLASH.Create 1. 0x08000000--0x08003FFF TARGET Byte 0. FLASH.Create 1. 0x08004000--0x08007FFF TARGET Byte 1. FLASH.Create 1. 0x08008000--0x0800BFFF TARGET Byte 2. FLASH.Create 1. 0x0800C000--0x0800FFFF TARGET Byte 3. FLASH.Create 1. 0x08010000--0x0801FFFF TARGET Byte 4. ) IF &FlashSize>=0x40000 ( FLASH.Create 1. 0x08020000--0x0803FFFF TARGET Byte 5. ) IF &FlashSize>=0x80000 ( FLASH.Create 1. 0x08040000--0x0805FFFF TARGET Byte 6. FLASH.Create 1. 0x08060000--0x0807FFFF TARGET Byte 7. ) IF &FlashSize>=0xC0000 ( FLASH.Create 1. 0x08080000--0x0809FFFF TARGET Byte 8. FLASH.Create 1. 0x080A0000--0x080BFFFF TARGET Byte 9. ) IF &FlashSize>=0x100000 ( FLASH.Create 1. 0x080C0000--0x080DFFFF TARGET Byte 10. FLASH.Create 1. 0x080E0000--0x080FFFFF TARGET Byte 11. ) ; For Main Flash memory boot mode flash memory is aliased to address 0x0 ; Because SYSCFG_MEMRMP:MEM_MODE[1:0] is not indicating active memory remap ; we are comparing flash reset vector against reset vector at alias address Data.ComPare 0x0--0x7 0x08000000 IF !FOUND() FLASH.CreateALIAS 0x00000000--0x000FFFFF 0x08000000 IF &DualPort==0 FLASH.TARGET 0x20000000 0x20001000 0x2000 ~~/demo/arm/flash/byte/stm32f200.bin ELSE FLASH.TARGET 0x20000000 EAHB:0x20001000 0x2000 ~~/demo/arm/flash/byte/stm32f200.bin /DualPort RETURN