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

208 lines
4.7 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: R-CarV3M Customer board MSIOF SPI Flash script
; @Description:
; SPI FLASH Program script by the core (CR7)
; The M95256 (Spansion, SPI EEPROM) is on the SPI MSIOF controller
;
; Prerequisites:
; * set
; MD21 = 1 -> SW20[3] = 0 : CoreSight enable
; MD7 = 1 -> SW3[1] = 0 : Cortex-R7 enable
;
;
; SRAM: 0xE6328000
; MSIOF Base: 0xE6EA0000
;
; @Keywords: ARM, Cortex-R7 Spansion Flash SPI RCarV3M
; @Author: jjeong
; @Chip: RCARV3M-CR7
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: rcarv3m-msiof.cmm 12742 2023-11-17 08:05:09Z mschaeffner $
LOCAL &arg1
ENTRY &arg1
&arg1=STRing.UPpeR("&arg1") // for example "PREPAREONLY"
&BASE=0xE6EA0000
RESet
SYStem.RESet
SYStem.Option RB OFF
SYStem.Option ER OFF
SYStem.CPU RCARV3M-CR7
SYStem.MemAccess DAP
SYStem.JtagClock CTCK 10MHz
; Activate Cortex-R7
SYStem.Mode Prepare
DO ~~/demo/arm/hardware/r_carv3m/scripts/kick_cores "R7"
Trace.DISable
SYStem.Up
; --------------------------------------------------------------------------------
; enable the SRAM & MPU - alternative execute BootROM e.g. Go/Wait/Break
IF TRUE()
(
; enable SRAM
Data.Set AD:0xE67F0018 %LE %Long 0x1
; disable MPU
Data.Set C15:0x1 %Long 0xC50078
; disable all regions
PRIVATE &i
&i=0
RePeaT 16.
(
; set MRNR
Data.Set C15:0x26 %Long &i
; clear RSER
Data.Set C15:0x216 %Long 0x0
&i=&i+1.
)
; setup regions for simplicity only region 0&1
; region 0: 0x00000000--0xffffffff - Shareable Device - all permissions
Data.Set C15:0x26 %Long 0x0
Data.Set C15:0x16 %Long 0x0
Data.Set C15:0x216 %Long 0x3f
Data.Set C15:0x416 %Long 0x305
; region 1: 0xe6300000--0xe637ffff - non-cacheable - all permissions
Data.Set C15:0x26 %Long 0x1
Data.Set C15:0x16 %Long 0xe6300000
Data.Set C15:0x216 %Long 0x25
Data.Set C15:0x416 %Long 0x30c
; enable MPU
Data.Set C15:0x1 %Long Data.Long(C15:0x1)|0x1
)
ELSE
(
Go.direct 0x268
WAIT !STATE.RUN() 0.2s
IF STATE.RUN()
Break.direct
)
//SMSTPCR2, bit[11-8] MSIOF0 -> MSIOF3 should be 0x0
&temp=data.long(A:0xE6150138)
&temp=(&temp&~0xF00)
Data.Set A:0xE6150900 %LE %Long ~(&temp)
Data.Set A:0xE6150138 %LE %Long &temp
//MSOCKCR, bit[8]:0 bit[5:0]:div
Data.Set A:0xE6150900 %LE %Long ~(0xE)
Data.Set A:0xE6150014 %LE %Long 0xE
Data.Set A:0xEE20007C %Long 0x80000260
Data.Set A:0xEE200000 %Long 0x81fff300
GOSUB PIN_CONFIG_MSIOF1
GOSUB MSIOF_CONFIG
//FLASH READ ID TEST
AREA.CLEAR
AREA.view
GOSUB READ_ID_TEST
Break.RESet
FLASHFILE.RESet
//FLASHFILE.CONFIG <SPI Base AddRESs>
FLASHFILE.CONFIG &BASE
// FLASHFILE.TARGET <code range> <data range> <Algorithm file>
FLASHFILE.TARGET 0xE6328000++0x1FFF 0xE632A000++0x21FF ~~/demo/arm/flash/byte/spi16ee_shmsiof.bin /KEEP
FLASHFILE.GETID
//End of the test prepareonly
IF "&arg1"=="PREPAREONLY"
ENDDO
//Read SPI FLASH
FLASHFILE.DUMP 0x0
//Erase SPI FLASH
; FLASHFILE.ERASE 0x0--0xFFFFF
//Write SPI FLASH
; FLASHFILE.LOAD * 0x0
ENDDO
; --------------------------------------------------------------------------------
READ_ID_TEST:
(
Data.Set AD:0xE6EA0040 %Long -1 ;clear status
Data.Set AD:0xE6EA0004 %Long 0x07000000|(0x7<<16.) ;Tx 8bytes
Data.Set AD:0xE6EA0014 %Long 0x07000000|(0x7<<16.) ;Rx 8bytes
Data.Set AD:0xE6EA0050 %Byte 0x83 ; EEPROM M95256 Read-ID Command 0x83, not 0x9F
RePeaT 7.
(
Data.Set AD:0xE6EA0050 %Byte 0x00
)
Data.Set A:&BASE+0x28 %Long 0xAC00C300 //set TSCKE, TFSE ,TXE ,RXE
//read
LOCAL &idx
&idx=0.
RePeaT 8.
(
PRINT "&idx read: 0x" Data.Long(AD:0xE6EA0060)
&idx=&idx+1.
)
Data.Set A:&BASE+0x28 %Long 0xAC000003 // clear TSCKE, TFSE, TXE , RXE
Data.Set AD:0xE6EA0040 %Long -1
RETURN
)
PIN_CONFIG_MSIOF1:
(
&BASE_PMMR=0xE6060000 // LSI Multiplexed Pin Setting Mask Register
//&GPSR3=0xE606010C
// GP3[4:0] set pins to the peripheral function not GPIO
&val=0x1F
Data.Set A:&BASE_PMMR %Long ~&val
Data.Set A:(&BASE_PMMR+0x10C) %Long &val
//IPSR5[19:0]0x11111
// Peripheral Function Select register 5: &BASE_PMMR+0x214
&val=0x11111
Data.Set A:&BASE_PMMR %Long ~&val
Data.Set A:(&BASE_PMMR+0x214) %Long &val
RETURN
)
MSIOF_CONFIG:
(
Data.Set AD:0xE6EA0028 %Long 0xAC000003
Data.Set AD:0xE6EA0000 %Long 0xe655000C
Data.Set AD:0xE6EA0004 %Long 0x07000000|(0x7<<16.) ;8bytes
Data.Set AD:0xE6EA0008 %Long 0x0f000000
Data.Set AD:0xE6EA0010 %Long 0x22000000
Data.Set AD:0xE6EA0014 %Long 0x07000000|(0x7<<16.) ;8bytes
Data.Set AD:0xE6EA0018 %Long 0x0F000000
Data.Set AD:0xE6EA0020 %Word 0x00000003 ;SITSCR div/16 spi_clk maybe around 4Mhz.
Data.Set AD:0xE6EA0030 %Long 0x0400A000
RETURN
)