158 lines
4.6 KiB
Plaintext
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 ¶meters
|
|
ENTRY %LINE ¶meters
|
|
|
|
PRIVATE ¶m_prepareonly ¶m_cpu ¶m_dualport
|
|
¶m_prepareonly=(STRing.SCAN(STRing.UPpeR("¶meters"),"PREPAREONLY",0)!=-1)
|
|
¶m_cpu=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"CPU=","")
|
|
¶m_dualport=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"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 "¶m_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
|
|
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
|
|
)
|