104 lines
2.8 KiB
Plaintext
104 lines
2.8 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: SPI FLASH Programming script for LPC1850
|
|
; @Description:
|
|
; SPI FLASH(Spansion, S25Q256) is connected SPIFI
|
|
;
|
|
; Internal SRAM : 0x10000000
|
|
; SPIFI : 0x40003000
|
|
;
|
|
; @Author: jjeong
|
|
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; @Chip: LPC1850
|
|
; @Keywords: Spansion S25Q256 flash SPI
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: lpc18xx-spifi.cmm 10516 2022-02-02 11:39:30Z bschroefel $
|
|
|
|
LOCAL &arg1
|
|
ENTRY &arg1
|
|
&arg1=STRing.UPpeR("&arg1") // for example "PREPAREONLY"
|
|
|
|
|
|
&spifi_base=0x40003000
|
|
|
|
SYStem.RESet
|
|
SYStem.CPU LPC1850
|
|
SYStem.CONFIG.DEBUGPORTTYPE JTAG
|
|
IF COMBIPROBE()||UTRACE()
|
|
(
|
|
SYStem.CONFIG.CONNECTOR MIPI20T
|
|
)
|
|
SYStem.Option.ResBreak OFF
|
|
|
|
SYStem.Up
|
|
|
|
//init qspi controller (ex, pin mux and clk enable)
|
|
Data.Set SD:0x40050070 %Long 0x01000000
|
|
|
|
; Setup SPIFI I/O pins
|
|
Data.Set SD:0x4008618C %Long 0xF3 ; SPIFI_SCK
|
|
Data.Set SD:0x40086190 %Long 0xD3 ; SPIFI_SIO3
|
|
Data.Set SD:0x40086194 %Long 0xD3 ; SPIFI_SIO2
|
|
Data.Set SD:0x40086198 %Long 0xD3 ; SPIFI_SIO1
|
|
Data.Set SD:0x4008619C %Long 0xD3 ; SPIFI_SIO0
|
|
Data.Set SD:0x400861A0 %Long 0x13 ; SPIFI_CS
|
|
|
|
Data.Set SD:(&spifi_base+0x18) %LE %Long (0x13<<24.)|(5.<<21.) //4Byte address
|
|
; Data.Set SD:(&spifi_base+0x18) %LE %Long (0x03<<24.)|(4.<<21.) //3Byte address
|
|
|
|
//FLASH READ ID TEST
|
|
AREA.CLEAR
|
|
AREA.view
|
|
GOSUB READ_ID_TEST
|
|
DIALOG.YESNO "the flash id is correct on AREA window?"
|
|
ENTRY &result
|
|
IF !&result
|
|
(
|
|
PRINT "pls, check your register configuration to enable your flash controller"
|
|
ENDDO
|
|
)
|
|
|
|
//S(D)RAM TEST for algorithm file
|
|
Data.Test 0x10000000++0x3FFF /Prime ;s(d)ram test
|
|
IF FOUND()
|
|
(
|
|
PRINT "s(d)ram is NOT initialized around 0x" ADDRESS.OFFSET(TRACK.ADDRESS())
|
|
ENDDO
|
|
)
|
|
|
|
Break.RESet
|
|
|
|
FLASHFILE.RESet
|
|
|
|
//FLASHFILE.CONFIG <SPIFI Base>
|
|
FLASHFILE.CONFIG &spifi_base
|
|
|
|
// FLASHFILE.TARGET <code range> <data range> <Algorithm file>
|
|
FLASHFILE.TARGET 0x10000000++0x1FFF EAHB:0x10002000++0x21FF ~~/demo/arm/flash/byte/spi4b64_spifi.bin /KEEP /DualPort
|
|
|
|
//Read FLASH Manufacture and Device ID
|
|
FLASHFILE.GETID
|
|
|
|
//End of the test prepareonly
|
|
IF "&arg1"=="PREPAREONLY"
|
|
ENDDO
|
|
|
|
;FLASHFILE.DUMP 0x0 ; Read
|
|
|
|
;FLASHFILE.ERASE 0x0--0xFFFFF ; Erase
|
|
;FLASHFILE.LOAD * 0x0 ; Write
|
|
;FLASHFILE.LOAD * 0x0 /ComPare ; Verify
|
|
|
|
ENDDO
|
|
|
|
READ_ID_TEST:
|
|
|
|
Data.Set D:(&spifi_base+0x4) %Long 0x9F200004 ; opcode with no address / input (cpu-> flash) / data length 4
|
|
|
|
PRINT "read 1st: 0x" Data.Byte(D:(&spifi_base+0x14))
|
|
PRINT "read 2nd: 0x" Data.Byte(D:(&spifi_base+0x14))
|
|
PRINT "read 3rd: 0x" Data.Byte(D:(&spifi_base+0x14))
|
|
PRINT "read 4th: 0x" Data.Byte(D:(&spifi_base+0x14))
|
|
|
|
RETURN
|
|
|