; -------------------------------------------------------------------------------- ; @Title: Flash declaration for Texas Instruments MSP-M0 family internal flash ; @Description: ; Script arguments: ; ; DO mspm0 [PREPAREONLY] [CPU=] [DUALPORT=<0|1>] ; PREPAREONLY only declares flash but does not execute flash programming ; CPU= selects CPU derivative ; DUALPORT=<0|1> use dual port memory access, default 0 ; ECC =<0|1> Update ECC while flash programming ; Example: ; DO ~~/demo/arm/flash/mspm0 PREPAREONLY ; ; List of MSP-M0 derivatives and their configuration: ; CPU-Type Flash RamSize ; [KB] [KB] ; MSPM0C1103 8 1 ; MSPM0C1104 16 1 ; MSPM0G1105 32 16 ; MSPM0G1106 64 32 ; MSPM0G1107 128 32 ; MSPM0G1505 32 16 ; MSPM0G1506 64 32 ; MSPM0G1507 128 32 ; MSPM0G3105 32 16 ; MSPM0G3105Q1 32 16 ; MSPM0G3106 64 32 ; MSPM0G3106Q1 64 32 ; MSPM0G3107 128 32 ; MSPM0G3107Q1 128 32 ; MSPM0G3505 32 16 ; MSPM0G3505Q1 32 16 ; MSPM0G3506 64 32 ; MSPM0G3506Q1 64 32 ; MSPM0G3507 128 32 ; MSPM0G3507Q1 128 32 ; MSPM0L1105 32 4 ; MSPM0L1106 64 4 ; MSPM0L1227 128 32 ; MSPM0L1228 256 32 ; MSPM0L1303 8 2 ; MSPM0L1304 16 2 ; MSPM0L1304Q1 16 2 ; MSPM0L1305 32 4 ; MSPM0L1305Q1 32 4 ; MSPM0L1306 64 4 ; MSPM0L1306Q1 64 4 ; MSPM0L1343 8 2 ; MSPM0L1344 16 2 ; MSPM0L1345 32 4 ; MSPM0L1346 64 4 ; MSPM0L2227 128 32 ; MSPM0L2228 256 32 ; MSPS003F3 8 1 ; MSPS003F4 16 1 ; ; @Chip: MSPM0* ; @Author: STK ; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 13210 $ ; $Id: mspm0.cmm 13210 2024-03-19 13:16:49Z skrausse $ PRIVATE ¶meters ENTRY %LINE ¶meters PRIVATE ¶m_prepareonly ¶m_cpu ¶m_dualport ¶meters=STRing.UPpeR("¶meters") ¶m_prepareonly=(STRing.SCAN("¶meters","PREPAREONLY",0)!=-1) ¶m_cpu=STRing.SCANAndExtract("¶meters","CPU=","") ¶m_dualport=STRing.SCANAndExtract("¶meters","DUALPORT=","0") ¶m_ecc=STRing.SCANAndExtract("¶meters","ECC=","1") ; -------------------------------------------------------------------------------- ; Initialize and start the debugger IF !SYStem.Up() ( SYStem.RESet IF "¶m_cpu"!="" SYStem.CPU ¶m_cpu IF !CPUIS(MSPM0*) SYStem.CPU MSPM0G3105 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 ; -------------------------------------------------------------------------------- ; SUBROUTINES ; -------------------------------------------------------------------------------- ; Flash declaration depending on selected CPU FlashDeclaration: ;(param_dualport) ( PARAMETERS ¶m_dualport &mode PRIVATE &FlashSectorSize &FlashSize &RamSize &FlashBin &BufferSize IF CPUIS(MSPM0L2*) ( IF "¶m_ecc"=="0" &FlashBin="~~/demo/arm/flash/long/mspm0v2.bin" ELSE &FlashBin="~~/demo/arm/flash/long/mspm0v2ecc.bin" ) ELSE ( IF "¶m_ecc"=="0" &FlashBin="~~/demo/arm/flash/long/mspm0.bin" ELSE &FlashBin="~~/demo/arm/flash/long/mspm0ecc.bin" ) &FlashSectorSize=0x400 &RamSize=0x2000 &BufferSize=0x1000 IF CPUIS(MSPM0L???8*) ( &FlashSize=0x40000 ; 256KB &RamSize=0x8000 ; 32KB ) ELSE IF CPUIS(MSPM0????7*) ( &FlashSize=0x20000 ; 128KB &RamSize=0x8000 ; 32KB ) ELSE IF CPUIS(MSPM0G???6*) ( &FlashSize=0x10000 ; 64KB &RamSize=0x8000 ; 32KB ) ELSE IF CPUIS(MSPM0L???6*) ( &FlashSize=0x10000 ; 64KB &RamSize=0x1000 ; 4KB &BufferSize=0x800 ) ELSE IF CPUIS(MSPM0G???5*) ( &FlashSize=0x8000 ; 32KB &RamSize=0x4000 ; 16KB ) ELSE IF CPUIS(MSPM0L???5*) ( &FlashSize=0x8000 ; 32KB &RamSize=0x1000 ; 4KB &BufferSize=0x800 ) ELSE IF CPUIS(MSPM0L???4*) ( &FlashSize=0x4000 ; 16KB &RamSize=0x800 ; 2KB ) ELSE IF CPUIS(MSPM0L???3*) ( &FlashSize=0x2000 ; 8KB &RamSize=0x800 ; 2KB ) ELSE IF CPUIS(MSPM0C???4*)||CPUIS(MSPS00??4*) ( &FlashSize=0x4000 ; 16KB &RamSize=0x400 ; 1KB ) ELSE IF CPUIS(MSPM0C???3*)||CPUIS(MSPS00??3*) ( &FlashSize=0x2000 ; 8KB &RamSize=0x400 ; 1KB ) ELSE ( PRINT "Device not supported!" ENDDO ) IF &RamSize>=0x1000 &mode="TARGET" ELSE &mode="MSPM0" FLASH.Create 1. 0x00000000++(&FlashSize-1) &FlashSectorSize &mode Long /INFO "MAIN" FLASH.CreateALIAS 0x00400000++(&FlashSize-1) 0x00000000 FLASH.Create 2. 0x41C00000++0x3FF &FlashSectorSize &mode Long /INFO "NONMAIN" /CENSORSHIP 0x41c00000++0x3ff IF "&mode"=="TARGET" ( IF ("¶m_dualport"!="0")&&(&BufferSize<0x1000) ( PRINT %WARNING "Target RAM too small! Dual port mode not supported" ¶m_dualport="0" ) IF ("¶m_dualport"=="0") FLASH.TARGET 0x20000000 0x20000600 &BufferSize &FlashBin ELSE FLASH.TARGET 0x20000000 E:0x20000800 &BufferSize &FlashBin /DualPort ) RETURN )