; -------------------------------------------------------------------------------- ; @Title: Flash declaration for NXP S32K3 internal flash ; @Description: ; Script arguments: ; DO s32k3 [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/s32k3 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 S32K3xx derivatives and their configuration: ; CPU-Type PFlash DFlash UTest RamSize SectorSize ; [KB] [KB] [KB] [KB] [KB] ; -------------------------------------------------------------------------------- ; S32K310 512 64 8 112 8 ; S32K311 1024 64 8 128 8 ; S32K312 2048 128 8 192 8 ; S32K314 4096 128 8 512 8 ; S32K322 2048 128 8 256 8 ; S32K324 4096 128 8 512 8 ; S32K328 8192 128 8 1152 8 ; S32K338 8192 128 8 1152 8 ; S32K342 2048 128 8 256 8 ; S32K341 1024 128 8 256 8 ; S32K342 2048 128 8 256 8 ; S32K344 4096 128 8 512 8 ; S32K348 8192 128 8 1152 8 ; S32K358 8192 128 8 1152 8 ; S32K374 4096 128 8 512 8 ; S32K376 6144 128 8 512 8 ; S32K388 8192 128 8 1152 8 ; S32K394 4096 128 8 512 8 ; S32K396 6144 128 8 512 8 ; ; @Chip: S32K3* ; @Author: MAM ; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 13423 $ ; $Id: s32k3.cmm 13423 2024-05-08 16:33:40Z skrausse $ 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 S32K344-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="s32k3x4.bin" &DataFlashSize=0x40000 IF CPUIS(S32K3?0*) ( &CodeFlashSize=0x80000 &FlashDriver="s32k3x1.bin" ) ELSE IF CPUIS(S32K3?1*) ( &CodeFlashSize=0x100000 &FlashDriver="s32k3x1.bin" ) ELSE IF CPUIS(S32K3?2*) ( &CodeFlashSize=0x200000 &FlashDriver="s32k3x2.bin" ) ELSE IF CPUIS(S32K374*)||CPUIS(S32K394*) ( &CodeFlashSize=0x400000 &FlashDriver="s32k3ex4.bin" ) ELSE IF CPUIS(S32K3?4*) ( &CodeFlashSize=0x400000 &FlashDriver="s32k3x4.bin" ) ELSE IF CPUIS(S32K3?6*) ( &CodeFlashSize=0x600000 &FlashDriver="s32k3ex6.bin" ) ELSE IF CPUIS(S32K3?8*) ( &CodeFlashSize=0x800000 &FlashDriver="s32k3x8.bin" ) 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(S32K3?0*) FLASH.ChangeType 0x00454000--0x0047FFFF NOP ELSE IF CPUIS(S32K3?1*) FLASH.ChangeType 0x004D4000--0x004FFFFF NOP ELSE IF CPUIS(S32K3?2*) FLASH.ChangeType 0x005D4000--0x005FFFFF NOP ELSE IF CPUIS(S32K3?4*) FLASH.ChangeType 0x007D4000--0x007FFFFF NOP ELSE IF CPUIS(S32K3?6*) FLASH.ChangeType 0x009D4000--0x009FFFFF NOP ELSE IF CPUIS(S32K3?8*) FLASH.ChangeType 0x00BD4000--0x00BFFFFF NOP IF CPUIS(S32K3?1*)||CPUIS(S32K3?0*) FLASH.ChangeType 0x10010000--0x1003FFFF NOP ELSE FLASH.ChangeType 0x10020000--0x1003FFFF 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 )