256 lines
6.9 KiB
Plaintext
256 lines
6.9 KiB
Plaintext
;@Title: Script for Cypress PSOC4 series internal flash.
|
|
;@Description:
|
|
; Flash declaration of Cypress PSOC4 internal flash.
|
|
;
|
|
; Script arguments:
|
|
;
|
|
; DO psoc4 [PREPAREONLY] [CPU=<cpu>]
|
|
;
|
|
; PREPAREONLY only declares flash but does not execute flash programming
|
|
;
|
|
; CPU=<cpu> selects CPU derivative <cpu>. <cpu> can be CPU name out of the
|
|
; table listed below. For these derivatives the flash declaration
|
|
; is done by the script.
|
|
;
|
|
; For example:
|
|
;
|
|
; DO ~~/demo/arm/flash/psoc4 PREPAREONLY CPU=CY8C4127LQI-BL473
|
|
;
|
|
; List of PSOC4 derivatives and their configuration:
|
|
;
|
|
; CPU-Type Program Flash SectorSize RowsPerMacro SRAM
|
|
; [KByte] [Byte] [KByte]
|
|
; CY8C40?4* 16 64 256 2
|
|
; CY8C40?4????S 16 128 128 2
|
|
; CY8C40?5???S 32 128 256 4
|
|
; CY8C41?5????S 32 128 256 4
|
|
; CY8C41?6????S 64 128 256 8
|
|
; CY8C42?4* 16 128 256 4
|
|
; CY8C42?5????M 32 128 512 4
|
|
; CY8C42?5????DM 32 128 512 4
|
|
; CY8C42??5* 32 128 256 4
|
|
; CY8C42?6????L 64 256 512 8
|
|
; CY8C42?6????M 64 128 512 8
|
|
; CY8C42?6????DM 64 128 512 8
|
|
; CY8C42?7????L 128 256 512 16
|
|
; CY8C42?7????M 128 128 512 16
|
|
; CY8C4??7* 128 128 512 16
|
|
; CY8C42?8????L 256 256 512 32
|
|
; CY8C4??8* 256 256 512 32
|
|
; CY8C41?9????S 384 256 512 32
|
|
;
|
|
; SectorSize = ProgramFlash / RowSize
|
|
; Note:
|
|
; This script disables the WATCHDOG. Please perform a RESET or POWER-CYCLE
|
|
; to reenable it.
|
|
;
|
|
; @Author: MAM
|
|
; @Chip: CY8C4*
|
|
; @Copyright: (C) 1989-2024 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: psoc4.cmm 13019 2024-02-06 10:34:48Z nzouari $
|
|
|
|
LOCAL ¶meters ¶m_prepareonly ¶m_cpu
|
|
ENTRY %LINE ¶meters
|
|
¶m_prepareonly=(STRing.SCAN(STRing.UPpeR("¶meters"),"PREPAREONLY",0)!=-1)
|
|
¶m_cpu=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"CPU=","")
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; Setup CPU
|
|
|
|
IF !SYStem.Up()
|
|
(
|
|
SYStem.RESet
|
|
|
|
IF "¶m_cpu"!=""
|
|
SYStem.CPU ¶m_cpu
|
|
IF !CPUIS(CY8C4*)
|
|
SYStem.CPU CY8C4*
|
|
¶m_cpu=SYStem.CPU()
|
|
IF CABLE.TWOWIRE()
|
|
SYStem.CONFIG DEBUGPORTTYPE SWD
|
|
ELSE
|
|
SYStem.CONFIG DEBUGPORTTYPE JTAG
|
|
|
|
SYStem.Option.ResBreak OFF
|
|
SYStem.Up
|
|
)
|
|
|
|
//IF (CPUIS(CY8C4??????-BLD*)||CPUIS(CY8C6??????-D*))&&(CORENAME()!="CORTEXM0+")
|
|
//(
|
|
// ; dual core and we are not connected to M0+
|
|
// PRINT %ERROR "Please select the CortexM0+ MASTER core for flash programming!"
|
|
// ENDDO
|
|
//)
|
|
|
|
GOSUB WatchdogDisable
|
|
//IF (CPUIS(CY8C6??????-BLD*)||CPUIS(CY8C6??????-D*))
|
|
//(
|
|
// ; for dual core CPUs disable the M4
|
|
// GOSUB DisableM4
|
|
//)
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; Flash declaration
|
|
FLASH.RESet
|
|
GOSUB FlashDeclaration
|
|
|
|
;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
|
|
SYStem.Up
|
|
)
|
|
ENDDO
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; Subroutines
|
|
|
|
WatchdogDisable: ;()
|
|
(
|
|
IF (CPUIS(CY8C40?4*)||CPUIS(CY8C40?4????S)||CPUIS(CY8C41?5????S*))||CPUIS(CY8C41?9????S*)
|
|
(
|
|
;WDT_DISABLE_KEY = 0xACED8865
|
|
Data.Set A:0x40030038 %Long 0xACED8865
|
|
)
|
|
ELSE
|
|
(
|
|
PRIVATE &WdtControlReg &ClkSelectReg
|
|
; Unlock and disable WDT in PSOC4
|
|
; CLK_SELECT |= WDT_LOCK_BIT0;
|
|
; CLK_SELECT |= WDT_LOCK_BIT1;
|
|
; WDT_CONTROL &= (~ (uint32_t) WDT_CTL_EN_Msk);
|
|
|
|
Data.Set A:0x400B0100 %Long (Data.Long(A:0x400B0100)|0x0004000)
|
|
Data.Set A:0x400B0100 %Long (Data.Long(A:0x400B0100)|0x0008000)
|
|
Data.Set A:0x400B0210 %Long (Data.Long(A:0x400B0210)&~0x00010101)
|
|
)
|
|
RETURN
|
|
)
|
|
|
|
FlashDeclaration:
|
|
(
|
|
PRIVATE &FlashSize &FlashDriver &SectorSize &RowSize &RowsPerMacro &BufferSize
|
|
&BufferSize=0x300
|
|
|
|
IF CPUIS(CY8C40?4????S*)
|
|
(
|
|
&FlashDriver="psoc40x4s.bin"
|
|
&FlashSize=0x4000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C41?5????S*)
|
|
(
|
|
&FlashSize=0x8000
|
|
&FlashDriver="psoc41x5s.bin"
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C41?6????S*)
|
|
(
|
|
&FlashSize=0x10000
|
|
&FlashDriver="psoc41x6s.bin"
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C40?4*)
|
|
(
|
|
&FlashDriver="psoc40x4.bin"
|
|
&FlashSize=0x4000
|
|
&SectorSize=0x40
|
|
&BufferSize=0x180
|
|
)
|
|
ELSE IF CPUIS(CY8C40?5???S*)
|
|
(
|
|
&FlashDriver="psoc40x5s.bin"
|
|
&FlashSize=0x8000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C42?4*)
|
|
(
|
|
&FlashDriver="psoc42x4.bin"
|
|
&FlashSize=0x4000
|
|
&SectorSize=0x80
|
|
&BufferSize=0x200
|
|
)
|
|
ELSE IF (CPUIS(CY8C42?5????M*)||CPUIS(CY8C42?5????DM*))
|
|
(
|
|
&FlashDriver="psoc42x5m.bin"
|
|
&FlashSize=0x8000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C42?5*)
|
|
(
|
|
&FlashDriver="psoc42x5.bin"
|
|
&FlashSize=0x8000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C42?6????L*)
|
|
(
|
|
&FlashDriver="psoc42x6l.bin"
|
|
&FlashSize=0x10000
|
|
&SectorSize=0x100
|
|
)
|
|
ELSE IF (CPUIS(CY8C42?6????M*)||CPUIS(CY8C42?6????DM*))
|
|
(
|
|
&FlashDriver="psoc42x6m.bin"
|
|
&FlashSize=0x10000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C42?7????L*)
|
|
(
|
|
&FlashDriver="psoc42x7l.bin"
|
|
&FlashSize=0x20000
|
|
&SectorSize=0x100
|
|
)
|
|
ELSE IF CPUIS(CY8C42?7????M*)
|
|
(
|
|
&FlashDriver="psoc42x7m.bin"
|
|
&FlashSize=0x20000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C42?8????L*)
|
|
(
|
|
&FlashDriver="psoc42x8l.bin"
|
|
&FlashSize=0x40000
|
|
&SectorSize=0x100
|
|
)
|
|
ELSE IF CPUIS(CY8C4??7????BL*)
|
|
(
|
|
&FlashDriver="psoc4xx7.bin"
|
|
&FlashSize=0x20000
|
|
&SectorSize=0x80
|
|
)
|
|
ELSE IF CPUIS(CY8C4??8????BL*)
|
|
(
|
|
&FlashDriver="psoc4xx8bl.bin"
|
|
&FlashSize=0x40000
|
|
&SectorSize=0x100
|
|
)
|
|
ELSE IF CPUIS(CY8C41?9????S*)
|
|
(
|
|
&FlashDriver="psoc41x9s.bin"
|
|
&FlashSize=0x60000
|
|
&SectorSize=0x100
|
|
)
|
|
ELSE
|
|
(
|
|
PRINT " CPU ¶m_cpu is not supported by this script!"
|
|
ENDDO
|
|
)
|
|
|
|
FLASH.Create 1. 0x00000000++(&FlashSize-1.) &SectorSize TARGET Byte
|
|
FLASH.TARGET 0x20000000++0xFFF 0x20001000++0xFFF ~~/demo/arm/flash/long/&FlashDriver /STACKSIZE ((&SectorSize*4)+0xD0)
|
|
RETURN
|
|
)
|
|
|
|
|