405 lines
11 KiB
Plaintext
405 lines
11 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: Example Script for programming of ST STM32F4xx internal flash
|
|
;
|
|
; @Description:
|
|
;
|
|
; Script arguments:
|
|
;
|
|
; DO stm32f4xx [PREPAREONLY] [CPU=<cpu>] [DUALPORT=0|1]
|
|
;
|
|
; PREPAREONLY only declares flash but does not execute flash programming
|
|
;
|
|
; CPU=<cpu> selects CPU derivative <cpu>
|
|
;
|
|
; 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/stm32f4xx CPU=STM32F407ZG DUALPORT=1 PREPAREONLY
|
|
;
|
|
; List of STM32F4xx derivatives and their configuration:
|
|
;
|
|
; CPU-Type Flash size
|
|
; [kByte]
|
|
; -------------------------
|
|
; STM32F401CB 128.
|
|
; STM32F401CC 256.
|
|
; STM32F401CD 384
|
|
; STM32F401CE 512.
|
|
; STM32F401RB 128.
|
|
; STM32F401RC 256.
|
|
; STM32F401RD 128.
|
|
; STM32F401RE 512.
|
|
; STM32F401VB 128.
|
|
; STM32F401VC 256.
|
|
; STM32F401VD 384
|
|
; STM32F401VE 512.
|
|
; -------------------------
|
|
; STM32F405OE 512.
|
|
; STM32F405OG 1024.
|
|
; STM32F405RG 1024.
|
|
; STM32F405VG 1024.
|
|
; STM32F405ZG 1024.
|
|
; -------------------------
|
|
; STM32F407IE 512.
|
|
; STM32F407IG 1024.
|
|
; STM32F407VE 512.
|
|
; STM32F407VG 1024.
|
|
; STM32F407ZE 512.
|
|
; STM32F407ZG 1024.
|
|
; -------------------------
|
|
; STM32F410C8 64.
|
|
; STM32F410CB 128.
|
|
; STM32F410R8 64.
|
|
; STM32F410RB 128.
|
|
; STM32F410T8 64.
|
|
; STM32F410TB 128.
|
|
; -------------------------
|
|
; STM32F411CC 256.
|
|
; STM32F411CE 512.
|
|
; STM32F411RC 256.
|
|
; STM32F411RE 512.
|
|
; STM32F411VC 256.
|
|
; STM32F411VE 512.
|
|
; -------------------------
|
|
; STM32F412CE 512.
|
|
; STM32F412CG 1204.
|
|
; STM32F412RE 512.
|
|
; STM32F412RG 1204.
|
|
; STM32F412VE 512.
|
|
; STM32F412VG 1204.
|
|
; STM32F412ZE 512.
|
|
; STM32F412ZG 1204.
|
|
; -------------------------
|
|
; STM32F413CG 1024.
|
|
; STM32F413CH 1536.
|
|
; STM32F413MG 1024.
|
|
; STM32F413MH 1536.
|
|
; STM32F413RG 1024.
|
|
; STM32F413RH 1536.
|
|
; STM32F413VG 1024.
|
|
; STM32F413VH 1536.
|
|
; STM32F413ZG 1024.
|
|
; STM32F413ZH 1536.
|
|
; -------------------------
|
|
; STM32F415OG 1024.
|
|
; STM32F415RG 1024.
|
|
; STM32F415VG 1024.
|
|
; STM32F415ZG 1024.
|
|
; -------------------------
|
|
; STM32F417IE 512.
|
|
; STM32F417IG 1024.
|
|
; STM32F417VE 512.
|
|
; STM32F417VG 1024.
|
|
; STM32F417ZE 512.
|
|
; STM32F417ZG 1024.
|
|
; -------------------------
|
|
; STM32F423CH 1536.
|
|
; STM32F423MH 1536.
|
|
; STM32F423RH 1536.
|
|
; STM32F423VH 1536.
|
|
; STM32F423ZH 1536.
|
|
; -------------------------
|
|
; STM32F427AG 1024.
|
|
; STM32F427AI 2048.
|
|
; STM32F427IG 1024.
|
|
; STM32F427II 2048.
|
|
; STM32F427VG 1024.
|
|
; STM32F427VI 2048.
|
|
; STM32F427ZG 1024.
|
|
; STM32F427ZI 2048.
|
|
; -------------------------
|
|
; STM32F429AG 1024.
|
|
; STM32F429AI 2048.
|
|
; STM32F429BE 512.
|
|
; STM32F429BG 1024.
|
|
; STM32F429BI 2048.
|
|
; STM32F429IE 512.
|
|
; STM32F429IG 1024.
|
|
; STM32F429II 2048.
|
|
; STM32F429NE 512.
|
|
; STM32F429NG 1024.
|
|
; STM32F429NI 2048.
|
|
; STM32F429VE 512.
|
|
; STM32F429VG 1024.
|
|
; STM32F429VI 2048.
|
|
; STM32F429ZE 512.
|
|
; STM32F429ZG 1024.
|
|
; STM32F429ZI 2048.
|
|
; -------------------------
|
|
; STM32F437AI 2048.
|
|
; STM32F437IG 1024.
|
|
; STM32F437II 2048.
|
|
; STM32F437VG 1024.
|
|
; STM32F437VI 2048.
|
|
; STM32F437ZG 1024.
|
|
; STM32F437ZI 2048.
|
|
; -------------------------
|
|
; STM32F439AI 2048
|
|
; STM32F439BG 1024.
|
|
; STM32F439BI 2048.
|
|
; STM32F439IG 1024.
|
|
; STM32F439II 2048.
|
|
; STM32F439NG 1024.
|
|
; STM32F439NI 2048.
|
|
; STM32F439VG 1024.
|
|
; STM32F439VI 2048.
|
|
; STM32F439ZG 1024.
|
|
; STM32F439ZI 2048.
|
|
; -------------------------
|
|
; STM32F446MC 256.
|
|
; STM32F446ME 512.
|
|
; STM32F446RC 256.
|
|
; STM32F446RE 512.
|
|
; STM32F446VC 256.
|
|
; STM32F446VE 512.
|
|
; STM32F446ZC 256.
|
|
; STM32F446ZE 512.
|
|
; -------------------------
|
|
; STM32F469AE 512.
|
|
; STM32F469AG 1024.
|
|
; STM32F469AI 2048.
|
|
; STM32F469BE 512.
|
|
; STM32F469BG 1024.
|
|
; STM32F469BI 2048.
|
|
; STM32F469IE 512.
|
|
; STM32F469IG 1024.
|
|
; STM32F469II 2048.
|
|
; STM32F469NE 512.
|
|
; STM32F469NG 1024.
|
|
; STM32F469NI 2048.
|
|
; STM32F469VE 512.
|
|
; STM32F469VG 1024.
|
|
; STM32F469VI 2048.
|
|
; STM32F469ZE 512.
|
|
; STM32F469ZG 1024.
|
|
; STM32F469ZI 2048.
|
|
; -------------------------
|
|
; STM32F479AG 1024.
|
|
; STM32F479AI 2048.
|
|
; STM32F479BG 1024.
|
|
; STM32F479BI 2048.
|
|
; STM32F479IG 1024.
|
|
; STM32F479II 2048.
|
|
; STM32F479NG 1024.
|
|
; STM32F479NI 2048.
|
|
; STM32F479VG 1024.
|
|
; STM32F479VI 2048.
|
|
; STM32F479ZG 1024.
|
|
; STM32F479ZI 2048.
|
|
;
|
|
; 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: STM32F4*
|
|
; --------------------------------------------------------------------------------
|
|
; $Rev: 12977 $
|
|
; $Id: stm32f4xx.cmm 12977 2024-01-24 14:11:37Z amerkle $
|
|
|
|
PRIVATE ¶meters
|
|
ENTRY %LINE ¶meters
|
|
|
|
PRIVATE ¶m_prepareonly ¶m_cpu ¶m_dualport
|
|
¶m_prepareonly=(STRing.SCAN(STRing.UPpeR("¶meters"),"PREPAREONLY",0)!=-1)
|
|
¶m_cpu=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"CPU=","")
|
|
¶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(STM32F4*)
|
|
(
|
|
IF VERSION.BUILD()>=37389.
|
|
SYStem.CPU STM32F4*
|
|
ELSE
|
|
SYStem.CPU STM32F405ZG
|
|
)
|
|
|
|
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?"
|
|
PRIVATE &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:
|
|
(
|
|
PRIVATE ¶m_dualport
|
|
PARAMETERS ¶m_dualport
|
|
|
|
PRIVATE &Bank0Size &Bank1Size &FlashDriver &DB1M
|
|
&Bank1Size=0
|
|
|
|
IF CPUIS("STM32F4???8")
|
|
(
|
|
&Bank0Size=0x10000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F4???B")
|
|
(
|
|
&Bank0Size=0x20000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F4???C")
|
|
(
|
|
&Bank0Size=0x40000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F4???D")
|
|
(
|
|
&Bank0Size=0x60000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F4???E")
|
|
(
|
|
&Bank0Size=0x80000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F40??G")||CPUIS("STM32F41??G")
|
|
(
|
|
&Bank0Size=0x100000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F42??G")||CPUIS("STM32F43??G")||CPUIS("STM32F46??G")||CPUIS("STM32F47??G")
|
|
(
|
|
&DB1M=(Data.Word(SD:0x1FFFC008)&0x4000)==0x4000
|
|
IF &DB1M==TRUE()
|
|
(
|
|
&Bank0Size=0x80000
|
|
&Bank1Size=0x80000
|
|
)
|
|
ELSE
|
|
(
|
|
&Bank0Size=0x100000
|
|
)
|
|
&FlashDriver="stm32f420.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F4???H")
|
|
(
|
|
&Bank0Size=0x180000
|
|
&FlashDriver="stm32f400.bin"
|
|
)
|
|
ELSE IF CPUIS("STM32F4???I")
|
|
(
|
|
&Bank0Size=0x100000
|
|
&Bank1Size=0x100000
|
|
&FlashDriver="stm32f420.bin"
|
|
)
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "FLASH size of CPU type is unknown"
|
|
ENDDO
|
|
)
|
|
|
|
IF &Bank0Size>=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 &Bank0Size>=0x40000
|
|
(
|
|
FLASH.Create 1. 0x08020000--0x0803FFFF TARGET Byte 5.
|
|
)
|
|
IF &Bank0Size>=0x80000
|
|
(
|
|
FLASH.Create 1. 0x08040000--0x0805FFFF TARGET Byte 6.
|
|
FLASH.Create 1. 0x08060000--0x0807FFFF TARGET Byte 7.
|
|
)
|
|
IF &Bank0Size>=0x100000
|
|
(
|
|
FLASH.Create 1. 0x08080000--0x0809FFFF TARGET Byte 8.
|
|
FLASH.Create 1. 0x080A0000--0x080BFFFF TARGET Byte 9.
|
|
FLASH.Create 1. 0x080C0000--0x080DFFFF TARGET Byte 10.
|
|
FLASH.Create 1. 0x080E0000--0x080FFFFF TARGET Byte 11.
|
|
)
|
|
IF &Bank0Size>=0x180000
|
|
(
|
|
; 1.5MB devices are single flash bank devices. So they cannot overlap with a bank1 declaration.
|
|
FLASH.Create 1. 0x08100000--0x0811FFFF TARGET Byte 12.
|
|
FLASH.Create 1. 0x08120000--0x0813FFFF TARGET Byte 13.
|
|
FLASH.Create 1. 0x08140000--0x0815FFFF TARGET Byte 14.
|
|
FLASH.Create 1. 0x08160000--0x0817FFFF TARGET Byte 15.
|
|
)
|
|
IF &Bank1Size>=0x80000
|
|
(
|
|
IF (&Bank0Size==0x80000)&&(&Bank1Size==0x80000)
|
|
(
|
|
FLASH.Create 1. 0x08080000--0x0808FFFF 0x4000 TARGET Byte 12. /AutoInc ; sector 12..15
|
|
FLASH.Create 1. 0x08090000--0x0809FFFF 0x10000 TARGET Byte 16.
|
|
FLASH.Create 1. 0x080A0000--0x080FFFFF 0x20000 TARGET Byte 17. /AutoInc ; sector 17..19
|
|
)
|
|
ELSE
|
|
(
|
|
FLASH.Create 1. 0x08100000--0x0810FFFF 0x4000 TARGET Byte 12. /AutoInc ; sector 12..15
|
|
FLASH.Create 1. 0x08110000--0x0811FFFF 0x10000 TARGET Byte 16.
|
|
FLASH.Create 1. 0x08120000--0x0817FFFF 0x20000 TARGET Byte 17. /AutoInc ; sector 17..19
|
|
)
|
|
)
|
|
IF &Bank1Size>=0x100000
|
|
(
|
|
FLASH.Create 1. 0x08180000--0x081FFFFF 0x20000 TARGET Byte 20. /AutoInc ; sector 20..23
|
|
)
|
|
|
|
; 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
|
|
SILENT.Data.ComPare 0x0--0x7 0x08000000
|
|
IF !FOUND()
|
|
FLASH.CreateALIAS 0x00000000--0x001FFFFF 0x08000000
|
|
|
|
IF ¶m_dualport==0
|
|
FLASH.TARGET 0x20000000 0x20001000 0x4000 ~~/demo/arm/flash/byte/&FlashDriver
|
|
ELSE
|
|
FLASH.TARGET 0x20000000 EAHB:0x20001000 0x4000 ~~/demo/arm/flash/byte/&FlashDriver /DualPort
|
|
|
|
RETURN
|
|
)
|