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