; -------------------------------------------------------------------------------- ; @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 FLASHFILE.CONFIG &BASE // FLASHFILE.TARGET 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 )