; -------------------------------------------------------------------------------- ; @Title: Flash declaration for Renesas RA6M internal flash derivativs ; @Description: ; Script arguments: ; DO ra6m [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/ra6m 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 RA6M* derivatives and their configuration: ; CPU-Type Code Flash Data Flash RamSize ; [KB] [KB] [KB] ; -------------------------------------------------------------------------------- ; R7FA6M1AD* 512 8 256 ; R7FA6M2AD* 512 32 384 ; R7FA6M2AF* 1024 32 384 ; R7FA6M3AF* 1024 64 640 ; R7FA6M3AH* 2048 64 640 ; R7FA6M4AD* 512 8 256 ; R7FA6M4AE* 768 8 256 ; R7FA6M4AF* 1024 8 256 ; R7FA6M5AH* 2048 8 512 ; R7FA6M5AG* 1536 8 512 ; R7FA6M5BH* 2048 8 512 ; R7FA6M5BG* 1536 8 512 ; R7FA6M5BF* 1024 8 512 ; ; @Chip: R7FA6M* ; @Author: NEZ ; @Copyright: (C) 1989-2023 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 12546 $ ; $Id: ra6m.cmm 12546 2023-09-28 11:26:10Z 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(R7FA6M*)) SYStem.CPU R7FA6M* 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 &DataSectorSize ; Check for part numbering register (PNRn) via flash root table, FMIFRT. ;RA6M1 RA6M2 RA6M3 IF (CPUIS(R7FA6M1*)||CPUIS(R7FA6M2*)||CPUIS(R7FA6M3*)) ( &PNRBank=Data.Long(ASD:0x407FB19C)+0x24 &PNReport=STRing.TRIM(Data.STRingN(ASD:&PNRBank,0x10)) IF CPU()!="&PNReport" ( PRINT %WARNING "Chip selected (" CPU() ") does not match self-reported ID: &PNReport" ) ) ;RA6M4 RA6M5 ELSE IF (CPUIS(R7FA6M4*)||CPUIS(R7FA6M5*)) ( &PNReport=Data.STRingN(ASD:0x010080F0,0xD) IF CPU()!="&PNReport" ( PRINT %WARNING "Chip selected (" CPU() ") does not match self-reported ID: &PNReport" ) ) ELSE PRINT "PNR calculation is not done" ; Assign parameters based on CPU assignment IF CPUIS(R7FA6M1*)||CPUIS(R7FA6M2*)||CPUIS(R7FA6M3*) ( &SRAMAddress=0x1FFE0000 ;SRAMHS &FlashDriver="rv40f.bin" ) ELSE IF CPUIS(R7FA6M4*) ( &SRAMAddress=0x20000000 ;SRAM0 &FlashDriver="ra6m4.bin" ) ELSE IF CPUIS(R7FA6M5*) ( &SRAMAddress=0x20000000 ;SRAM0 &FlashDriver="ra6m5.bin" ) ELSE ( PRINT %ERROR "CPU type is not supported by the script" ENDDO ) ; Determine Code FLASH size IF CPUIS(R7FA6M?AD*) &CodeFlashSize=0x80000 ELSE IF CPUIS(R7FA6M??F*) &CodeFlashSize=0x100000 ELSE IF (CPUIS(R7FA6M?AH*)||CPUIS(R7FA6M5BH*)) &CodeFlashSize=0x200000 ELSE IF CPUIS(R7FA6M?AE*) &CodeFlashSize=0xC0000 ELSE IF CPUIS(R7FA6M5?G*) &CodeFlashSize=0x180000 ELSE ( PRINT %ERROR "Code FLASH size of CPU type is not supported by the script" ENDDO ) ; Determine Data FLASH size IF CPUIS(R7FA6M1*) &DataFlashSize=0x2000 ELSE IF CPUIS(R7FA6M2*) &DataFlashSize=0x8000 ELSE IF CPUIS(R7FA6M3*) &DataFlashSize=0x10000 ELSE IF (CPUIS(R7FA6M4*)||CPUIS(R7FA6M5*)) &DataFlashSize=0x2000 ELSE ( PRINT %ERROR "Data FLASH size of CPU type is not supported by the script" ENDDO ) &CodeSectorSize1=0x2000 &CodeSectorSize2=0x8000 &DataSectorSize=0x40 IF CPUIS(R7FA6M4*)||CPUIS(R7FA6M5*) ( ;Code FLASH Memory FLASH.Create 1. 0x00000000--0x0000FFFF &CodeSectorSize1 TARGET Long FLASH.Create 1. 0x00010000--(&CodeFlashSize-1) &CodeSectorSize2 TARGET Long ;Configuration setting area FLASH.Create 2. 0x0100A100--0x0100A103 NOP Long /INFO "OFS0" FLASH.Create 2. 0x0100A110--0x0100A113 NOP Long /INFO "DUALSEL" FLASH.Create 2. 0x0100A134--0x0100A137 NOP Long /INFO "SAS" FLASH.Create 2. 0x0100A180--0x0100A183 NOP Long /INFO "OFS1" FLASH.Create 2. 0x0100A190--0x0100A193 NOP Long /INFO "BANKSEL" FLASH.Create 2. 0x0100A1C0--0x0100A1CB NOP Long /INFO "BPS" FLASH.Create 2. 0x0100A1E0--0x0100A1EB NOP Long /INFO "PBPS" FLASH.Create 2. 0x0100A200--0x0100A203 NOP Long /INFO "OFS1_SEC" FLASH.Create 2. 0x0100A210--0x0100A213 NOP Long /INFO "BANKSEL_SEC" FLASH.Create 2. 0x0100A240--0x0100A24B NOP Long /INFO "BPS_SEC" FLASH.Create 2. 0x0100A260--0x0100A26B NOP Long /INFO "PBPS_SEC" FLASH.Create 2. 0x0100A280--0x0100A283 NOP Long /INFO "OFS1_SEL" FLASH.Create 2. 0x0100A290--0x0100A293 NOP Long /INFO "BANKSEL_SEL" FLASH.Create 2. 0x0100A2C0--0x0100A2CB NOP Long /INFO "BPS_SEL" ;Data FLASH Memory FLASH.Create 3. 0x08000000++(&DataFlashSize-1) &DataSectorSize TARGET Long ) ELSE ;RA6M1 RA6M2 RA6M3 ( ;Code FLASH Memory FLASH.Create 1. 0x00000000--0x0000FFFF &CodeSectorSize1 TARGET Long FLASH.Create 1. 0x00010000--(&CodeFlashSize-1) &CodeSectorSize2 TARGET Long ;Configuration setting area FLASH.Create 2. 0x0100A150--0x0100A15C NOP Long /INFO "OSIS" FLASH.Create 2. 0x0100A164--0x0100A167 NOP Long /INFO "AWS" ;Data FLASH Memory FLASH.Create 3. 0x40100000++(&DataFlashSize-1) &DataSectorSize TARGET Long ) 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 )