232 lines
6.8 KiB
Plaintext
232 lines
6.8 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: S6J326 (Traveo) Serial FLASH Programming Script
|
|
; @Description:
|
|
;
|
|
; SRAM: 0x02000000
|
|
; Hyper flash memory mapped address: 0x90000000
|
|
;
|
|
; @Author: fcaron
|
|
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; @Keywords: S6J326CLSA Hyper flash
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: s6j326-hyper.cmm 10516 2022-02-02 11:39:30Z bschroefel $
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; check Prerequisites
|
|
|
|
IF VERSION.BUILD()<91889.
|
|
(
|
|
DIALOG.OK "Please use more recent software!"
|
|
END
|
|
)
|
|
|
|
RESet
|
|
SYStem.RESet
|
|
SYStem.CPU S6J326CLSA
|
|
SYStem.Option WATCHDOG OFF
|
|
SYStem.Option WaitIDCODE ON
|
|
SYStem.Option ResBreak OFF
|
|
SYStem.Up
|
|
|
|
; Mask Watchdog-RESET
|
|
LOCAL &scscu_content
|
|
&scscu_content=Data.Long(APB:0x000C01B4)|0x00010100
|
|
Data.Set APB:0x000C01A4 %Long 0x5ECACCE5 ; Unlock register write access
|
|
Data.Set APB:0x000C01B4 %Long &scscu_content ; Make user configuration (SCSCU_CNTL_JTAGCON bit and SCSCU_CNTL_WDGRSTMASK)
|
|
Data.Set APB:0x000C01A4 %Long 0xA135331A ; Lock register write access again
|
|
|
|
Data.Set 0x02000000++0x3FFF %Long 0x0
|
|
|
|
GOSUB Define_Globals
|
|
GOSUB Enable_PLL
|
|
GOSUB Init_HyperBus
|
|
|
|
Break.RESet
|
|
|
|
FLASH.RESet
|
|
FLASH.CFI &HYPERBUS_BASE_ADDRESS Word /TARGET 0x02000000 AHB:0x02001000 0x1000 /DualPort
|
|
|
|
ENDDO
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
|
|
Enable_PLL:
|
|
|
|
Data.Set &SYSC0_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC0_PLL0CGCNTR %Long 0x00000000
|
|
Data.Set &SYSC1_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC1_RUNCKSELR0 %Long &VALUE_SYSC1_RUNCKSELR0
|
|
Data.Set &SYSC1_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC1_RUNCKSELR1 %Long &VALUE_SYSC1_RUNCKSELR1
|
|
Data.Set &SYSC1_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC1_RUNENR %Byte &VALUE_SYSC1_RUNENR
|
|
Data.Set &SYSC0_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC0_RUNCKSRER %Long &VALUE_SYSC0_RUNCKSRER
|
|
Data.Set &SYSC0_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC0_RUNCKSELR %Long &VALUE_SYSC0_RUNCKSELR
|
|
Data.Set &SYSC0_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC0_RUNPLL0CNTR %Long &VALUE_SYSC0_RUNPLL0CNTR
|
|
|
|
Data.Set &SYSC0_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC0_TRGRUNCNTR %Long &VALUE_SYSC0_TRGRUNCNTR
|
|
|
|
LOCAL &attempts &sysc0_sysstsr_value
|
|
&attempts=10.
|
|
WHILE &attempts>0.
|
|
(
|
|
&attempts=&attempts-1.
|
|
&sysc0_sysstsr_value=Data.Long(APB:&SYSC0_SYSSTSR)
|
|
IF (&sysc0_sysstsr_value&0x10)!=0
|
|
(
|
|
&attempts=0.
|
|
)
|
|
)
|
|
|
|
RETURN
|
|
|
|
; --------------------------------------------------------------------------------
|
|
|
|
Init_HyperBus:
|
|
|
|
GOSUB WriteGpioPpc &GPIO_PORTEN &GPIO_KEYCDR 0x4 0x00000001
|
|
GOSUB WriteGpioPpc &GPIO_PODR2 &GPIO_KEYCDR 0x4 0x00400000
|
|
GOSUB WriteGpioPpc &GPIO_DDR2 &GPIO_KEYCDR 0x4 0x00400000
|
|
GOSUB WriteGpioPpc &PPC_PCFGR222 &PPC_KEYCDR 0x2 0x10c0
|
|
wait 10.ms
|
|
GOSUB Init_PPC_HyperBus
|
|
GOSUB Clear_IO_Reset
|
|
Data.Set &HYPERBUSI0_MBR0 %Long &HYPERBUS_BASE_ADDRESS
|
|
Data.Set &HYPERBUSI0_GPOR %Long 0x00
|
|
|
|
RETURN
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
|
|
Init_PPC_HyperBus:
|
|
|
|
LOCAL &valueHyperbusPins
|
|
|
|
&valueHyperbusPins=0x10c3
|
|
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x3c) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x40) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x42) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x44) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x46) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x48) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x4a) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x4c) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x4e) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x50) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
GOSUB WriteGpioPpc (&PPC_PCFGR_BASE+0x52) &PPC_KEYCDR 0x2 &valueHyperbusPins
|
|
|
|
RETURN
|
|
|
|
; --------------------------------------------------------------------------------
|
|
|
|
Clear_IO_Reset:
|
|
Data.Set &SYSC0_PROTKEYR %Long &KEY_SYSC_UNLOCK
|
|
Data.Set &SYSC0_SPECFGR %Long (Data.Long(A:&SYSC0_SPECFGR)&~(0x00600000))
|
|
|
|
RETURN
|
|
|
|
; --------------------------------------------------------------------------------
|
|
|
|
WriteGpioPpc: ;(address, accesssize, value)
|
|
LOCAL &addr &keycdr &size &value &tmp
|
|
ENTRY &addr &keycdr &size &value
|
|
IF &size==4
|
|
&tmp=0x20000000
|
|
ELSE IF &size==2
|
|
&tmp=0x10000000
|
|
ELSE
|
|
&tmp=0x00000000
|
|
|
|
Data.Set A:(&keycdr) %LONG &tmp|0x00000000|(&addr&0x7fff)
|
|
Data.Set A:(&keycdr) %LONG &tmp|0x40000000|(&addr&0x7fff)
|
|
Data.Set A:(&keycdr) %LONG &tmp|0x80000000|(&addr&0x7fff)
|
|
Data.Set A:(&keycdr) %LONG &tmp|0xc0000000|(&addr&0x7fff)
|
|
|
|
IF &size==4
|
|
&tmp="%Long"
|
|
ELSE IF &size==2
|
|
&tmp="%Word"
|
|
ELSE
|
|
&tmp="%Byte"
|
|
Data.Set A:(&addr) &tmp &value
|
|
RETURN
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
|
|
Define_Globals:
|
|
GLOBAL &GPIO_PORTEN
|
|
GLOBAL &GPIO_KEYCDR
|
|
GLOBAL &GPIO_PODR2
|
|
GLOBAL &GPIO_DDR2
|
|
GLOBAL &GPIO_KEYCDR
|
|
GLOBAL &PPC_PCFGR222
|
|
GLOBAL &PPC_KEYCDR
|
|
GLOBAL &PPC_PCFGR_BASE
|
|
GLOBAL &SYSC0_PROTKEYR
|
|
GLOBAL &SYSC1_PROTKEYR
|
|
GLOBAL &KEY_SYSC_UNLOCK
|
|
GLOBAL &SYSC0_SPECFGR
|
|
GLOBAL &HYPERBUSI0_MBR0
|
|
GLOBAL &HYPERBUSI0_GPOR
|
|
GLOBAL &HYPERBUS_BASE_ADDRESS
|
|
GLOBAL &SYSC0_PLL0CGCNTR
|
|
GLOBAL &SYSC0_RUNCKSRER
|
|
GLOBAL &SYSC0_RUNCKSELR
|
|
GLOBAL &SYSC0_RUNPLL0CNTR
|
|
GLOBAL &SYSC0_TRGRUNCNTR
|
|
GLOBAL &SYSC0_SYSSTSR
|
|
GLOBAL &SYSC1_RUNCKSELR0
|
|
GLOBAL &SYSC1_RUNCKSELR1
|
|
GLOBAL &VALUE_SYSC0_RUNCKSRER
|
|
GLOBAL &VALUE_SYSC0_RUNCKSELR
|
|
GLOBAL &VALUE_SYSC0_RUNPLL0CNTR
|
|
GLOBAL &VALUE_SYSC0_TRGRUNCNTR
|
|
GLOBAL &VALUE_SYSC1_RUNCKSELR0
|
|
GLOBAL &VALUE_SYSC1_RUNCKSELR1
|
|
GLOBAL &SYSC1_RUNENR
|
|
GLOBAL &VALUE_SYSC1_RUNENR
|
|
&SYSC1_RUNENR=0xb03000fc
|
|
&VALUE_SYSC1_RUNENR=0x000000ab
|
|
&VALUE_SYSC1_RUNCKSELR0=0x00000004
|
|
&VALUE_SYSC1_RUNCKSELR1=0x04040404
|
|
&VALUE_SYSC0_RUNCKSRER=0x00000107
|
|
&VALUE_SYSC0_RUNCKSELR=0x00000004
|
|
&VALUE_SYSC0_RUNPLL0CNTR=0x00ff0600
|
|
&VALUE_SYSC0_TRGRUNCNTR=0x000000ab
|
|
&SYSC0_RUNPLL0CNTR=0xb0600094
|
|
&SYSC0_RUNCKSRER=0xb0600084
|
|
&SYSC0_RUNCKSELR=0xb0600088
|
|
&SYSC0_TRGRUNCNTR=0xb06000fc
|
|
&SYSC0_SYSSTSR=0xb0600288
|
|
&SYSC1_RUNCKSELR1=0xb0300084
|
|
&SYSC1_RUNCKSELR0=0xb0300080
|
|
&SYSC0_PLL0CGCNTR=0xb0600610
|
|
&HYPERBUS_BASE_ADDRESS=0x90000000
|
|
&HYPERBUSI0_GPOR=0xb8028440
|
|
&HYPERBUSI0_MBR0=0xb8028410
|
|
&SYSC0_SPECFGR=0xb0600680
|
|
&KEY_SYSC_UNLOCK=0x5cacce55
|
|
&SYSC0_PROTKEYR=0xb0600000
|
|
&SYSC1_PROTKEYR=0xb0300000
|
|
&PPC_PCFGR_BASE=0xb4740000
|
|
&PPC_KEYCDR=0xb4740400
|
|
&PPC_PCFGR222=0xb47400ac
|
|
&GPIO_DDR2=0xb4738214
|
|
&GPIO_PODR2=0xb4738210
|
|
&GPIO_KEYCDR=0xb4738404
|
|
&GPIO_PORTEN=0xb4738400
|
|
|
|
RETURN
|
|
|
|
|
|
|