189 lines
5.6 KiB
Plaintext
189 lines
5.6 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: SPI FLASH Program script for the MSR1(STA800C)
|
|
;
|
|
; @Description:
|
|
; The MT25QU128 (Micron) is connected to the SQIO controller
|
|
;
|
|
; SRAM: 0x20001000 (TCM 64KB)
|
|
; SQIO(controller) Base: 0x51000000
|
|
; SQIO memory mapped ADDRESS: 0x50000000 (only 16MB mapped, Alias 0x88000000)
|
|
;
|
|
; GPIOE_4[0] FLASH_QSPI_D0
|
|
; GPIOE_4[1] FLASH_QSPI_D1
|
|
; GPIOE_4[2] FLASH_QSPI_D2
|
|
; GPIOE_4[3] FLASH_QSPI_D3
|
|
; GPIOE_4[4] GPIO70
|
|
; GPIOE_4[5] GPIO71
|
|
; GPIOE_4[6] GPIO72
|
|
; GPIOE_4[7] GPIO73
|
|
; GPIOE_4[8] FLASH_QSPI_CS
|
|
; GPIOE_4[9] FLASH_QSPI_CLK
|
|
;
|
|
; Script arguments:
|
|
;
|
|
; DO msr1-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/msr1-spi.cmm PREPAREONLY DUALPORT=1
|
|
;
|
|
; @Chip: MSR1-CM7
|
|
; @Board: STA800C
|
|
; @Author: JIM
|
|
; @Keywords: ARM, MSR1, Cortex-M7 SPI SQI
|
|
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: msr1-spi.cmm 12739 2023-11-17 07:38:12Z mschaeffner $
|
|
|
|
&SQI_BASE=0x51000000
|
|
|
|
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 MSR1-CM7
|
|
IF hardware.COMBIPROBE()||hardware.UTRACE()
|
|
(
|
|
SYStem.CONFIG.CONNECTOR MIPI20T
|
|
)
|
|
SYStem.Option DUALPORT ON
|
|
SYStem.JtagClock 10MHz
|
|
SYStem.Option EnReset OFF
|
|
|
|
; try to guess TSEL
|
|
SYStem.DETECT.IDCode
|
|
IF IDCODE(0)!=0x6BA00477 ; the ARM DAP should be the first in the JTAG chain
|
|
(
|
|
PRINT %ERROR "No ARM Debug Access Port detected"
|
|
ENDDO
|
|
)
|
|
IF IDCODENUMBER()>1.
|
|
(
|
|
SYStem.CONFIG.DAPIRPRE 5.
|
|
SYStem.CONFIG.DAPDRPRE 1.
|
|
)
|
|
Trace.DISable
|
|
ETM.OFF
|
|
ITM.OFF
|
|
STM.OFF
|
|
SYStem.Up
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; clk enable
|
|
&PRCC=0x41700000
|
|
Data.Set A:&PRCC+0x0210 %LE %Long 0xC0000001 ;GPIO instance 4 clock/reset Control Register(GPIO4APBiCR)
|
|
Data.Set A:&PRCC+0x0248 %LE %Long 0xC0000001 ;SQIO AHB interface clock/reset Control Register(SQIOAHBiCR)
|
|
Data.Set A:&PRCC+0x029C %LE %Long 0xC0000001 ;SQIO kernel clock/reset Control Register(SQIOTXCR)
|
|
|
|
Data.Set A:&PRCC+0x0A80 %LE %Long 0xFFFFFC00 ;Gpio_4 Input buffer Disable Register(G4INDISR)
|
|
Data.Set A:&PRCC+0x0A88 %LE %Long 0x3FF ;Gpio_4 DRIVE0 Register(G4DRIVE0R)
|
|
Data.Set A:&PRCC+0x0A8C %LE %Long 0x3FF ;Gpio_4 DRIVE1 Register(G4DRIVE1R)
|
|
Data.Set A:&PRCC+0x0A90 %LE %Long 0x3FF ;Gpio_4 DRIVE2 Register(G4DRIVE2R)
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; pin mux setting (alternative function setting)
|
|
&GPIOE_BASE=0x40E00000
|
|
Data.Set A:&GPIOE_BASE+0x0020 %LE %Long 0x3FF ;GPIO Alternate Function Select A register(GPIO_AFSLA)
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; spi controller setting
|
|
GOSUB SQI_INIT ; enable memory map mode (ahb: 0x5000_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:&SQI_BASE+0x104 %Long (0x3<<24.)|0x0 ;length 4Bytes read data
|
|
®Data=(0x2<<12.)|0x9F ; cmd + cmd_type:cmd->data
|
|
Data.Set A:&SQI_BASE+0x100 %Long ®Data ;command execute
|
|
|
|
&temp=Data.Long(A:&SQI_BASE+0x108)
|
|
PRINT "1st 0x" (&temp>>24.)&0xFF " (Manufacturer)"
|
|
PRINT "2nd 0x" (&temp>>16.)&0xFF " (Device ID)"
|
|
PRINT "3rd 0x" (&temp>>8.)&0xFF
|
|
PRINT "4th 0x" (&temp)&0xFF
|
|
|
|
GOSUB SQI_INIT ; enable memory map mode (ahb: 0x5000_0000)
|
|
|
|
RETURN
|
|
)
|
|
|
|
SQI_INIT:
|
|
(
|
|
®Data=(0x03<<16.) ;SPI READ OPCODE for AHB
|
|
®Data=®Data|(0x01<<24.); WR_CNF_OPCD
|
|
®Data=®Data|(0x0<<12.) ; CMD type <<SQI_CMDTY_C
|
|
|
|
Data.Set A:&SQI_BASE+0x108 %Long 0x0 ;DISABLE Performance enhance micron
|
|
Data.Set A:&SQI_BASE+0x10C %Long 0x40001 ;no dummy cycle, baud rate (around 10Mhz)
|
|
Data.Set A:&SQI_BASE+0x118 %Long 0x20000000 ;3B address mode
|
|
Data.Set A:&SQI_BASE+0x100 %Long ®Data ;comstate
|
|
|
|
RETURN
|
|
)
|
|
|
|
FlashDeclaration:
|
|
(
|
|
PRIVATE &FlashSize &FlashDriver &FlashBaseAddr
|
|
PARAMETERS &DualPort
|
|
|
|
FLASH.RES
|
|
|
|
&FlashDriver="snor3b_msr1.bin"
|
|
&FlashSize=0x1000000 ;16Mbytes
|
|
&FlashBaseAddr=0x50000000 ;SPI AHB base address
|
|
&FlashMemStart=0x88000000 ;SPI AHB base address(Alias)
|
|
|
|
FLASH.Create 2. &FlashBaseAddr++(&FlashSize-0x1) 0x10000 TARGET2 Byte
|
|
FLASH.CreateAlias &FlashMemStart++(&FlashSize-0x1) &FlashBaseAddr
|
|
|
|
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
|
|
)
|