1333 lines
39 KiB
Plaintext
1333 lines
39 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: ST STM32L1xx Flash Dialog to program Option Bytes.
|
|
;
|
|
; @Description:
|
|
; Script arguments:
|
|
;
|
|
; do stm32l1xx-optionbyte [RDP=0|1|NODEBUG]
|
|
; [BFB2=0|1] [NRST_STDBY=0|1] [NRST_STOP=0|1] [IWDG_SW=0|1]
|
|
; [BOR_LEV=<val>] [WRP1=<val>] [WRP2=<val>] [WRP3=<val>] [WRP4=<val>]
|
|
; [RESETDEVICE]
|
|
;
|
|
; RDP=0|1|NODEBUG is programming read protection option byte
|
|
; 0: disables flash read protection
|
|
; 1: enables flash read protection
|
|
; NODEBUG: no debug
|
|
;
|
|
; BFB2=0|1
|
|
; 0: Boot from Bank2
|
|
; 1: Boot space is selected by BOOT0 and BOOT1 pins
|
|
;
|
|
; 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_STOP=0|1 is programming nRST_STOP bit of user option byte
|
|
; 0: Reset generated when entering Stop mode
|
|
; 1: No reset generated.
|
|
;
|
|
; IWDG_SW=0|1 is programming IWDG_SW bit of user option byte
|
|
; 0: Hardware independent watchdog
|
|
; 1: Software independent watchdog
|
|
;
|
|
; BOR_LEV=<val> Brownout reset threshold level
|
|
;
|
|
; WRPx=<val> is programming flash memory write protection option bytes
|
|
; WRP1..WRP4. Bit value 0 activates write protection for dedicated
|
|
; pages
|
|
;
|
|
; RESETDEVICE reset device after option byte programming
|
|
;
|
|
; 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: 10516 $
|
|
; $Id: stm32l1xx-optionbyte.cmm 10516 2022-02-02 11:39:30Z bschroefel $
|
|
|
|
LOCAL ¶meters
|
|
ENTRY %LINE ¶meters
|
|
|
|
; LOCAL macros used as script global macros
|
|
LOCAL &FlashRegBase ; Flash controller base address
|
|
LOCAL &FlashSize ; Flash size
|
|
LOCAL &OptionByteBase ; Option byte base address
|
|
LOCAL &WrpBits ; Number of Write Protect Bits
|
|
LOCAL &PageSize ; Page size
|
|
LOCAL &WrpGranularity ; Write protection granularity
|
|
|
|
&FlashRegBase="tbd"
|
|
&FlashSize=0x0
|
|
&PageSize=0x0
|
|
&OptionByteBase="tbd"
|
|
&WrpBits=0.
|
|
&WrpGranularity=0x1000
|
|
|
|
; Macros for the Option Bytes
|
|
LOCAL &OptByte_RDP &OptByte_USER &OptByte_SPRMOD
|
|
LOCAL &OptByte_WRP1 &OptByte_WRP2 &OptByte_WRP3 &OptByte_WRP4
|
|
|
|
&OptByte_SPRMOD=0x00
|
|
&OptByte_RDP=0xAA
|
|
&OptByte_USER=0x0
|
|
&OptByte_WRP1=0x0
|
|
&OptByte_WRP2=0x0
|
|
&OptByte_WRP3=0x0
|
|
&OptByte_WRP4=0x0
|
|
&prog_rdp=FALSE()
|
|
&prog_sprmod=FALSE()
|
|
&prog_user=FALSE()
|
|
&prog_wrp1=FALSE()
|
|
&prog_wrp2=FALSE()
|
|
&prog_wrp3=FALSE()
|
|
&prog_wrp4=FALSE()
|
|
|
|
; Look for any opened STM32L1x dialog windows and close them
|
|
WHILE DIALOG.EXIST(CHK_WRP_0x0)
|
|
DIALOG.END
|
|
|
|
; Checking CPU selection
|
|
IF !CPUIS(STM32L1*)
|
|
(
|
|
SYStem.RESet
|
|
SYStem.CPU STM32L1*
|
|
)
|
|
|
|
; Check system mode
|
|
IF SYStem.MODE()<5
|
|
SYStem.Up
|
|
|
|
; Setup configuration for CPU derivative
|
|
&PageSize=0x100
|
|
IF CPUIS("STM32L1???6*")
|
|
(
|
|
&FlashSize=0x8000
|
|
)
|
|
ELSE IF CPUIS("STM32L1???8*")
|
|
(
|
|
&FlashSize=0x10000
|
|
)
|
|
ELSE IF CPUIS("STM32L1???B*")
|
|
(
|
|
&FlashSize=0x20000
|
|
)
|
|
ELSE IF CPUIS("STM32L1???C*")
|
|
(
|
|
&FlashSize=0x40000
|
|
)
|
|
ELSE IF CPUIS("STM32L1???D*")
|
|
(
|
|
&FlashSize=0x60000
|
|
)
|
|
ELSE IF CPUIS("STM32L1???E*")
|
|
(
|
|
&FlashSize=0x80000
|
|
)
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "FLASH size of CPU type is unknown"
|
|
ENDDO
|
|
)
|
|
|
|
; Calculate number of write protect bits
|
|
&WrpBits=&FlashSize/&WrpGranularity
|
|
IF &WrpBits>96.
|
|
(
|
|
PRINT %ERROR "FLASH write protection granularity problem, please request an update"
|
|
ENDDO
|
|
)
|
|
|
|
IF &WrpBits==0.||&FlashSize==0.
|
|
(
|
|
DIALOG.OK SYStem.CPU()+" is not supported by the script"
|
|
ENDDO
|
|
)
|
|
ELSE
|
|
(
|
|
&FlashRegBase="D:0x40023C00"
|
|
&OptionByteBase="D:0x1FF80000"
|
|
)
|
|
|
|
; Parse script arguments
|
|
IF "¶meters"==""
|
|
(
|
|
;print "Call script with parameters: DO stm32l1xx-optionbyte [RDP=0|1|NODEBUG] [NRST_STDBY=0|1] [NRST_STOP=0|1] [IWDG_SW=0|1] [WRP1=<val>] [WRP2=<val>]"
|
|
GOSUB OptionByteDialog
|
|
)
|
|
ELSE
|
|
(
|
|
LOCAL ¶m_SPRMOD ¶m_RDP ¶m_nRST_STDBY ¶m_nRST_STOP
|
|
LOCAL ¶m_IWDG_SW ¶m_BFB2 ¶m_BOR_LEV
|
|
LOCAL ¶m_WRP1 ¶m_WRP2 ¶m_WRP3 ¶m_WRP4 ¶m_resetDevice
|
|
LOCAL &read_user
|
|
|
|
¶m_RDP=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"RDP=","")
|
|
¶m_SPRMOD=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"SPRMOD=","")
|
|
¶m_BFB2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"BFB2=","")
|
|
¶m_nRST_STDBY=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NRST_STDBY=","")
|
|
¶m_nRST_STOP=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"NRST_STOP=","")
|
|
¶m_IWDG_SW=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"IWDG_SW=","")
|
|
¶m_BOR_LEV=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"BOR_LEV=","")
|
|
¶m_WRP1=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP1=","")
|
|
¶m_WRP2=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP2=","")
|
|
¶m_WRP3=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP3=","")
|
|
¶m_WRP4=STRing.SCANAndExtract(STRing.UPpeR("¶meters"),"WRP4=","")
|
|
¶m_resetDevice=(STRing.SCAN(STRing.UPpeR("¶meters"),"RESETDEVICE",0)!=-1)
|
|
&prog_sprmod=FALSE()
|
|
&prog_rdp=FALSE()
|
|
&prog_user=FALSE()
|
|
&prog_wrp1=FALSE()
|
|
&prog_wrp2=FALSE()
|
|
&prog_wrp3=FALSE()
|
|
&prog_wrp4=FALSE()
|
|
|
|
GOSUB ReadOptionBytes
|
|
|
|
IF "¶m_RDP"!=""
|
|
(
|
|
IF ("¶m_RDP"=="0")
|
|
(
|
|
IF (&OptByte_RDP!=0xAA)
|
|
(
|
|
&OptByte_RDP=0xAA
|
|
&prog_rdp=TRUE()
|
|
)
|
|
)
|
|
ELSE IF ("¶m_RDP"=="1")
|
|
(
|
|
IF (&OptByte_RDP!=0x0)
|
|
(
|
|
&OptByte_RDP=0x00
|
|
&prog_rdp=TRUE()
|
|
)
|
|
)
|
|
ELSE IF "¶m_RDP"=="NODEBUG"
|
|
&OptByte_RDP=0xCC
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Illegal parameter RDP="+"¶m_RDP"
|
|
ENDDO
|
|
)
|
|
IF (&OptByte_RDP==0xCC)
|
|
(
|
|
GOSUB QueryNoDebug
|
|
ENTRY &nodebug
|
|
IF (!&nodebug)
|
|
ENDDO
|
|
&prog_rdp=TRUE()
|
|
)
|
|
)
|
|
IF "¶m_SPRMOD"!=""
|
|
(
|
|
IF ("¶m_SPRMOD"=="1")
|
|
(
|
|
IF (&OptByte_SPRMOD!=0x1)
|
|
(
|
|
&OptByte_SPRMOD=0x1
|
|
&prog_sprmod=TRUE()
|
|
)
|
|
)
|
|
ELSE IF ("¶m_SPRMOD"=="0")
|
|
(
|
|
IF (&OptByte_SPRMOD!=0x0)
|
|
(
|
|
&OptByte_SPRMOD=0x0
|
|
&prog_sprmod=TRUE()
|
|
)
|
|
)
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Illegal parameter SPRMOD="+"¶m_SPRMOD"
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
&read_user=&OptByte_USER
|
|
|
|
IF "¶m_BFB2"!=""
|
|
(
|
|
IF "¶m_BFB2"=="1"
|
|
&OptByte_USER=&OptByte_USER|0x80
|
|
ELSE IF "¶m_BFB2"=="0"
|
|
&OptByte_USER=&OptByte_USER&0x7F
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Illegal parameter BFB2="+"¶m_BFB2"
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
IF "¶m_nRST_STDBY"!=""
|
|
(
|
|
IF "¶m_nRST_STDBY"=="1"
|
|
&OptByte_USER=&OptByte_USER|0x40
|
|
ELSE IF "¶m_nRST_STDBY"=="0"
|
|
&OptByte_USER=&OptByte_USER&0xBF
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Illegal parameter NRST_STDBY="+"¶m_nRST_STDBY"
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
IF "¶m_nRST_STOP"!=""
|
|
(
|
|
IF "¶m_nRST_STOP"=="1"
|
|
&OptByte_USER=&OptByte_USER|0x20
|
|
ELSE IF "¶m_nRST_STOP"=="0"
|
|
&OptByte_USER=&OptByte_USER&0xDF
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Illegal parameter NRST_STOP="+"¶m_nRST_STOP"
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
IF "¶m_IWDG_SW"!=""
|
|
(
|
|
IF "¶m_IWDG_SW"=="1"
|
|
&OptByte_USER=&OptByte_USER|0x10
|
|
ELSE IF "¶m_IWDG_SW"=="0"
|
|
&OptByte_USER=&OptByte_USER&0xEF
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Illegal parameter IWDG_SW="+"¶m_IWDG_SW"
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
IF "¶m_BOR_LEV"!=""
|
|
(
|
|
&OptByte_USER=(&OptByte_USER&0xF0)|¶m_BOR_LEV
|
|
IF (¶m_BOR_LEV>0xF||¶m_BOR_LEV<0x0)
|
|
(
|
|
PRINT %ERROR "Illegal parameter BOR_LEV="+"¶m_BOR_LEV" "! BOR_LEV is out of range! " "BOR_LEV must be a 8-bit unsigned numeric value"
|
|
ENDDO
|
|
)
|
|
)
|
|
|
|
IF (&read_user!=&OptByte_USER)
|
|
&prog_user=TRUE()
|
|
|
|
|
|
IF ("¶m_WRP1"!="")
|
|
(
|
|
IF (&OptByte_WRP1!=¶m_WRP1)
|
|
(
|
|
&OptByte_WRP1=¶m_WRP1
|
|
&prog_wrp1=TRUE()
|
|
)
|
|
)
|
|
IF ("¶m_WRP2"!="")
|
|
(
|
|
IF (&OptByte_WRP2!=¶m_WRP2)
|
|
(
|
|
&OptByte_WRP2=¶m_WRP2
|
|
&prog_wrp2=TRUE()
|
|
)
|
|
)
|
|
IF ("¶m_WRP3"!="")
|
|
(
|
|
IF (&OptByte_WRP3!=¶m_WRP3)
|
|
(
|
|
&OptByte_WRP3=¶m_WRP3
|
|
&prog_wrp3=TRUE()
|
|
)
|
|
)
|
|
IF ("¶m_WRP4"!="")
|
|
(
|
|
IF (&OptByte_WRP4!=¶m_WRP4)
|
|
(
|
|
&OptByte_WRP4=¶m_WRP4
|
|
&prog_wrp4=TRUE()
|
|
)
|
|
)
|
|
|
|
; Program option bytes into flash
|
|
IF (&prog_rdp==TRUE())||(&prog_sprmod==TRUE())||(&prog_user==TRUE())||(&prog_wrp1==TRUE())||(&prog_wrp2==TRUE())||(&prog_wrp3==TRUE())||(&prog_wrp4==TRUE())
|
|
GOSUB ProgramOptionBytes
|
|
|
|
; Reset device to activate programmed option bytes
|
|
IF ¶m_resetDevice
|
|
GOSUB ResetDevice
|
|
)
|
|
|
|
ENDDO
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; NVM bit programming dialog window
|
|
|
|
OptionByteDialog:
|
|
(
|
|
LOCAL &WRP_0_pages &WRP_1_pages &WRP_2_pages &WRP_3_pages &WRP_4_pages &WRP_5_pages &WRP_6_pages &WRP_7_pages &WRP_8_pages &WRP_9_pages
|
|
LOCAL &WRP_10_pages &WRP_11_pages &WRP_12_pages &WRP_13_pages &WRP_14_pages &WRP_15_pages &WRP_16_pages &WRP_17_pages &WRP_18_pages &WRP_19_pages
|
|
LOCAL &WRP_20_pages &WRP_21_pages &WRP_22_pages &WRP_23_pages &WRP_24_pages &WRP_25_pages &WRP_26_pages &WRP_27_pages &WRP_28_pages &WRP_29_pages
|
|
LOCAL &WRP_30_pages &WRP_31_pages &WRP_32_pages &WRP_33_pages &WRP_34_pages &WRP_35_pages &WRP_36_pages &WRP_37_pages &WRP_38_pages &WRP_39_pages
|
|
LOCAL &WRP_40_pages &WRP_41_pages &WRP_42_pages &WRP_43_pages &WRP_44_pages &WRP_45_pages &WRP_46_pages &WRP_47_pages &WRP_48_pages &WRP_49_pages
|
|
LOCAL &WRP_50_pages &WRP_51_pages &WRP_52_pages &WRP_53_pages &WRP_54_pages &WRP_55_pages &WRP_56_pages &WRP_57_pages &WRP_58_pages &WRP_59_pages
|
|
LOCAL &WRP_60_pages &WRP_61_pages &WRP_62_pages &WRP_63_pages &WRP_64_pages &WRP_65_pages &WRP_66_pages &WRP_67_pages &WRP_68_pages &WRP_69_pages
|
|
LOCAL &WRP_70_pages &WRP_71_pages &WRP_72_pages &WRP_73_pages &WRP_74_pages &WRP_75_pages &WRP_76_pages &WRP_77_pages &WRP_78_pages &WRP_79_pages
|
|
LOCAL &WRP_80_pages &WRP_81_pages &WRP_82_pages &WRP_83_pages &WRP_84_pages &WRP_85_pages &WRP_86_pages &WRP_87_pages &WRP_88_pages &WRP_89_pages
|
|
LOCAL &WRP_90_pages &WRP_91_pages &WRP_92_pages &WRP_93_pages &WRP_94_pages &WRP_95_pages &WRP_96_pages &WRP_97_pages &WRP_98_pages &WRP_99_pages
|
|
LOCAL &WRP_100_pages &WRP_101_pages &WRP_102_pages &WRP_103_pages &WRP_104_pages &WRP_105_pages &WRP_106_pages &WRP_107_pages &WRP_108_pages
|
|
LOCAL &WRP_109_pages &WRP_110_pages &WRP_111_pages &WRP_112_pages &WRP_113_pages &WRP_114_pages &WRP_115_pages &WRP_116_pages &WRP_117_pages
|
|
LOCAL &WRP_118_pages &WRP_119_pages &WRP_120_pages &WRP_121_pages &WRP_122_pages &WRP_123_pages &WRP_124_pages &WRP_125_pages &WRP_126_pages &WRP_127_pages
|
|
|
|
|
|
&WRP_0_pages="0--15"
|
|
&WRP_1_pages="16--31"
|
|
&WRP_2_pages="32--47"
|
|
&WRP_3_pages="48--63"
|
|
&WRP_4_pages="64--79"
|
|
&WRP_5_pages="80--95"
|
|
&WRP_6_pages="96--111"
|
|
&WRP_7_pages="112--127"
|
|
; IF (&FlashSize>0x8000)
|
|
(
|
|
&WRP_8_pages="128--143"
|
|
&WRP_9_pages="144--159"
|
|
&WRP_10_pages="160--177"
|
|
&WRP_11_pages="176--191"
|
|
&WRP_12_pages="192--207"
|
|
&WRP_13_pages="208--223"
|
|
&WRP_14_pages="224--239"
|
|
&WRP_15_pages="240--255"
|
|
;; IF (&FlashSize>0x10000)
|
|
(
|
|
&WRP_16_pages="256--271"
|
|
&WRP_17_pages="272--287"
|
|
&WRP_18_pages="288--303"
|
|
&WRP_19_pages="304--319"
|
|
&WRP_20_pages="320--335"
|
|
&WRP_21_pages="336--351"
|
|
&WRP_22_pages="352--367"
|
|
&WRP_23_pages="368--383"
|
|
&WRP_24_pages="384--399"
|
|
&WRP_25_pages="400--415"
|
|
&WRP_26_pages="416--431"
|
|
&WRP_27_pages="432--447"
|
|
&WRP_28_pages="448--463"
|
|
&WRP_29_pages="464--479"
|
|
&WRP_30_pages="480--495"
|
|
&WRP_31_pages="496--511"
|
|
; IF (&FlashSize>0x20000)
|
|
(
|
|
&WRP_32_pages="512--527"
|
|
&WRP_33_pages="528--543"
|
|
&WRP_34_pages="544--559"
|
|
&WRP_35_pages="560--575"
|
|
&WRP_36_pages="576--591"
|
|
&WRP_37_pages="592--607"
|
|
&WRP_38_pages="608--623"
|
|
&WRP_39_pages="624--639"
|
|
&WRP_40_pages="640--655"
|
|
&WRP_41_pages="656--671"
|
|
&WRP_42_pages="672--687"
|
|
&WRP_43_pages="688--703"
|
|
&WRP_44_pages="704--719"
|
|
&WRP_45_pages="720--735"
|
|
&WRP_46_pages="736--751"
|
|
&WRP_47_pages="752--767"
|
|
&WRP_48_pages="768--783"
|
|
&WRP_49_pages="784--799"
|
|
&WRP_50_pages="800--815"
|
|
&WRP_51_pages="816--831"
|
|
&WRP_52_pages="832--847"
|
|
&WRP_53_pages="848--863"
|
|
&WRP_54_pages="864--879"
|
|
&WRP_55_pages="880--895"
|
|
&WRP_56_pages="896--911"
|
|
&WRP_57_pages="912--927"
|
|
&WRP_58_pages="928--943"
|
|
&WRP_59_pages="944--959"
|
|
&WRP_60_pages="960--9750"
|
|
&WRP_61_pages="976--991"
|
|
&WRP_62_pages="992--1007"
|
|
&WRP_63_pages="1008--1023"
|
|
; IF (&FlashSize>0x40000)
|
|
(
|
|
&WRP_64_pages="1024--1039"
|
|
&WRP_65_pages="1040--1055"
|
|
&WRP_66_pages="1056--1071"
|
|
&WRP_67_pages="1072--1087"
|
|
&WRP_68_pages="1088--1103"
|
|
&WRP_69_pages="1104--1119"
|
|
&WRP_70_pages="1120--1135"
|
|
&WRP_71_pages="1136--1151"
|
|
&WRP_72_pages="1152--1167"
|
|
&WRP_73_pages="1168--1183"
|
|
&WRP_74_pages="1184--1199"
|
|
&WRP_75_pages="1200--1215"
|
|
&WRP_76_pages="1216--1231"
|
|
&WRP_77_pages="1232--1247"
|
|
&WRP_78_pages="1248--1263"
|
|
&WRP_79_pages="1264--1279"
|
|
&WRP_80_pages="1280--1295"
|
|
&WRP_81_pages="1296--1311"
|
|
&WRP_82_pages="1312--1327"
|
|
&WRP_83_pages="1328--1343"
|
|
&WRP_84_pages="1344--1359"
|
|
&WRP_85_pages="1360--1375"
|
|
&WRP_86_pages="1376--1391"
|
|
&WRP_87_pages="1392--1407"
|
|
&WRP_88_pages="1408--1423"
|
|
&WRP_89_pages="1424--1439"
|
|
&WRP_90_pages="1440--1455"
|
|
&WRP_91_pages="1456--1471"
|
|
&WRP_92_pages="1472--1487"
|
|
&WRP_93_pages="1488--1503"
|
|
&WRP_94_pages="1504--1519"
|
|
&WRP_95_pages="1520--1535"
|
|
; IF (&FlashSize>0x60000)
|
|
(
|
|
&WRP_96_pages="1536--1551"
|
|
&WRP_97_pages="1552--1567"
|
|
&WRP_98_pages="1568--1583"
|
|
&WRP_99_pages="1584--1599"
|
|
&WRP_100_pages="1600--1615"
|
|
&WRP_101_pages="1616--1631"
|
|
&WRP_102_pages="1632--1647"
|
|
&WRP_103_pages="1648--1663"
|
|
&WRP_104_pages="1664--1679"
|
|
&WRP_105_pages="1680--1695"
|
|
&WRP_106_pages="1696--1711"
|
|
&WRP_107_pages="1712--1727"
|
|
&WRP_108_pages="1728--1743"
|
|
&WRP_109_pages="1744--1759"
|
|
&WRP_110_pages="1760--1775"
|
|
&WRP_111_pages="1776--1791"
|
|
&WRP_112_pages="1792--1807"
|
|
&WRP_113_pages="1808--1823"
|
|
&WRP_114_pages="1824--1839"
|
|
&WRP_115_pages="1840--1855"
|
|
&WRP_116_pages="1856--1871"
|
|
&WRP_117_pages="1872--1887"
|
|
&WRP_118_pages="1888--1903"
|
|
&WRP_119_pages="1904--1919"
|
|
&WRP_120_pages="1920--1935"
|
|
&WRP_121_pages="1936--1951"
|
|
&WRP_122_pages="1952--1967"
|
|
&WRP_123_pages="1968--1983"
|
|
&WRP_124_pages="1984--1999"
|
|
&WRP_125_pages="2000--2015"
|
|
&WRP_126_pages="2016--2031"
|
|
&WRP_127_pages="2032--2047"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
; Creating the main dialog. (& after DIALOG command must be in first column!
|
|
WinPOS 50. 5. 69. 34.
|
|
|
|
DIALOG.view
|
|
(&
|
|
HEADER SYStem.CPU()+" option bytes"
|
|
|
|
POS 1. 0. 67. 21.
|
|
BOX "Write protected flash pages"
|
|
|
|
POS 3. 2. 7. 1.
|
|
CHK_WRP_0x0: CHECKBOX "&WRP_0_pages" ""
|
|
POS 11. 2. 7. 1.
|
|
CHK_WRP_0x1: CHECKBOX "&WRP_1_pages" ""
|
|
POS 19. 2. 7. 1.
|
|
CHK_WRP_0x2: CHECKBOX "&WRP_2_pages" ""
|
|
POS 27. 2. 7. 1.
|
|
CHK_WRP_0x3: CHECKBOX "&WRP_3_pages" ""
|
|
POS 35. 2. 7. 1.
|
|
CHK_WRP_0x4: CHECKBOX "&WRP_4_pages" ""
|
|
POS 43. 2. 7. 1.
|
|
CHK_WRP_0x5: CHECKBOX "&WRP_5_pages" ""
|
|
POS 51. 2. 7. 1.
|
|
CHK_WRP_0x6: CHECKBOX "&WRP_6_pages" ""
|
|
POS 59. 2. 7. 1.
|
|
CHK_WRP_0x7: CHECKBOX "&WRP_7_pages" ""
|
|
POS 3. 3. 7. 1.
|
|
CHK_WRP_0x8: CHECKBOX "&WRP_8_pages" ""
|
|
POS 11. 3. 7. 1.
|
|
CHK_WRP_0x9: CHECKBOX "&WRP_9_pages" ""
|
|
POS 19. 3. 7. 1.
|
|
CHK_WRP_0xA: CHECKBOX "&WRP_10_pages" ""
|
|
POS 27. 3. 7. 1.
|
|
CHK_WRP_0xB: CHECKBOX "&WRP_11_pages" ""
|
|
POS 35. 3. 7. 1.
|
|
CHK_WRP_0xC: CHECKBOX "&WRP_12_pages" ""
|
|
POS 43. 3. 7. 1.
|
|
CHK_WRP_0xD: CHECKBOX "&WRP_13_pages" ""
|
|
POS 51. 3. 7. 1.
|
|
CHK_WRP_0xE: CHECKBOX "&WRP_14_pages" ""
|
|
POS 59. 3. 7. 1.
|
|
CHK_WRP_0xF: CHECKBOX "&WRP_15_pages" ""
|
|
POS 3. 4. 7. 1.
|
|
CHK_WRP_0x10: CHECKBOX "&WRP_16_pages" ""
|
|
POS 11. 4. 7. 1.
|
|
CHK_WRP_0x11: CHECKBOX "&WRP_17_pages" ""
|
|
POS 19. 4. 7. 1.
|
|
CHK_WRP_0x12: CHECKBOX "&WRP_18_pages" ""
|
|
POS 27. 4. 7. 1.
|
|
CHK_WRP_0x13: CHECKBOX "&WRP_19_pages" ""
|
|
POS 35. 4. 7. 1.
|
|
CHK_WRP_0x14: CHECKBOX "&WRP_20_pages" ""
|
|
POS 43. 4. 7. 1.
|
|
CHK_WRP_0x15: CHECKBOX "&WRP_21_pages" ""
|
|
POS 51. 4. 7. 1.
|
|
CHK_WRP_0x16: CHECKBOX "&WRP_22_pages" ""
|
|
POS 59. 4. 7. 1.
|
|
CHK_WRP_0x17: CHECKBOX "&WRP_23_pages" ""
|
|
POS 3. 5. 7. 1.
|
|
CHK_WRP_0x18: CHECKBOX "&WRP_24_pages" ""
|
|
POS 11. 5. 7. 1.
|
|
CHK_WRP_0x19: CHECKBOX "&WRP_25_pages" ""
|
|
POS 19. 5. 7. 1.
|
|
CHK_WRP_0x1A: CHECKBOX "&WRP_26_pages" ""
|
|
POS 27. 5. 7. 1.
|
|
CHK_WRP_0x1B: CHECKBOX "&WRP_27_pages" ""
|
|
POS 35. 5. 7. 1.
|
|
CHK_WRP_0x1C: CHECKBOX "&WRP_28_pages" ""
|
|
POS 43. 5. 7. 1.
|
|
CHK_WRP_0x1D: CHECKBOX "&WRP_29_pages" ""
|
|
POS 51. 5. 7. 1.
|
|
CHK_WRP_0x1E: CHECKBOX "&WRP_30_pages" ""
|
|
POS 59. 5. 7. 1.
|
|
CHK_WRP_0x1F: CHECKBOX "&WRP_31_pages" ""
|
|
POS 3. 6. 7. 1.
|
|
CHK_WRP_0x20: CHECKBOX "&WRP_32_pages" ""
|
|
POS 11. 6. 7. 1.
|
|
CHK_WRP_0x21: CHECKBOX "&WRP_33_pages" ""
|
|
POS 19. 6. 7. 1.
|
|
CHK_WRP_0x22: CHECKBOX "&WRP_34_pages" ""
|
|
POS 27. 6. 7. 1.
|
|
CHK_WRP_0x23: CHECKBOX "&WRP_35_pages" ""
|
|
POS 35. 6. 7. 1.
|
|
CHK_WRP_0x24: CHECKBOX "&WRP_36_pages" ""
|
|
POS 43. 6. 7. 1.
|
|
CHK_WRP_0x25: CHECKBOX "&WRP_37_pages" ""
|
|
POS 51. 6. 7. 1.
|
|
CHK_WRP_0x26: CHECKBOX "&WRP_38_pages" ""
|
|
POS 59. 6. 7. 1.
|
|
CHK_WRP_0x27: CHECKBOX "&WRP_39_pages" ""
|
|
POS 3. 7. 7. 1.
|
|
CHK_WRP_0x28: CHECKBOX "&WRP_40_pages" ""
|
|
POS 11. 7. 7. 1.
|
|
CHK_WRP_0x29: CHECKBOX "&WRP_41_pages" ""
|
|
POS 19. 7. 7. 1.
|
|
CHK_WRP_0x2A: CHECKBOX "&WRP_42_pages" ""
|
|
POS 27. 7. 7. 1.
|
|
CHK_WRP_0x2B: CHECKBOX "&WRP_43_pages" ""
|
|
POS 35. 7. 7. 1.
|
|
CHK_WRP_0x2C: CHECKBOX "&WRP_44_pages" ""
|
|
POS 43. 7. 7. 1.
|
|
CHK_WRP_0x2D: CHECKBOX "&WRP_45_pages" ""
|
|
POS 51. 7. 7. 1.
|
|
CHK_WRP_0x2E: CHECKBOX "&WRP_46_pages" ""
|
|
POS 59. 7. 7. 1.
|
|
CHK_WRP_0x2F: CHECKBOX "&WRP_47_pages" ""
|
|
POS 3. 8. 7. 1.
|
|
CHK_WRP_0x30: CHECKBOX "&WRP_48_pages" ""
|
|
POS 11. 8. 7. 1.
|
|
CHK_WRP_0x31: CHECKBOX "&WRP_49_pages" ""
|
|
POS 19. 8. 7. 1.
|
|
CHK_WRP_0x32: CHECKBOX "&WRP_50_pages" ""
|
|
POS 27. 8. 7. 1.
|
|
CHK_WRP_0x33: CHECKBOX "&WRP_51_pages" ""
|
|
POS 35. 8. 7. 1.
|
|
CHK_WRP_0x34: CHECKBOX "&WRP_52_pages" ""
|
|
POS 43. 8. 7. 1.
|
|
CHK_WRP_0x35: CHECKBOX "&WRP_53_pages" ""
|
|
POS 51. 8. 7. 1.
|
|
CHK_WRP_0x36: CHECKBOX "&WRP_54_pages" ""
|
|
POS 59. 8. 7. 1.
|
|
CHK_WRP_0x37: CHECKBOX "&WRP_55_pages" ""
|
|
POS 3. 9. 7. 1.
|
|
CHK_WRP_0x38: CHECKBOX "&WRP_56_pages" ""
|
|
POS 11. 9. 7. 1.
|
|
CHK_WRP_0x39: CHECKBOX "&WRP_57_pages" ""
|
|
POS 19. 9. 7. 1.
|
|
CHK_WRP_0x3A: CHECKBOX "&WRP_58_pages" ""
|
|
POS 27. 9. 7. 1.
|
|
CHK_WRP_0x3B: CHECKBOX "&WRP_59_pages" ""
|
|
POS 35. 9. 7. 1.
|
|
CHK_WRP_0x3C: CHECKBOX "&WRP_60_pages" ""
|
|
POS 43. 9. 7. 1.
|
|
CHK_WRP_0x3D: CHECKBOX "&WRP_61_pages" ""
|
|
POS 51. 9. 7. 1.
|
|
CHK_WRP_0x3E: CHECKBOX "&WRP_62_pages" ""
|
|
POS 59. 9. 7. 1.
|
|
CHK_WRP_0x3F: CHECKBOX "&WRP_63_pages" ""
|
|
POS 3. 10. 7. 1.
|
|
CHK_WRP_0x40: CHECKBOX "&WRP_64_pages" ""
|
|
POS 11. 10. 7. 1.
|
|
CHK_WRP_0x41: CHECKBOX "&WRP_65_pages" ""
|
|
POS 19. 10. 7. 1.
|
|
CHK_WRP_0x42: CHECKBOX "&WRP_66_pages" ""
|
|
POS 27. 10. 7. 1.
|
|
CHK_WRP_0x43: CHECKBOX "&WRP_67_pages" ""
|
|
POS 35. 10. 7. 1.
|
|
CHK_WRP_0x44: CHECKBOX "&WRP_68_pages" ""
|
|
POS 43. 10. 7. 1.
|
|
CHK_WRP_0x45: CHECKBOX "&WRP_69_pages" ""
|
|
POS 51. 10. 7. 1.
|
|
CHK_WRP_0x46: CHECKBOX "&WRP_70_pages" ""
|
|
POS 59. 10. 7. 1.
|
|
CHK_WRP_0x47: CHECKBOX "&WRP_71_pages" ""
|
|
POS 3. 11. 7. 1.
|
|
CHK_WRP_0x48: CHECKBOX "&WRP_72_pages" ""
|
|
POS 11. 11. 7. 1.
|
|
CHK_WRP_0x49: CHECKBOX "&WRP_73_pages" ""
|
|
POS 19. 11. 7. 1.
|
|
CHK_WRP_0x4A: CHECKBOX "&WRP_74_pages" ""
|
|
POS 27. 11. 7. 1.
|
|
CHK_WRP_0x4B: CHECKBOX "&WRP_75_pages" ""
|
|
POS 35. 11. 7. 1.
|
|
CHK_WRP_0x4C: CHECKBOX "&WRP_76_pages" ""
|
|
POS 43. 11. 7. 1.
|
|
CHK_WRP_0x4D: CHECKBOX "&WRP_77_pages" ""
|
|
POS 51. 11. 7. 1.
|
|
CHK_WRP_0x4E: CHECKBOX "&WRP_78_pages" ""
|
|
POS 59. 11. 7. 1.
|
|
CHK_WRP_0x4F: CHECKBOX "&WRP_79_pages" ""
|
|
POS 3. 12. 7. 1.
|
|
CHK_WRP_0x50: CHECKBOX "&WRP_80_pages" ""
|
|
POS 11. 12. 7. 1.
|
|
CHK_WRP_0x51: CHECKBOX "&WRP_81_pages" ""
|
|
POS 19. 12. 7. 1.
|
|
CHK_WRP_0x52: CHECKBOX "&WRP_82_pages" ""
|
|
POS 27. 12. 7. 1.
|
|
CHK_WRP_0x53: CHECKBOX "&WRP_83_pages" ""
|
|
POS 35. 12. 7. 1.
|
|
CHK_WRP_0x54: CHECKBOX "&WRP_84_pages" ""
|
|
POS 43. 12. 7. 1.
|
|
CHK_WRP_0x55: CHECKBOX "&WRP_85_pages" ""
|
|
POS 51. 12. 7. 1.
|
|
CHK_WRP_0x56: CHECKBOX "&WRP_86_pages" ""
|
|
POS 59. 12. 7. 1.
|
|
CHK_WRP_0x57: CHECKBOX "&WRP_87_pages" ""
|
|
POS 3. 13. 7. 1.
|
|
CHK_WRP_0x58: CHECKBOX "&WRP_88_pages" ""
|
|
POS 11. 13. 7. 1.
|
|
CHK_WRP_0x59: CHECKBOX "&WRP_89_pages" ""
|
|
POS 19. 13. 7. 1.
|
|
CHK_WRP_0x5A: CHECKBOX "&WRP_90_pages" ""
|
|
POS 27. 13. 7. 1.
|
|
CHK_WRP_0x5B: CHECKBOX "&WRP_91_pages" ""
|
|
POS 35. 13. 7. 1.
|
|
CHK_WRP_0x5C: CHECKBOX "&WRP_92_pages" ""
|
|
POS 43. 13. 7. 1.
|
|
CHK_WRP_0x5D: CHECKBOX "&WRP_93_pages" ""
|
|
POS 51. 13. 7. 1.
|
|
CHK_WRP_0x5E: CHECKBOX "&WRP_94_pages" ""
|
|
POS 59. 13. 7. 1.
|
|
CHK_WRP_0x5F: CHECKBOX "&WRP_95_pages" ""
|
|
POS 3. 14. 7. 1.
|
|
CHK_WRP_0x60: CHECKBOX "&WRP_96_pages" ""
|
|
POS 11. 14. 7. 1.
|
|
CHK_WRP_0x61: CHECKBOX "&WRP_97_pages" ""
|
|
POS 19. 14. 7. 1.
|
|
CHK_WRP_0x62: CHECKBOX "&WRP_98_pages" ""
|
|
POS 27. 14. 7. 1.
|
|
CHK_WRP_0x63: CHECKBOX "&WRP_99_pages" ""
|
|
POS 35. 14. 7. 1.
|
|
CHK_WRP_0x64: CHECKBOX "&WRP_100_pages" ""
|
|
POS 43. 14. 7. 1.
|
|
CHK_WRP_0x65: CHECKBOX "&WRP_101_pages" ""
|
|
POS 51. 14. 7. 1.
|
|
CHK_WRP_0x66: CHECKBOX "&WRP_102_pages" ""
|
|
POS 59. 14. 7. 1.
|
|
CHK_WRP_0x67: CHECKBOX "&WRP_103_pages" ""
|
|
POS 3. 15. 7. 1.
|
|
CHK_WRP_0x68: CHECKBOX "&WRP_104_pages" ""
|
|
POS 11. 15. 7. 1.
|
|
CHK_WRP_0x69: CHECKBOX "&WRP_105_pages" ""
|
|
POS 19. 15. 7. 1.
|
|
CHK_WRP_0x6A: CHECKBOX "&WRP_106_pages" ""
|
|
POS 27. 15. 7. 1.
|
|
CHK_WRP_0x6B: CHECKBOX "&WRP_107_pages" ""
|
|
POS 35. 15. 7. 1.
|
|
CHK_WRP_0x6C: CHECKBOX "&WRP_108_pages" ""
|
|
POS 43. 15. 7. 1.
|
|
CHK_WRP_0x6D: CHECKBOX "&WRP_109_pages" ""
|
|
POS 51. 15. 7. 1.
|
|
CHK_WRP_0x6E: CHECKBOX "&WRP_110_pages" ""
|
|
POS 59. 15. 7. 1.
|
|
CHK_WRP_0x6F: CHECKBOX "&WRP_111_pages" ""
|
|
POS 3. 16. 7. 1.
|
|
CHK_WRP_0x70: CHECKBOX "&WRP_112_pages" ""
|
|
POS 11. 16. 7. 1.
|
|
CHK_WRP_0x71: CHECKBOX "&WRP_113_pages" ""
|
|
POS 19. 16. 7. 1.
|
|
CHK_WRP_0x72: CHECKBOX "&WRP_114_pages" ""
|
|
POS 27. 16. 7. 1.
|
|
CHK_WRP_0x73: CHECKBOX "&WRP_115_pages" ""
|
|
POS 35. 16. 7. 1.
|
|
CHK_WRP_0x74: CHECKBOX "&WRP_116_pages" ""
|
|
POS 43. 16. 7. 1.
|
|
CHK_WRP_0x75: CHECKBOX "&WRP117__pages" ""
|
|
POS 51. 16. 7. 1.
|
|
CHK_WRP_0x76: CHECKBOX "&WRP_118_pages" ""
|
|
POS 59. 16. 7. 1.
|
|
CHK_WRP_0x77: CHECKBOX "&WRP_119_pages" ""
|
|
POS 3. 17. 7. 1.
|
|
CHK_WRP_0x78: CHECKBOX "&WRP_120_pages" ""
|
|
POS 11. 17. 7. 1.
|
|
CHK_WRP_0x79: CHECKBOX "&WRP_121_pages" ""
|
|
POS 19. 17. 7. 1.
|
|
CHK_WRP_0x7A: CHECKBOX "&WRP_122_pages" ""
|
|
POS 27. 17. 7. 1.
|
|
CHK_WRP_0x7B: CHECKBOX "&WRP_123_pages" ""
|
|
POS 35. 17. 7. 1.
|
|
CHK_WRP_0x7C: CHECKBOX "&WRP_124_pages" ""
|
|
POS 43. 17. 7. 1.
|
|
CHK_WRP_0x7D: CHECKBOX "&WRP_125_pages" ""
|
|
POS 51. 17. 7. 1.
|
|
CHK_WRP_0x7E: CHECKBOX "&WRP_126_pages" ""
|
|
POS 59. 17. 7. 1.
|
|
CHK_WRP_0x7F: CHECKBOX "&WRP_127_pages" ""
|
|
|
|
POS 3. 19. 9. 1.
|
|
BUTTON "Select All" "GOSUB WRPSelectAll"
|
|
POS 13. 19. 9. 1.
|
|
BUTTON "Deselect All" "GOSUB WRPDeselectAll"
|
|
POS 1. 21. 67. 5.
|
|
BOX "Read protection option byte"
|
|
|
|
POS 3. 23. 20. 1.
|
|
CHSB_SPRMOD.WR: CHOOSEBOX "WRP is only write protection" ""
|
|
POS 24. 23. 20. 1.
|
|
CHSB_SPRMOD.RDWR: CHOOSEBOX "WRP is read/write protection" ""
|
|
POS 3. 24. 20. 1.
|
|
CHSB_RDP.OFF: CHOOSEBOX "no read protection" ""
|
|
POS 24. 24. 20. 1.
|
|
CHSB_RDP.ON: CHOOSEBOX "read protection" ""
|
|
POS 45. 24. 20. 1.
|
|
CHSB_RDP.NODEBUG: CHOOSEBOX "no debug" "GOSUB SelectNoDebug"
|
|
|
|
POS 1. 26. 67. 5.
|
|
BOX "User option byte"
|
|
|
|
POS 3. 28. 24. 1.
|
|
CHK_RST_STDBY: CHECKBOX "Reset when entering Standby mode" ""
|
|
POS 3. 29. 24. 1.
|
|
CHK_RST_STOP: CHECKBOX "Reset when entering Stop mode" ""
|
|
POS 30. 28. 15. 1.
|
|
CHSB_WDG.SW: CHOOSEBOX "Hardware independent watchdog" ""
|
|
CHSB_WDG.HW: CHOOSEBOX "Software independent watchdog" ""
|
|
POS 50. 28. 15. 1.
|
|
CHK_BFB2: CHECKBOX "Boot mode selected by BOOT pins" ""
|
|
POS 50. 29. 7. 1.
|
|
TEXT "BOR_LEV"
|
|
POS 57. 29. 4. 1.
|
|
EDIT_BORLEV: EDIT "" "GOSUB CheckBorLev"
|
|
|
|
POS 1. 32. 10. 1.
|
|
BUTTON "Program flash" "GOSUB ProgramFlashSettings"
|
|
|
|
POS 20. 32. 10. 1.
|
|
BUTTON "Reset device" "GOSUB ActivateFlashSettings"
|
|
|
|
POS 39. 32. 10. 1.
|
|
BUTTON "Refresh" "GOSUB UpdateWindowFromFlashContents"
|
|
|
|
POS 58. 32. 10. 1.
|
|
BUTTON "Exit" "CONTinue"
|
|
|
|
CLOSE "CONTinue"
|
|
)
|
|
|
|
; Disable/Enable the check boxes
|
|
GOSUB UpdateWindowFromFlashType
|
|
GOSUB UpdateWindowFromFlashContents
|
|
STOP
|
|
|
|
DIALOG.END
|
|
|
|
ENDDO
|
|
)
|
|
|
|
SelectNoDebug:
|
|
(
|
|
LOCAL &result
|
|
IF &OptByte_RDP!=0xCC
|
|
(
|
|
GOSUB QueryNoDebug
|
|
ENTRY &result
|
|
IF !&result
|
|
(
|
|
IF &OptByte_RDP==0xAA
|
|
DIALOG.Set CHSB_RDP.OFF
|
|
ELSE IF &OptByte_RDP==0xCC
|
|
DIALOG.Set CHSB_RDP.NODEBUG
|
|
ELSE
|
|
DIALOG.Set CHSB_RDP.ON
|
|
)
|
|
)
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Lock not available write protection bit fields
|
|
|
|
UpdateWindowFromFlashType:
|
|
(
|
|
LOCAL &bitnum
|
|
|
|
&bitnum=4.*32.-1.
|
|
WHILE &bitnum>=&WrpBits
|
|
(
|
|
LOCAL &fieldname
|
|
&fieldname="CHK_WRP_0x"+FORMAT.HEX(1.,&bitnum)
|
|
DIALOG.Disable &fieldname
|
|
&bitnum=&bitnum-1.
|
|
)
|
|
|
|
IF (&FlashSize<=0x40000)
|
|
(
|
|
DIALOG.Disable CHK_BFB2
|
|
)
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Read out option bytes and set dialog entries
|
|
|
|
UpdateWindowFromFlashContents:
|
|
(
|
|
GOSUB ReadOptionBytes
|
|
|
|
; Get protection option bits
|
|
LOCAL &bitnum &bytenum &bitindex
|
|
&bitnum=0.
|
|
&bytenum=1.
|
|
&bitindex=0.
|
|
WHILE &bitnum<&WrpBits
|
|
(
|
|
LOCAL &fieldname
|
|
LOCAL ®name ®val
|
|
|
|
&fieldname="CHK_WRP_0x"+FORMAT.HEX(1.,&bitnum)
|
|
®name="&"+"OptByte_WRP"+FORMAT.Decimal(1.,&bytenum)
|
|
&®val=®name
|
|
IF ((®val)&(1.<<&bitindex))==0
|
|
DIALOG.Set &fieldname " "
|
|
ELSE
|
|
DIALOG.Set &fieldname ""
|
|
|
|
&bitnum=&bitnum+1.
|
|
&bitindex=&bitindex+1.
|
|
IF &bitindex>=32.
|
|
(
|
|
&bytenum=&bytenum+1.
|
|
&bitindex=0.
|
|
)
|
|
)
|
|
|
|
; Get read protection
|
|
IF &OptByte_RDP==0xAA
|
|
DIALOG.Set CHSB_RDP.OFF
|
|
ELSE IF &OptByte_RDP==0xCC
|
|
DIALOG.Set CHSB_RDP.NODEBUG
|
|
ELSE
|
|
DIALOG.Set CHSB_RDP.ON
|
|
|
|
IF (&OptByte_SPRMOD&0x1)!=0
|
|
DIALOG.Set CHSB_SPRMOD.RDWR
|
|
ELSE
|
|
DIALOG.Set CHSB_SPRMOD.WR
|
|
|
|
; Get user option byte
|
|
DIALOG.Set EDIT_BORLEV "0x"+FORMAT.HEX(1.,&OptByte_USER&0xF)
|
|
|
|
IF (&OptByte_USER&0x10)!=0
|
|
DIALOG.Set CHSB_WDG.HW
|
|
ELSE
|
|
DIALOG.Set CHSB_WDG.SW
|
|
|
|
IF (&OptByte_USER&0x20)!=0
|
|
DIALOG.Set CHK_RST_STOP "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_RST_STOP "ON"
|
|
|
|
IF (&OptByte_USER&0x40)!=0
|
|
DIALOG.Set CHK_RST_STDBY "OFF"
|
|
ELSE
|
|
DIALOG.Set CHK_RST_STDBY "ON"
|
|
|
|
IF (&OptByte_USER&0x80)!=0
|
|
DIALOG.Set CHK_BFB2 "ON"
|
|
ELSE
|
|
DIALOG.Set CHK_BFB2 "OFF"
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Select all EEFC sector lock bits
|
|
|
|
WRPSelectAll:
|
|
LOCAL &bitnum
|
|
|
|
&bitnum=0.
|
|
WHILE &bitnum<&WrpBits
|
|
(
|
|
LOCAL &fieldname
|
|
&fieldname="CHK_WRP_0x"+FORMAT.HEX(1.,&bitnum)
|
|
DIALOG.Set &fieldname ""
|
|
&bitnum=&bitnum+1.
|
|
)
|
|
|
|
RETURN
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Deselect all EEFC sector lock bits
|
|
|
|
WRPDeselectAll:
|
|
(
|
|
LOCAL &bitnum
|
|
|
|
&bitnum=0.
|
|
WHILE &bitnum<&WrpBits
|
|
(
|
|
LOCAL &fieldname
|
|
&fieldname="CHK_WRP_0x"+FORMAT.HEX(1.,&bitnum)
|
|
DIALOG.Set &fieldname " "
|
|
&bitnum=&bitnum+1.
|
|
)
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Check user data value
|
|
|
|
CheckBorLev:
|
|
(
|
|
LOCAL &data
|
|
LOCAL &error
|
|
&error=0
|
|
|
|
ON.ERROR GOSUB
|
|
(
|
|
&error=1
|
|
RETURN
|
|
)
|
|
|
|
&data=DIALOG.STRing(EDIT_BORLEV)
|
|
&data="0x"+FORMAT.HEX(1.,&data)
|
|
|
|
IF &error!=0
|
|
(
|
|
DIALOG.OK "BOR_LEV must be a 4-bit unsigned numeric value!"
|
|
DIALOG.Set EDIT_BORLEV "&OptByte_USER&0xF"
|
|
)
|
|
ELSE
|
|
(
|
|
Eval &data
|
|
IF EVAL()>0xF||EVAL()<0x00
|
|
(
|
|
DIALOG.OK "Data is out of range!" "Data must be a 8-bit unsigned numeric value"
|
|
DIALOG.Set EDIT_BORLEV "&OptByte_USER&0xF"
|
|
)
|
|
ELSE
|
|
(
|
|
&data="0x"+FORMAT.HEX(1.,&data)
|
|
DIALOG.Set EDIT_BORLEV "&data"
|
|
)
|
|
)
|
|
|
|
RETURN
|
|
)
|
|
|
|
QueryNoDebug:
|
|
LOCAL &result
|
|
DIALOG.YESNO "Are you really sure you want to disable DEBUG mode?" "Read protection level 2 cannot be removed at all:" "I T I S A N I R R E V E R S I B L E O P E R A T I O N !"
|
|
ENTRY &result
|
|
RETURN &result
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Programming Option Bytes
|
|
|
|
ProgramFlashSettings:
|
|
(
|
|
LOCAL &result &error
|
|
LOCAL &TargetOptByteUser &bor_lev
|
|
LOCAL §orlockbit
|
|
|
|
; Set write protection option bytes
|
|
LOCAL &bitnum &wrpval1 &wrpval2 &wrpval3 &wrpval4
|
|
&bitnum=0.
|
|
&wrpval1=0x0
|
|
&wrpval2=0x0
|
|
&wrpval3=0x0
|
|
&wrpval4=0x0
|
|
|
|
WHILE &bitnum<&WrpBits
|
|
(
|
|
LOCAL &fieldname
|
|
|
|
&fieldname="CHK_WRP_0x"+FORMAT.HEX(1.,&bitnum)
|
|
IF DIALOG.BOOLEAN(&fieldname)
|
|
(
|
|
if (&bitnum>=96.)
|
|
&wrpval4=&wrpval4|(0x1<<&bitnum)
|
|
else if (&bitnum>=64.)
|
|
&wrpval3=&wrpval3|(0x1<<(&bitnum%32.))
|
|
else if (&bitnum>=32.)
|
|
&wrpval2=&wrpval2|(0x1<<(&bitnum%32.))
|
|
else
|
|
&wrpval1=&wrpval1|(0x1<<(&bitnum%32.))
|
|
)
|
|
&bitnum=&bitnum+1.
|
|
)
|
|
if (&OptByte_WRP1!=&wrpval1)
|
|
(
|
|
&OptByte_WRP1=&wrpval1
|
|
&prog_wrp1=TRUE()
|
|
)
|
|
if (&OptByte_WRP2!=&wrpval2)
|
|
(
|
|
&OptByte_WRP2=&wrpval2
|
|
&prog_wrp2=TRUE()
|
|
)
|
|
if (&OptByte_WRP3!=&wrpval3)
|
|
(
|
|
&OptByte_WRP3=&wrpval3
|
|
&prog_wrp3=TRUE()
|
|
)
|
|
if (&OptByte_WRP4!=&wrpval4)
|
|
(
|
|
&OptByte_WRP4=&wrpval4
|
|
&prog_wrp4=TRUE()
|
|
)
|
|
|
|
; Set read protection option byte and SPRMOD
|
|
|
|
&value=&OptByte_SPRMOD
|
|
IF (DIALOG.BOOLEAN("CHSB_SPRMOD.RDWR"))
|
|
&OptByte_SPRMOD=0x1
|
|
ELSE
|
|
&OptByte_SPRMOD=0x0
|
|
IF (&OptByte_SPRMOD!=&value)
|
|
&prog_sprmod=TRUE()
|
|
|
|
IF (DIALOG.BOOLEAN("CHSB_RDP.OFF")&&(&OptByte_RDP!=0xAA))
|
|
(
|
|
&OptByte_RDP=0xAA
|
|
&prog_rdp=TRUE()
|
|
)
|
|
ELSE IF DIALOG.BOOLEAN("CHSB_RDP.NODEBUG")
|
|
(
|
|
LOCAL &result
|
|
GOSUB QueryNoDebug
|
|
ENTRY &result
|
|
IF &result
|
|
&OptByte_RDP=0xCC
|
|
ELSE
|
|
(
|
|
PRINT %ERROR "Option byte programming aborted"
|
|
RETURN
|
|
)
|
|
)
|
|
ELSE IF (DIALOG.BOOLEAN("CHSB_RDP.ON")&&(&OptByte_RDP!=0x00))
|
|
(
|
|
&OptByte_RDP=0x00
|
|
&prog_rdp=TRUE()
|
|
)
|
|
|
|
; Set user option byte
|
|
|
|
&value=&OptByte_USER
|
|
IF DIALOG.BOOLEAN(CHSB_WDG.SW)
|
|
&OptByte_USER=&OptByte_USER&0xEF
|
|
ELSE
|
|
&OptByte_USER=&OptByte_USER|0x10
|
|
|
|
IF !DIALOG.BOOLEAN("CHK_RST_STOP")
|
|
&OptByte_USER=&OptByte_USER|0x20
|
|
ELSE
|
|
&OptByte_USER=&OptByte_USER&0xDF
|
|
|
|
IF !DIALOG.BOOLEAN("CHK_RST_STDBY")
|
|
&OptByte_USER=&OptByte_USER|0x40
|
|
ELSE
|
|
&OptByte_USER=&OptByte_USER&0xBF
|
|
|
|
&bor_lev=DIALOG.STRing(EDIT_BORLEV)
|
|
&bor_lev="0x"+FORMAT.HEX(1.,&bor_lev)
|
|
&OptByte_USER=(&OptByte_USER&0xF0)|&bor_lev
|
|
|
|
IF (&OptByte_USER!=&value)
|
|
&prog_user=TRUE()
|
|
|
|
; Program into option byte flash section
|
|
GOSUB ProgramOptionBytes
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Activate programmed flash settings by resetting device
|
|
|
|
ActivateFlashSettings:
|
|
(
|
|
GOSUB ResetDevice
|
|
GOSUB UpdateWindowFromFlashContents
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Reset device
|
|
|
|
ResetDevice:
|
|
(
|
|
LOCAL &pecr
|
|
|
|
&pecr=Data.Long(&FlashRegBase+0x04)
|
|
|
|
; Unlock the Flash Program Erase controller
|
|
IF ((&pecr&0x1)==0x1)
|
|
(
|
|
Data.Set &FlashRegBase+0x0C %Long 0x89ABCDEF // FLASH->PEKEYR = FLASH_KEY1;
|
|
Data.Set &FlashRegBase+0x0C %Long 0x02030405 // FLASH->PEKEYR = FLASH_KEY2;
|
|
)
|
|
; Authorize the small information block programming
|
|
IF ((&pecr&0x4)==0x4)
|
|
(
|
|
Data.Set &FlashRegBase+0x14 %Long 0xFBEAD9C8 // FLASH->OPTKEYR = OPTKEY1;
|
|
Data.Set &FlashRegBase+0x14 %Long 0x24252627 // FLASH->OPTKEYR = OPTKEY2;
|
|
)
|
|
; Set OBL_LAUNCH to power down core (necessary for loading option bytes into Flash registers)
|
|
ON.ERROR CONTINUE
|
|
Data.Set &FlashRegBase+0x04 %Long &pecr|(1.<<18.)
|
|
ON.ERROR inherit
|
|
WAIT 0.1s
|
|
IF (SYStem.UP())
|
|
BREAK
|
|
ELSE
|
|
SYStem.UP
|
|
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Read option byte values out of flash
|
|
; Note : Changed due to stm32fxx-optionbyte script :
|
|
; Read option bytes out of flash, because Flash registers will be updated
|
|
; after next core reset (done by setting OBL_LAUNCH in FLASH_PECR). After
|
|
; programming the option bytes, they can be checked on sd:0x1FF80000 and
|
|
; can be reprogrammed again.
|
|
|
|
ReadOptionBytes:
|
|
(
|
|
&OptByte_SPRMOD=(Data.Long(D:0x1FF80000)&0x00000100)>>8.
|
|
&OptByte_RDP=Data.Long(D:0x1FF80000)&0x000000FF
|
|
&OptByte_USER=Data.Long(D:0x1FF80004)&0x000000FF
|
|
&OptByte_WRP1=(Data.Long(D:0x1FF80008)&0x0000FFFF)|((Data.Long(D:0x1FF8000C)&0x0000FFFF)<<16.)
|
|
IF (&FlashSize>=0x40000)
|
|
(
|
|
&OptByte_WRP2=(Data.Long(D:0x1FF80010)&0x0000FFFF)|((Data.Long(D:0x1FF80014)&0x0000FFFF)<<16.)
|
|
IF (&FlashSize>=0x60000)
|
|
(
|
|
&OptByte_WRP3=(Data.Long(D:0x1FF80018)&0x0000FFFF)|((Data.Long(D:0x1FF8001C)&0x0000FFFF)<<16.)
|
|
IF (&FlashSize>=0x80000)
|
|
(
|
|
&OptByte_WRP4=(Data.Long(D:0x1FF80080)&0x0000FFFF)|((Data.Long(D:0x1FF80084)&0x0000FFFF)<<16.)
|
|
)
|
|
)
|
|
)
|
|
RETURN
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Program option bytes
|
|
|
|
ProgramOptionBytes:
|
|
(
|
|
LOCAL &pecr &value
|
|
&pecr=Data.Long(&FlashRegBase+0x04)
|
|
|
|
; Unlock the Flash Program Erase controller
|
|
IF ((&pecr&0x1)==0x1)
|
|
(
|
|
Data.Set &FlashRegBase+0x0C %Long 0x89ABCDEF // FLASH->PEKEYR = FLASH_KEY1;
|
|
Data.Set &FlashRegBase+0x0C %Long 0x02030405 // FLASH->PEKEYR = FLASH_KEY2;
|
|
)
|
|
|
|
; Clear All pending flags
|
|
Data.Set &FlashRegBase+0x18 %Long 0x00001F03 // FLASH->SR = FLASH_FLAG_BSY | FLASH_FLAG_EOP | OPTVERRUSR | OPTVERR | SIZERR | PGAERR | WRPERR;
|
|
|
|
; Wait for last operation to be completed
|
|
IF (Data.Long(&FlashRegBase+0x18)&0x00000001)==0x00000001 // if ((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY)
|
|
(
|
|
PRINT %ERROR "Flash memory interface busy, operation aborted"
|
|
RETURN
|
|
)
|
|
|
|
; Authorize the small information block programming
|
|
IF ((&pecr&0x4)==0x4)
|
|
(
|
|
Data.Set &FlashRegBase+0x14 %Long 0xFBEAD9C8 // FLASH->OPTKEYR = OPTKEY1;
|
|
Data.Set &FlashRegBase+0x14 %Long 0x24252627 // FLASH->OPTKEYR = OPTKEY2;
|
|
)
|
|
|
|
; Clear error flags in FLASH_SR
|
|
Data.Set &OptionByteBase+0x18 %Long 0x3F00
|
|
|
|
; Program option bytes by writing them directly on the address of option byte field + offset
|
|
IF ((&prog_rdp==TRUE())||(&prog_sprmod==TRUE()))
|
|
(
|
|
&value=(&OptByte_SPRMOD<<8.)|&OptByte_RDP
|
|
Data.Set &OptionByteBase %Long &value|(~&value<<16.)
|
|
)
|
|
|
|
IF (&prog_user==TRUE())
|
|
Data.Set &OptionByteBase+0x04 %Long &OptByte_USER|(~&OptByte_USER<<16.)
|
|
|
|
IF (&prog_wrp1==TRUE())
|
|
(
|
|
&value=&OptByte_WRP1&0xFFFF
|
|
Data.Set &OptionByteBase+0x08 %Long &value|(~&value<<16.)
|
|
&value=(&OptByte_WRP1>>16.)&0xFFFF
|
|
Data.Set &OptionByteBase+0x0C %Long &value|(~&value<<16.)
|
|
)
|
|
IF (&prog_wrp2==TRUE())
|
|
(
|
|
&value=&OptByte_WRP2&0xFFFF
|
|
Data.Set &OptionByteBase+0x10 %Long &value|(~&value<<16.)
|
|
&value=(&OptByte_WRP2>>16.)&0xFFFF
|
|
Data.Set &OptionByteBase+0x14 %Long &value|(~&value<<16.)
|
|
)
|
|
IF (&prog_wrp3==TRUE())
|
|
(
|
|
&value=&OptByte_WRP3&0xFFFF
|
|
Data.Set &OptionByteBase+0x18 %Long &value|(~&value<<16.)
|
|
&value=(&OptByte_WRP3>>16.)&0xFFFF
|
|
Data.Set &OptionByteBase+0x1c %Long &value|(~&value<<16.)
|
|
)
|
|
IF (&prog_wrp4==TRUE())
|
|
(
|
|
&value=&OptByte_WRP4&0xFFFF
|
|
Data.Set &OptionByteBase+0x80 %Long &value|(~&value<<16.)
|
|
&value=(&OptByte_WRP4>>16.)&0xFFFF
|
|
Data.Set &OptionByteBase+0x84 %Long &value|(~&value<<16.)
|
|
)
|
|
|
|
; Wait for last operation to be completed */
|
|
WHILE (Data.Long(&FlashRegBase+0x18)&0x00000001)==0x00000001
|
|
(
|
|
)
|
|
|
|
; Restore FLASH_PECR register
|
|
Data.Set &FlashRegBase+0x04 %Long &pecr
|
|
|
|
RETURN
|
|
)
|
|
|