Skip to content

Instantly share code, notes, and snippets.

@elfmimi
Last active August 3, 2020 04:38
Show Gist options
  • Save elfmimi/4cfc98e08f79cf888f033f14c858ee5d to your computer and use it in GitHub Desktop.
Save elfmimi/4cfc98e08f79cf888f033f14c858ee5d to your computer and use it in GitHub Desktop.
Housekeeping toolbox for OpenOCD targeting Nuvoton NUC126
# Housekeeping toolbox for OpenOCD targeting Nuvoton NUC126
# by Ein Terakawa <[email protected]>
#
# based on TheLastMutt's mini51.cfg
# https://gist.github.com/TheLastMutt/d1c1948acaace7444c1c#file-mini51-cfg
# Usage example
#
# Read config regs.
# openocd -f NUC126.cfg -c ReadConfigRegs -c exit
#
# Read config regs with INTERFACE. (stlink is default)
# env INTERFACE=stlink openocd -f NUC126.cfg -c ReadConfigRegs -c exit
#
# Read config regs with specified tcl script path and binary.
# env OPENOCD_SCRIPTS=~/GitHub/OpenOCD/tcl ~/GitHub/OpenOCD/src/openocd.exe -f NUC126.cfg -c ReadConfigRegs -c exit
#
# Write config regs and Read back.
# openocd -f NUC126.cfg -c"WriteConfigRegs 0xF7FFFF7E 0x0001C000" -cReadConfigRegs" -cexit
#
# Write application to APROM and run.
# openocd -fNUC126.cfg -c"init; halt; program USBD_HID_Keyboard.elf; SysReset aprom run; exit"
#
# Read APROM.
# openocd -fNUC126.cfg -c"SysReset aprom halt; flash read_bank 0 aprom-filename.bin; reset run; exit"
#
# Read LDROM.
# openocd -fNUC126.cfg -c"SysReset ldrom halt; flash read_bank 1 ldrom-filename.bin; reset run; exit"
#
# Debug with gdb. (Run as gdb server.)
# openocd -fNUC126.cfg
#
# Erase all, write config regs, read back and write bootloader to LDROM.
# openocd -f NUC126.cfg -c "ChipErase; WriteConfigRegs 0xF7FFFF7E 0x0001C000; ReadConfigRegs; program ISP-HID.bin 0x100000; SysReset ldrom run; exit"
#
# Write embedded bootloader. (without using flash driver)
# openocd -f NUC126.cfg -c "WriteBootloader"
if [info exists ::env(OPENOCD_SCRIPTS)] {
puts [format "OPENOCD_SCRIPTS = %s" [env OPENOCD_SCRIPTS]]
} else {
if 0 {
set search_dir [format "%s/%s" [env HOME] GitHub/OpenOCD-code/tcl]
add_script_search_dir $search_dir
}
}
proc want_to_dispose_error_state_here {} {
# how can we dispose error state here?
catch {error "this is not an error"}
# OpenOCD 0.10.0 reports this line above as the cause of error
# when it fails to 'init' usualy because lack of proper connection.
}
proc load_script {args} {
if {0 == [llength $args]} {
error "No argument"
}
foreach arg $args {
if ![catch {set file [find $arg]}] {
break
}
}
if ![info exists file] {
if ![info exists ::env(OPENOCD_SCRIPTS)] {
echo "Please set environment variable OPENOCD_SCRIPTS and specify proper tcl path."
}
if {1 == [llength $args]} {
return -code error [format "Can't find %s" $args]
} else {
return -code error [format "Can't find any of %s" $args]
}
}
want_to_dispose_error_state_here
uplevel #0 [list source $file]
}
# to suppress deprecated message
catch {rename adapter_name original_adapter_name}
proc adapter_name {} {
if [catch {set name [adapter name]}] {
want_to_dispose_error_state_here
original_adapter_name
} else {
return $name
}
}
# to suppress deprecated message
catch {rename adapter_khz original_adapter_khz}
proc adapter_khz {khz} {
if [catch {set name [adapter speed $khz]}] {
want_to_dispose_error_state_here
original_adapter_khz $khz
}
}
set INTERFACE none
if [string equal [adapter_name] undefined] {
if [info exists ::env(INTERFACE)] {
set INTERFACE [env INTERFACE]
} else {
# default interface
set INTERFACE stlink
}
}
# when using Nuvoton Nu-Link
if {[lsearch -exact {nulink nu-link} [string tolower $INTERFACE]] >= 0} {
load_script interface/nulink.cfg
transport select hla_swd
}
# when using ST-Link V2 and clones
if {[lsearch -exact {stlink st-link stlinkv2 st-linkv2 stlink-v2 st-link-v2 stlink/v2 st-link/v2} [string tolower $INTERFACE]] >= 0} {
load_script interface/stlink.cfg interface/stlink-v2.cfg
transport select hla_swd
}
# when using CMSIS-DAP
if {[lsearch -exact {cmsis cmsis-dap} [string tolower $INTERFACE]] >= 0} {
load_script interface/cmsis-dap.cfg
transport select swd
# cmsis_dap_vid_pid 0x16C0 0x0486 0x0416 0xDC00 0x1209 0xDA42
}
# when using SEGGER J-Link
if {[lsearch -exact {jlink j-link} [string tolower $INTERFACE]] >= 0} {
load_script interface/jlink.cfg
transport select swd
# jlink serial 50118839
# jlink usb 0
}
# when using FTDI MPSSE (FT232H and alike)
if {[lsearch -exact {ft232h ft232hl ae-ft232hl} [string tolower $INTERFACE]] >= 0} {
load_script interface/ftdi/ft232h-module-swd.cfg
}
if [string equal [adapter_name] undefined] {
error "No Interface!"
}
load_script target/numicro.cfg
# adjust clock freq.
if {[lsearch -exact {ftdi jlink} [adapter_name]] >= 0} {
adapter_khz 20000
} else {
adapter_khz 10000
}
#load_script mem_helper.tcl
proc mrw {reg} {
set value ""
mem2array value 32 $reg 1
return $value(0)
}
add_usage_text mrw "address"
add_help_text mrw "Returns value of word in memory."
#proc mww {reg val} {
# return [numicro write_isp $reg $val]
#}
proc GetPartName {id} {
set parts([expr 0xC05204]) "NUC126LG4AE"
set parts([expr 0xC05205]) "NUC126LE4AE"
set parts([expr 0xC05212]) "NUC126SG4AE"
set parts([expr 0xC05213]) "NUC126SE4AE"
set parts([expr 0xC05231]) "NUC126VG4AE"
if [info exists parts($id)] {
return $parts($id)
} else {
return ""
}
}
proc GetFlashSize {id} {
set dict(NUC126) [dict create E [expr 0x20000] G [expr 0x40000]]
set part [GetPartName $id]
return [dict get $dict([string range $part 0 5]) [string index $part 7]]
}
# The following procedures to erase and unlock a locked MINI51 are taken from
# https://github.com/hackocopter/SWD-Hacking/blob/master/KEIL-Flashtools/Mini51flashtools.ini
# Ported from KEIL to OpenOCD tcl language and added some comments.
# The chip erase sequence got reverse engineered using a Nulink programmer, a logic analyzer
# and custom SWD log parser software.
# Info here:
# https://github.com/hackocopter/SWD-Hacking
# https://www.mikrocontroller.net/topic/309185 (German forum)
# This unlocks access to protected registers
# by writing to REGWRPROT register.
proc InitandUnlock {} {
# Halt target
mww 0xe000edf0 0x05f0003
# ?? Something Debug access port / Breakpoint unit
mww 0xe0002008 0x000000
mww 0xe000200C 0x000000
mww 0xe0002010 0x000000
mww 0xe0002014 0x000000
# Unlock sequence for protected registers
mww 0x50000100 0x59
mww 0x50000100 0x16
mww 0x50000100 0x88
}
# Read data from flash memory organization address,
# *not* system memory address. See datasheet section 6.7.4
proc ReadViaISP {adr} {
# Enable ISP
mww 0x5000c000 0x39
# ISP-Command = Flash Read
mww 0x5000c00c 0x00
mww 0x5000c004 $adr
# Write ISP Trigger Control Register (ISPTRG)
# to start
mww 0x5000c010 1
# Read ISPTRG until finished
while {[mrw 0x5000c010] != 0} {
echo "."
}
# Read ISP Data Register (ISPDAT)
set out [mrw 0x5000c008]
# Disable ISP
mww 0x5000c000 0x00
return $out
}
# Write data to flash memory organization address
proc WriteViaISP {adr dat} {
mww 0x5000c000 0x39
# ISP-Command = Flash Program
mww 0x5000c00c 0x21
mww 0x5000c004 $adr
mww 0x5000c008 $dat
mww 0x5000c010 1
# Read ISPTRG until finished
while {[mrw 0x5000c010] != 0} {
echo "."
}
if {[mrw 0x5000c000] & 0x40} {
error "ISP Error"
}
mww 0x5000c000 0x00
}
proc PageErase {adr} {
mww 0x5000c000 0x39
# ISP-Command = Flash page erase
mww 0x5000c00c 0x22
mww 0x5000c004 $adr
mww 0x5000c010 1
sleep 20
# Read ISPTRG until finished
while {[mrw 0x5000c010] != 0} {
echo "."
sleep 10
}
if {[mrw 0x5000c000] & 0x40} {
error "ISP Error"
}
mww 0x5000c000 0x00
}
# Set boot configuration (like AVR fuse bits)
proc WriteConfigRegs {conf0 args} {
init
halt
set id [mrw 0x50000000]
set part [GetPartName $id]
if {$part != ""} {
puts [format "Device ID (PDID) :0x%08X (%s)" $id $part]
} else {
puts [format "Device ID (PDID) :0x%08X" $id]
}
WriteConfigRegsImpl $conf0 $args
puts "Configuration registers have been Written"
}
proc WriteConfigRegsImpl {conf0 args} {
InitandUnlock
# Boot from APROM, no IAP, Flash Unlocked, data flash enabled, no BOD
# All unused bits set to 1
# Works for "DE" and "AN" parts
#set conf0 0xFFFFFFFE
# Data flash start address
#set conf1 0x3E00
foreach arg $args {
if [info exists conf1] {
error "Too many arguments"
}
set conf1 $arg
}
if {![info exists conf1]} {
set conf1 [ReadViaISP 0x300004]
}
# If writing to the config registers fails on a "DE series" part
# (e.g. Mini54ZDE) uncomment this:
# Write one to undocumented flash control register
# to enable write access to flash
#mww 0x5000c01c 0x01
PageErase 0x300000
WriteViaISP 0x300000 $conf0
WriteViaISP 0x300004 $conf1
}
proc VerifyAllOne {adr len} {
if {($len == 0) || ($len & ~-512) != 0} {
return -code error [format "wrong value for len (%08X)" $len]
}
# Enable ISP
mww 0x5000c000 0x39
# ISP-Command = Flash Read
mww 0x5000c004 $adr
mww 0x5000c008 $len
mww 0x5000c00c 0x28
# Write ISP Trigger Control Register (ISPTRG)
# to start
mww 0x5000c010 1
# Read ISPTRG until finished
while {[mrw 0x5000c010] != 0} {
#echo "."
}
# Read ISP Data Register (ISPDAT)
set allone [expr ([mrw 0x5000c040] & 0x80) != 0]
# Disable ISP
mww 0x5000c000 0x00
return $allone
}
proc EraseConfig {} {
set conf0 0xFFFFFFFF
set conf1 0xFFFFFFFF
WriteConfigRegsImpl $conf0 $conf1
puts "Configuration registers have been updated to Unprogrammed State"
}
proc ReadConfigRegs {} {
init
puts "Reading Configuration registers."
set id [mrw 0x50000000]
set part [GetPartName $id]
if {$part != ""} {
puts [format "Device ID (PDID) :0x%08X (%s)" $id $part]
} else {
puts [format "Device ID (PDID) :0x%08X" $id]
}
halt
InitandUnlock
# puts "Unlock done"
set conf0 [ReadViaISP 0x300000]
set conf1 [ReadViaISP 0x300004]
puts [format "Config0 (0x00300000):0x%X" $conf0]
puts [format "Config1 (0x00300004):0x%X" $conf1]
}
proc BlankCheck {} {
init
puts "Checking if flash memory is blank."
set id [mrw 0x50000000]
set part [GetPartName $id]
if {$part != ""} {
puts [format "Device ID (PDID) :0x%08X (%s)" $id $part]
} else {
puts [format "Device ID (PDID) :0x%08X" $id]
}
InitandUnlock
set conf0 [ReadViaISP 0x00300000]
if {$conf0 & 2} {
# puts "Flash is not locked."
} else {
puts "Flash is locked! Cannot check properly."
return
}
# NUC126
if {[lsearch -exact {C05200} [format %X [expr $id & ~0xFF]]] >= 0} {
# flash probe 0
# flash probe 1
# set flash [flash list]
# set aprom [lindex $flash 0]
# set ldrom [lindex $flash 1]
set aprom [dict create base 0 size [GetFlashSize $id]]
set ldrom [dict create base 0x100000 size 0x1000]
puts -nonewline "APROM: "
if [VerifyAllOne $aprom(base) $aprom(size)] {
puts "Erased."
} else {
puts "Not Erased!"
}
puts -nonewline "LDROM: "
if [VerifyAllOne $ldrom(base) $ldrom(size)] {
puts "Erased."
} else {
puts "Not Erased!"
}
} else {
puts -nonewline "APROM: "
if {[ReadViaISP 0x00000004] == 0xffffffff} {
puts "Erased."
} else {
puts "Not Erased!"
}
puts -nonewline "LDROM: "
if {[ReadViaISP 0x00100004] == 0xffffffff} {
puts "Erased."
} else {
puts "Not Erased!"
}
}
puts -nonewline "CONFIG: "
if {[ReadViaISP 0x00300000] == 0xffffffff && [ReadViaISP 0x00300004] == 0xffffffff} {
puts "Erased."
} else {
puts "Not Erased!"
}
}
# Perform undocumented erase and unlock sequence
# if flash is locked (Config0 register bit1 cleared)
proc ChipErase {} {
init
halt
InitandUnlock
set conf0 [ReadViaISP 0x300000]
if {$conf0 & 2} {
puts "Flash is not locked."
} else {
puts "Flash is locked! Erasing anyway."
}
# Enable ISP
# mww 0x5000c000 0x39
# Test mass erase only APROM
mww 0x5000c000 0x09
# Write one to undocumented flash control register
mww 0x5000c01c 0x01
if {[mrw 0x5000c000] & 0x40} {
error "ISP Error"
}
if {[mrw 0x5000c010] != 0} {
error "ISP Busy error"
}
# ISP-Command Mass-Erase
mww 0x5000c00c 0x26
mww 0x5000c004 0
puts "Performing chip erase."
mww 0x5000c010 1
sleep 50
while {[mrw 0x5000c010] != 0} {
echo "."
sleep 10
}
if {[mrw 0x5000c000] & 0x40} {
error "ISP Error"
}
# Disable ISP
mww 0x5000c000 0x00
BlankCheck
# Write zero to undocumented register
# mww 0x5000c01c 0
}
#proc ChipReset {} {
# InitandUnlock
# mww 0x50000008 0x01
#}
proc SysReset {args} {
init
foreach arg $args {
if [string equal [string tolower $arg] ldrom] {
set ldrom 1
} elseif [string equal [string tolower $arg] aprom] {
set aprom 1
} elseif [string equal [string tolower $arg] cpu] {
set cpurst 1
} elseif [string equal [string tolower $arg] chip] {
set chiprst 1
} elseif [string equal [string tolower $arg] por] {
set chiprst 1
} elseif [string equal [string tolower $arg] run] {
set run 1
} elseif [string equal [string tolower $arg] halt] {
set halt 1
} else {
error [format "Unexpected argument '%o'" $arg]
}
}
if {[info exists aprom] && [info exists ldrom]} {
error "Too many arguments"
}
if {[info exists cpurst] && [info exists chiprst]} {
error "Too many arguments"
}
if {[info exists run] && [info exists halt]} {
error "Too many arguments"
}
InitandUnlock
if [info exists chiprst] {
# Set CHIPRST (IPRST0[0]) to 1. Result of CHIP Reset is same as Power On Reset.
mww 0x50000008 [expr [mrw 0x50000008] | 0x01]
} else {
if [info exists aprom] {
# Set BS (ISPCTL[1]) to 0
mww 0x5000c000 [expr [mrw 0x5000c000] & ~0x02]
}
if [info exists ldrom] {
# Set BS (ISPCTL[1]) to 1
mww 0x5000c000 [expr [mrw 0x5000c000] | 0x02]
}
if [info exists cpurst] {
# Set CPURST (IPRST0[1]) to 1.
mww 0x50000008 [expr [mrw 0x50000008] | 0x02]
} else {
# Set SYSRESETREQ (AIRCR[2]) to 1 along with VECTORKEY
# mww 0xe000ed0c 0x05fa0004
if [info exists run] {
reset run
} elseif [info exists halt] {
reset halt
} else {
reset
}
}
}
}
# This function does not rely on device flash driver.
# means it only needs ARM Core's Debug Access Port to be functioning.
proc WriteBootloader {} {
# InitandUnlock
ChipErase
puts -nonewline "Writing Bootloader code to LDROM: "
WriteViaISP 0x100000 0x20005000
WriteViaISP 0x100004 0x00000425
WriteViaISP 0x100008 0x0000048b
WriteViaISP 0x10000C 0x00000481
WriteViaISP 0x100010 0x00000000
WriteViaISP 0x100014 0x00000000
WriteViaISP 0x100018 0x00000000
WriteViaISP 0x10001C 0x00000000
WriteViaISP 0x100020 0x00000000
WriteViaISP 0x100024 0x00000000
WriteViaISP 0x100028 0x00000000
WriteViaISP 0x10002C 0x0000048b
WriteViaISP 0x100030 0x00000000
WriteViaISP 0x100034 0x00000000
WriteViaISP 0x100038 0x0000048b
WriteViaISP 0x10003C 0x0000048b
WriteViaISP 0x100040 0xaf00b580
WriteViaISP 0x100044 0xf000b0a0
WriteViaISP 0x100048 0x48e7fa23
WriteViaISP 0x10004C 0x22046801
WriteViaISP 0x100050 0x6002430a
WriteViaISP 0x100054 0x06c968c1
WriteViaISP 0x100058 0x6901d5fc
WriteViaISP 0x10005C 0x43312607
WriteViaISP 0x100060 0x69816101
WriteViaISP 0x100064 0x4391220f
WriteViaISP 0x100068 0x21016181
WriteViaISP 0x10006C 0x0349910b
WriteViaISP 0x100070 0x430a6802
WriteViaISP 0x100074 0x68c16002
WriteViaISP 0x100078 0xd5fc0689
WriteViaISP 0x10007C 0x040a990b
WriteViaISP 0x100080 0x92086a01
WriteViaISP 0x100084 0x62014311
WriteViaISP 0x100088 0x620149d8
WriteViaISP 0x10008C 0x074968c1
WriteViaISP 0x100090 0x6981d5fc
WriteViaISP 0x100094 0x43299d0b
WriteViaISP 0x100098 0x4391220e
WriteViaISP 0x10009C 0x69016181
WriteViaISP 0x1000A0 0x430a2202
WriteViaISP 0x1000A4 0x91032105
WriteViaISP 0x1000A8 0x6102438a
WriteViaISP 0x1000AC 0x21094ad0
WriteViaISP 0x1000B0 0x6b416011
WriteViaISP 0x1000B4 0x40114acf
WriteViaISP 0x1000B8 0x69816341
WriteViaISP 0x1000BC 0x439122f0
WriteViaISP 0x1000C0 0x06e96181
WriteViaISP 0x1000C4 0x430a6882
WriteViaISP 0x1000C8 0x02a86082
WriteViaISP 0x1000CC 0x3012900f
WriteViaISP 0x1000D0 0x600849c9
WriteViaISP 0x1000D4 0x210048c9
WriteViaISP 0x1000D8 0x4cc96001
WriteViaISP 0x1000DC 0x910660e1
WriteViaISP 0x1000E0 0xf0006061
WriteViaISP 0x1000E4 0x68e0facd
WriteViaISP 0x1000E8 0x4308990f
WriteViaISP 0x1000EC 0x68e060e0
WriteViaISP 0x1000F0 0x91042180
WriteViaISP 0x1000F4 0x60e04308
WriteViaISP 0x1000F8 0x68e10268
WriteViaISP 0x1000FC 0x60e14301
WriteViaISP 0x100100 0x211068e0
WriteViaISP 0x100104 0x60e14301
WriteViaISP 0x100108 0x680849be
WriteViaISP 0x10010C 0x60084328
WriteViaISP 0x100110 0xf0004628
WriteViaISP 0x100114 0x6025fafe
WriteViaISP 0x100118 0xf0002064
WriteViaISP 0x10011C 0x4621fafa
WriteViaISP 0x100120 0x68104ab8
WriteViaISP 0x100124 0x601043a8
WriteViaISP 0x100128 0x68e0022a
WriteViaISP 0x10012C 0x43109205
WriteViaISP 0x100130 0xa81060e0
WriteViaISP 0x100134 0x32104602
WriteViaISP 0x100138 0x30089201
WriteViaISP 0x10013C 0x9b089002
WriteViaISP 0x100140 0x68089607
WriteViaISP 0x100144 0x07c0900e
WriteViaISP 0x100148 0x68c8d00a
WriteViaISP 0x10014C 0xd00507c0
WriteViaISP 0x100150 0x60489806
WriteViaISP 0x100154 0xfa94f000
WriteViaISP 0x100158 0x9b0849a9
WriteViaISP 0x10015C 0x6008980b
WriteViaISP 0x100160 0x900d6888
WriteViaISP 0x100164 0x2d049d06
WriteViaISP 0x100168 0xe0ded100
WriteViaISP 0x10016C 0x461c4628
WriteViaISP 0x100170 0x1c6d40ac
WriteViaISP 0x100174 0x42149a0e
WriteViaISP 0x100178 0x950fd0f5
WriteViaISP 0x10017C 0x43422203
WriteViaISP 0x100180 0x990d3208
WriteViaISP 0x100184 0x403140d1
WriteViaISP 0x100188 0xd00d2906
WriteViaISP 0x10018C 0xd00b2902
WriteViaISP 0x100190 0x499b2900
WriteViaISP 0x100194 0xd13b9d0f
WriteViaISP 0x100198 0x78104a9f
WriteViaISP 0x10019C 0xd04f2800
WriteViaISP 0x1001A0 0x20006048
WriteViaISP 0x1001A4 0xe0327010
WriteViaISP 0x1001A8 0x28030102
WriteViaISP 0x1001AC 0x4898d12b
WriteViaISP 0x1001B0 0x5885920a
WriteViaISP 0x1001B4 0x900ca810
WriteViaISP 0x1001B8 0x46312640
WriteViaISP 0x1001BC 0xfaf8f000
WriteViaISP 0x1001C0 0x990c2090
WriteViaISP 0x1001C4 0x46329609
WriteViaISP 0x1001C8 0xf9a6f000
WriteViaISP 0x1001CC 0x7800980c
WriteViaISP 0x1001D0 0x46112200
WriteViaISP 0x1001D4 0xd0044295
WriteViaISP 0x1001D8 0x5c9bab10
WriteViaISP 0x1001DC 0x1c5218c9
WriteViaISP 0x1001E0 0x28a4e7f8
WriteViaISP 0x1001E4 0xa810d116
WriteViaISP 0x1001E8 0x98128001
WriteViaISP 0x1001EC 0x90111c40
WriteViaISP 0x1001F0 0x20509e07
WriteViaISP 0x1001F4 0x9d09a910
WriteViaISP 0x1001F8 0xf000462a
WriteViaISP 0x1001FC 0x4884f97f
WriteViaISP 0x100200 0x9b086205
WriteViaISP 0x100204 0x20409a0a
WriteViaISP 0x100208 0x50884981
WriteViaISP 0x10020C 0x9d0f497c
WriteViaISP 0x100210 0xe7a8600c
WriteViaISP 0x100214 0x8011aa10
WriteViaISP 0x100218 0x1c499911
WriteViaISP 0x10021C 0x28009111
WriteViaISP 0x100220 0x28a0d017
WriteViaISP 0x100224 0x28a2d02a
WriteViaISP 0x100228 0x28a6d048
WriteViaISP 0x10022C 0x28b1d042
WriteViaISP 0x100230 0xd0099e07
WriteViaISP 0x100234 0xd10028ab
WriteViaISP 0x100238 0x28ace0ca
WriteViaISP 0x10023C 0xe0cbd1d9
WriteViaISP 0x100240 0x4a732000
WriteViaISP 0x100244 0xe7e26110
WriteViaISP 0x100248 0x07009803
WriteViaISP 0x10024C 0x90126800
WriteViaISP 0x100250 0x4871e7cf
WriteViaISP 0x100254 0x2d386885
WriteViaISP 0x100258 0x2538d300
WriteViaISP 0x10025C 0x684008aa
WriteViaISP 0x100260 0xf0009902
WriteViaISP 0x100264 0x496cf946
WriteViaISP 0x100268 0x19406848
WriteViaISP 0x10026C 0x68886048
WriteViaISP 0x100270 0x9e071b40
WriteViaISP 0x100274 0x2000d200
WriteViaISP 0x100278 0xe7ba6088
WriteViaISP 0x10027C 0x98132100
WriteViaISP 0x100280 0x98071dc6
WriteViaISP 0x100284 0x48644386
WriteViaISP 0x100288 0x60866041
WriteViaISP 0x10028C 0xd1374630
WriteViaISP 0x100290 0xf922f000
WriteViaISP 0x100294 0x91004602
WriteViaISP 0x100298 0x485b460d
WriteViaISP 0x10029C 0x980b4005
WriteViaISP 0x1002A0 0x920c4002
WriteViaISP 0x1002A4 0xf0004859
WriteViaISP 0x1002A8 0x2800f901
WriteViaISP 0x1002AC 0x980bd00b
WriteViaISP 0x1002B0 0xe00a0440
WriteViaISP 0x1002B4 0x2133a810
WriteViaISP 0x1002B8 0xe7997201
WriteViaISP 0x1002BC 0xf90cf000
WriteViaISP 0x1002C0 0x90129113
WriteViaISP 0x1002C4 0x4851e794
WriteViaISP 0x1002C8 0x9a0c1d00
WriteViaISP 0x1002CC 0x9b00432a
WriteViaISP 0x1002D0 0x46014298
WriteViaISP 0x1002D4 0x4619d300
WriteViaISP 0x1002D8 0xd1002a00
WriteViaISP 0x1002DC 0x494e4608
WriteViaISP 0x1002E0 0xe00d6849
WriteViaISP 0x1002E4 0x60594b42
WriteViaISP 0x1002E8 0x60da2222
WriteViaISP 0x1002EC 0x611a9a0b
WriteViaISP 0x1002F0 0x8f6ff3bf
WriteViaISP 0x1002F4 0x0653681a
WriteViaISP 0x1002F8 0x4a43d467
WriteViaISP 0x1002FC 0x1c491851
WriteViaISP 0x100300 0xd3ef4281
WriteViaISP 0x100304 0xd3002e30
WriteViaISP 0x100308 0x08b22630
WriteViaISP 0x10030C 0x68684d42
WriteViaISP 0x100310 0xf0009901
WriteViaISP 0x100314 0x4629f8ee
WriteViaISP 0x100318 0x19806868
WriteViaISP 0x10031C 0x68a86068
WriteViaISP 0x100320 0xd2001b80
WriteViaISP 0x100324 0x60882000
WriteViaISP 0x100328 0x483ae762
WriteViaISP 0x10032C 0x40029a0e
WriteViaISP 0x100330 0xd1174282
WriteViaISP 0x100334 0x90112000
WriteViaISP 0x100338 0xad109010
WriteViaISP 0x10033C 0x46292208
WriteViaISP 0x100340 0xf8eaf000
WriteViaISP 0x100344 0xf0004628
WriteViaISP 0x100348 0x492df8f5
WriteViaISP 0x10034C 0x4c309b08
WriteViaISP 0x100350 0x9a046860
WriteViaISP 0x100354 0x60604310
WriteViaISP 0x100358 0x43106960
WriteViaISP 0x10035C 0x482d6160
WriteViaISP 0x100360 0x60081e80
WriteViaISP 0x100364 0x68204c25
WriteViaISP 0x100368 0xd10f2801
WriteViaISP 0x10036C 0x60202000
WriteViaISP 0x100370 0x492068c8
WriteViaISP 0x100374 0x49224008
WriteViaISP 0x100378 0x200160c8
WriteViaISP 0x10037C 0xf9c9f000
WriteViaISP 0x100380 0x9b08491f
WriteViaISP 0x100384 0x9a0568c8
WriteViaISP 0x100388 0x60c84310
WriteViaISP 0x10038C 0x28026820
WriteViaISP 0x100390 0xe6d6d000
WriteViaISP 0x100394 0x60202000
WriteViaISP 0x100398 0x491668c8
WriteViaISP 0x10039C 0x49184008
WriteViaISP 0x1003A0 0x491860c8
WriteViaISP 0x1003A4 0x9d0b6808
WriteViaISP 0x1003A8 0x60084328
WriteViaISP 0x1003AC 0x46209c05
WriteViaISP 0x1003B0 0xf00030f4
WriteViaISP 0x1003B4 0x4912f9ae
WriteViaISP 0x1003B8 0x4a129b08
WriteViaISP 0x1003BC 0x43a86810
WriteViaISP 0x1003C0 0x68c86010
WriteViaISP 0x1003C4 0x60c84320
WriteViaISP 0x1003C8 0x4809e6bb
WriteViaISP 0x1003CC 0xdefe6002
WriteViaISP 0x1003D0 0x99094807
WriteViaISP 0x1003D4 0xe0026001
WriteViaISP 0x1003D8 0x49052042
WriteViaISP 0x1003DC 0x480f6008
WriteViaISP 0x1003E0 0x6001490f
WriteViaISP 0x1003E4 0x46c0defe
WriteViaISP 0x1003E8 0x50000200
WriteViaISP 0x1003EC 0x0008000b
WriteViaISP 0x1003F0 0x5000c000
WriteViaISP 0x1003F4 0xfffffeff
WriteViaISP 0x1003F8 0x50000090
WriteViaISP 0x1003FC 0x20004c00
WriteViaISP 0x100400 0x40060004
WriteViaISP 0x100404 0x40060090
WriteViaISP 0x100408 0x000007ff
WriteViaISP 0x10040C 0x0003fffc
WriteViaISP 0x100410 0x40060504
WriteViaISP 0x100414 0x80000002
WriteViaISP 0x100418 0x200000ac
WriteViaISP 0x10041C 0xe000ed0c
WriteViaISP 0x100420 0x05fa0004
WriteViaISP 0x100424 0xaf00b580
WriteViaISP 0x100428 0xf97cf000
WriteViaISP 0x10042C 0x490d480c
WriteViaISP 0x100430 0xd2024288
WriteViaISP 0x100434 0xc0042200
WriteViaISP 0x100438 0x480be7fa
WriteViaISP 0x10043C 0x4a0c490b
WriteViaISP 0x100440 0xd2024290
WriteViaISP 0x100444 0xc008c908
WriteViaISP 0x100448 0x480ae7fa
WriteViaISP 0x10044C 0x4a0b490a
WriteViaISP 0x100450 0xd2024290
WriteViaISP 0x100454 0xc008c908
WriteViaISP 0x100458 0xf7ffe7fa
WriteViaISP 0x10045C 0xdefefdf1
WriteViaISP 0x100460 0x200000ac
WriteViaISP 0x100464 0x200000b8
WriteViaISP 0x100468 0x20000000
WriteViaISP 0x10046C 0x00000874
WriteViaISP 0x100470 0x200000ac
WriteViaISP 0x100474 0x200000ac
WriteViaISP 0x100478 0x200000ac
WriteViaISP 0x10047C 0x200000ac
WriteViaISP 0x100480 0xaf00b580
WriteViaISP 0x100484 0xf9a8f000
WriteViaISP 0x100488 0xe7febd80
WriteViaISP 0x10048C 0xd4d44770
WriteViaISP 0x100490 0x21594805
WriteViaISP 0x100494 0x21166001
WriteViaISP 0x100498 0x21886001
WriteViaISP 0x10049C 0x68016001
WriteViaISP 0x1004A0 0xd0f607c9
WriteViaISP 0x1004A4 0x46c04770
WriteViaISP 0x1004A8 0x50000100
WriteViaISP 0x1004AC 0xaf02b5d0
WriteViaISP 0x1004B0 0x60484908
WriteViaISP 0x1004B4 0x60ca2200
WriteViaISP 0x1004B8 0x2001608a
WriteViaISP 0x1004BC 0xf3bf6108
WriteViaISP 0x1004C0 0x680b8f6f
WriteViaISP 0x1004C4 0xd402065c
WriteViaISP 0x1004C8 0x46106889
WriteViaISP 0x1004CC 0x600bbdd0
WriteViaISP 0x1004D0 0x46c0bdd0
WriteViaISP 0x1004D4 0x5000c000
WriteViaISP 0x1004D8 0xaf02b5b0
WriteViaISP 0x1004DC 0x05042003
WriteViaISP 0x1004E0 0xf7ff4620
WriteViaISP 0x1004E4 0x460dffe3
WriteViaISP 0x1004E8 0xf7ff1d20
WriteViaISP 0x1004EC 0x4628ffdf
WriteViaISP 0x1004F0 0xb580bdb0
WriteViaISP 0x1004F4 0xf000af00
WriteViaISP 0x1004F8 0xbd80f969
WriteViaISP 0x1004FC 0x18c04b05
WriteViaISP 0x100500 0xd0052a00
WriteViaISP 0x100504 0x7003780b
WriteViaISP 0x100508 0x1c491e52
WriteViaISP 0x10050C 0xe7f71c40
WriteViaISP 0x100510 0x46c04770
WriteViaISP 0x100514 0x40060100
WriteViaISP 0x100518 0x18c04b05
WriteViaISP 0x10051C 0xd0052a00
WriteViaISP 0x100520 0x700b7803
WriteViaISP 0x100524 0x1c491e52
WriteViaISP 0x100528 0xe7f71c40
WriteViaISP 0x10052C 0x46c04770
WriteViaISP 0x100530 0x40060100
WriteViaISP 0x100534 0xaf06b5fe
WriteViaISP 0x100538 0x23067842
WriteViaISP 0x10053C 0x78044053
WriteViaISP 0x100540 0x94022180
WriteViaISP 0x100544 0x43194061
WriteViaISP 0x100548 0x414d424d
WriteViaISP 0x10054C 0x43197883
WriteViaISP 0x100550 0x414e424e
WriteViaISP 0x100554 0x78c07984
WriteViaISP 0x100558 0xd10b2900
WriteViaISP 0x10055C 0xd1092801
WriteViaISP 0x100560 0x2c402008
WriteViaISP 0x100564 0xd0004601
WriteViaISP 0x100568 0x428c2112
WriteViaISP 0x10056C 0x460cd300
WriteViaISP 0x100570 0xe00a4942
WriteViaISP 0x100574 0x1e819201
WriteViaISP 0x100578 0x414a424a
WriteViaISP 0x10057C 0xd00a4216
WriteViaISP 0x100580 0xd3002c29
WriteViaISP 0x100584 0x20082429
WriteViaISP 0x100588 0x4622493b
WriteViaISP 0x10058C 0xffb6f7ff
WriteViaISP 0x100590 0x60044831
WriteViaISP 0x100594 0x1f81bdfe
WriteViaISP 0x100598 0x414a424a
WriteViaISP 0x10059C 0xd0034216
WriteViaISP 0x1005A0 0x2102482d
WriteViaISP 0x1005A4 0xbdfe6081
WriteViaISP 0x1005A8 0x424a1ec1
WriteViaISP 0x1005AC 0x4215414a
WriteViaISP 0x1005B0 0x2b03d00d
WriteViaISP 0x1005B4 0x492cd8f4
WriteViaISP 0x1005B8 0x46c02404
WriteViaISP 0x1005BC 0x791b447b
WriteViaISP 0x1005C0 0x449f005b
WriteViaISP 0x1005C4 0x2b28012d
WriteViaISP 0x1005C8 0x2410492a
WriteViaISP 0x1005CC 0x9a02e028
WriteViaISP 0x1005D0 0x99012a80
WriteViaISP 0x1005D4 0x2900d105
WriteViaISP 0x1005D8 0x2008d103
WriteViaISP 0x1005DC 0x24024921
WriteViaISP 0x1005E0 0x2a81e7d3
WriteViaISP 0x1005E4 0x2906d10d
WriteViaISP 0x1005E8 0x2822d10b
WriteViaISP 0x1005EC 0x2008d109
WriteViaISP 0x1005F0 0x251b491b
WriteViaISP 0x1005F4 0xf7ff462a
WriteViaISP 0x1005F8 0x2c1bff81
WriteViaISP 0x1005FC 0x462cd3c8
WriteViaISP 0x100600 0x2a00e7c6
WriteViaISP 0x100604 0x2905d10e
WriteViaISP 0x100608 0x4814d10c
WriteViaISP 0x10060C 0x48127003
WriteViaISP 0x100610 0x60012100
WriteViaISP 0x100614 0x4916bdfe
WriteViaISP 0x100618 0xe0012416
WriteViaISP 0x10061C 0x24144913
WriteViaISP 0x100620 0xe7b22008
WriteViaISP 0x100624 0xd1072a00
WriteViaISP 0x100628 0xd1052909
WriteViaISP 0x10062C 0x2100480a
WriteViaISP 0x100630 0x21406001
WriteViaISP 0x100634 0xbdfe6301
WriteViaISP 0x100638 0xd1072a21
WriteViaISP 0x10063C 0xd1052909
WriteViaISP 0x100640 0xd1a72802
WriteViaISP 0x100644 0x21084804
WriteViaISP 0x100648 0xbdfe6101
WriteViaISP 0x10064C 0xd1a12a21
WriteViaISP 0x100650 0xd0dc290a
WriteViaISP 0x100654 0x46c0e79e
WriteViaISP 0x100658 0x40060504
WriteViaISP 0x10065C 0x200000ac
WriteViaISP 0x100660 0x00000857
WriteViaISP 0x100664 0x00000855
WriteViaISP 0x100668 0x00000851
WriteViaISP 0x10066C 0x00000817
WriteViaISP 0x100670 0x0000082b
WriteViaISP 0x100674 0x00000841
WriteViaISP 0x100678 0x000007ee
WriteViaISP 0x10067C 0x000007dc
WriteViaISP 0x100680 0x2100480b
WriteViaISP 0x100684 0x480b6001
WriteViaISP 0x100688 0x60012108
WriteViaISP 0x10068C 0x01492111
WriteViaISP 0x100690 0x32a0460a
WriteViaISP 0x100694 0x22486082
WriteViaISP 0x100698 0x61816102
WriteViaISP 0x10069C 0x62012150
WriteViaISP 0x1006A0 0x62812141
WriteViaISP 0x1006A4 0x63012190
WriteViaISP 0x1006A8 0x63812122
WriteViaISP 0x1006AC 0x46c04770
WriteViaISP 0x1006B0 0x40060018
WriteViaISP 0x1006B4 0x40060500
WriteViaISP 0x1006B8 0xaf02b5b0
WriteViaISP 0x1006BC 0xd01c2800
WriteViaISP 0x1006C0 0x2200490e
WriteViaISP 0x1006C4 0x608a604a
WriteViaISP 0x1006C8 0x600b2305
WriteViaISP 0x1006CC 0x041b2301
WriteViaISP 0x1006D0 0x1c654c0b
WriteViaISP 0x1006D4 0xd90742a8
WriteViaISP 0x1006D8 0x680d604c
WriteViaISP 0x1006DC 0xd0fc421d
WriteViaISP 0x1006E0 0x062d25ff
WriteViaISP 0x1006E4 0xe7f41940
WriteViaISP 0x1006E8 0xd9052801
WriteViaISP 0x1006EC 0x60481e40
WriteViaISP 0x1006F0 0x6808608a
WriteViaISP 0x1006F4 0xd0fc4218
WriteViaISP 0x1006F8 0xbdb0600a
WriteViaISP 0x1006FC 0xe000e010
WriteViaISP 0x100700 0x00ffffff
WriteViaISP 0x100704 0xaf00b580
WriteViaISP 0x100708 0x43482148
WriteViaISP 0x10070C 0xffd4f7ff
WriteViaISP 0x100710 0xb580bd80
WriteViaISP 0x100714 0x217daf00
WriteViaISP 0x100718 0x434800c9
WriteViaISP 0x10071C 0xfff2f7ff
WriteViaISP 0x100720 0xd4d4bd80
WriteViaISP 0x100724 0xaf02b5d0
WriteViaISP 0x100728 0x6801480d
WriteViaISP 0x10072C 0x60022203
WriteViaISP 0x100730 0x29034011
WriteViaISP 0x100734 0xf7ffd10d
WriteViaISP 0x100738 0x4c0afeab
WriteViaISP 0x10073C 0x60202001
WriteViaISP 0x100740 0xf7ff2004
WriteViaISP 0x100744 0x1c48feb3
WriteViaISP 0x100748 0xd8032801
WriteViaISP 0x10074C 0x21004806
WriteViaISP 0x100750 0xbdd06001
WriteViaISP 0x100754 0x60202040
WriteViaISP 0x100758 0x49054804
WriteViaISP 0x10075C 0xdefe6001
WriteViaISP 0x100760 0x50000004
WriteViaISP 0x100764 0x5000c000
WriteViaISP 0x100768 0x50000100
WriteViaISP 0x10076C 0xe000ed0c
WriteViaISP 0x100770 0x05fa0004
WriteViaISP 0x100774 0xaf00b580
WriteViaISP 0x100778 0x4611460b
WriteViaISP 0x10077C 0xf000461a
WriteViaISP 0x100780 0xbd80f81d
WriteViaISP 0x100784 0xaf02b5d0
WriteViaISP 0x100788 0xb2d24613
WriteViaISP 0x10078C 0xd30c2904
WriteViaISP 0x100790 0x18d3061b
WriteViaISP 0x100794 0x191b0414
WriteViaISP 0x100798 0x191b0214
WriteViaISP 0x10079C 0xc008460c
WriteViaISP 0x1007A0 0x2c031f24
WriteViaISP 0x1007A4 0x2303d8fb
WriteViaISP 0x1007A8 0xf7ff4019
WriteViaISP 0x1007AC 0xbdd0ffe3
WriteViaISP 0x1007B0 0xaf00b580
WriteViaISP 0x1007B4 0xf7ff2200
WriteViaISP 0x1007B8 0xbd80ffe5
WriteViaISP 0x1007BC 0xd0042a00
WriteViaISP 0x1007C0 0x70194603
WriteViaISP 0x1007C4 0x1e521c5b
WriteViaISP 0x1007C8 0x4770d1fb
WriteViaISP 0x1007CC 0x4801b403
WriteViaISP 0x1007D0 0xbd019001
WriteViaISP 0x1007D4 0x20000001
WriteViaISP 0x1007D8 0xd4d4e7fe
WriteViaISP 0x1007DC 0x02000112
WriteViaISP 0x1007E0 0x40000000
WriteViaISP 0x1007E4 0xa3160416
WriteViaISP 0x1007E8 0x02010100
WriteViaISP 0x1007EC 0x02090103
WriteViaISP 0x1007F0 0x01010029
WriteViaISP 0x1007F4 0x09328000
WriteViaISP 0x1007F8 0x02000004
WriteViaISP 0x1007FC 0x00000003
WriteViaISP 0x100800 0x01102109
WriteViaISP 0x100804 0x1b220100
WriteViaISP 0x100808 0x81050700
WriteViaISP 0x10080C 0x01004003
WriteViaISP 0x100810 0x03020507
WriteViaISP 0x100814 0x14010040
WriteViaISP 0x100818 0x4e004103
WriteViaISP 0x10081C 0x53005900
WriteViaISP 0x100820 0x52005400
WriteViaISP 0x100824 0x4e004900
WriteViaISP 0x100828 0x16004700
WriteViaISP 0x10082C 0x55004e03
WriteViaISP 0x100830 0x31004300
WriteViaISP 0x100834 0x36003200
WriteViaISP 0x100838 0x49002000
WriteViaISP 0x10083C 0x50005300
WriteViaISP 0x100840 0x4e031000
WriteViaISP 0x100844 0x76007500
WriteViaISP 0x100848 0x74006f00
WriteViaISP 0x10084C 0x6e006f00
WriteViaISP 0x100850 0x09030400
WriteViaISP 0x100854 0x05000004
WriteViaISP 0x100858 0xa1000901
WriteViaISP 0x10085C 0x25001501
WriteViaISP 0x100860 0x290019ff
WriteViaISP 0x100864 0x754095ff
WriteViaISP 0x100868 0x19028108
WriteViaISP 0x10086C 0x91ff2900
WriteViaISP 0x100870 0x0000c002
WriteViaISP 0x100874 0xaf06b5fe
WriteViaISP 0x100878 0x46039202
WriteViaISP 0x10087C 0x20274a26
WriteViaISP 0x100880 0x200060d0
WriteViaISP 0x100884 0x4d252401
WriteViaISP 0x100888 0x93009401
WriteViaISP 0x10088C 0x42909a02
WriteViaISP 0x100890 0x07e2d235
WriteViaISP 0x100894 0x6c2ed004
WriteViaISP 0x100898 0xd1fc07f6
WriteViaISP 0x10089C 0x60634c1e
WriteViaISP 0x1008A0 0xd408071e
WriteViaISP 0x1008A4 0x06b66c2e
WriteViaISP 0x1008A8 0xd1fb0fb6
WriteViaISP 0x1008AC 0x598c0086
WriteViaISP 0x1008B0 0xc610462e
WriteViaISP 0x1008B4 0x6c2ce008
WriteViaISP 0x1008B8 0x0fa40624
WriteViaISP 0x1008BC 0x0084d1fb
WriteViaISP 0x1008C0 0x60ac590c
WriteViaISP 0x1008C4 0x360c462e
WriteViaISP 0x1008C8 0x18640084
WriteViaISP 0x1008CC 0x60346864
WriteViaISP 0x1008D0 0xd0022a00
WriteViaISP 0x1008D4 0x4c102201
WriteViaISP 0x1008D8 0x6c2a6122
WriteViaISP 0x1008DC 0xd10607d2
WriteViaISP 0x1008E0 0x33086c6b
WriteViaISP 0x1008E4 0x1a189800
WriteViaISP 0x1008E8 0x9e010880
WriteViaISP 0x1008EC 0x3308e002
WriteViaISP 0x1008F0 0x26001c80
WriteViaISP 0x1008F4 0x4254b2da
WriteViaISP 0x1008F8 0x43344154
WriteViaISP 0x1008FC 0x6c28e7c6
WriteViaISP 0x100900 0xd1fc07c0
WriteViaISP 0x100904 0x68104a04
WriteViaISP 0x100908 0xd4010641
WriteViaISP 0x10090C 0xbdfe2000
WriteViaISP 0x100910 0x98016010
WriteViaISP 0x100914 0x46c0bdfe
WriteViaISP 0x100918 0x5000c000
WriteViaISP 0x10091C 0x5000c080
puts "Done."
# CONFIG0[27] == 0 : PF4 and PF3 will be configured as GPIO pins on reset
set conf0 0xF7FFFF7E
# CONFIG0[27] == 1 : PF4 and PF3 will be configured as HXT crystal driving pins
# set conf0 0xFFFFFF7E
# start of Data Flash == end of APROM
set conf1 0x0001C000
WriteConfigRegsImpl $conf0 $conf1
puts "Default values have been written to Configuration registers."
puts [format "0x%08X 0x%08X" $conf0 $conf1]
puts "Rebooting Target"
SysReset ldrom run
puts "Exiting"
exit
}
if 0 { }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment