Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/flash/s6j326-hyper.cmm
2025-10-14 09:52:32 +09:00

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