Files
2025-10-14 09:52:32 +09:00

212 lines
6.1 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: SPI FLASH Program script for STA8100GA on Teseo-V EVB (RAM)
; @Description:
; The MX25L3233 (MACRONIX) is connected to the SFC/SQIO controller
;
; SRAM: 0x20001000 (TCM 64KB)
; SQIO(controller) Base: 0xD0000000
; SQIO memory mapped ADDRESS: 0x10000000
;
; GPIO[22:29] - SFC_SIO[0:7]
; GPIO61 - SFC_CSN
; GPIO62 - SFC_CLK
; GPIO63 - SFC_DQS
;
; Prerequisites:
; * Connect Debug Cable to J506 using Adapter LA-3770
; or
; Connect Combiprobe/uTrace to J506
; * If necessary, move resistor R550 to R551 to preplace teh pull-down on
; nTRST by an pull-down.
; * If necessary to have a reset signal connected to the debug header
; instead of nTRST:
; - Remove jumper from J702.
; - Set a wire from J702 pin 2 to CN800 pin 1
; - Set a wire from J702 pin 3 to CN800 pin 5
;
; @Keywords: ARM, Cortex-M7, SPI, SQI
; @Author: STK, JIM
; @Board: Teseo-V EVB
; @Chip: STA8100GA
; @Copyright: (C) 1989-2023 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: teseov-spi.cmm 12264 2023-06-29 08:45:56Z jjeong $
&SQI_BASE=0xD0000000
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.CPU STA8100GA
IF hardware.COMBIPROBE()||hardware.UTRACE()
(
SYStem.CONFIG.CONNECTOR MIPI20T
)
SYStem.Option.DUALPORT ON
SYStem.MemAccess DAP
Trace.DISable
SYStem.Up
; ------------------------------------------------------------------------------
; clk enable
GOSUB PRCC_CONFIG
; ------------------------------------------------------------------------------
; pin mux setting (alternative function setting)
PER.Set.simple ASD:0x50028020 %Long 0xFFC00000 ; GPIO0_AFSLA GPIO[22:29]
PER.Set.simple ASD:0x5000C020 %Long 0x60000000 ; GPIO1_AFSLA, GPIO[61:63]
; ------------------------------------------------------------------------------
; spi controller setting
GOSUB SQI_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
(
GOSUB FLASH_UNLOCK
FLASH.ReProgram.ALL
Data.LOAD.Binary * 0x10000000
;Data.LOAD.auto *
FLASH.ReProgram.off
; Reset device
SYStem.Down
SYStem.Up
)
ENDDO
FLASH_UNLOCK:
(
;Read Status Register
FLASH.SPI.CMD 2. 0x05 /READ 1. VM:0x0
&SR = Data.Byte(VM:0x0)
IF ((&SR)&0x3C)!=0x00
(
FLASH.SPI.CMD 2. 0x06 ;Write enable
FLASH.SPI.CMD 2. 0x01 ((&SR)&0xC3) ;Write status with BP bits set to 0
)
FLASH.SPI.CMD 2. 0x05 /READ 1.
RETURN
)
READ_ID_TEST:
(
Data.Set A:&SQI_BASE+0x104 %Long (0x3<<24.)|0x0 ;length 4Bytes read data
&regData=(0x2<<12.)|0x9F ; cmd + cmd_type:cmd->data
Data.Set A:&SQI_BASE+0x100 %Long &regData ;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:
(
&regData=(0x03<<16.) ;SPI READ OPCODE for AHB
&regData=&regData|(0x01<<24.); WR_CNF_OPCD
&regData=&regData|(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 0x40000 ;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 &regData ;comstate
RETURN
)
PRCC_CONFIG:
(
&PRCC=0x50024000
Data.Set A:&PRCC+0x040 %LE %Long 0xD20203FF ;REG0
Data.Set A:&PRCC+0x044 %LE %Long 0xF69FFFFF ;REG1
Data.Set A:&PRCC+0x06C %LE %Long 0xB02B0A38 ;REG11
Data.Set A:&PRCC+0x070 %LE %Long 0xF03CDAFF
Data.Set A:&PRCC+0x044 %LE %Long 0xF69FFFCF
Data.Set A:&PRCC+0x070 %LE %Long 0xF03CDAF7
WAIT 1.ms
Data.Set A:&PRCC+0x040 %LE %Long 0xD26203FF
Data.Set A:&PRCC+0x044 %LE %Long 0xF69FFFFF
Data.Set A:&PRCC+0x070 %LE %Long 0xF03CDAFF
Data.Set SD:0x4800000C %LE %Long 0x00000000 ;LDOBKUP
Data.Set SD:0x48000010 %LE %Long 0x00000020 ;STBY
Data.Set SD:0x4800004C %LE %Long 0x00000020
Data.Set A:&PRCC+0x04C %LE %Long 0x02000841
Data.Set A:&PRCC+0x048 %LE %Long 0x4A2D0000
Data.Set A:&PRCC+0x048 %LE %Long 0x4A2D0000
Data.Set A:&PRCC+0x048 %LE %Long 0x4A2D1000
Data.Set A:&PRCC+0x04C %LE %Long 0x841
Data.Set A:&PRCC+0x04C %LE %Long 0x841
Data.Set A:&PRCC+0x04C %LE %Long 0x10000841
Data.Set A:&PRCC+0x04C %LE %Long 0x841
Data.Set A:&PRCC+0x04C %LE %Long 0x841
Data.Set A:&PRCC+0x04C %LE %Long 0x40000841
Data.Set A:&PRCC+0x04C %LE %Long 0x00400841
Data.Set A:&PRCC+0x04C %LE %Long 0x00400841
Data.Set A:&PRCC+0x04C %LE %Long 0x01400841
Data.Set A:&PRCC+0x040 %LE %Long 0xD26203FF
RETURN
)
FlashDeclaration:
(
PRIVATE &FlashSize &FlashDriver &FlashBaseAddr
PARAMETERS &DualPort
FLASH.RESet
&FlashDriver="snor3b_teseov.bin"
&FlashSize=0x400000 ;4Mbytes
&FlashBaseAddr=0x10000000 ;SPI AHB base address
FLASH.Create 2. &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
)