1688 lines
57 KiB
Plaintext
1688 lines
57 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: ST STM32U5 Flash Dialog to program Option Bytes.
|
|
;
|
|
; @Description:
|
|
; Script arguments:
|
|
;
|
|
; DO ~~/demo/arm/flash/stm32u5-optionbyte
|
|
;
|
|
; Opens the STM32U5 option byte programming dialog.
|
|
;
|
|
; DO ~~/demo/arm/flash/stm32u5-optionbyte
|
|
; [RDP_LEV=0|0.5|1] [BOR_LEV=0..4]
|
|
; [NRST_STDBY=0|1] [NRST_STOP=0|1] [NRST_SHDW=0|1] [SRAM134_RST=0|1]
|
|
; [IWDG_SW=0|1] [IWDG_STOP=0|1] [IWDG_STDBY=0|1] [WWDG_SW=0|1]
|
|
; [SWAP_BANK=0|1] [BKPRAM_ECC=0|1]
|
|
; [SRAM2_ECC=0|1] [SRAM3_ECC=0|1] [SRAM2_RST=0|1] [NSWBOOT0=0|1]
|
|
; [NBOOT0=0|1] [PA15PUPEN=0|1] [TZEN=0|1] [VDDIO2_HSLV=0|1]
|
|
; [IO_VDD_HSLV=0|1]
|
|
; [NSBOOTADD0R=<val>] [NSBOOTADD1R=<val>] [SECBOOTADD0R=<val>]
|
|
; [SECWM1R1=<val>] [SECWM1R2=<val>] [SECWM2R1=<val>] [SECWM2R2=<val>]
|
|
; [WRP1AR=<val>] [WRP1BR=<val>] [WRP2AR=<val>] [WRP2BR=<val>]
|
|
; [SECBB1R1=<val>] [SECBB1R2=<val>] [SECBB1R3=<val>] [SECBB1R4=<val>]
|
|
; [SECBB2R1=<val>] [SECBB2R2=<val>] [SECBB2R3=<val>] [SECBB2R4=<val>]
|
|
; [SECHDPCR=<val>] [PRIVCFGR=<val>]
|
|
; [RELOAD_OPTIONBYTES]
|
|
;
|
|
; Program the STM32U5 option bytes according to the following parameters:
|
|
;
|
|
; RDP_LEV=0|0.5|1 is programming read protection option byte
|
|
; 0 : Level 0 memories read protection active
|
|
; 0.5: Level 0.5 read protection not active,
|
|
; only non-secure debug access is possible
|
|
; 1 : Level 1, memories read protection active
|
|
; Note : the script doens't support programming Level 2, because with it no
|
|
; further debugging would be possible !
|
|
;
|
|
; BOR_LEV=0..4: BOR reset level
|
|
; 0: BOR Level 0: Reset level threshold is around 1.7 V
|
|
; 1: BOR Level 1: Reset level threshold is around 2.0 V
|
|
; 2: BOR Level 2: Reset level threshold is around 2.2 V
|
|
; 3: BOR Level 3: Reset level threshold is around 2.5 V
|
|
; 4: BOR Level 4: Reset level threshold is around 2.8 V
|
|
;
|
|
; NRST_STOP=0|1 is programming nRST_STOP bit of user option byte
|
|
; 0: Reset generated when entering Stop mode
|
|
; 1: No reset generated.
|
|
;
|
|
; NRST_STDBY=0|1 is programming nRST_STDBY bit of user option byte
|
|
; 0: Reset generated when entering Standby mode
|
|
; 1: No reset generated
|
|
;
|
|
; NRST_SHDW=0|1 is programming nRST_SHDW bit of user option byte
|
|
; 0: Reset generated when entering the Shutdown mode
|
|
; 1: No reset generated when entering the Shutdown mode
|
|
;
|
|
; SRAM134_RST=0|1 is programming SRAM134_RST bit of user option byte
|
|
; 0: SRAM1, SRAM3 and SRAM4 erased when a system reset occurs
|
|
; 1: SRAM1, SRAM3 and SRAM4 not erased when a system reset occurs
|
|
;
|
|
; IWDG_SW=0|1 is programming IWDG_SW bit of user option byte
|
|
; 0: Hardware independant watchdog
|
|
; 1: Software independant watchdog
|
|
;
|
|
; IWDG_STOP=0|1 is programming IWDG_STOP bit of user option byte
|
|
; 0: Independent watchdog counter is frozen in Stop mode
|
|
; 1: Independent watchdog counter is running in Stop mode
|
|
;
|
|
; IWDG_STDBY=0|1 is programming IWDG_STDBY bit of user option byte
|
|
; 0: Independent watchdog counter is frozen in Standby mode
|
|
; 1: Independent watchdog counter is running in Standby mode
|
|
;
|
|
; WWDG_SW=0|1 is programming WWDG_SW bit of user option byte
|
|
; 0: Hardware window watchdog
|
|
; 1: Software window watchdog
|
|
;
|
|
; SWAP_BANK=0|1: Swap banks
|
|
; 0: Bank 1 and bank 2 address are not swapped
|
|
; 1: Bank 1 and bank 2 address are swapped
|
|
;
|
|
; BKPRAM_ECC: Backup RAM ECC check disable
|
|
; 0: Backup RAM ECC check enabled
|
|
; 1: Backup RAM ECC check disabled
|
|
;
|
|
; SRAM2_ECC: SRAM2 ECC check disable
|
|
; 0: SRAM2 ECC check enabled
|
|
; 1: SRAM2 ECC check disabled
|
|
;
|
|
; SRAM3_ECC: SRAM3 ECC check disable
|
|
; 0: SRAM2 ECC check enabled
|
|
; 1: SRAM2 ECC check disabled
|
|
;
|
|
; SRAM2_RST: SRAM2 erase when system reset
|
|
; 0: SRAM2 erased when a system reset occurs
|
|
; 1: SRAM2 not erased when a system reset occurs
|
|
;
|
|
; NBOOT0: nBOOT0 option bit
|
|
; 0: nBOOT0 = 0
|
|
; 1: nBOOT0 = 1
|
|
;
|
|
; NSWBOOT0:: Software BOOT0
|
|
; 0: BOOT0 taken from the option bit nBOOT0
|
|
; 1: BOOT0 taken from PH3/BOOT0 pin
|
|
;
|
|
; PA15PUPEN: PA15 pull-up enable
|
|
; 0: USB power delivery dead-battery enabled/TDI pull-up deactivated
|
|
; 1: USB power delivery dead-battery disabled/TDI pull-up activated
|
|
;
|
|
; IO_VDD_HSLV: High-speed IO at low VDD voltage configuration bit
|
|
; 0: High-speed IO at low VDD voltage feature disabled
|
|
; 1: High-speed IO at low VDD voltage feature enabled
|
|
;
|
|
; VDDIO2_HSLV: High-speed IO at low VDDIO2 voltage configuration bit
|
|
; 0: High-speed IO at low VDDIO2 voltage feature disabled
|
|
; 1: High-speed IO at low VDDIO2 voltage feature enabled
|
|
;
|
|
; NSBOOTADD0R=<val> NSBOOTADD0R register
|
|
; NSBOOTADD1R=<val> NSBOOTADD1R register
|
|
; SECBOOTADD0R=<val> SECBOOTADD0R register
|
|
; SECWM1R1=<val> SECWM1R1 register
|
|
; SECWM1R2=<val> SECWM1R2 register
|
|
; SECWM2R1=<val> SECWM2R1 register
|
|
; SECWM2R2=<val> SECWM2R2 register
|
|
; WRP1AR=<val> WRP1AR register
|
|
; WRP1BR=<val> WRP1BR register
|
|
; WRP2AR=<val> WRP2AR register
|
|
; WRP2BR=<val> WRP2BR register
|
|
; SECBB1R1=<val> SECBB1R1 register
|
|
; SECBB1R2=<val> SECBB1R2 register
|
|
; SECBB1R3=<val> SECBB1R3 register
|
|
; SECBB1R4=<val> SECBB1R4 register
|
|
; SECBB2R1=<val> SECBB2R1 register
|
|
; SECBB2R2=<val> SECBB2R2 register
|
|
; SECBB2R3=<val> SECBB2R3 register
|
|
; SECBB2R4=<val> SECBB2R4 register
|
|
; PRIV1BBR1=<val> PRIV1BBR1 register
|
|
; PRIV1BBR2=<val> PRIV1BBR2 register
|
|
; PRIV1BBR3=<val> PRIV1BBR3 register
|
|
; PRIV1BBR4=<val> PRIV1BBR4 register
|
|
; PRIV2BBR1=<val> PRIV2BBR1 register
|
|
; PRIV2BBR2=<val> PRIV2BBR2 register
|
|
; PRIV2BBR3=<val> PRIV2BBR3 register
|
|
; PRIV2BBR4=<val> PRIV2BBR4 register
|
|
; SECHDPCR=<val> SECHDPCR register
|
|
; PRIVCFGR=<val> PRIVCFGR register
|
|
; Note: for clearing protection set xx_START=0xFF and xx_END=0x0
|
|
;
|
|
; RELOAD_OPTIONBYTES Activate Flash Settings by execution of an OBL_LAUNCH
|
|
;
|
|
; Calling the script without argument starts the Option Byte programming
|
|
; dialog window.
|
|
;
|
|
; @Author: PHI
|
|
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; --------------------------------------------------------------------------------
|
|
; $Rev: 12746 $
|
|
; $Id: stm32u5-optionbyte.cmm 12746 2023-11-17 09:17:02Z mschaeffner $
|
|
|
|
LOCAL ¶meters
|
|
ENTRY %LINE ¶meters
|
|
|
|
; LOCAL macros used as script global macros
|
|
LOCAL &Script
|
|
LOCAL &FlashRegBase &FlashAdressStart
|
|
LOCAL &OPTR &TZenabled
|
|
|
|
LOCAL &NSBOOTADD0R &NSBOOTADD1R &SECBOOTADD0R &SECHDPCR &PRIVCFGR
|
|
LOCAL &SECWM1R1 &SECWM1R2 &SECWM2R1 &SECWM2R2
|
|
LOCAL &WRP1AR &WRP1BR &WRP2AR &WRP2BR
|
|
LOCAL &SECBB1R1 &SECBB1R2 &SECBB1R3 &SECBB1R4
|
|
LOCAL &SECBB2R1 &SECBB2R2 &SECBB2R3 &SECBB2R4
|
|
LOCAL &PRIV1BBR1 &PRIV1BBR2 &PRIV1BBR3 &PRIV1BBR4
|
|
LOCAL &PRIV2BBR1 &PRIV2BBR2 &PRIV2BBR3 &PRIV2BBR4
|
|
|
|
&Script=OS.PPF()
|
|
|
|
; Use secured register mapping to program also registers, which can only be accessed secure
|
|
&FlashRegBase="D:0x40022000"
|
|
|
|
IF ((Data.Long(D:0x40022000+0x40)&0x80000000)==0x80000000)
|
|
(
|
|
&TZenabled=TRUE()
|
|
)
|
|
ELSE
|
|
(
|
|
&TZenabled=FALSE()
|
|
)
|
|
|
|
&FlashAdressStart="0x08000000"
|
|
|
|
; Checking CPU selection
|
|
IF !CPUIS(STM32U*)
|
|
(
|
|
SYStem.RESet
|
|
SYStem.CPU STM32U*
|
|
)
|
|
IF !(CPUIS(STM32U*))
|
|
(
|
|
PRINT %ERROR "CPU not supported by this script"
|
|
ENDDO
|
|
)
|
|
|
|
IF SYStem.MODE()<5
|
|
(
|
|
SYStem.Option.ResBreak OFF
|
|
SYStem.Up
|
|
)
|
|
|
|
; Parse script arguments
|
|
IF "¶meters"==""
|
|
(
|
|
; Look for any opened STM32U5 dialog windows and close them
|
|
IF DIALOG.EXIST("COMB_BORLEV")
|
|
DIALOG.END
|
|
|
|
GOSUB OptionByteDialog
|
|
)
|
|
ELSE
|
|
(
|
|
PRIVATE ¶m_RDP_LEV ¶m_BOR_LEV
|
|
PRIVATE ¶m_nRST_STOP ¶m_nRST_STDBY ¶m_nRST_SHDW ¶m_SRAM134_RST
|
|
PRIVATE ¶m_IWDG_SW ¶m_IWDG_STOP ¶m_IWDG_STDBY ¶m_WWDG_SW ¶m_SWAP_BANK
|
|
PRIVATE ¶m_BKPRAM_ECC ¶m_TZEN ¶m_IO_VDD_HSLV ¶m_IO_VDDIO2_HSLV
|
|
PRIVATE ¶m_PA15PUPEN ¶m_SRAM2_ECC ¶m_SRAM3_ECC ¶m_SRAM2_RST ¶m_nSWBOOT0 ¶m_nBOOT0
|
|
PRIVATE ¶m_NSBOOTADD0R ¶m_NSBOOTADD1R ¶m_SECBOOTADD0R
|
|
PRIVATE ¶m_SECWM1R1 ¶m_SECWM1R2 ¶m_SECWM2R1 ¶m_SECWM2R2
|
|
PRIVATE ¶m_WRP1AR ¶m_WRP2AR ¶m_WRP1BR ¶m_WRP2BR ¶m_SECHDPCR ¶m_PRIVCFGR
|
|
PRIVATE ¶m_SECBB1R1 ¶m_SECBB1R2 ¶m_SECBB1R3 ¶m_SECBB1R4
|
|
PRIVATE ¶m_SECBB2R1 ¶m_SECBB2R2 ¶m_SECBB2R3 ¶m_SECBB2R4
|
|
|
|
PRIVATE ¶m_reloadOptionBytes &programFlash
|
|
&programFlash=FALSE()
|
|
|
|
¶m_RDP_LEV=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"RDP_LEV=","")
|
|
¶m_BOR_LEV=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"BOR_LEV=","")
|
|
¶m_nRST_STOP=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NRST_STOP=","")
|
|
¶m_nRST_STDBY=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NRST_STDBY=","")
|
|
¶m_nRST_SHDW=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NRST_SHDW=","")
|
|
¶m_SRAM134_RST=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SRAM134_RST=","")
|
|
¶m_IWDG_SW=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"IWDG_SW=","")
|
|
¶m_IWDG_STOP=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"IWDG_STOP=","")
|
|
¶m_IWDG_STDBY=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"IWDG_STDBY=","")
|
|
¶m_WWDG_SW=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WWDG_SW=","")
|
|
¶m_SWAP_BANK=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SWAP_BANK=","")
|
|
¶m_BKPRAM_ECC=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"BKPRAM_ECC=","")
|
|
¶m_PA15PUPEN=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PA15PUPEN=","")
|
|
¶m_SRAM2_ECC=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SRAM2_ECC=","")
|
|
¶m_SRAM3_ECC=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SRAM3_ECC=","")
|
|
¶m_SRAM2_RST=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SRAM2_RST=","")
|
|
¶m_nSWBOOT0=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NSWBOOT0=","")
|
|
¶m_nBOOT0=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NBOOT0=","")
|
|
¶m_IO_VDD_HSLV=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"IO_VDD_HSLV=","")
|
|
¶m_IO_VDDIO2_HSLV=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"IO_VDDIO2_HSLV=","")
|
|
¶m_TZEN=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"TZEN=","")
|
|
¶m_NSBOOTADD0R=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NSBOOTADD0R=","")
|
|
¶m_NSBOOTADD1R=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NSBOOTADD1R=","")
|
|
¶m_SECBOOTADD0R=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBOOTADD0R=","")
|
|
¶m_SECWM1R1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECWM1R1=","")
|
|
¶m_SECWM1R2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECWM1R2=","")
|
|
¶m_SECWM2R1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECWM2R1=","")
|
|
¶m_SECWM2R2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECWM2R2=","")
|
|
¶m_WRP1AR=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP1AR=","")
|
|
¶m_WRP2AR=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP2AR=","")
|
|
¶m_WRP1BR=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP1BR=","")
|
|
¶m_WRP2BR=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP2BR=","")
|
|
¶m_SECHDPCR=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECHDPCR=","")
|
|
¶m_PRIVCFGR=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIVCFGR=","")
|
|
¶m_SECBB1R1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB1R1=","")
|
|
¶m_SECBB1R2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB1R2=","")
|
|
¶m_SECBB1R3=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB1R3=","")
|
|
¶m_SECBB1R4=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB1R4=","")
|
|
¶m_SECBB2R1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB2R1=","")
|
|
¶m_SECBB2R2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB2R2=","")
|
|
¶m_SECBB2R3=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB2R3=","")
|
|
¶m_SECBB2R4=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SECBB2R4=","")
|
|
¶m_PRIV1BBR1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV1BBR1=","")
|
|
¶m_PRIV1BBR2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV1BBR2=","")
|
|
¶m_PRIV1BBR3=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV1BBR3=","")
|
|
¶m_PRIV1BBR4=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV1BBR4=","")
|
|
¶m_PRIV2BBR1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV2BBR1=","")
|
|
¶m_PRIV2BBR2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV2BBR2=","")
|
|
¶m_PRIV2BBR3=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV2BBR3=","")
|
|
¶m_PRIV2BBR4=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"PRIV2BBR4=","")
|
|
|
|
¶m_reloadOptionBytes=(STRing.SCAN(STRing.UPpeR("¶meters"),"RELOAD_OPTIONBYTES",0)!=-1)
|
|
|
|
GOSUB ReadOptionBytes
|
|
|
|
IF "¶m_RDP_LEV"!=""
|
|
(
|
|
IF "¶m_RDP_LEV"=="1"
|
|
&OPTR=&OPTR&~0xFF
|
|
ELSE IF "¶m_RDP_LEV"=="0"
|
|
&OPTR=(&OPTR&~0xFF)|0xAA
|
|
ELSE IF "¶m_RDP_LEV"=="0.5"
|
|
&OPTR=(&OPTR&~0xFF)|0x55
|
|
&programFlash=TRUE()
|
|
)
|
|
|
|
IF "¶m_BOR_LEV"!=""
|
|
(
|
|
&OPTR=&OPTR&~0x700
|
|
IF "¶m_BOR_LEV"=="4"
|
|
&OPTR=&OPTR|0x400
|
|
ELSE IF "¶m_BOR_LEV"=="3"
|
|
&OPTR=&OPTR|0x300
|
|
ELSE IF "¶m_BOR_LEV"=="2"
|
|
&OPTR=&OPTR|0x200
|
|
ELSE IF "¶m_BOR_LEV"=="1"
|
|
&OPTR=&OPTR|0x100
|
|
&programFlash=TRUE()
|
|
)
|
|
|
|
IF "¶m_nRST_STOP"!=""
|
|
(
|
|
IF "¶m_nRST_STOP"=="1"
|
|
&OPTR=&OPTR|0x1000
|
|
ELSE IF "¶m_nRST_STOP"=="0"
|
|
&OPTR=&OPTR&~0x1000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_nRST_STDBY"!=""
|
|
(
|
|
IF "¶m_nRST_STDBY"=="1"
|
|
&OPTR=&OPTR|0x2000
|
|
ELSE IF "¶m_nRST_STDBY"=="0"
|
|
&OPTR=&OPTR&~0x2000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_nRST_SHDW"!=""
|
|
(
|
|
IF "¶m_nRST_SHDW"=="1"
|
|
&OPTR=&OPTR|0x4000
|
|
ELSE IF "¶m_nRST_SHDW"=="0"
|
|
&OPTR=&OPTR&~0x4000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_SRAM134_RST"!=""
|
|
(
|
|
IF "¶m_SRAM134_RST"=="1"
|
|
&OPTR=&OPTR|0x8000
|
|
ELSE IF "¶m_SRAM134_RST"=="0"
|
|
&OPTR=&OPTR&~0x8000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_IWDG_SW"!=""
|
|
(
|
|
IF "¶m_IWDG_SW"=="1"
|
|
&OPTR=&OPTR|0x10000
|
|
ELSE IF "¶m_IWDG_SW"=="0"
|
|
&OPTR=&OPTR&~0x10000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_IWDG_STOP"!=""
|
|
(
|
|
IF "¶m_IWDG_STOP"=="1"
|
|
&OPTR=&OPTR|0x20000
|
|
ELSE IF "¶m_IWDG_STOP"=="0"
|
|
&OPTR=&OPTR&~0x20000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_IWDG_STDBY"!=""
|
|
(
|
|
IF "¶m_IWDG_STDBY"=="1"
|
|
&OPTR=&OPTR|0x40000
|
|
ELSE IF "¶m_IWDG_STDBY"=="0"
|
|
&OPTR=&OPTR&~0x40000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_WWDG_SW"!=""
|
|
(
|
|
IF "¶m_WWDG_SW"=="1"
|
|
&OPTR=&OPTR|0x80000
|
|
ELSE IF "¶m_WWDG_SW"=="0"
|
|
&OPTR=&OPTR&~0x80000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_SWAP_BANK"!=""
|
|
(
|
|
IF "¶m_SWAP_BANK"=="1"
|
|
&OPTR=&OPTR|0x100000
|
|
ELSE IF "¶m_SWAP_BANK"=="0"
|
|
&OPTR=&OPTR&~0x100000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_BKPRAM_ECC"!=""
|
|
(
|
|
IF "¶m_BKPRAM_ECC"=="1"
|
|
&OPTR=&OPTR|0x400000
|
|
ELSE IF "¶m_BKPRAM_ECC"=="0"
|
|
&OPTR=&OPTR&~0x400000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_PA15PUPEN"!=""
|
|
(
|
|
IF "¶m_PA15PUPEN"=="1"
|
|
&OPTR=&OPTR|0x10000000
|
|
ELSE IF "¶m_PA15PUPEN"=="0"
|
|
&OPTR=&OPTR&~0x10000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_SRAM2_ECC"!=""
|
|
(
|
|
IF "¶m_SRAM2_ECC"=="1"
|
|
&OPTR=&OPTR|0x1000000
|
|
ELSE IF "¶m_SRAM2_ECC"=="0"
|
|
&OPTR=&OPTR&~0x1000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_SRAM3_ECC"!=""
|
|
(
|
|
IF "¶m_SRAM3_ECC"=="1"
|
|
&OPTR=&OPTR|0x800000
|
|
ELSE IF "¶m_SRAM3_ECC"=="0"
|
|
&OPTR=&OPTR&~0x800000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_SRAM2_RST"!=""
|
|
(
|
|
IF "¶m_SRAM2_RST"=="1"
|
|
&OPTR=&OPTR|0x2000000
|
|
ELSE IF "¶m_SRAM2_RST"=="0"
|
|
&OPTR=&OPTR&~0x2000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_nSWBOOT0"!=""
|
|
(
|
|
IF "¶m_nSWBOOT0"=="1"
|
|
&OPTR=&OPTR|0x4000000
|
|
ELSE IF "¶m_nSWBOOT0"=="0"
|
|
&OPTR=&OPTR&~0x4000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_nBOOT0"!=""
|
|
(
|
|
IF "¶m_nBOOT0"=="1"
|
|
&OPTR=&OPTR|0x8000000
|
|
ELSE IF "¶m_nBOOT0"=="0"
|
|
&OPTR=&OPTR&~0x8000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_IO_VDD_HSLV"!=""
|
|
(
|
|
IF "¶m_IO_VDD_HSLV"=="1"
|
|
&OPTR=&OPTR|0x20000000
|
|
ELSE IF "¶m_IO_VDD_HSLV"=="0"
|
|
&OPTR=&OPTR&~0x20000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_IO_VDDIO2_HSLV"!=""
|
|
(
|
|
IF "¶m_IO_VDDIO2_HSLV"=="1"
|
|
&OPTR=&OPTR|0x40000000
|
|
ELSE IF "¶m_IO_VDDIO2_HSLV"=="0"
|
|
&OPTR=&OPTR&~0x40000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_PA15PUPEN"!=""
|
|
(
|
|
IF "¶m_PA15PUPEN"=="1"
|
|
&OPTR=&OPTR|0x10000000
|
|
ELSE IF "¶m_PA15PUPEN"=="0"
|
|
&OPTR=&OPTR&~0x10000000
|
|
&programFlash=TRUE()
|
|
)
|
|
IF "¶m_TZEN"!=""
|
|
(
|
|
IF "¶m_TZEN"=="1"
|
|
&OPTR=&OPTR|0x80000000
|
|
ELSE IF "¶m_TZEN"=="0"
|
|
&OPTR=&OPTR&~0x80000000
|
|
&programFlash=TRUE()
|
|
)
|
|
|
|
IF ("¶m_NSBOOTADD0R"!="")
|
|
(
|
|
&NSBOOTADD0R=¶m_NSBOOTADD0R
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_NSBOOTADD1R"!="")
|
|
(
|
|
&NSBOOTADD1R=¶m_NSBOOTADD1R
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBOOTADD0R"!="")
|
|
(
|
|
&SECBOOTADD0R=¶m_SECBOOTADD0R
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECWM1R1"!="")
|
|
(
|
|
&SECWM1R1=¶m_SECWM1R1
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECWM1R2"!="")
|
|
(
|
|
&SECWM1R2=¶m_SECWM1R2
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECWM2R1"!="")
|
|
(
|
|
&SECWM2R1=¶m_SECWM2R1
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECWM2R2"!="")
|
|
(
|
|
&SECWM2R2=¶m_SECWM2R2
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_WRP1AR"!="")
|
|
(
|
|
&WRP1AR=¶m_WRP1AR
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_WRP1BR"!="")
|
|
(
|
|
&WRP1BR=¶m_WRP1BR
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_WRP2AR"!="")
|
|
(
|
|
&WRP2AR=¶m_WRP2AR
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_WRP2BR"!="")
|
|
(
|
|
&WRP2BR=¶m_WRP2BR
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB1R1"!="")
|
|
(
|
|
&SECBB1R1=¶m_SECBB1R1
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB1R2"!="")
|
|
(
|
|
&SECBB1R2=¶m_SECBB1R2
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB1R3"!="")
|
|
(
|
|
&SECBB1R3=¶m_SECBB1R3
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB1R4"!="")
|
|
(
|
|
&SECBB1R4=¶m_SECBB1R4
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB2R1"!="")
|
|
(
|
|
&SECBB2R1=¶m_SECBB2R1
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB2R2"!="")
|
|
(
|
|
&SECBB2R2=¶m_SECBB2R2
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB2R3"!="")
|
|
(
|
|
&SECBB2R3=¶m_SECBB2R3
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECBB2R4"!="")
|
|
(
|
|
&SECBB2R4=¶m_SECBB2R4
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV1BBR1"!="")
|
|
(
|
|
&PRIV1BBR1=¶m_PRIV1BBR1
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV1BBR2"!="")
|
|
(
|
|
&PRIV1BBR2=¶m_PRIV1BBR2
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV1BBR3"!="")
|
|
(
|
|
&PRIV1BBR3=¶m_PRIV1BBR3
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV1BBR4"!="")
|
|
(
|
|
&PRIV1BBR4=¶m_PRIV1BBR4
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV2BBR1"!="")
|
|
(
|
|
&PRIV2BBR1=¶m_PRIV2BBR1
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV2BBR2"!="")
|
|
(
|
|
&PRIV2BBR2=¶m_PRIV2BBR2
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV2BBR3"!="")
|
|
(
|
|
&PRIV2BBR3=¶m_PRIV2BBR3
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIV2BBR4"!="")
|
|
(
|
|
&PRIV2BBR4=¶m_PRIV2BBR4
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_SECHDPCR"!="")
|
|
(
|
|
&SECHDPCR=¶m_SECHDPCR
|
|
&programFlash=TRUE()
|
|
)
|
|
IF ("¶m_PRIVCFGR"!="")
|
|
(
|
|
&PRIVCFGR=¶m_PRIVCFGR
|
|
&programFlash=TRUE()
|
|
)
|
|
|
|
; Special script calls from dialog to refresh the dialog or activate option bytes.
|
|
IF (STRing.SCAN(STRing.UPpeR("¶meters"),"REFRESH",0)!=-1)
|
|
(
|
|
GOSUB UpdateWindowFromFlashContents
|
|
)
|
|
ELSE IF (STRing.SCAN(STRing.UPpeR("¶meters"),"RELOAD_OPTIONBYTES",0)!=-1)
|
|
(
|
|
GOSUB ActivateFlashSettings
|
|
)
|
|
; Program option bytes into flash
|
|
ELSE IF &programFlash
|
|
(
|
|
GOSUB ProgramOptionBytes
|
|
)
|
|
ELSE
|
|
(
|
|
)
|
|
)
|
|
|
|
ENDDO
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; NVM bit programming dialog window
|
|
|
|
OptionByteDialog:
|
|
|
|
; Creating the main dialog.
|
|
WinPOS 10. 1. 74. 38.
|
|
|
|
DIALOG.view
|
|
(&
|
|
HEADER SYStem.CPU()+" option bytes"
|
|
POS 1. 0. 72. 16.
|
|
BOX "User option bytes"
|
|
POS 3. 1. 20. 1.
|
|
TEXT "Read protection Level:"
|
|
POS 20. 1. 25. 1.
|
|
COMB_RDP: COMBOBOX "Level 0:No read protection,Level 0.5:only non-secure debug access,Level 1:Read protection" ""
|
|
POS 3. 2. 20. 1.
|
|
TEXT "BOR reset level:"
|
|
POS 20. 2. 25. 1.
|
|
COMB_BORLEV: COMBOBOX "Level 0:threshold around 1.7 V,Level 1:threshold around 2.0 V,Level 2:threshold around 2.2 V,Level 3:threshold around 2.5 V,Level 4:threshold around 2.8 V" ""
|
|
POS 3. 4. 30. 1.
|
|
CHK_RST_STOP: CHECKBOX "Reset when entering Stop mode" ""
|
|
POS 3. 5. 30. 1.
|
|
CHK_RST_STDBY: CHECKBOX "Reset when entering Standby mode" ""
|
|
POS 34. 4. 35. 1.
|
|
CHK_RST_SHDW: CHECKBOX "Reset when entering Shutdown mode" ""
|
|
POS 34. 5. 35. 1.
|
|
CHK_SRAM134_RST:CHECKBOX "SSRAM1/3 and 4 erased upon system reset" ""
|
|
POS 3. 6. 25. 1.
|
|
CHSB_IWDG.HW: CHOOSEBOX "Hardware independant watchdog" ""
|
|
CHSB_IWDG.SW: CHOOSEBOX "Software independant watchdog" ""
|
|
POS 34. 6. 30. 1.
|
|
CHSB_WWDG.HW: CHOOSEBOX "Hardware window watchdog" ""
|
|
CHSB_WWDG.SW: CHOOSEBOX "Software window watchdog" ""
|
|
POS 3. 8. 29. 1.
|
|
CHK_IWDG_STOP: CHECKBOX "Watchdog counter freeze in Stop mode" ""
|
|
POS 34. 8. 33. 1.
|
|
CHK_IWDG_STDBY: CHECKBOX "Watchdog counter freeze in Standby mode" ""
|
|
POS 3. 9. 24. 1.
|
|
CHK_SWAP_BANK: CHECKBOX "Swap Banks" ""
|
|
POS 34. 9. 31. 1.
|
|
CHK_BKPRAM_ECC_DIS: CHECKBOX "Backup RAM ECC check disabled" ""
|
|
POS 3. 10. 25. 1.
|
|
CHK_SRAM2_ECC_CHECK_DIS: CHECKBOX "SRAM2 ECC check disabled" ""
|
|
POS 3. 11. 30. 1.
|
|
CHK_SRAM3_ECC_CHECK_DIS: CHECKBOX "SRAM3 ECC check disabled" ""
|
|
POS 34. 10. 30. 1.
|
|
CHK_RAM_ERASE: CHECKBOX "SRAM2 Erase when system reset" ""
|
|
POS 3. 12. 15. 1.
|
|
CHK_NBOOT0: CHECKBOX "nBOOT0" ""
|
|
POS 34. 12. 15. 1.
|
|
CHK_NSWBOOT0: CHECKBOX "nSWBOOT0" ""
|
|
POS 3. 13. 20. 1.
|
|
CHK_PA15PUPEN: CHECKBOX "PA15 pull-up enable" ""
|
|
POS 34. 13. 30. 1.
|
|
CHK_TZEN: CHECKBOX "Global TrustZone security enabled" ""
|
|
POS 3. 14. 28. 1.
|
|
CHK_IO_VDD_HSLV: CHECKBOX "High-speed IO at low VDD voltage feature enabled" ""
|
|
POS 34. 14. 30. 1.
|
|
CHK_IO_VDDIO2_HSLV:CHECKBOX "High-speed IO at low VDDIO2 voltage feature enabled" ""
|
|
|
|
POS 1. 16. 72. 20.
|
|
BOX "Registers for protected zones"
|
|
POS 3. 17. 12. 1.
|
|
TEXT "NSBOOTADD0R"
|
|
POS 15. 17. 11. 1.
|
|
NSBOOTADD0R: EDIT "" ""
|
|
POS 28. 17. 12. 1.
|
|
TEXT "NSBOOTADD1R"
|
|
POS 41. 17. 11. 1.
|
|
NSBOOTADD1R: EDIT "" ""
|
|
POS 3. 18. 12. 1.
|
|
TEXT "SECBOOTADD0"
|
|
POS 15. 18. 11. 1.
|
|
SECBOOTADD0: EDIT "" ""
|
|
POS 28. 18. 24. 1.
|
|
CHK_BOOT_LOCK: CHECKBOX "Boot lock" ""
|
|
POS 3. 19. 12. 1.
|
|
TEXT "SECWM1R1"
|
|
POS 15. 19. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 19. 6. 1.
|
|
SECWM1R1_START_PAGE:EDIT "" ""
|
|
POS 28. 19. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 19. 6. 1.
|
|
SECWM1R1_END_PAGE:EDIT "" ""
|
|
POS 3. 20. 12. 1.
|
|
TEXT "SECWM1R2"
|
|
POS 15. 20. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 20. 6. 1.
|
|
SECWM1R2_START_PAGE:EDIT "" ""
|
|
POS 28. 20. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 20. 6. 1.
|
|
SECWM1R2_END_PAGE:EDIT "" ""
|
|
POS 44. 20. 11. 1.
|
|
CHK_HDP1EN: CHECKBOX "HDP1 area enabled" ""
|
|
POS 55. 20. 13. 1.
|
|
CHK_PCROP1EN: CHECKBOX "PCROP1 area enabled" ""
|
|
POS 3. 21. 12. 1.
|
|
TEXT "SECWM2R1"
|
|
POS 15. 21. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 21. 6. 1.
|
|
SECWM2R1_START_PAGE:EDIT "" ""
|
|
POS 28. 21. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 21. 6. 1.
|
|
SECWM2R1_END_PAGE:EDIT "" ""
|
|
POS 3. 22. 12. 1.
|
|
TEXT "SECWM2R2"
|
|
POS 15. 22. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 22. 6. 1.
|
|
SECWM2R2_START_PAGE:EDIT "" ""
|
|
POS 28. 22. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 22. 6. 1.
|
|
SECWM2R2_END_PAGE:EDIT "" ""
|
|
POS 44. 22. 11. 1.
|
|
CHK_HDP2EN: CHECKBOX "HDP2 area enabled" ""
|
|
POS 55. 22. 13. 1.
|
|
CHK_PCROP2EN: CHECKBOX "PCROP2 area enabled" ""
|
|
POS 3. 23. 12. 1.
|
|
TEXT "WRP1AR"
|
|
POS 15. 23. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 23. 6. 1.
|
|
WRP1AR_START_PAGE:EDIT "" ""
|
|
POS 28. 23. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 23. 6. 1.
|
|
WRP1AR_END_PAGE:EDIT "" ""
|
|
POS 50. 23. 11. 1.
|
|
CHK_WRP1A_UNLOCK:CHECKBOX "Pages unlocked" ""
|
|
POS 3. 24. 12. 1.
|
|
TEXT "WRP1BR"
|
|
POS 15. 24. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 24. 6. 1.
|
|
WRP1BR_START_PAGE:EDIT "" ""
|
|
POS 28. 24. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 24. 6. 1.
|
|
WRP1BR_END_PAGE:EDIT "" ""
|
|
POS 50. 24. 11. 1.
|
|
CHK_WRP1B_UNLOCK:CHECKBOX "Pages unlocked" ""
|
|
POS 3. 25. 12. 1.
|
|
TEXT "WRP2AR"
|
|
POS 15. 25. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 25. 6. 1.
|
|
WRP2AR_START_PAGE:EDIT "" ""
|
|
POS 28. 25. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 25. 6. 1.
|
|
WRP2AR_END_PAGE:EDIT "" ""
|
|
POS 50. 25. 12. 1.
|
|
CHK_WRP2A_UNLOCK:CHECKBOX "Pages unlocked" ""
|
|
POS 3. 26. 12. 1.
|
|
TEXT "WRP2BR"
|
|
POS 15. 26. 6. 1.
|
|
TEXT "1. Page"
|
|
POS 21. 26. 6. 1.
|
|
WRP2BR_START_PAGE:EDIT "" ""
|
|
POS 28. 26. 8. 1.
|
|
TEXT "Last Page"
|
|
POS 37. 26. 6. 1.
|
|
WRP2BR_END_PAGE:EDIT "" ""
|
|
POS 50. 26. 11. 1.
|
|
CHK_WRP2B_UNLOCK:CHECKBOX "Pages unlocked" ""
|
|
POS 3. 27. 11. 1.
|
|
TEXT "SECBB1R1"
|
|
POS 15. 27. 11. 1.
|
|
SECBB1R1: EDIT "" ""
|
|
POS 3. 28. 11. 1.
|
|
TEXT "SECBB1R2"
|
|
POS 15. 28. 11. 1.
|
|
SECBB1R2: EDIT "" ""
|
|
POS 3. 29. 11. 1.
|
|
TEXT "SECBB1R3"
|
|
POS 15. 29. 11. 1.
|
|
SECBB1R3: EDIT "" ""
|
|
POS 3. 30. 11. 1.
|
|
TEXT "SECBB1R4"
|
|
POS 15. 30. 11. 1.
|
|
SECBB1R4: EDIT "" ""
|
|
POS 3. 31. 11. 1.
|
|
TEXT "SECBB2R1"
|
|
POS 15. 31. 11. 1.
|
|
SECBB2R1: EDIT "" ""
|
|
POS 3. 32. 11. 1.
|
|
TEXT "SECBB2R2"
|
|
POS 15. 32. 11. 1.
|
|
SECBB2R2: EDIT "" ""
|
|
POS 3. 33. 11. 1.
|
|
TEXT "SECBB2R3"
|
|
POS 15. 33. 11. 1.
|
|
SECBB2R3: EDIT "" ""
|
|
POS 3. 34. 11. 1.
|
|
TEXT "SECBB2R4"
|
|
POS 15. 34. 11. 1.
|
|
SECBB2R4: EDIT "" ""
|
|
POS 28. 27. 9. 1.
|
|
TEXT "PRIV1BBR1"
|
|
POS 37. 27. 11. 1.
|
|
PRIV1BBR1: EDIT "" ""
|
|
POS 28. 28. 9. 1.
|
|
TEXT "PRIV1BBR2"
|
|
POS 37. 28. 11. 1.
|
|
PRIV1BBR2: EDIT "" ""
|
|
POS 28. 29. 9. 1.
|
|
TEXT "PRIV1BBR3"
|
|
POS 37. 29. 11. 1.
|
|
PRIV1BBR3: EDIT "" ""
|
|
POS 28. 30. 9. 1.
|
|
TEXT "PRIV1BBR4"
|
|
POS 37. 30. 11. 1.
|
|
PRIV1BBR4: EDIT "" ""
|
|
POS 28. 31. 9. 1.
|
|
TEXT "PRIV2BBR1"
|
|
POS 37. 31. 11. 1.
|
|
PRIV2BBR1: EDIT "" ""
|
|
POS 28. 32. 9. 1.
|
|
TEXT "PRIV2BBR2"
|
|
POS 37. 32. 11. 1.
|
|
PRIV2BBR2: EDIT "" ""
|
|
POS 28. 33. 9. 1.
|
|
TEXT "PRIV2BBR3"
|
|
POS 37. 33. 11. 1.
|
|
PRIV2BBR3: EDIT "" ""
|
|
POS 28. 34. 9. 1.
|
|
TEXT "PRIV2BBR4"
|
|
POS 37. 34. 11. 1.
|
|
PRIV2BBR4: EDIT "" ""
|
|
POS 50. 27. 17. 1.
|
|
CHK_HDP1_ACCDIS:CHECKBOX "Access to HDP1 area denied" ""
|
|
POS 50. 28. 17. 1.
|
|
CHK_HDP2_ACCDIS:CHECKBOX "Access to HDP2 area denied" ""
|
|
POS 50. 29. 22. 1.
|
|
CHK_NSPRIV: CHECKBOX "Privileged non-secure Flash register access" ""
|
|
POS 50. 30. 17. 1.
|
|
CHK_SPRIV: CHECKBOX "Privileged secure Flash register access" ""
|
|
POS 1. 36. 12. 1.5
|
|
BUTTON "Program option bytes"
|
|
(
|
|
PRIVATE &value &value2
|
|
LOCAL &progRDP_LEV &progBOR_LEV &progRST_STOP &progRST_STDBY &progRST_SHDW &progSRAM134_RST
|
|
LOCAL &progIWDG_SW &progIWDG_STOP &progIWDG_STDBY &progWWDG_SW
|
|
LOCAL ¶m_SWAP_BANK &progBKPRAM_ECC &progTZEN &SRAM2_ECC &SRAM3_ECC
|
|
LOCAL &progSRAM2_RST &progNSWBOOT0 &progNBOOT0 &progPA15PUPEN &progIO_VDD_HSLV &progIO_VDDIO2_HSLV
|
|
LOCAL &progNSBOOTADD0R &progNSBOOTADD1R &progSECBOOTADD0R
|
|
LOCAL &progSECWM1R1 &progSECWM1R2 &progSECWM2R1 &progSECWM2R2
|
|
LOCAL &progWRP1AR &progWRP1BR &progWRP2AR &progWRP2BR
|
|
LOCAL &progSECBB1R1 &progSECBB1R2 &progSECBB1R3 &progSECBB1R4
|
|
LOCAL &progSECBB2R1 &progSECBB2R2 &progSECBB2R3 &progSECBB2R4
|
|
LOCAL &progPRIV1BBR1 &progPRIV1BBR2 &progPRIV1BBR3 &progPRIV1BBR4
|
|
LOCAL &progPRIV2BBR1 &progPRIV2BBR2 &progPRIV2BBR3 &progPRIV2BBR4
|
|
LOCAL &progSECHDPCR &progPRIVCFGR
|
|
|
|
IF DIALOG.STRING("COMB_RDP")=="Level 0:No read protection"
|
|
&progRDP_LEV="RDP_LEV=0"
|
|
ELSE IF DIALOG.STRING("COMB_RDP")=="Level 0.5:only non-secure debug access"
|
|
&progRDP_LEV="RDP_LEV=0.5"
|
|
ELSE
|
|
&progRDP_LEV="RDP_LEV=1"
|
|
|
|
IF DIALOG.STRING("COMB_BORLEV")=="Level 4:threshold around 2.8 V"
|
|
&progBOR_LEV="BOR_LEV=4"
|
|
ELSE IF DIALOG.STRING("COMB_BORLEV")=="Level 3:threshold around 2.5 V"
|
|
&progBOR_LEV="BOR_LEV=3"
|
|
ELSE IF DIALOG.STRING("COMB_BORLEV")=="Level 2:threshold around 2.2 V"
|
|
&progBOR_LEV="BOR_LEV=2"
|
|
ELSE IF DIALOG.STRING("COMB_BORLEV")=="Level 1:threshold around 2.0 V"
|
|
&progBOR_LEV="BOR_LEV=1"
|
|
ELSE
|
|
&progBOR_LEV="BOR_LEV=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_RST_STOP")
|
|
&progRST_STOP="NRST_STOP=0"
|
|
ELSE
|
|
&progRST_STOP="NRST_STOP=1"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_RST_STDBY")
|
|
&progRST_STDBY="NRST_STDBY=0"
|
|
ELSE
|
|
&progRST_STDBY="NRST_STDBY=1"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_RST_SHDW")
|
|
&progRST_SHDW="NRST_SHDW=0"
|
|
ELSE
|
|
&progRST_SHDW="NRST_SHDW=1"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_SRAM134_RST")
|
|
&progSRAM134_RST="CHK_SRAM134_RST=1"
|
|
ELSE
|
|
&progSRAM134_RST="CHK_SRAM134_RST=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHSB_IWDG.SW")
|
|
&progIWDG_SW="IWDG_SW=1"
|
|
ELSE
|
|
&progIWDG_SW="IWDG_SW=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_IWDG_STOP")
|
|
&progIWDG_STOP="IWDG_STOP=0"
|
|
ELSE
|
|
&progIWDG_STOP="IWDG_STOP=1"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_IWDG_STDBY")
|
|
&progIWDG_STDBY="IWDG_STDBY=0"
|
|
ELSE
|
|
&progIWDG_STDBY="IWDG_STDBY=1"
|
|
|
|
IF DIALOG.BOOLEAN("CHSB_WWDG.SW")
|
|
&progWWDG_SW="WWDG_SW=1"
|
|
ELSE
|
|
&progWWDG_SW="WWDG_SW=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_SWAP_BANK")
|
|
&progSWAP_BANK="SWAP_BANK=1"
|
|
ELSE
|
|
&progSWAP_BANK="SWAP_BANK=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_BKPRAM_ECC_DIS")
|
|
&progBKPRAM_ECC="BKPRAM_ECC=1"
|
|
ELSE
|
|
&progBKPRAM_ECC="BKPRAM_ECC=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_SRAM2_ECC_CHECK_DIS")
|
|
&SRAM2_ECC="SRAM2_ECC=1"
|
|
ELSE
|
|
&SRAM2_ECC="SRAM2_ECC=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_SRAM3_ECC_CHECK_DIS")
|
|
&SRAM3_ECC="SRAM3_ECC=1"
|
|
ELSE
|
|
&SRAM3_ECC="SRAM3_ECC=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_RAM_ERASE")
|
|
&progSRAM2_RST="SRAM2_RST=0"
|
|
ELSE
|
|
&progSRAM2_RST="SRAM2_RST=1"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_NSWBOOT0")
|
|
&progNSWBOOT0="NSWBOOT0=1"
|
|
ELSE
|
|
&progNSWBOOT0="NSWBOOT0=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_NBOOT0")
|
|
&progNBOOT0="NBOOT0=1"
|
|
ELSE
|
|
&progNBOOT0="NBOOT0=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_PA15PUPEN")
|
|
&progPA15PUPEN="PA15PUPEN=1"
|
|
ELSE
|
|
&progPA15PUPEN="PA15PUPEN=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_IO_VDD_HSLV")
|
|
&progIO_VDD_HSLV="IO_VDD_HSLV=1"
|
|
ELSE
|
|
&progIO_VDD_HSLV="IO_VDD_HSLV=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_IO_VDDIO2_HSLV")
|
|
&progIO_VDDIO2_HSLV="IO_VDDIO2_HSLV=1"
|
|
ELSE
|
|
&progIO_VDDIO2_HSLV="IO_VDDIO2_HSLV=0"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_TZEN")
|
|
(
|
|
IF (&TZenabled==FALSE())
|
|
(
|
|
DIALOG.YESNO "Enable Trust Zone ?"
|
|
ENTRY &enableTZEN
|
|
IF !(&enableTZEN)
|
|
ENDDO
|
|
)
|
|
&progTZEN="TZEN=1"
|
|
)
|
|
ELSE
|
|
&progTZEN="TZEN=0"
|
|
|
|
&value=DIALOG.STRing(NSBOOTADD0R)
|
|
&progNSBOOTADD0R="NSBOOTADD0R=&value&0xFFFFFF80"
|
|
&value=DIALOG.STRing(NSBOOTADD1R)
|
|
&progNSBOOTADD1R="NSBOOTADD1R=&value&0xFFFFFF80"
|
|
&value=DIALOG.STRing(SECBOOTADD0)
|
|
&value=&value&0xFFFFFF80
|
|
&value=&value|0x7C //reserved values are Ones and mustn't be modified ! Special rule for secbootaddr programming
|
|
&progSECBOOTADD0R="SECBOOTADD0R=&value"
|
|
IF DIALOG.BOOLEAN("CHK_BOOT_LOCK")
|
|
&progSECBOOTADD0R=progSECBOOTADD0R|0x1
|
|
|
|
&value=DIALOG.STRing(SECWM1R1_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(SECWM1R1_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
&value=&value|0xFF80FF80 //reserved values are Ones and mustn't be modified ! Special rule for watermark register programming
|
|
&progSECWM1R1="SECWM1R1=&value"
|
|
|
|
&value=DIALOG.STRing(SECWM1R2_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(SECWM1R2_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
IF DIALOG.BOOLEAN("CHK_HDP1EN")
|
|
&value=&value|0x80000000
|
|
ELSE
|
|
&value=&value&~0x80000000
|
|
IF DIALOG.BOOLEAN("CHK_PCROP1EN")
|
|
&value=&value|0x8000
|
|
ELSE
|
|
&value=&value&~0x8000
|
|
&value=&value|0x7F807F80
|
|
&progSECWM1R2="SECWM1R2=&value"
|
|
|
|
&value=DIALOG.STRing(SECWM2R1_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(SECWM2R1_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
&value=&value|0xFF80FF80
|
|
&progSECWM2R1="SECWM2R1=&value"
|
|
|
|
&value=DIALOG.STRing(SECWM2R2_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(SECWM2R2_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
IF DIALOG.BOOLEAN("CHK_HDP2EN")
|
|
&value=&value|0x80000000
|
|
ELSE
|
|
&value=&value&~0x80000000
|
|
IF DIALOG.BOOLEAN("CHK_PCROP2EN")
|
|
&value=&value|0x8000
|
|
ELSE
|
|
&value=&value&~0x8000
|
|
&value=&value|0x7F807F80
|
|
&progSECWM2R2="SECWM2R2=&value"
|
|
|
|
&value=DIALOG.STRing(WRP1AR_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(WRP1AR_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
IF DIALOG.BOOLEAN("CHK_WRP1A_UNLOCK")
|
|
&value=&value|0x80000000
|
|
ELSE
|
|
&value=&value&~0x80000000
|
|
&progWRP1AR="WRP1AR=&value"
|
|
|
|
&value=DIALOG.STRing(WRP1BR_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(WRP1BR_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
IF DIALOG.BOOLEAN("CHK_WRP1B_UNLOCK")
|
|
&value=&value|0x80000000
|
|
ELSE
|
|
&value=&value&~0x80000000
|
|
&progWRP1BR="WRP1BR=&value"
|
|
|
|
&value=DIALOG.STRing(WRP2AR_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(WRP2AR_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
IF DIALOG.BOOLEAN("CHK_WRP2A_UNLOCK")
|
|
&value=&value|0x80000000
|
|
ELSE
|
|
&value=&value&~0x80000000
|
|
&progWRP2AR="WRP2AR=&value"
|
|
|
|
&value=DIALOG.STRing(WRP2BR_START_PAGE)
|
|
&value="0x"+FORMAT.HEX(8.,&value)
|
|
&value2=DIALOG.STRing(WRP2BR_END_PAGE)
|
|
&value2="0x"+FORMAT.HEX(4.,&value2)
|
|
&value=&value|(&value2<<16.)
|
|
IF DIALOG.BOOLEAN("CHK_WRP2B_UNLOCK")
|
|
&value=&value|0x80000000
|
|
ELSE
|
|
&value=&value&~0x80000000
|
|
&progWRP2BR="WRP2BR=&value"
|
|
|
|
&value=DIALOG.STRing(SECBB1R1)
|
|
&progSECBB1R1="SECBB1R1=&value"
|
|
&value=DIALOG.STRing(SECBB1R2)
|
|
&progSECBB1R2="SECBB1R2=&value"
|
|
&value=DIALOG.STRing(SECBB1R3)
|
|
&progSECBB1R3="SECBB1R3=&value"
|
|
&value=DIALOG.STRing(SECBB1R4)
|
|
&progSECBB1R4="SECBB1R4=&value"
|
|
&value=DIALOG.STRing(SECBB2R1)
|
|
&progSECBB2R1="SECBB2R1=&value"
|
|
&value=DIALOG.STRing(SECBB1R2)
|
|
&progSECBB1R2="SECBB1R2=&value"
|
|
&value=DIALOG.STRing(SECBB2R2)
|
|
&progSECBB2R2="SECBB2R2=&value"
|
|
&value=DIALOG.STRing(SECBB2R3)
|
|
&progSECBB2R3="SECBB2R3=&value"
|
|
&value=DIALOG.STRing(SECBB2R4)
|
|
&progSECBB2R4="SECBB2R4=&value"
|
|
&value=DIALOG.STRing(PRIV1BBR1)
|
|
&progPRIV1BBR1="PRIV1BBR1=&value"
|
|
&value=DIALOG.STRing(PRIV1BBR2)
|
|
&progPRIV1BBR2="PRIV1BBR2=&value"
|
|
&value=DIALOG.STRing(PRIV1BBR3)
|
|
&progPRIV1BBR3="PRIV1BBR3=&value"
|
|
&value=DIALOG.STRing(PRIV1BBR4)
|
|
&progPRIV1BBR4="PRIV1BBR4=&value"
|
|
&value=DIALOG.STRing(PRIV2BBR1)
|
|
&progPRIV2BBR1="PRIV2BBR1=&value"
|
|
&value=DIALOG.STRing(PRIV2BBR2)
|
|
&progPRIV2BBR2="PRIV2BBR2=&value"
|
|
&value=DIALOG.STRing(PRIV2BBR3)
|
|
&progPRIV2BBR3="PRIV2BBR3=&value"
|
|
&value=DIALOG.STRing(PRIV2BBR4)
|
|
&progPRIV2BBR4="PRIV2BBR4=&value"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_HDP1_ACCDIS")
|
|
&value=0x1
|
|
ELSE
|
|
&value=0x0
|
|
IF DIALOG.BOOLEAN("CHK_HDP2_ACCDIS")
|
|
&value=&value|0x2
|
|
ELSE
|
|
&value=&value&~0x2
|
|
&progSECHDPCR="SECHDPCR=&value"
|
|
|
|
IF DIALOG.BOOLEAN("CHK_SPRIV")
|
|
&value=0x1
|
|
ELSE
|
|
&value=0x0
|
|
IF DIALOG.BOOLEAN("CHK_NSPRIV")
|
|
&value=&value|0x2
|
|
ELSE
|
|
&value=&value&~0x2
|
|
&progPRIVCFGR="PRIVCFGR=&value"
|
|
|
|
DO "&Script" &progRDP_LEV &progBOR_LEV &progRST_STOP &progRST_STDBY &progRST_SHDW &progSRAM134_RST &progIWDG_SW &progIWDG_STOP &progIWDG_STDBY &progWWDG_SW &progSWAP_BANK &progBKPRAM_ECC &progPA15PUPEN &progTZEN &progIO_VDD_HSLV &progIO_VDDIO2_HSLV &SRAM2_ECC &SRAM3_ECC &progSRAM2_RST &progNSWBOOT0 &progNBOOT0 &progNSBOOTADD0R &progNSBOOTADD1R &progSECBOOTADD0R &progSECWM1R1 &progSECWM1R2 &progSECWM2R1 &progSECWM2R2 &progWRP1AR &progWRP1BR &progWRP2AR &progWRP2BR &progSECBB1R1 &progSECBB1R2 &progSECBB1R3 &progSECBB1R4 &progSECBB2R1 &progSECBB2R2 &progSECBB2R3 &progSECBB2R4 &progPRIV1BBR1 &progPRIV1BBR2 &progPRIV1BBR3 &progPRIV1BBR4 &progPRIV2BBR1 &progPRIV2BBR2 &progPRIV2BBR3 &progPRIV2BBR4 &progSECHDPCR &progPRIVCFGR &progSECHDPCR &progPRIVCFG
|
|
)
|
|
|
|
POS 21. 36. 15. 1.5
|
|
BUTTON "Reload option bytes"
|
|
(
|
|
DO "&Script" RELOAD_OPTIONBYTES
|
|
)
|
|
|
|
POS 43. 36. 10. 1.5
|
|
BUTTON "Refresh"
|
|
(
|
|
DO "&Script" REFRESH
|
|
)
|
|
|
|
POS 63. 36. 10. 1.5
|
|
BUTTON "Exit" "DIALOG.END"
|
|
|
|
CLOSE "DIALOG.END"
|
|
)
|
|
|
|
GOSUB UpdateWindowFromFlashContents
|
|
|
|
ENDDO
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Read out option bytes and set dialog entries
|
|
|
|
UpdateWindowFromFlashContents:
|
|
(
|
|
GOSUB ReadOptionBytes
|
|
|
|
; Get read protection
|
|
IF ((&OPTR&0xFF)==0xAA)
|
|
DIALOG.Set COMB_RDP "Level 0:No read protection"
|
|
ELSE IF ((&OPTR&0xFF)==0x55)
|
|
DIALOG.Set COMB_RDP "Level 0.5:only non-secure debug access"
|
|
ELSE
|
|
DIALOG.Set COMB_RDP "Level 1:Read protection"
|
|
|
|
IF ((&OPTR>>8.)&0x07)==0x0
|
|
DIALOG.Set COMB_BORLEV "Level 0:threshold around 1.7 V"
|
|
ELSE IF((&OPTR>>8.)&0x07)==0x1
|
|
DIALOG.Set COMB_BORLEV "Level 1:threshold around 2.0 V"
|
|
ELSE IF ((&OPTR>>8.)&0x07)==0x2
|
|
DIALOG.Set COMB_BORLEV "Level 2:threshold around 2.2 V"
|
|
ELSE IF ((&OPTR>>8.)&0x07)==0x3
|
|
DIALOG.Set COMB_BORLEV "Level 3:threshold around 2.5 V"
|
|
ELSE IF ((&OPTR>>8.)&0x07)==0x4
|
|
DIALOG.Set COMB_BORLEV "Level 4:threshold around 2.8 V"
|
|
|
|
IF ((&OPTR>>12.)&0x1)==0x1
|
|
DIALOG.Set CHK_RST_STOP "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_RST_STOP "ON"
|
|
|
|
IF ((&OPTR>>13.)&0x1)==0x1
|
|
DIALOG.Set CHK_RST_STDBY "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_RST_STDBY "ON"
|
|
|
|
IF ((&OPTR>>14.)&0x1)==0x1
|
|
DIALOG.Set CHK_RST_SHDW "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_RST_SHDW "ON"
|
|
|
|
IF ((&OPTR>>15.)&0x1)==0x1
|
|
DIALOG.Set CHK_SRAM134_RST "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_SRAM134_RST "ON"
|
|
|
|
IF ((&OPTR>>16.)&0x1)==0x1
|
|
DIALOG.Set CHSB_IWDG.SW
|
|
ELSE
|
|
DIALOG.Set CHSB_IWDG.HW
|
|
|
|
IF ((&OPTR>>17.)&0x1)==0x1
|
|
DIALOG.Set CHK_IWDG_STOP "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_IWDG_STOP "ON"
|
|
|
|
IF ((&OPTR>>18.)&0x1)==0x1
|
|
DIALOG.Set CHK_IWDG_STDBY "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_IWDG_STDBY "ON"
|
|
|
|
IF ((&OPTR>>19.)&0x1)==0x1
|
|
DIALOG.Set CHSB_WWDG.SW
|
|
ELSE
|
|
DIALOG.Set CHSB_WWDG.HW
|
|
|
|
IF ((&OPTR>>20.)&0x1)==0x1
|
|
DIALOG.Set CHK_SWAP_BANK "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_SWAP_BANK "OFF"
|
|
|
|
IF ((&OPTR>>22.)&0x1)==0x1
|
|
DIALOG.Set CHK_BKPRAM_ECC_DIS "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_BKPRAM_ECC_DIS "OFF"
|
|
|
|
IF ((&OPTR>>23.)&0x1)==0x1
|
|
DIALOG.Set CHK_SRAM3_ECC_CHECK_DIS "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_SRAM3_ECC_CHECK_DIS "OFF"
|
|
|
|
IF ((&OPTR>>24.)&0x1)==0x1
|
|
DIALOG.Set CHK_SRAM2_ECC_CHECK_DIS "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_SRAM2_ECC_CHECK_DIS "OFF"
|
|
|
|
IF ((&OPTR>>25.)&0x1)==0x1
|
|
DIALOG.Set CHK_RAM_ERASE "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_RAM_ERASE "ON"
|
|
|
|
IF ((&OPTR>>26.)&0x1)==0x1
|
|
DIALOG.Set CHK_NSWBOOT0 "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_NSWBOOT0 "OFF"
|
|
|
|
IF ((&OPTR>>27.)&0x1)==0x1
|
|
DIALOG.Set CHK_NBOOT0 "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_NBOOT0 "OFF"
|
|
|
|
IF ((&OPTR>>28.)&0x1)==0x1
|
|
DIALOG.Set CHK_PA15PUPEN "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_PA15PUPEN "OFF"
|
|
|
|
IF ((&OPTR>>29.)&0x1)==0x1
|
|
DIALOG.Set CHK_IO_VDD_HSLV "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_IO_VDD_HSLV "OFF"
|
|
|
|
IF ((&OPTR>>30.)&0x1)==0x1
|
|
DIALOG.Set CHK_IO_VDDIO2_HSLV "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_IO_VDDIO2_HSLV "OFF"
|
|
|
|
IF ((&OPTR>>31.)&0x1)==0x1
|
|
DIALOG.Set CHK_TZEN "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_TZEN "OFF"
|
|
|
|
PRIVATE &value
|
|
DIALOG.Set NSBOOTADD0R "&NSBOOTADD0R"
|
|
DIALOG.Set NSBOOTADD1R "&NSBOOTADD1R"
|
|
&value=&SECBOOTADD0R&~1
|
|
DIALOG.Set SECBOOTADD0 "&value"
|
|
IF (&SECBOOTADD0R&0x1)==0x1
|
|
DIALOG.Set CHK_BOOT_LOCK "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_BOOT_LOCK "OFF"
|
|
|
|
&value=FORMAT.Decimal(3.,&SECWM1R1&0x7F)+"."
|
|
DIALOG.Set SECWM1R1_START_PAGE "&value"
|
|
&value=(&SECWM1R1>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set SECWM1R1_END_PAGE "&value"
|
|
|
|
&value=FORMAT.Decimal(3.,&SECWM1R2&0x7F)+"."
|
|
DIALOG.Set SECWM1R2_START_PAGE "&value"
|
|
&value=(&SECWM1R2>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set SECWM1R2_END_PAGE "&value"
|
|
IF (&SECWM1R2&0x80000000)==0x80000000
|
|
DIALOG.Set CHK_HDP1EN "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_HDP1EN "OFF"
|
|
IF (&SECWM1R2&0x8000)==0x8000
|
|
DIALOG.Set CHK_PCROP1EN "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_PCROP1EN "OFF"
|
|
|
|
&value=FORMAT.Decimal(3.,&SECWM2R1&0x7F)+"."
|
|
DIALOG.Set SECWM2R1_START_PAGE "&value"
|
|
&value=(&SECWM2R1>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set SECWM2R1_END_PAGE "&value"
|
|
|
|
&value=FORMAT.Decimal(3.,&SECWM2R2&0x7F)+"."
|
|
DIALOG.Set SECWM2R2_START_PAGE "&value"
|
|
&value=(&SECWM2R2>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set SECWM2R2_END_PAGE "&value"
|
|
IF (&SECWM2R2&0x80000000)==0x80000000
|
|
DIALOG.Set CHK_HDP2EN "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_HDP2EN "OFF"
|
|
IF (&SECWM2R2&0x8000)==0x8000
|
|
DIALOG.Set CHK_PCROP2EN "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_PCROP2EN "OFF"
|
|
|
|
&value=FORMAT.Decimal(3.,&WRP1AR&0x7F)+"."
|
|
DIALOG.Set WRP1AR_START_PAGE "&value"
|
|
&value=(&WRP1AR>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set WRP1AR_END_PAGE "&value"
|
|
IF (&WRP1AR&0x80000000)==0x80000000
|
|
DIALOG.Set CHK_WRP1A_UNLOCK "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_WRP1A_UNLOCK "OFF"
|
|
|
|
&value=FORMAT.Decimal(3.,&WRP1BR&0x7F)+"."
|
|
DIALOG.Set WRP1BR_START_PAGE "&value"
|
|
&value=(&WRP1BR>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set WRP1BR_END_PAGE "&value"
|
|
IF (&WRP1BR&0x80000000)==0x80000000
|
|
DIALOG.Set CHK_WRP1B_UNLOCK "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_WRP1B_UNLOCK "OFF"
|
|
|
|
&value=FORMAT.Decimal(3.,&WRP2AR&0x7F)+"."
|
|
DIALOG.Set WRP2AR_START_PAGE "&value"
|
|
&value=(&WRP2AR>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set WRP2AR_END_PAGE "&value"
|
|
IF (&WRP2AR&0x80000000)==0x80000000
|
|
DIALOG.Set CHK_WRP2A_UNLOCK "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_WRP2A_UNLOCK "OFF"
|
|
|
|
&value=FORMAT.Decimal(3.,&WRP2BR&0x7F)+"."
|
|
DIALOG.Set WRP2BR_START_PAGE "&value"
|
|
&value=(&WRP2BR>>16.)&0x7F
|
|
&value=FORMAT.Decimal(3.,&value)+"."
|
|
DIALOG.Set WRP2BR_END_PAGE "&value"
|
|
IF (&WRP2BR&0x80000000)==0x80000000
|
|
DIALOG.Set CHK_WRP2B_UNLOCK "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_WRP2B_UNLOCK "OFF"
|
|
|
|
IF (&SECHDPCR&0x1)==0x1
|
|
DIALOG.Set CHK_HDP1_ACCDIS "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_HDP1_ACCDIS "OFF"
|
|
IF (&SECHDPCR&0x2)==0x2
|
|
DIALOG.Set CHK_HDP2_ACCDIS "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_HDP2_ACCDIS "OFF"
|
|
|
|
IF (&PRIVCFGR&0x1)==0x1
|
|
DIALOG.Set CHK_SPRIV "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_SPRIV "OFF"
|
|
IF (&PRIVCFGR&0x2)==0x2
|
|
DIALOG.Set CHK_NSPRIV "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_NSPRIV "OFF"
|
|
|
|
|
|
DIALOG.Set SECBB1R1 "&SECBB1R1"
|
|
DIALOG.Set SECBB1R2 "&SECBB1R2"
|
|
DIALOG.Set SECBB1R3 "&SECBB1R3"
|
|
DIALOG.Set SECBB1R4 "&SECBB1R4"
|
|
DIALOG.Set SECBB2R1 "&SECBB2R1"
|
|
DIALOG.Set SECBB2R2 "&SECBB2R2"
|
|
DIALOG.Set SECBB2R3 "&SECBB2R3"
|
|
DIALOG.Set SECBB2R4 "&SECBB2R4"
|
|
DIALOG.Set PRIV1BBR1 "&PRIV1BBR1"
|
|
DIALOG.Set PRIV1BBR2 "&PRIV1BBR2"
|
|
DIALOG.Set PRIV1BBR3 "&PRIV1BBR3"
|
|
DIALOG.Set PRIV1BBR4 "&PRIV1BBR4"
|
|
DIALOG.Set PRIV2BBR1 "&PRIV2BBR1"
|
|
DIALOG.Set PRIV2BBR2 "&PRIV2BBR2"
|
|
DIALOG.Set PRIV2BBR3 "&PRIV2BBR3"
|
|
DIALOG.Set PRIV2BBR4 "&PRIV2BBR4"
|
|
|
|
IF ((Data.Long(&FlashRegBase+0x40)&0x80000000)!=0x80000000)
|
|
(
|
|
DIALOG.Disable SECBOOTADD0
|
|
DIALOG.Disable CHK_BOOT_LOCK
|
|
DIALOG.Disable SECWM1R1_START_PAGE
|
|
DIALOG.Disable SECWM1R1_END_PAGE
|
|
DIALOG.Disable SECWM1R2_START_PAGE
|
|
DIALOG.Disable SECWM1R2_END_PAGE
|
|
DIALOG.Disable CHK_HDP1EN
|
|
DIALOG.Disable CHK_PCROP1EN
|
|
DIALOG.Disable SECWM2R1_START_PAGE
|
|
DIALOG.Disable SECWM2R1_END_PAGE
|
|
DIALOG.Disable SECWM2R2_START_PAGE
|
|
DIALOG.Disable SECWM2R2_END_PAGE
|
|
DIALOG.Disable CHK_HDP2EN
|
|
DIALOG.Disable CHK_PCROP2EN
|
|
DIALOG.Disable SECBB1R1
|
|
DIALOG.Disable SECBB1R2
|
|
DIALOG.Disable SECBB1R3
|
|
DIALOG.Disable SECBB1R4
|
|
DIALOG.Disable SECBB2R1
|
|
DIALOG.Disable SECBB2R2
|
|
DIALOG.Disable SECBB2R3
|
|
DIALOG.Disable SECBB2R4
|
|
DIALOG.Disable CHK_HDP1_ACCDIS
|
|
DIALOG.Disable CHK_HDP2_ACCDIS
|
|
DIALOG.Disable CHK_SPRIV
|
|
)
|
|
ELSE
|
|
(
|
|
DIALOG.Enable SECBOOTADD0
|
|
DIALOG.Enable CHK_BOOT_LOCK
|
|
DIALOG.Enable SECWM1R1_START_PAGE
|
|
DIALOG.Enable SECWM1R1_END_PAGE
|
|
DIALOG.Enable SECWM1R2_START_PAGE
|
|
DIALOG.Enable SECWM1R2_END_PAGE
|
|
DIALOG.Enable CHK_HDP1EN
|
|
DIALOG.Enable CHK_PCROP1EN
|
|
DIALOG.Enable SECWM2R1_START_PAGE
|
|
DIALOG.Enable SECWM2R1_END_PAGE
|
|
DIALOG.Enable SECWM2R2_START_PAGE
|
|
DIALOG.Enable SECWM2R2_END_PAGE
|
|
DIALOG.Enable CHK_HDP2EN
|
|
DIALOG.Enable CHK_PCROP2EN
|
|
DIALOG.Enable SECBB1R1
|
|
DIALOG.Enable SECBB1R2
|
|
DIALOG.Enable SECBB1R3
|
|
DIALOG.Enable SECBB1R4
|
|
DIALOG.Enable SECBB2R1
|
|
DIALOG.Enable SECBB2R2
|
|
DIALOG.Enable SECBB2R3
|
|
DIALOG.Enable SECBB2R4
|
|
DIALOG.Enable CHK_HDP1_ACCDIS
|
|
DIALOG.Enable CHK_HDP2_ACCDIS
|
|
DIALOG.Enable CHK_SPRIV
|
|
)
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Activate programmed flash settings by resetting device
|
|
|
|
ActivateFlashSettings:
|
|
(
|
|
PRIVATE &cr &optlocked
|
|
|
|
; Athorize flash programming
|
|
&cr=Data.Long(&FlashRegBase+0x28)
|
|
|
|
; Unlock the Flash Program Erase controller
|
|
IF ((&cr&0x80000000)==0x80000000)
|
|
(
|
|
Data.Set &FlashRegBase+0x08 %Long 0x45670123 // FLASH->KEYR = FLASH_KEY1;
|
|
Data.Set &FlashRegBase+0x08 %Long 0xCDEF89AB // FLASH->KEYR = FLASH_KEY2;
|
|
)
|
|
; Authorize option byte programming
|
|
IF ((&cr&0x40000000)==0x40000000)
|
|
(
|
|
Data.Set &FlashRegBase+0x10 %Long 0x08192A3B // FLASH->OPTKEYR = FLASH_KEY1;
|
|
Data.Set &FlashRegBase+0x10 %Long 0x4C5D6E7F // FLASH->OPTKEYR = FLASH_KEY2;
|
|
)
|
|
|
|
&optlocked=Data.Long(&FlashRegBase+0x28)&0x40000000 // locked = FLASH->OTPCR & OPT_LOCK
|
|
IF &optlocked==0x40000000
|
|
(
|
|
PRINT %ERROR "Cannot unlock option byte programming!"
|
|
RETURN
|
|
)
|
|
|
|
; Set OBL_LAUNCH to power down core (necessary for loading option bytes into Flash registers)
|
|
ON.ERROR CONTINUE
|
|
Data.Set &FlashRegBase+0x28 %Long &cr|(1.<<27.)
|
|
ON.ERROR
|
|
WAIT 0.1s
|
|
IF (SYStem.UP())
|
|
BREAK
|
|
ELSE
|
|
SYStem.UP
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Read option byte values out of flash
|
|
|
|
ReadOptionBytes:
|
|
(
|
|
&OPTR=Data.Long(&FlashRegBase+0x40)
|
|
&NSBOOTADD0R=Data.Long(&FlashRegBase+0x44)
|
|
&NSBOOTADD1R=Data.Long(&FlashRegBase+0x48)
|
|
&SECBOOTADD0R=Data.Long(&FlashRegBase+0x4C)
|
|
&SECWM1R1=Data.Long(&FlashRegBase+0x50)
|
|
&SECWM1R2=Data.Long(&FlashRegBase+0x54)
|
|
&SECWM2R1=Data.Long(&FlashRegBase+0x60)
|
|
&SECWM2R2=Data.Long(&FlashRegBase+0x64)
|
|
&WRP1AR=Data.Long(&FlashRegBase+0x58)
|
|
&WRP1BR=Data.Long(&FlashRegBase+0x5C)
|
|
&WRP2AR=Data.Long(&FlashRegBase+0x68)
|
|
&WRP2BR=Data.Long(&FlashRegBase+0x6C)
|
|
&SECBB1R1=Data.Long(&FlashRegBase+0x80)
|
|
&SECBB1R2=Data.Long(&FlashRegBase+0x84)
|
|
&SECBB1R3=Data.Long(&FlashRegBase+0x88)
|
|
&SECBB1R4=Data.Long(&FlashRegBase+0x8C)
|
|
&SECBB2R1=Data.Long(&FlashRegBase+0xA0)
|
|
&SECBB2R2=Data.Long(&FlashRegBase+0xA4)
|
|
&SECBB2R3=Data.Long(&FlashRegBase+0xA8)
|
|
&SECBB2R4=Data.Long(&FlashRegBase+0xAC)
|
|
&PRIV1BBR1=Data.Long(&FlashRegBase+0xD0)
|
|
&PRIV1BBR2=Data.Long(&FlashRegBase+0xD4)
|
|
&PRIV1BBR3=Data.Long(&FlashRegBase+0xD8)
|
|
&PRIV1BBR4=Data.Long(&FlashRegBase+0xDC)
|
|
&PRIV2BBR1=Data.Long(&FlashRegBase+0xF0)
|
|
&PRIV2BBR2=Data.Long(&FlashRegBase+0xF4)
|
|
&PRIV2BBR3=Data.Long(&FlashRegBase+0xF8)
|
|
&PRIV2BBR4=Data.Long(&FlashRegBase+0xFC)
|
|
&SECHDPCR=Data.Long(&FlashRegBase+0xC0)
|
|
&PRIVCFGR=Data.Long(&FlashRegBase+0xC4)
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Program option bytes
|
|
|
|
ProgramOptionBytes:
|
|
(
|
|
PRIVATE &cr
|
|
|
|
; Clear All pending flags in FLASH->SR
|
|
Data.Set &FlashRegBase+0x20 %Long 0x000020FB
|
|
|
|
; Wait for last operation to be completed
|
|
IF (Data.Long(&FlashRegBase+0x20)&0x00010000)==0x00010000
|
|
(
|
|
PRINT %ERROR "Flash memory interface busy, operation aborted"
|
|
RETURN
|
|
)
|
|
|
|
; Athorize flash programming
|
|
&cr=Data.Long(&FlashRegBase+0x28)
|
|
|
|
; Unlock the Flash Program Erase controller
|
|
IF ((&cr&0x80000000)==0x80000000)
|
|
(
|
|
Data.Set &FlashRegBase+0x08 %Long 0x45670123 // FLASH->KEYR = FLASH_KEY1;
|
|
Data.Set &FlashRegBase+0x08 %Long 0xCDEF89AB // FLASH->KEYR = FLASH_KEY2;
|
|
)
|
|
; Authorize option byte programming
|
|
IF ((&cr&0x40000000)==0x40000000)
|
|
(
|
|
Data.Set &FlashRegBase+0x10 %Long 0x08192A3B // FLASH->OPTKEYR = FLASH_KEY1;
|
|
Data.Set &FlashRegBase+0x10 %Long 0x4C5D6E7F // FLASH->OPTKEYR = FLASH_KEY2;
|
|
)
|
|
|
|
&optlocked=Data.Long(&FlashRegBase+0x28)&0x40000000 // locked = FLASH->OTPCR & OPT_LOCK
|
|
IF &optlocked==0x40000000
|
|
(
|
|
PRINT %ERROR "Cannot unlock option byte programming!"
|
|
RETURN
|
|
)
|
|
|
|
IF ((&OPTR&0xFF)==0xCC)
|
|
(
|
|
PRINT "Option byte programming aborted,because RDP_LEV=0xCC will disable further debugging"
|
|
PRINT "Disabling JTAG won't be reversible"
|
|
Data.Set &FlashRegBase+0x28 %Long &cr // restore FLASH_CR register
|
|
ENDDO
|
|
)
|
|
Data.Set &FlashRegBase+0x40 %Long &OPTR
|
|
Data.Set &FlashRegBase+0x44 %Long &NSBOOTADD0R
|
|
Data.Set &FlashRegBase+0x48 %Long &NSBOOTADD1R
|
|
Data.Set &FlashRegBase+0x4C %Long &SECBOOTADD0R
|
|
Data.Set &FlashRegBase+0x50 %Long &SECWM1R1
|
|
Data.Set &FlashRegBase+0x54 %Long &SECWM1R2
|
|
Data.Set &FlashRegBase+0x58 %Long &WRP1AR
|
|
Data.Set &FlashRegBase+0x5C %Long &WRP1BR
|
|
Data.Set &FlashRegBase+0x60 %Long &SECWM2R1
|
|
Data.Set &FlashRegBase+0x64 %Long &SECWM2R2
|
|
Data.Set &FlashRegBase+0x68 %Long &WRP2AR
|
|
Data.Set &FlashRegBase+0x6C %Long &WRP2BR
|
|
Data.Set &FlashRegBase+0x80 %Long &SECBB1R1
|
|
Data.Set &FlashRegBase+0x84 %Long &SECBB1R2
|
|
Data.Set &FlashRegBase+0x88 %Long &SECBB1R3
|
|
Data.Set &FlashRegBase+0x8C %Long &SECBB1R4
|
|
Data.Set &FlashRegBase+0xA0 %Long &SECBB2R1
|
|
Data.Set &FlashRegBase+0xA4 %Long &SECBB2R2
|
|
Data.Set &FlashRegBase+0xA8 %Long &SECBB2R3
|
|
Data.Set &FlashRegBase+0xAC %Long &SECBB2R4
|
|
Data.Set &FlashRegBase+0xD0 %Long &PRIV1BBR1
|
|
Data.Set &FlashRegBase+0xD4 %Long &PRIV1BBR2
|
|
Data.Set &FlashRegBase+0xD8 %Long &PRIV1BBR3
|
|
Data.Set &FlashRegBase+0xDC %Long &PRIV1BBR4
|
|
Data.Set &FlashRegBase+0xF0 %Long &PRIV2BBR1
|
|
Data.Set &FlashRegBase+0xF4 %Long &PRIV2BBR2
|
|
Data.Set &FlashRegBase+0xF8 %Long &PRIV2BBR3
|
|
Data.Set &FlashRegBase+0xFC %Long &PRIV2BBR4
|
|
Data.Set &FlashRegBase+0xC0 %Long &SECHDPCR
|
|
Data.Set &FlashRegBase+0xC4 %Long &PRIVCFGR
|
|
|
|
; Start option byte programming
|
|
Data.Set &FlashRegBase+0x28 %Long (&cr&~0xC0000000)|0x20000 // FLASH->CR = OPT_STRT;
|
|
|
|
; Wait for last operation to be completed */
|
|
WHILE (Data.Long(&FlashRegBase+0x20)&0x00010000)==0x00010000 // while ((FLASH->NSSR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
|
|
(
|
|
)
|
|
|
|
IF ((Data.Long(D:0x40022000+0x20)&0x2000)==0x2000)
|
|
|
|
PRINT "Error when programming option bytes ! Please check rules for modifying specific option bytes"
|
|
|
|
RETURN
|
|
) |