; -------------------------------------------------------------------------------- ; @Title: Flash declaration for NXP S32M27 internal flash ; @Description: ; Script arguments: ; DO s32m27 [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 1 ; Example: ; DO ~~/demo/arm/flash/s32m27 PREPAREONLY ; Note: ; This file must NOT be modified. ; This file is intended to stay within TRACE32 installation. ; Usage examples are available in the ~~/demo/arm/hardware/... subdirectories. ; ; List of S32M27x derivatives and their configuration: ; CPU-Type PFlash DFlash UTest RamSize SectorSize ; [KB] [KB] [KB] [KB] [KB] ; -------------------------------------------------------------------------------- ; S32M274 512 64 8 112 8 ; S32M276 1024 64 8 128 8 ; ; @Chip: S32M27* ; @Author: STK ; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 12744 $ ; $Id: s32m27.cmm 12744 2023-11-17 08:31:16Z mschaeffner $ PRIVATE ¶meters ENTRY %LINE ¶meters PRIVATE ¶m_prepareonly ¶m_cpu ¶meters=STRing.UPpeR("¶meters") ¶m_prepareonly=(STRing.SCAN("¶meters","PREPAREONLY",0)!=-1) ¶m_cpu=STRing.SCANAndExtract("¶meters","CPU=","") ; -------------------------------------------------------------------------------- ; Initialize and start the debugger IF !SYStem.Up() ( SYStem.RESet IF "¶m_cpu"!="" ( SYStem.CPU ¶m_cpu IF CORE.NUMBER()>1. CORE.ASSIGN 1. ) ELSE SYStem.CPU S32M276-M7 IF CABLE.TWOWIRE() SYStem.CONFIG DEBUGPORTTYPE SWD ELSE SYStem.CONFIG DEBUGPORTTYPE JTAG Trace.DISable SYStem.Up GOSUB InitSRAM ) ; -------------------------------------------------------------------------------- ; 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: ( PARAMETERS ¶m_dualport PRIVATE &FlashDriver &CodeFlashSize &DataFlashSize &FlashDriver="s32k3x1.bin" &DataFlashSize=0x10000 IF CPUIS(S32M2?4*) ( &CodeFlashSize=0x80000 ) ELSE IF CPUIS(S32M2?6*) ( &CodeFlashSize=0x100000 ) ELSE ( PRINT %ERROR "CFLASH size of CPU type is not supported by the script" ENDDO ) &CodeFlashSize=&CodeFlashSize-0xc000 // Reduce code flash size by Secure BAF code area FLASH.Create 1. 0x00400000++(&CodeFlashSize-1) 0x2000 TARGET long FLASH.Create 2. 0x10000000++(&DataFlashSize-1) 0x2000 TARGET long FLASH.Create 3. 0x1B000000++0x1FFF 0x2000 TARGET long /OTP /INFO "UTEST sector" IF (("¶m_dualport"!="1")||SYStem.ACCESS.DENIED()) FLASH.TARGET 0x20400000 0x20402000 0x1000 ~~/demo/arm/flash/long/&FlashDriver ELSE FLASH.TARGET E:0x20400000 E:0x20402000 0x1000 ~~/demo/arm/flash/long/&FlashDriver /DualPort ; Disable following address ranges for all slave cores IF !CPUIS(*HSE) ( IF CPUIS(S32M2?4*) ( ;TODO: Check HSE reserved area for 512KB devices. ;FLASH.ChangeType 0x004D4000--0x004FFFFF NOP ) ELSE IF CPUIS(S32M2?6*) ( FLASH.ChangeType 0x004D4000--0x004FFFFF NOP ) ) RETURN ) InitSRAM: ( ; Enable DMA Data.set ASD:0x402DC330 %Long 0yXXXXxxxxXXXXxxxxXXXXxxxxXXX11xxx ; Pogram partition 1 COFB bit 3 and 4 Data.set ASD:0x402DC304 %Long 0x1 ; Program Partition Update Data.Set ASD:0x402DC000 %Long 0x00005AF0 ; MC_ME.MC_ME_CTL_KEY.R Data.Set ASD:0x402DC000 %Long 0x0000A50F ; MC_ME.MC_ME_CTL_KEY.R WAIT (Data.Long(ASD:0x402DC304)&0x00000001)==0x00000000 ;DMA SRAM Init Data.Set SD:0x40210020 %LE %LONG 0x402AC300 ; SADDR Data.Set SD:0x40210030 %LE %LONG 0x20400000 ; DADDR Data.Set SD:0x40210024 %LE %LONG 0x03030000 ; SSIZE 3, DSIZE 3, SOFF 0 Data.Set SD:0x40210028 %LE %LONG 0x00008000 ; Nbytes (32KB) according to the S32K311 Data.Set SD:0x4021002C %LE %LONG 0x00000000 ; SLAST Data.Set SD:0x40210034 %LE %LONG 0x00080008 ; CITER 8, DOFF 8 Data.Set SD:0x40210038 %LE %LONG 0xFFF40000 ; DLASTSGA = -NBYTES Data.Set SD:0x4021003C %LE %LONG 0x00000001 ; Start WAIT (Data.Long(ASD:0x40210000)&0x80000000)==0x00000000 ; Wait for EDMA.CSR[ACTIVE]=0 Data.Set SD:0x40210000 %LE %LONG 0x40000000 RETURN )