; -------------------------------------------------------------------------------- ; @Title: Flash declaration for Renesas RA4 internal flash derivativs ; @Description: ; Script arguments: ; DO ra4 [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/ra4 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 RA4* derivatives and their configuration: ; CPU-Type Code Flash Data Flash RamSize ; [KB] [KB] [KB] ; -------------------------------------------------------------------------------- ; R7FA4M1AB* 256 8 32 ; R7FA4M2AB* 256 8 128 ; R7FA4M2AC* 384 8 128 ; R7FA4M2AD* 512 8 128 ; R7FA4M3AD* 512 8 128 ; R7FA4M3AE* 768 8 128 ; R7FA4M3AF* 1024 8 128 ; R7FA4W1AD* 512 8 96 ; R7FA4E10B* 256 8 128 ; R7FA4E10D* 512 8 128 ; ; @Chip: R7FA4* ; @Author: NEZ ; @Copyright: (C) 1989-2023 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 11818 $ ; $Id: ra4.cmm 11818 2023-02-08 09:46:44Z nzouari $ 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=","1") ; -------------------------------------------------------------------------------- ; Initialize and start the debugger IF !SYStem.Up() ( SYStem.RESet IF "¶m_cpu"!="" SYStem.CPU ¶m_cpu IF (!CPUIS(R7FA4*)) SYStem.CPU R7FA4* SYStem.MemAccess DAP IF CABLE.TWOWIRE() SYStem.CONFIG.DEBUGPORTTYPE SWD ELSE SYStem.CONFIG.DEBUGPORTTYPE JTAG 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 ; ; Please do NOT modify the TRACE32 flash declaration. ; ; Modifications can result in unpredictable behavior. ; Please contact support@lauterbach.com for any changes. FlashDeclaration: ;(param_dualport) ( PARAMETERS ¶m_dualport PRIVATE &PNRBank &PNReport &SRAMAddress &FlashDriver &CodeFlashSize &DataFlashSize &CodeSectorSize1 &CodeSectorSize2 &CodeSectorSize3 &DataSectorSize1 &DataSectorSize2 ; Check for part numbering register (PNRn) via flash root table, FMIFRT. IF CPUIS(R7FA4M2*)||CPUIS(R7FA4M3*)||CPUIS(R7FA4E1*) ( &PNRBank=0x010080F0 &PNReport=STRing.TRIM(Data.STRingN(ASD:&PNRBank,0x10)) IF CPU()!="&PNReport" ( PRINT %WARNING "Chip selected (" CPU() ") does not match self-reported ID: &PNReport" ) ) &CodeSectorSize1=0x800 ;2KB sectors &CodeSectorSize2=0x2000 ;8KB sectors &CodeSectorSize3=0x8000 ;32KB sectors &DataSectorSize1=0x400 ;1KB sectors &DataSectorSize2=0x40 ;64B sectors &SRAMAddress=0x20000000 IF CPUIS(R7FA4M1*)||CPUIS(R7FA4W1*) &FlashDriver="mf3.bin" ELSE &FlashDriver="ra4m3.bin" ; Determine Data FLASH size &DataFlashSize=0x2000 ; Determine Code FLASH size IF CPUIS(R7FA4M1AB*)||CPUIS(R7FA4M2AB*)||CPUIS(R7FA4E10B*) &CodeFlashSize=0x40000 ELSE IF CPUIS(R7FA4M2AD*)||CPUIS(R7FA4M3AD*)||CPUIS(R7FA4W1AD*)||CPUIS(R7FA4E10D*) &CodeFlashSize=0x80000 ELSE IF CPUIS(R7FA4M2AC*) &CodeFlashSize=0x60000 ELSE IF CPUIS(R7FA4M3AE*) &CodeFlashSize=0xC0000 ELSE IF CPUIS(R7FA4M3AF*) &CodeFlashSize=0x100000 ELSE ( PRINT %ERROR "Code FLASH size of CPU type is not supported by the script" ENDDO ) ;Code FLASH Memory IF CPUIS(R7FA4M1*)||CPUIS(R7FA4W1*) ( ; Location of the option setting memory inside the program flash is protected FLASH.Create 1. 0x00000000--(&CodeFlashSize-1) &CodeSectorSize1 TARGET Long /CENSORSHIP 0x0400--0x043B ) ELSE ( FLASH.Create 1. 0x00000000--0x0000FFFF &CodeSectorSize2 TARGET Long FLASH.Create 1. 0x00010000--(&CodeFlashSize-1) &CodeSectorSize3 TARGET Long ) ;Data FLASH Memory IF CPUIS(R7FA4M1*)||CPUIS(R7FA4W1*) FLASH.Create 3. 0x40100000++(&DataFlashSize-1) &DataSectorSize1 TARGET Long ELSE FLASH.Create 3. 0x08000000++(&DataFlashSize-1) &DataSectorSize2 TARGET Long ;Configuration setting area IF CPUIS(R7FA4M1*)||CPUIS(R7FA4W1*) ( FLASH.Create 2. 0x01010008--0x0101000B NOP Long /INFO "AWSC" FLASH.Create 2. 0x01010010--0x01010013 NOP Long /INFO "AWS" FLASH.Create 2. 0x01010018--0x01010033 NOP Long /INFO "OSIS" ) ELSE IF CPUIS(R7FA4M2*)||CPUIS(R7FA4E1*) ( FLASH.Create 2. 0x0100A100++0x3 NOP Long /INFO "OFS0 (sec)" FLASH.Create 2. 0x0100A134++0x3 NOP Long /INFO "SAS (sec)" FLASH.Create 2. 0x0100A180++0x3 NOP Long /INFO "OFS1" FLASH.Create 2. 0x0100A1C0++0x3 NOP Long /INFO "BPS" FLASH.Create 2. 0x0100A1E0++0x3 NOP Long /INFO "PermanentBPS" FLASH.Create 2. 0x0100A200++0x3 NOP Long /INFO "OFS1_SEC" FLASH.Create 2. 0x0100A240++0x3 NOP Long /INFO "BPS_SEC" FLASH.Create 2. 0x0100A260++0x3 NOP Long /INFO "PermanentBPS_SEC" FLASH.Create 2. 0x0100A280++0x3 NOP Long /INFO "OFS1_SEL (sec)" FLASH.Create 2. 0x0100A2C0++0x3 NOP Long /INFO "BPS_SEL (sec)" ) ELSE IF CPUIS(R7FA4M3*) ( FLASH.Create 2. 0x0100A100++0x3 NOP Long /INFO "OFS0 (sec)" FLASH.Create 2. 0x0100A134++0x3 NOP Long /INFO "SAS (sec)" FLASH.Create 2. 0x0100A180++0x3 NOP Long /INFO "OFS1" FLASH.Create 2. 0x0100A190++0x3 NOP Long /INFO "BANKSEL" FLASH.Create 2. 0x0100A1C0++0x3 NOP Long /INFO "BPS" FLASH.Create 2. 0x0100A1E0++0x3 NOP Long /INFO "PermanentBPS" FLASH.Create 2. 0x0100A200++0x3 NOP Long /INFO "OFS1_SEC" FLASH.Create 2. 0x0100A210++0x3 NOP Long /INFO "BANKSEL_SEC" FLASH.Create 2. 0x0100A240++0x3 NOP Long /INFO "BPS_SEC" FLASH.Create 2. 0x0100A260++0x3 NOP Long /INFO "PermanentBPS_SEC" FLASH.Create 2. 0x0100A280++0x3 NOP Long /INFO "OFS1_SEL (sec)" FLASH.Create 2. 0x0100A290++0x3 NOP Long /INFO "BANKSEL_SEL (sec)" FLASH.Create 2. 0x0100A2C0++0x3 NOP Long /INFO "BPS_SEL (sec)" ) ; To enable writing config setting area, uncomment the following line: ;FLASH.CHANGEtype 2. TARGET IF (("¶m_dualport"!="1")||SYStem.ACCESS.DENIED()) FLASH.TARGET &SRAMAddress &SRAMAddress+0x1000 0x1000 ~~/demo/arm/flash/long/&FlashDriver ELSE FLASH.TARGET &SRAMAddress E:&SRAMAddress+0x1000 0x1000 ~~/demo/arm/flash/long/&FlashDriver /DualPort RETURN )