Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/flash/rcarv4h-cr52-spi.cmm
2025-10-14 09:52:32 +09:00

175 lines
5.7 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: R-CarV4H for R8A779G-CR52 on WhiteHawk QSPI Flash script
; @Description:
; SPI FLASH Program script by the core (CR52) for the Evaluation
; The S25FS512SAGMFV01(U6) is on the SPI Multi I/O Bus controller (RPC-IF)
;
; Prerequisites:
; * Cortex-R52 boot
; MD6 = 1 (SW1[1] = OFF)
; MD7 = 1 (SW1[2] = OFF)
; * QSPI boot mode (Serial flash ROM boot at single read 40 MHz using DMA)
; MD4 = 0 (SW1[5] = ON)
; MD3 = 1 (SW1[6] = OFF)
; MD2 = 0 (SW1[7] = ON)
; MD1 = 0 (SW1[8] = ON)
;
; * activate S25FS512 flash
; SW13 = 1: pin SPI-FLASH (S25FS512) // 3: EX-SPI
; SW57 = Neutral // disconnect , 1: HyperFlash(U26) 3:all cases by SW13
;
; SRAM: 0xE6328000
; SPI Multi I/O Bus(controller) Base: 0xEE200000
;
; @Keywords: ARM, Cortex-CR52, S25FS512 Spansion Flash SPI RCarV4H
; @Props: Confidential
; @Author: JIM
; @Board: WhiteHawk
; @Chip: R8A779G
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: rcarv4h-cr52-spi.cmm 11019 2022-06-20 08:22:22Z bschroefel $
PRIVATE &parameters
ENTRY %LINE &parameters
PRIVATE &param_prepareonly
&parameters=STRing.UPpeR("&parameters")
&param_prepareonly=(STRing.SCAN("&parameters","PREPAREONLY",0)!=-1)
&SPI_BASE=0xEE200000
; --------------------------------------------------------------------------------
; Initialize and start the debugger
RESet
SYStem.RESet
SYStem.CPU R8A779G-CR52
SYStem.MemAccess DAP
SYStem.JtagClock 10MHz
CORE.ASSIGN 1.
SYStem.Option.ResBreak OFF
Trace.Disable
SYStem.Up
; --------------------------------------------------------------------------------
; DRCR.RBE=0 (RPC Read cache = OFF) for flash region access
Data.Set AD:0xEE20000C %LE %Long 0yXXXXxxxxXXXXxxxxXXXXxxx0XXXXxxxx
; ------------------------------------------------------------------------------
; Flash Controller Power & Clock Enable
;Data.Set A:0xE6150000 %LE %Long ~0x1F ; CPGWPR , write inverse data value
;Data.Set A:0xE6150874 %LE %Long 0x1F ; RPCCKCR, RPC Clock Frequency Control Register [4:0] == Division ratio
; ------------------------------------------------------------------------------
; Flash Pin Mux Configuration
; ------------------------------------------------------------------------------
; Flash Controller Init
Data.Set A:&SPI_BASE %LE %Long 0x01fff300 ;enable RPC AHB read
Data.Set A:&SPI_BASE+0x010 %LE %Long (0x13<<16.) ;DRCMR, read 4byte address mode command
Data.Set A:&SPI_BASE+0x01C %LE %Long 0x4F00 ;DRENR, 32bit address mode, (24bit==0x4700)
Data.Set A:&SPI_BASE+0x014 %LE %Long 0x1 ;DREAR, 32bit Extended External Address Valid Range, A[25:0] enabled
; ------------------------------------------------------------------------------
; Flash Read ID Test
GOSUB READ_ID_TEST
; ------------------------------------------------------------------------------
; Init SRAM (16KB) for the flash algorithm
Data.Test 0xE6328000++0x47FF
; ------------------------------------------------------------------------------
; Flash declaration
Break.RESet
FLASH.RESet
// S25FS512S Sector Address Map, Bottom 4-kB Sectors
FLASH.Create 1. 0x08000000--0x08007FFF 0x01000 TARGET Byte ; 4KB 8.ea
FLASH.Create 1. 0x08008000--0x0803FFFF 0x38000 TARGET Byte ; 224KB 1.ea
FLASH.Create 1. 0x08040000--0x0BFFFFFF 0x40000 TARGET Byte ; 256KB 255.ea
// S25FS512S Sector Address Map, 256kB Uniform Sectors
;FLASH.Create 1. 0x08000000--0x0BFFFFFF 0x40000 TARGET Byte ; 256KB 256ea
FLASH.TARGET 0xE6328000++0x1FFF E:0xE632A000++0x23FF ~~/demo/arm/flash/byte/snor_rcar3.bin /DualPort
; Flash script ends here if called with parameter PREPAREONLY
IF &param_prepareonly
ENDDO PREPAREDONE
; ------------------------------------------------------------------------------
; Flash programming example
DIALOG.YESNO "Program flash memory?"
LOCAL &progflash
ENTRY &progflash
IF &progflash
(
FLASH.ReProgram.ALL
Data.LOAD.auto *
FLASH.ReProgram.off
; Reset device
PRINT "Please power-cycle the board after flash program is complete"
)
ENDDO
; --------------------------------------------------------------------------------
READ_ID_TEST:
(
&CMNCR=(&SPI_BASE)
&SMCR=(&SPI_BASE+0x20) ; SMCR_0 , SPI mode control
&SMCMR=(&SPI_BASE+0x24) ; SMCMR_0 , SPI mode command setting register
&SMADR=(&SPI_BASE+0x28) ;address
&SMOPR=(&SPI_BASE+0x2C) ;option data setting
&SMENR=(&SPI_BASE+0x30) ;enable setting
&SMRDR=(&SPI_BASE+0x38)
&SMRDR1=(&SPI_BASE+0x3C)
&SMWDR=(&SPI_BASE+0x40)
&SMWDR1=(&SPI_BASE+0x44)
&SMDMCR=(&SPI_BASE+0x60) ;dummy cycle
&regData=Data.Long(A:&CMNCR)
Data.Set A:&CMNCR %Long 0x80000000|&regData ;enable manual mode, disable AHB read
Data.Set A:&SMCMR %Long (0x9f<<16.) ;read-id cmd
Data.Set A:&SMADR %Long 0x0 ;address 0x0
Data.Set A:&SMOPR %Long 0x0 ;address 0x0
;Data.Set A:&SMDMCR %l 0x7 ; dummy 8 cycle number
&smenr=(0x1<<14.)|0xF; cmd enable, 4byte data read
Data.Set A:&SMENR %Long &smenr
//start spi transfer
&smcr=0x1|(0x2<<1.) ; spie and spire , SPI Read data
Data.Set A:&SMWDR %LE %Long 0x00000000 ; write Tx buffer init
Data.Set A:&SMCR %Long &smcr
&read_data=Data.Long(A:&SMRDR)
PRINT "Read 1st: 0x" (&read_data)&0xFF " (Manufacture) "
PRINT "Read 2nd: 0x" (&read_data>>8.)&0xFF " (Device) "
PRINT "Read 3rd: 0x" (&read_data>>16.)&0xFF
PRINT "Read 4th: 0x" (&read_data>>24.)&0xFF
Data.Set A:&CMNCR %Long &regData ;disable manual mode, enable AHB read
GOSUB RPC_INIT
RETURN
)
RPC_INIT:
(
//Default value for QuadSPI
Data.Set A:&SPI_BASE+0x00 %Long 0x01557300
Data.Set A:&SPI_BASE+0x7C %Long 0x00070260
RETURN
)