; -------------------------------------------------------------------------------- ; @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 ¶meters ENTRY %LINE ¶meters PRIVATE ¶m_prepareonly ¶meters=STRing.UPpeR("¶meters") ¶m_prepareonly=(STRing.SCAN("¶meters","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 ¶m_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 ®Data=Data.Long(A:&CMNCR) Data.Set A:&CMNCR %Long 0x80000000|®Data ;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 ®Data ;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 )