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

158 lines
4.6 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: SPI FLASH Program script for the LPC54018
;
; @Description:
; The W25Q128 (Winbond) is connected to the SPIFI controller
;
; SRAM: 0x20001000
; SPIFI(controller) Base: 0x400800000
; SPIFI memory mapped ADDRESS: 0x10000000
;
; PIO0_23 FLASH_CSn
; PIO0_24 FLASH_IO0
; PIO0_25 FLASH_IO1
; PIO0_26 FLASH_CLK
; PIO0_27 FLASH_IO3
; PIO0_28 FLASH_IO2
;
; Script arguments:
;
; DO lpc54018-spi [PREPAREONLY] [CPU=<cpu>] [DUALPORT=0|1]
;
; PREPAREONLY only declares flash but does not execute flash programming
;
; CPU=<cpu> selects CPU derivative <cpu>
;
; DUALPORT=0|1 default value is 0 (disabled).
;
; Example:
;
; DO ~~/demo/arm/flash/lpc54018-spi.cmm PREPAREONLY DUALPORT=1
;
; @Chip: LPC54018JET180
; @Board: LPC540xx Dev Board
; @Author: JIM
; @Keywords: ARM, LPC54018, SPI
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: lpc54018-spi.cmm 12731 2023-11-17 07:20:36Z mschaeffner $
&SPI_BASE=0x40080000
PRIVATE &parameters
ENTRY %LINE &parameters
PRIVATE &param_prepareonly &param_cpu &param_dualport
&param_prepareonly=(STRing.SCAN(STRing.UPpeR("&parameters"),"PREPAREONLY",0)!=-1)
&param_cpu=STRing.SCANAndExtract(STRing.UPpeR("&parameters"),"CPU=","")
&param_dualport=STRing.SCANAndExtract(STRing.UPpeR("&parameters"),"DUALPORT=","0")
; --------------------------------------------------------------------------------
; initialize and start the debugger
RESet
SYStem.RESet
SYStem.CPU LPC54018JET180
SYStem.CONFIG.DEBUGPORTTYPE SWD
IF hardware.COMBIPROBE()||hardware.UTRACE()
(
SYStem.CONFIG.CONNECTOR MIPI20T
)
SYStem.Option DUALPORT ON
SYStem.MemAccess DAP
SYStem.JtagClock CTCK 10MHz
Trace.DISable
SYStem.Up
; ------------------------------------------------------------------------------
; clk enable
Data.Set SD:0x40000200 %LE %Long 0x1243B ;AHBCLKCTRL0(AHB Clock control 0.), spifi power/clk enable
Data.Set SD:0x400002A0 %LE %Long 0x00003 ;SPIFICLKSEL(SPIFI clock select register) , 0x0 main_clk, 0x1:pll_clk
Data.Set SD:0x40000390 %LE %Long 0x00003 ;SPIFICLKDIV(SPIFI clock divider register) , div16
; ------------------------------------------------------------------------------
; pin mux setting (alternative function setting)
Data.Set SD:0x4000105C %LE %Long 0x766 ;PIO0_23, nCS, FUNC6
Data.Set SD:0x40001060 %LE %Long 0x766 ;PIO0_24, IO0, FUNC6
Data.Set SD:0x40001064 %LE %Long 0x766 ;PIO0_25, IO1, FUNC6
Data.Set SD:0x40001068 %LE %Long 0x766 ;PIO0_26, CLK, FUNC6
Data.Set SD:0x4000106C %LE %Long 0x766 ;PIO0_27, IO3, FUNC6
Data.Set SD:0x40001070 %LE %Long 0x766 ;PIO0_28, IO2, FUNC6
; ------------------------------------------------------------------------------
; spi controller setting
GOSUB SPI_INIT ; enable memory map mode (ahb: 0x1000_0000)
GOSUB READ_ID_TEST
; ------------------------------------------------------------------------------
; Flash declaration
GOSUB FlashDeclaration "&param_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
SYStem.Down
SYStem.Up
)
ENDDO
READ_ID_TEST:
(
Data.Set A:(&SPI_BASE+0x4) %Long 0x9F200004 ; opcode with no address / input (cpu-> flash) / data length 4
&temp=Data.Long(A:&SPI_BASE+0x14)
PRINT "1st 0x" (&temp)&0xFF " (Manufacturer)"
PRINT "2nd 0x" (&temp>>8.)&0xFF " (Device ID)"
PRINT "3rd 0x" (&temp>>16.)&0xFF
PRINT "4th 0x" (&temp>>24.)&0xFF
GOSUB SPI_INIT ; enable memory map mode (ahb: 0x1000_0000)
RETURN
)
SPI_INIT:
(
Data.Set SD:0x40080000 %LE %Long 0x600F03E8
Data.Set SD:0x4008001C %LE %Long -1 ;clear status
Data.Set SD:0x40080018 %LE %Long 0xEB930000
RETURN
)
FlashDeclaration:
(
PRIVATE &FlashSize &FlashDriver &FlashBaseAddr
PARAMETERS &DualPort
FLASH.RESet
&FlashDriver="snor3b_lpc54018.bin"
&FlashSize=0x1000000 ;16Mbytes
&FlashBaseAddr=0x10000000 ;SPI AHB base address
FLASH.Create &FlashBaseAddr++(&FlashSize-0x1) 0x10000 TARGET2 Byte
IF "&DualPort"=="0"
FLASH.TARGET2 0x20001000 0x20002000 0x2000 ~~/demo/arm/flash/byte/&FlashDriver
ELSE
FLASH.TARGET2 0x20001000 E:0x20002000 0x2000 ~~/demo/arm/flash/byte/&FlashDriver /DualPort
FLASH.List
RETURN
)