mirror of
https://github.com/ADElectronics/RTL00_WEB_WS2812.git
synced 2024-12-04 19:00:31 +00:00
flasher fix
This commit is contained in:
parent
52037c9f7f
commit
40dbf7bb88
22 changed files with 1791 additions and 1 deletions
6
Firmware/tools/flash/RTL00ConsoleROM.JLinkScript
Normal file
6
Firmware/tools/flash/RTL00ConsoleROM.JLinkScript
Normal file
|
@ -0,0 +1,6 @@
|
|||
h
|
||||
loadbin flasher/RTL00Console_ROM.bin 0x10000ba8
|
||||
r
|
||||
w4 0x40000210,0x4011113
|
||||
g
|
||||
q
|
BIN
Firmware/tools/flash/RTL00Console_ROM.bin
Normal file
BIN
Firmware/tools/flash/RTL00Console_ROM.bin
Normal file
Binary file not shown.
119
Firmware/tools/flash/RTL8710.jflash
Normal file
119
Firmware/tools/flash/RTL8710.jflash
Normal file
|
@ -0,0 +1,119 @@
|
|||
AppVersion = 47812
|
||||
[GENERAL]
|
||||
ConnectMode = 0
|
||||
CurrentFile = "fullflash.bin"
|
||||
DataFileSAddr = 0x98000000
|
||||
GUIMode = 0
|
||||
HostName = ""
|
||||
TargetIF = 1
|
||||
USBPort = 0
|
||||
USBSerialNo = 0x00000000
|
||||
[JTAG]
|
||||
IRLen = 0
|
||||
MultipleTargets = 0
|
||||
NumDevices = 0
|
||||
Speed0 = 400
|
||||
Speed1 = 12000
|
||||
TAP_Number = 0
|
||||
UseAdaptive0 = 0
|
||||
UseAdaptive1 = 0
|
||||
UseMaxSpeed0 = 0
|
||||
UseMaxSpeed1 = 0
|
||||
[CPU]
|
||||
CheckCoreID = 0
|
||||
ChipName = "RTL8710AF"
|
||||
ClockSpeed = 0x00000000
|
||||
Core = 0x030000FF
|
||||
CoreID = 0x00000000
|
||||
CoreIDMask = 0x0F000FFF
|
||||
DeviceFamily = 0x00000003
|
||||
EndianMode = 0
|
||||
HasInternalFlash = 0
|
||||
InitStep0_Action = "Reset"
|
||||
InitStep0_Comment = "Reset and Halt"
|
||||
InitStep0_Value0 = 0x00000000
|
||||
InitStep0_Value1 = 0x00000005
|
||||
InitStep1_Action = "Go"
|
||||
InitStep1_Comment = ""
|
||||
InitStep1_Value0 = 0x00000000
|
||||
InitStep1_Value1 = 0x00000000
|
||||
InitStep2_Action = "Reset"
|
||||
InitStep2_Comment = "Reset and halt target"
|
||||
InitStep2_Value0 = 0x00000000
|
||||
InitStep2_Value1 = 0x00000005
|
||||
InitStep3_Action = "Write Register"
|
||||
InitStep3_Comment = "Only T=1"
|
||||
InitStep3_Value0 = 0x00000010
|
||||
InitStep3_Value1 = 0x01000000
|
||||
InitStep4_Action = "Write 32bit"
|
||||
InitStep4_Comment = "Setup SystemCoreClock"
|
||||
InitStep4_Value0 = 0x40000014
|
||||
InitStep4_Value1 = 0x00000001
|
||||
InitStep5_Action = "Delay"
|
||||
InitStep5_Comment = ""
|
||||
InitStep5_Value0 = 0x00000000
|
||||
InitStep5_Value1 = 0x00000005
|
||||
InitStep6_Action = "Write 32bit"
|
||||
InitStep6_Comment = "Write Page Size"
|
||||
InitStep6_Value0 = 0x1FFFFFF0
|
||||
InitStep6_Value1 = 0x00000100
|
||||
InitStep7_Action = "Write 32bit"
|
||||
InitStep7_Comment = "Write Sector Size"
|
||||
InitStep7_Value0 = 0x1FFFFFF4
|
||||
InitStep7_Value1 = 0x00001000
|
||||
InitStep8_Action = "Write 32bit"
|
||||
InitStep8_Comment = "Write Block Size"
|
||||
InitStep8_Value0 = 0x1FFFFFF8
|
||||
InitStep8_Value1 = 0x00010000
|
||||
InitStep9_Action = "Write 32bit"
|
||||
InitStep9_Comment = "Write Block Count"
|
||||
InitStep9_Value0 = 0x1FFFFFFC
|
||||
InitStep9_Value1 = 0x00000010
|
||||
NumExitSteps = 0
|
||||
NumInitSteps = 10
|
||||
RAMAddr = 0x10000000
|
||||
RAMSize = 0x00010000
|
||||
ScriptFile = ""
|
||||
UseAutoSpeed = 0x00000001
|
||||
UseRAM = 1
|
||||
UseScriptFile = 0
|
||||
[FLASH]
|
||||
aSectorSel[0] =
|
||||
AutoDetect = 1
|
||||
BankName = ""
|
||||
BankSelMode = 1
|
||||
BaseAddr = 0x98000000
|
||||
CheckId = 3
|
||||
CustomRAMCode = "RTL8710AF.hex"
|
||||
DeviceName = "Auto detected flash memory"
|
||||
EndBank = 8191
|
||||
NumBanks = 1
|
||||
OrgNumBits = 16
|
||||
OrgNumChips = 1
|
||||
StartBank = 0
|
||||
UseCustomRAMCode = 1
|
||||
[PRODUCTION]
|
||||
AutoPerformsErase = 1
|
||||
AutoPerformsHardLock = 0
|
||||
AutoPerformsHardUnlock = 0
|
||||
AutoPerformsProgram = 1
|
||||
AutoPerformsSecure = 0
|
||||
AutoPerformsSoftLock = 0
|
||||
AutoPerformsSoftUnlock = 1
|
||||
AutoPerformsStartApp = 0
|
||||
AutoPerformsUnsecure = 0
|
||||
AutoPerformsVerify = 1
|
||||
EnableProductionMode = 0
|
||||
EnableTargetPower = 0
|
||||
EraseType = 2
|
||||
ProductionDelay = 0x000001F4
|
||||
ProductionThreshold = 0x00000BB8
|
||||
ProgramSN = 0
|
||||
SerialFile = ""
|
||||
SNAddr = 0x00000000
|
||||
SNInc = 0x00000001
|
||||
SNLen = 0x00000004
|
||||
SNListFile = ""
|
||||
SNValue = 0x00000001
|
||||
TargetPowerDelay = 0x00000014
|
||||
VerifyType = 1
|
17
Firmware/tools/flash/RTL_FFlash.JLinkScript
Normal file
17
Firmware/tools/flash/RTL_FFlash.JLinkScript
Normal file
|
@ -0,0 +1,17 @@
|
|||
h
|
||||
r
|
||||
w4 0x40000230,0x0000D3C4
|
||||
w4 0x40000210,0x00200113
|
||||
w4 0x400002C0,0x00110001
|
||||
w4 0x40006008,0
|
||||
w4 0x4000602C,0
|
||||
w4 0x40006010,1
|
||||
w4 0x40006014,2
|
||||
w4 0x40006018,0
|
||||
w4 0x4000601C,0
|
||||
w4 0x4000604C,0
|
||||
savebin fullflash.bin 0x98000000 0x100000
|
||||
w4 0x40000210,0x211157
|
||||
r
|
||||
g
|
||||
q
|
11
Firmware/tools/flash/RTL_RdROM.JLinkScript
Normal file
11
Firmware/tools/flash/RTL_RdROM.JLinkScript
Normal file
|
@ -0,0 +1,11 @@
|
|||
r0
|
||||
trst0
|
||||
r1
|
||||
trst1
|
||||
h
|
||||
r
|
||||
savebin bios-rom.bin 0x00000000 0x100000
|
||||
w4 0x40000210,0x211157
|
||||
r
|
||||
g
|
||||
q
|
9
Firmware/tools/flash/RTL_Reset.JLinkScript
Normal file
9
Firmware/tools/flash/RTL_Reset.JLinkScript
Normal file
|
@ -0,0 +1,9 @@
|
|||
r0
|
||||
trst0
|
||||
r1
|
||||
trst1
|
||||
h
|
||||
r
|
||||
w4 0x40000210,0x0011113
|
||||
g
|
||||
q
|
12
Firmware/tools/flash/RTL_RunRAM.JLinkScript
Normal file
12
Firmware/tools/flash/RTL_RunRAM.JLinkScript
Normal file
|
@ -0,0 +1,12 @@
|
|||
r0
|
||||
trst0
|
||||
r1
|
||||
trst1
|
||||
h
|
||||
r
|
||||
loadbin Debug/bin/ram_1.r.bin 0x10000bc8
|
||||
loadbin Debug/bin/ram_2.bin 0x10006000
|
||||
r
|
||||
w4 0x40000210,0x20011113
|
||||
g
|
||||
q
|
18
Firmware/tools/flash/RTL_RunRAM_SDR.JLinkScript
Normal file
18
Firmware/tools/flash/RTL_RunRAM_SDR.JLinkScript
Normal file
|
@ -0,0 +1,18 @@
|
|||
r0
|
||||
trst0
|
||||
r1
|
||||
trst1
|
||||
h
|
||||
r
|
||||
loadbin Debug/bin/ram_1.r.bin 0x10000bc8
|
||||
loadbin Debug/bin/ram_2.bin 0x10006000
|
||||
r
|
||||
w4 0x40000210,0x20011113
|
||||
w4 0x1FFF0000,0x12345678
|
||||
g
|
||||
sleep 1000
|
||||
h
|
||||
loadbin Debug/bin/sdram.bin 0x30000000
|
||||
w4 0x1FFF0000,1
|
||||
g
|
||||
q
|
124
Firmware/tools/flash/ameba1.cfg
Normal file
124
Firmware/tools/flash/ameba1.cfg
Normal file
|
@ -0,0 +1,124 @@
|
|||
# Main file for Ameba1 series Cortex-M3 parts
|
||||
#
|
||||
# !!!!!!
|
||||
#
|
||||
|
||||
set CHIPNAME rtl8195a
|
||||
set CHIPSERIES ameba1
|
||||
|
||||
# Adapt based on what transport is active.
|
||||
source [find target/swj-dp.tcl]
|
||||
|
||||
if { [info exists CHIPNAME] } {
|
||||
set _CHIPNAME $CHIPNAME
|
||||
} else {
|
||||
error "CHIPNAME not set. Please do not include ameba1.cfg directly."
|
||||
}
|
||||
|
||||
if { [info exists CHIPSERIES] } {
|
||||
# Validate chip series is supported
|
||||
if { $CHIPSERIES != "ameba1" } {
|
||||
error "Unsupported chip series specified."
|
||||
}
|
||||
set _CHIPSERIES $CHIPSERIES
|
||||
} else {
|
||||
error "CHIPSERIES not set. Please do not include ameba1.cfg directly."
|
||||
}
|
||||
|
||||
if { [info exists CPUTAPID] } {
|
||||
# Allow user override
|
||||
set _CPUTAPID $CPUTAPID
|
||||
} else {
|
||||
# Ameba1 use a Cortex M3 core.
|
||||
if { $_CHIPSERIES == "ameba1" } {
|
||||
if { [using_jtag] } {
|
||||
set _CPUTAPID 0x4ba00477
|
||||
} {
|
||||
set _CPUTAPID 0x2ba01477
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID
|
||||
|
||||
set _TARGETNAME $_CHIPNAME.cpu
|
||||
target create $_TARGETNAME cortex_m -chain-position $_TARGETNAME
|
||||
|
||||
|
||||
# Run with *real slow* clock by default since the
|
||||
# boot rom could have been playing with the PLL, so
|
||||
# we have no idea what clock the target is running at.
|
||||
adapter_khz 1000
|
||||
|
||||
# delays on reset lines
|
||||
adapter_nsrst_delay 200
|
||||
if {[using_jtag]} {
|
||||
jtag_ntrst_delay 200
|
||||
}
|
||||
|
||||
|
||||
# Ameba1 (Cortex M3 core) support SYSRESETREQ
|
||||
if {![using_hla]} {
|
||||
# if srst is not fitted use SYSRESETREQ to
|
||||
# perform a soft reset
|
||||
cortex_m reset_config sysresetreq
|
||||
}
|
||||
|
||||
$_TARGETNAME configure -event reset-init {ameba1_init}
|
||||
|
||||
# Ameba1 SDRAM enable
|
||||
proc ameba1_init { } {
|
||||
# init System
|
||||
mww 0x40000014 0x00000021
|
||||
sleep 10
|
||||
mww 0x40000304 0x1fc00002
|
||||
sleep 10
|
||||
mww 0x40000250 0x00000400
|
||||
sleep 10
|
||||
mww 0x40000340 0x00000000
|
||||
sleep 10
|
||||
mww 0x40000230 0x0000dcc4
|
||||
sleep 10
|
||||
mww 0x40000210 0x00011117
|
||||
sleep 10
|
||||
mww 0x40000210 0x00011157
|
||||
sleep 10
|
||||
mww 0x400002c0 0x00110011
|
||||
sleep 10
|
||||
mww 0x40000320 0xffffffff
|
||||
sleep 10
|
||||
# init SDRAM
|
||||
mww 0x40000040 0x00fcc702
|
||||
sleep 10
|
||||
mdw 0x40000040
|
||||
mww 0x40005224 0x00000001
|
||||
sleep 10
|
||||
mww 0x40005004 0x00000208
|
||||
sleep 10
|
||||
mww 0x40005008 0xffffd000
|
||||
sleep 13
|
||||
mww 0x40005020 0x00000022
|
||||
sleep 13
|
||||
mww 0x40005010 0x09006201
|
||||
sleep 13
|
||||
mww 0x40005014 0x00002611
|
||||
sleep 13
|
||||
mww 0x40005018 0x00068413
|
||||
sleep 13
|
||||
mww 0x4000501c 0x00000042
|
||||
sleep 13
|
||||
mww 0x4000500c 0x700 ;# set Idle
|
||||
sleep 20
|
||||
mww 0x40005000 0x1 ;# start init
|
||||
sleep 100
|
||||
mdw 0x40005000
|
||||
mww 0x4000500c 0x600 ;# enter memory mode
|
||||
sleep 30
|
||||
|
||||
mww 0x40005008 0x00000000 ;# 0xf00
|
||||
;# mww 0x40005008 0x00000f00
|
||||
sleep 3
|
||||
mww 0x40000300 0x0006005e ;# 0x5e
|
||||
;# mww 0x40000300 0x0000005e
|
||||
sleep 3
|
||||
}
|
99
Firmware/tools/flash/cortex.ocd
Normal file
99
Firmware/tools/flash/cortex.ocd
Normal file
|
@ -0,0 +1,99 @@
|
|||
proc cortex_bootstrap {start} {
|
||||
# disable interrupts
|
||||
reg faultmask 0x01
|
||||
set vectors ""
|
||||
mem2array vectors 32 $start 2
|
||||
reg sp $vectors(0)
|
||||
reg pc $vectors(1)
|
||||
resume
|
||||
}
|
||||
|
||||
proc cortex_reboot {} {
|
||||
set ddd [ format "0x%08x" [ rtl8710_flasher_mrw [ expr 0x40000210 ] ] ]
|
||||
# set aaa [ format "0x%08x" [ expr 0x40000210 ] ]
|
||||
echo "CLK_CTRL1 = $ddd"
|
||||
# echo "# Set processor clock to default before system reset"
|
||||
set ddd [ format "0x%08x" [ rtl8710_flasher_mrw [ expr 0x40000014 ] ] ]
|
||||
# set aaa [ format "0x%08x" [ expr 0x40000014 ] ]
|
||||
echo "SOC_FUNC_EN = $ddd"
|
||||
# mww 0x40000014 0x00000021
|
||||
sleep 10
|
||||
echo "# Reboot (system reset)"
|
||||
mww 0xE000ED0C 0x05FA0007
|
||||
}
|
||||
|
||||
proc init_system {} {
|
||||
# Set processor clock to default before system reset
|
||||
# CLK_CTRL1
|
||||
# mww 0x40000014 0x00000011
|
||||
mww 0x40000014 0x00000021
|
||||
sleep 10
|
||||
# PESOC_SOC_CTRL
|
||||
# mww 0x40000304 0x1fc00001
|
||||
mww 0x40000304 0x1fc00002
|
||||
sleep 10
|
||||
# PESOC_CLK_SEL
|
||||
mww 0x40000250 0x00000400
|
||||
sleep 10
|
||||
# GPIO_PULL_CTRL4
|
||||
mww 0x40000340 0x00000000
|
||||
sleep 10
|
||||
# PESOC_CLK_CTRL
|
||||
# mww 0x40000230 0x0000d3c4
|
||||
mww 0x40000230 0x0000dcc4
|
||||
sleep 10
|
||||
# SOC_FUNC_EN: FUN|OCP|LXBUS|FLASH|CPU|LOG_UART|GTIMER|SECURITY_ENGINE
|
||||
# mww 0x40000210 0x00211117
|
||||
mww 0x40000210 0x00011117
|
||||
sleep 10
|
||||
# SOC_FUNC_EN: FUN|OCP|LXBUS|FLASH|CPU|LOG_UART|GTIMER|SECURITY_ENGINE + MEM_CTRL
|
||||
mww 0x40000210 0x00011157
|
||||
sleep 10
|
||||
# CPU_PERIPHERAL_CTRL SPI_FLASH_PIN_EN|SDR_PIN_EN|SWD_PIN_EN|LOG_UART_PIN_EN ?
|
||||
# mww 0x400002c0 0x00110000
|
||||
mww 0x400002c0 0x00110011
|
||||
sleep 10
|
||||
# GPIO_SHTDN_CTRL
|
||||
# mww 0x40000320 0x00000033
|
||||
mww 0x40000320 0xffffffff
|
||||
sleep 10
|
||||
|
||||
mww 0x40005008 0x00000000
|
||||
sleep 10
|
||||
# PESOC_MEM_CTRL
|
||||
mww 0x40000300 0x0006005e
|
||||
sleep 10
|
||||
|
||||
# set baudrate to 38400
|
||||
# mww 0x40003010 0x00000080
|
||||
# mww 0x40003008 0x00000022
|
||||
# mww 0x4000300C 0x00000000
|
||||
# mww 0x40003010 0x00000000
|
||||
}
|
||||
|
||||
proc boot_from_flash {} {
|
||||
echo "# skip sdram init, it has been init in openocd config"
|
||||
mww 0x40000210 0x211157
|
||||
}
|
||||
|
||||
proc boot_from_ram {} {
|
||||
echo "# boot from ram, igonore loading flash"
|
||||
mww 0x40000210 0x8011157
|
||||
}
|
||||
|
||||
proc restart_from_falsh {} {
|
||||
init
|
||||
init_system
|
||||
boot_from_flash
|
||||
cortex_reboot
|
||||
}
|
||||
|
||||
proc load_ram_binary { local_filename address } {
|
||||
# set address 0x10000BC8
|
||||
init
|
||||
reset halt
|
||||
set size [file size $local_filename]
|
||||
load_image $local_filename $address bin $address $size
|
||||
boot_from_ram
|
||||
resume
|
||||
}
|
7
Firmware/tools/flash/file_info.jlink
Normal file
7
Firmware/tools/flash/file_info.jlink
Normal file
|
@ -0,0 +1,7 @@
|
|||
define call1
|
||||
set $ImageSize = 0x215C
|
||||
set $ImageAddr = 0x000000
|
||||
end
|
||||
define call2
|
||||
FlasherWrite Debug/bin/ram_1.p.bin $ImageAddr $ImageSize
|
||||
end
|
9
Firmware/tools/flash/flash_file.jlink
Normal file
9
Firmware/tools/flash/flash_file.jlink
Normal file
|
@ -0,0 +1,9 @@
|
|||
define call1
|
||||
SetFirwareSize Debug/bin/ram_all.bin
|
||||
end
|
||||
define call2
|
||||
FlasherWrite Debug/bin/ram_all.bin 0 $Image1Size
|
||||
end
|
||||
define call3
|
||||
FlasherWrite Debug/bin/ram_all.bin $Image2Addr $Image2Size
|
||||
end
|
232
Firmware/tools/flash/gdb_flasher.jlink
Normal file
232
Firmware/tools/flash/gdb_flasher.jlink
Normal file
|
@ -0,0 +1,232 @@
|
|||
####################################
|
||||
# J-LINK GDB SERVER initialization #
|
||||
####################################
|
||||
define InitJlink
|
||||
printf "Jlink Init:\n"
|
||||
set verbose off
|
||||
set complaints 0
|
||||
set confirm off
|
||||
set exec-done-display off
|
||||
show exec-done-display
|
||||
set trace-commands off
|
||||
#set debug aix-thread off
|
||||
#set debug dwarf2-die 0
|
||||
set debug displaced off
|
||||
set debug expression 0
|
||||
set debug frame 0
|
||||
set debug infrun 0
|
||||
set debug observer 0
|
||||
set debug overload 0
|
||||
#set debugvarobj 0
|
||||
set pagination off
|
||||
set print address off
|
||||
set print symbol-filename off
|
||||
set print symbol off
|
||||
set print pretty off
|
||||
set print object off
|
||||
#set debug notification off
|
||||
set debug parser off
|
||||
set debug remote 0
|
||||
target remote localhost:2331
|
||||
set remotetimeout 10000
|
||||
monitor device Cortex-M3
|
||||
monitor endian little
|
||||
monitor reset
|
||||
# Set max speed
|
||||
monitor speed 4000
|
||||
set mem inaccessible-by-default off
|
||||
# Setup GDB FOR FASTER DOWNLOADS
|
||||
set remote memory-write-packet-size 8192
|
||||
set remote memory-write-packet-size fixed
|
||||
set $SPI_FLASH_BASE = 0x98000000
|
||||
end
|
||||
#############
|
||||
# Boot_Flash
|
||||
define SetBootFlash
|
||||
printf "SetBoot = Flash:\n"
|
||||
monitor long 0x40000210 = 0x00011113
|
||||
end
|
||||
# Boot RAM start_addr0() Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 )
|
||||
define SetBootCall0
|
||||
printf "SetBoot = Call0:\n"
|
||||
monitor long 0x40000210 = 0x80011113
|
||||
end
|
||||
# Boot RAM start_addr1() Run if ( v40000210 & 0x20000000 )
|
||||
define SetBootCall1
|
||||
printf "SetBoot = Call1:\n"
|
||||
monitor long 0x40000210 = 0x20011113
|
||||
end
|
||||
# Boot RAM start_addr2() Run if ( v40000210 & 0x10000000 )
|
||||
define SetBootCall2
|
||||
printf "SetBoot = Call2:\n"
|
||||
monitor long 0x40000210 = 0x10011113
|
||||
end
|
||||
# Boot RAM start_addr3() Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 )
|
||||
define SetBootCall3
|
||||
printf "SetBoot = Call3:\n"
|
||||
monitor long 0x40000210 = 0x8011113
|
||||
end
|
||||
# Boot RAM start_addr4() Init console, Run if ( v40000210 & 0x4000000 )
|
||||
define SetBootCall4
|
||||
printf "SetBoot = Call4:\n"
|
||||
monitor long 0x40000210 = 0x4011113
|
||||
end
|
||||
# CPU CLK 166 MHz?
|
||||
define SetClk166MHz
|
||||
printf "SetCLK 166.66MHz:\n"
|
||||
monitor long 0x40000014 = 0x00000011
|
||||
end
|
||||
# CPU CLK 83 MHz?
|
||||
define SetClk83MHz
|
||||
printf "SetCLK 83.33MHz:\n"
|
||||
monitor long 0x40000014 = 0x00000021
|
||||
end
|
||||
###############
|
||||
# System Init #
|
||||
###############
|
||||
define SystemInit
|
||||
printf "System Init:\n"
|
||||
monitor long 0x40000304 = 0x1FC00002
|
||||
monitor long 0x40000250 = 0x400
|
||||
monitor long 0x40000340 = 0x0
|
||||
monitor long 0x40000230 = 0xdcc4
|
||||
monitor long 0x40000210 = 0x11113
|
||||
monitor long 0x400002c0 = 0x110011
|
||||
monitor long 0x40000320 = 0xffffffff
|
||||
end
|
||||
############
|
||||
# SPI Init #
|
||||
############
|
||||
define SPI_Init
|
||||
printf "Init SPI:\n"
|
||||
#enable spi flash peripheral clock
|
||||
set $Temp = {int}(0x40000230)
|
||||
set $Temp = ($Temp | 0x300)
|
||||
set {int}(0x40000230) = $Temp
|
||||
#enable spi flash peripheral
|
||||
set $Temp = {int}(0x40000210)
|
||||
set $Temp = ($Temp | 0x10)
|
||||
set {int}(0x40000210) = $Temp
|
||||
#select spi flash pinout (0 - internal), enable spi flash pins
|
||||
set $Temp = {int}(0x400002C0)
|
||||
set $Temp = (($Temp & 0xFFFFFFF8) | 1)
|
||||
set {int}(0x400002C0) = $Temp
|
||||
#disable SPI FLASH operation
|
||||
monitor long 0x40006008 = 0
|
||||
#disable all interrupts
|
||||
monitor long 0x4000602C = 0
|
||||
#use first "slave select" pin
|
||||
monitor long 0x40006010 = 1
|
||||
#baud rate, default value
|
||||
monitor long 0x40006014 = 2
|
||||
#tx fifo threshold
|
||||
monitor long 0x40006018 = 0
|
||||
#rx fifo threshold
|
||||
monitor long 0x4000601C = 0
|
||||
#disable DMA
|
||||
monitor long 0x4000604C = 0
|
||||
end
|
||||
###################
|
||||
# SetFirwareSize #
|
||||
###################
|
||||
define SetFirwareSize
|
||||
set $rambuffer = 0x10000300
|
||||
printf "Get ImagesSize:\n"
|
||||
restore $arg0 binary $rambuffer 0 0x20
|
||||
set $Image1Size = {int}($rambuffer+0x10) + 32
|
||||
set $Image1LoadAddr = {int}($rambuffer+0x14)
|
||||
set $Image2Addr = {short}($rambuffer+0x18) * 1024
|
||||
if $Image1Size != 0 && $Image1Size < 0x1000000
|
||||
if $Image2Addr == 0
|
||||
set $Image2Addr = $Image1Size
|
||||
end
|
||||
printf "Image1Size = %d\n", $Image1Size
|
||||
printf "Image1LoadAddr = 0x%08x\n", $Image1LoadAddr
|
||||
printf "Image2FlashAddr = 0x%08x\n", $Image2Addr
|
||||
set $parms1 = $rambuffer - $Image2Addr
|
||||
set $parms3 = $Image2Addr + 0x08
|
||||
restore $arg0 binary $parms1 $Image2Addr $parms3
|
||||
set $Image2Size = {int}($rambuffer)
|
||||
set $Image2LoadAddr = {int}($rambuffer+0x4)
|
||||
if $Image2Size != 0xFFFFFFFF && $Image2Size != 0
|
||||
set $Image2Size = $Image2Size + 16
|
||||
printf "Image2Size = %d\n", $Image2Size
|
||||
printf "Image2LoadAddr = 0x%08x\n", $Image2LoadAddr
|
||||
set $FirmwareSize = $Image2Addr + $Image2Size
|
||||
set $Image3Addr = $FirmwareSize
|
||||
set $parms1 = $rambuffer - $FirmwareSize
|
||||
set $parms3 = $Image3Addr + 0x08
|
||||
restore $arg0 binary $parms1 $Image3Addr $parms3
|
||||
set $Image3Size = {int}($rambuffer)
|
||||
set $Image3LoadAddr = {int}($rambuffer+0x4)
|
||||
if $Image3Size != 0xFFFFFFFF && $Image3Size != 0
|
||||
set $Image3Size = $Image3Size + 16
|
||||
printf "Image3Size = %d\n", $Image3Size
|
||||
printf "Image3LoadAddr = 0x%08x\n", $Image3LoadAddr
|
||||
set $FirmwareSize = $Image3Addr + $Image3Size
|
||||
printf "FirmwareSize = %d\n", $FirmwareSize
|
||||
else
|
||||
set $Image3Size = 0
|
||||
if $Image3LoadAddr == 0x30000000
|
||||
set $FirmwareSize = $FirmwareSize + 8
|
||||
end
|
||||
printf "Image3 - None\n"
|
||||
printf "FirmwareSize = %d\n", $FirmwareSize
|
||||
end
|
||||
else
|
||||
set $Image2Size = 0
|
||||
printf "Image2 - None\n"
|
||||
set $FirmwareSize = $Image1Size
|
||||
printf "FirmwareSize = %d\n", $FirmwareSize
|
||||
end
|
||||
else
|
||||
set $Image1Size = 0
|
||||
set $Image2Size = 0
|
||||
set $Image3Size = 0
|
||||
set $Image2Addr = 0
|
||||
set $Image3Addr = 0
|
||||
set $FirmwareSize = 0
|
||||
printf "Image not format Firmware!\n"
|
||||
end
|
||||
end
|
||||
#####################
|
||||
# Flash Images Info #
|
||||
#####################
|
||||
define FlashImagesInfo
|
||||
set $Image2Size = 0
|
||||
set $Image3Size = 0
|
||||
set $Image2Addr = 0
|
||||
set $Image3Addr = 0
|
||||
printf "Flash Info:\n"
|
||||
set $Image1Size = {int}($SPI_FLASH_BASE + 0x10) + 32
|
||||
set $Image1LoadAddr = {int}($SPI_FLASH_BASE + 0x14)
|
||||
if $Image1LoadAddr == 0xFFFFFFFF
|
||||
printf "Image1 - None\n"
|
||||
else
|
||||
set $Image2FlashAddr = {short}($SPI_FLASH_BASE + 0x18) * 1024
|
||||
if $Image2FlashAddr == 0
|
||||
set $Image2FlashAddr = $Image1Size
|
||||
end
|
||||
set $Image2Size = {int}($Image2FlashAddr + $SPI_FLASH_BASE)
|
||||
set $Image2LoadAddr = {int}($Image2FlashAddr + $SPI_FLASH_BASE + 0x4)
|
||||
printf "Image1Size = %d\n", $Image1Size
|
||||
printf "Image1LoadAddr = 0x%08x\n", $Image1LoadAddr
|
||||
printf "Image2FlashAddr = 0x%08x\n", $Image2FlashAddr
|
||||
if $Image2Size != 0xFFFFFFFF && $Image2Size != 0
|
||||
printf "Image2Size = %d\n", $Image2Size
|
||||
printf "Image2LoadAddr = 0x%08x\n", $Image2LoadAddr
|
||||
set $Image3FlashAddr = $Image2FlashAddr + $Image2Size + 0x10
|
||||
set $Image3Size = {int}($Image3FlashAddr + $SPI_FLASH_BASE)
|
||||
set $Image3LoadAddr = {int}($Image3FlashAddr + $SPI_FLASH_BASE + 0x4)
|
||||
if $Image3Size != 0xFFFFFFFF && $Image3Size !=0
|
||||
printf "Image3FlashAddr = 0x%08x\n", $Image3FlashAddr
|
||||
printf "Image3Size = %d\n", $Image3Size
|
||||
printf "Image3LoadAddr = 0x%08x\n", $Image3LoadAddr
|
||||
else
|
||||
printf "Image3 - None\n"
|
||||
end
|
||||
else
|
||||
printf "Image2 - None\n"
|
||||
end
|
||||
end
|
||||
end
|
30
Firmware/tools/flash/gdb_init.jlink
Normal file
30
Firmware/tools/flash/gdb_init.jlink
Normal file
|
@ -0,0 +1,30 @@
|
|||
#
|
||||
# J-LINK GDB SERVER initialization
|
||||
#
|
||||
target remote localhost:2331
|
||||
set remotetimeout 10000
|
||||
monitor device Cortex-M3
|
||||
monitor endian little
|
||||
monitor reset
|
||||
# Set max speed
|
||||
monitor speed 4000
|
||||
set mem inaccessible-by-default off
|
||||
# Setup GDB FOR FASTER DOWNLOADS
|
||||
#set remote memory-write-packet-size 4096
|
||||
#set remote memory-write-packet-size fixed
|
||||
# Boot Flash
|
||||
monitor long 0x40000210 = 0x00011113
|
||||
# Boot RAM start_addr0() Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 )
|
||||
#monitor long 0x40000210 = 0x80011113
|
||||
# Boot RAM start_addr1() Run if ( v40000210 & 0x20000000 )
|
||||
#monitor long 0x40000210 = 0x20011113
|
||||
# Boot RAM start_addr2() Run if ( v40000210 & 0x10000000 )
|
||||
#monitor long 0x40000210 = 0x10011113
|
||||
# Boot RAM start_addr3() Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 )
|
||||
#monitor long 0x40000210 = 0x8011113
|
||||
# Boot RAM start_addr4() Init console, Run if ( v40000210 & 0x4000000 )
|
||||
monitor long 0x40000210 = 0x4011113
|
||||
# CPU CLK 166 MHz?
|
||||
# monitor long 0x40000014 = 0x00000011
|
||||
# CPU CLK 83 MHz?
|
||||
#monitor long 0x40000014 = 0x00000021
|
374
Firmware/tools/flash/gdb_ota.jlink
Normal file
374
Firmware/tools/flash/gdb_ota.jlink
Normal file
|
@ -0,0 +1,374 @@
|
|||
####################################
|
||||
# J-LINK GDB SERVER initialization #
|
||||
####################################
|
||||
define InitJlink
|
||||
printf "Jlink Init:\n"
|
||||
set verbose off
|
||||
set complaints 0
|
||||
set confirm off
|
||||
set exec-done-display off
|
||||
show exec-done-display
|
||||
set trace-commands off
|
||||
#set debug aix-thread off
|
||||
#set debug dwarf2-die 0
|
||||
set debug displaced off
|
||||
set debug expression 0
|
||||
set debug frame 0
|
||||
set debug infrun 0
|
||||
set debug observer 0
|
||||
set debug overload 0
|
||||
#set debugvarobj 0
|
||||
set pagination off
|
||||
set print address off
|
||||
set print symbol-filename off
|
||||
set print symbol off
|
||||
set print pretty off
|
||||
set print object off
|
||||
#set debug notification off
|
||||
set debug parser off
|
||||
set debug remote 0
|
||||
target remote localhost:2331
|
||||
set remotetimeout 10000
|
||||
monitor device Cortex-M3
|
||||
monitor endian little
|
||||
monitor reset
|
||||
# Set max speed
|
||||
monitor speed 4000
|
||||
set mem inaccessible-by-default off
|
||||
# Setup GDB FOR FASTER DOWNLOADS
|
||||
set remote memory-write-packet-size 8192
|
||||
set remote memory-write-packet-size fixed
|
||||
end
|
||||
#############
|
||||
# Boot_Flash
|
||||
define SetBootFlash
|
||||
printf "SetBoot = Flash:\n"
|
||||
monitor long 0x40000210 = 0x011113
|
||||
end
|
||||
# Boot RAM start_addr0() Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 )
|
||||
define SetBootCall0
|
||||
printf "SetBoot = Call0:\n"
|
||||
monitor long 0x40000210 = 0x80011113
|
||||
end
|
||||
# Boot RAM start_addr1() Run if ( v40000210 & 0x20000000 )
|
||||
define SetBootCall1
|
||||
printf "SetBoot = Call1:\n"
|
||||
monitor long 0x40000210 = 0x20011113
|
||||
end
|
||||
# Boot RAM start_addr2() Run if ( v40000210 & 0x10000000 )
|
||||
define SetBootCall2
|
||||
printf "SetBoot = Call2:\n"
|
||||
monitor long 0x40000210 = 0x10011113
|
||||
end
|
||||
# Boot RAM start_addr3() Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 )
|
||||
define SetBootCall3
|
||||
printf "SetBoot = Call3:\n"
|
||||
monitor long 0x40000210 = 0x8011113
|
||||
end
|
||||
# Boot RAM start_addr4() Init console, Run if ( v40000210 & 0x4000000 )
|
||||
define SetBootCall4
|
||||
printf "SetBoot = Call4:\n"
|
||||
monitor long 0x40000210 = 0x4011113
|
||||
end
|
||||
# CPU CLK 166 MHz?
|
||||
define SetClk166MHz
|
||||
printf "SetCLK 166.66MHz:\n"
|
||||
monitor long 0x40000014 = 0x00000011
|
||||
end
|
||||
# CPU CLK 83 MHz?
|
||||
define SetClk83MHz
|
||||
printf "SetCLK 83.33MHz:\n"
|
||||
monitor long 0x40000014 = 0x00000021
|
||||
end
|
||||
###############
|
||||
# System Init #
|
||||
###############
|
||||
define SystemInit
|
||||
printf "System Init:\n"
|
||||
monitor long 0x40000304 = 0x1FC00002
|
||||
monitor long 0x40000250 = 0x400
|
||||
monitor long 0x40000340 = 0x0
|
||||
monitor long 0x40000230 = 0xdcc4
|
||||
monitor long 0x40000210 = 0x11113
|
||||
monitor long 0x400002c0 = 0x110011
|
||||
monitor long 0x40000320 = 0xffffffff
|
||||
end
|
||||
############
|
||||
# SPI Init #
|
||||
############
|
||||
define SPI_Init
|
||||
printf "Init SPI:\n"
|
||||
#enable spi flash peripheral clock
|
||||
set $Temp = {int}(0x40000230)
|
||||
set $Temp = ($Temp | 0x300)
|
||||
set {int}(0x40000230) = $Temp
|
||||
#enable spi flash peripheral
|
||||
set $Temp = {int}(0x40000210)
|
||||
set $Temp = ($Temp | 0x10)
|
||||
set {int}(0x40000210) = $Temp
|
||||
#select spi flash pinout (0 - internal), enable spi flash pins
|
||||
set $Temp = {int}(0x400002C0)
|
||||
set $Temp = (($Temp & 0xFFFFFFF8) | 1)
|
||||
set {int}(0x400002C0) = $Temp
|
||||
#disable SPI FLASH operation
|
||||
monitor long 0x40006008 = 0
|
||||
#disable all interrupts
|
||||
monitor long 0x4000602C = 0
|
||||
#use first "slave select" pin
|
||||
monitor long 0x40006010 = 1
|
||||
#baud rate, default value
|
||||
monitor long 0x40006014 = 2
|
||||
#tx fifo threshold
|
||||
monitor long 0x40006018 = 0
|
||||
#rx fifo threshold
|
||||
monitor long 0x4000601C = 0
|
||||
#disable DMA
|
||||
monitor long 0x4000604C = 0
|
||||
set $SPI_FLASH_BASE = 0x98000000
|
||||
end
|
||||
###################
|
||||
# GetOtaSize #
|
||||
###################
|
||||
define GetOtaSize
|
||||
set $rambuffer = 0x10000300
|
||||
printf "Get ImagesSize:\n"
|
||||
set $ImageOtaSize = 0
|
||||
restore $arg0 binary $rambuffer 0 4
|
||||
set $ImageAddSize = {int}($rambuffer+0)
|
||||
if $ImageAddSize != 0
|
||||
printf "Image2Size = %d\n", $ImageAddSize
|
||||
set $ImageOtaSize = $ImageOtaSize + $ImageAddSize + 16
|
||||
set $parms1 = $rambuffer - $ImageOtaSize
|
||||
set $parms3 = $ImageOtaSize + 4
|
||||
restore $arg0 binary $parms1 $ImageOtaSize $parms3
|
||||
set $ImageAddSize = {int}($rambuffer+0)
|
||||
if $ImageAddSize < 0x200000
|
||||
printf "ImageSdramSize = %d\n", $ImageAddSize
|
||||
set $ImageOtaSize = $ImageOtaSize + $ImageAddSize + 20
|
||||
end
|
||||
else
|
||||
printf "Image2Size = %d !\n", $ImageOtaSize
|
||||
end
|
||||
end
|
||||
#####################
|
||||
# Flash Images Info #
|
||||
#####################
|
||||
define FlashImagesInfo
|
||||
printf "Flash Info:\n"
|
||||
set $Image1Size = {int}($SPI_FLASH_BASE + 0x10) + 32
|
||||
set $Image1LoadAddr = {int}($SPI_FLASH_BASE + 0x14)
|
||||
if $Image1LoadAddr == 0xFFFFFFFF
|
||||
printf "Image1 - None\n"
|
||||
else
|
||||
set $Image2FlashAddr = {short}($SPI_FLASH_BASE + 0x18) * 1024
|
||||
if $Image2FlashAddr == 0
|
||||
$Image2FlashAddr = $Image1Size
|
||||
end
|
||||
set $Image2Size = {int}($Image2FlashAddr + $SPI_FLASH_BASE)
|
||||
set $Image2LoadAddr = {int}($Image2FlashAddr + $SPI_FLASH_BASE + 0x4)
|
||||
printf "Image1Size = %d\n", $Image1Size
|
||||
printf "Image1LoadAddr = 0x%08x\n", $Image1LoadAddr
|
||||
printf "Image2FlashAddr = 0x%08x\n", $Image2FlashAddr
|
||||
if $Image2Size != 0xFFFFFFFF
|
||||
printf "Image2Size = %d\n", $Image2Size
|
||||
printf "Image2LoadAddr = 0x%08x\n", $Image2LoadAddr
|
||||
else
|
||||
printf "Image2 - None\n"
|
||||
end
|
||||
end
|
||||
set $ImageOtaAddr = {int}($SPI_FLASH_BASE + 0x9000)
|
||||
if $ImageOtaAddr != 0x80000
|
||||
printf "ImageOtaAddr = 0x%08x - Invalid!\n", $ImageOtaAddr
|
||||
else
|
||||
printf "ImageOtaAddr = 0x%08x\n", $ImageOtaAddr
|
||||
end
|
||||
end
|
||||
###############
|
||||
# FlasherInit #
|
||||
###############
|
||||
define FlasherInit
|
||||
set $rtl8710_flasher_capacity = 0
|
||||
set $rtl8710_flasher_auto_erase = 1
|
||||
set $rtl8710_flasher_auto_verify = 1
|
||||
set $rtl8710_flasher_firmware_ptr = 0x10001000
|
||||
set $rtl8710_flasher_buffer = 0x10008000
|
||||
set $rtl8710_flasher_buffer_size = 421888
|
||||
set $rtl8710_flasher_sector_size = 4096
|
||||
set $rtl8710_flasher_auto_erase_sector = 0xFFFFFFFF
|
||||
end
|
||||
###############
|
||||
# FlasherWait #
|
||||
###############
|
||||
define FlasherWait
|
||||
set $fresult = {int}($rtl8710_flasher_buffer)
|
||||
while ($fresult != 0)
|
||||
set $fresult = {int}($rtl8710_flasher_buffer)
|
||||
end
|
||||
end
|
||||
###############
|
||||
# FlasherLoad #
|
||||
###############
|
||||
define FlasherLoad
|
||||
if $rtl8710_flasher_capacity == 0
|
||||
printf "initializing RTL8710 flasher\n"
|
||||
restore $arg0 binary $rtl8710_flasher_firmware_ptr 0 968
|
||||
monitor reset
|
||||
set $pc = $rtl8710_flasher_firmware_ptr
|
||||
set $sp = 0x1ffffffc
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
#continue
|
||||
monitor go
|
||||
FlasherWait
|
||||
set $id = {int}($rtl8710_flasher_buffer + 0x0C)
|
||||
if ($id == 0x1420c2)
|
||||
set $rtl8710_flasher_capacity = 1 << (($id >> 16) & 0x0ff)
|
||||
printf "Flash ID = 0x%08x : MX25L8006E (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10
|
||||
else
|
||||
set $rtl8710_flasher_capacity = {int}(1024*1024)
|
||||
printf "Flash ID = 0x%08x : (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10
|
||||
end
|
||||
printf "RTL8710 flasher initialized\n"
|
||||
else
|
||||
printf "reinitializing RTL8710 flasher\n"
|
||||
end
|
||||
end
|
||||
##################
|
||||
# FlasherRdBlock #
|
||||
##################
|
||||
define FlasherRdBlock
|
||||
#printf "FlashRdBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 3
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
error "read error, offset 0x%08x", $arg0
|
||||
end
|
||||
end
|
||||
##################
|
||||
# FlasherWrBlock #
|
||||
##################
|
||||
define FlasherWrBlock
|
||||
#printf "FlashWrBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 4
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
error "write error, offset 0x%08x", $arg0
|
||||
end
|
||||
end
|
||||
##################
|
||||
# FlasherVrBlock #
|
||||
##################
|
||||
define FlasherVrBlock
|
||||
#printf "FlashVrBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 5
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x0C)
|
||||
set $status = {int}($status + $arg0)
|
||||
error "verify error, offset 0x%08x", $status
|
||||
end
|
||||
end
|
||||
#################
|
||||
# FlashSecErase #
|
||||
#################
|
||||
define FlashSecErase
|
||||
#printf "FlashSecErase 0x%08x, 0x%08x\n", $rtl8710_flasher_buffer, $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 2
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
end
|
||||
################
|
||||
# FlasherWrite #
|
||||
################
|
||||
define FlasherWrite
|
||||
set $sector = 0
|
||||
set $offset = 0
|
||||
set $size = $arg2
|
||||
while $offset < $size
|
||||
set $len = $size - $offset
|
||||
if $len > $rtl8710_flasher_buffer_size
|
||||
set $len = $rtl8710_flasher_buffer_size
|
||||
end
|
||||
set $flash_offset = $arg1 + $offset
|
||||
printf "write offset 0x%08x\n", $flash_offset
|
||||
set $parms1 = $rtl8710_flasher_buffer + 0x20 - $offset
|
||||
set $parms2 = $offset
|
||||
set $parms3 = $offset + $len
|
||||
restore $arg0 binary $parms1 $parms2 $parms3
|
||||
if $rtl8710_flasher_auto_erase != 0
|
||||
set $count_i = $flash_offset
|
||||
while $count_i < ($flash_offset + $len)
|
||||
set $sector = $count_i/$rtl8710_flasher_sector_size
|
||||
if $rtl8710_flasher_auto_erase_sector != $sector
|
||||
set $parms1 = $sector * $rtl8710_flasher_sector_size
|
||||
printf "erase sector %d at 0x%08x\n", $sector, $parms1
|
||||
FlashSecErase $parms1
|
||||
set $rtl8710_flasher_auto_erase_sector = $sector
|
||||
end
|
||||
set $count_i = $count_i + 1
|
||||
end
|
||||
end
|
||||
FlasherWrBlock $flash_offset $len
|
||||
printf "write %d bytes at 0x%08x\n", $len, $flash_offset
|
||||
if $rtl8710_flasher_auto_verify != 0
|
||||
printf "verify offset 0x%08x len %d\n", $flash_offset, $len
|
||||
FlasherVrBlock $flash_offset $len
|
||||
end
|
||||
set $offset = $offset + $rtl8710_flasher_buffer_size
|
||||
end
|
||||
end
|
||||
#########################################
|
||||
InitJlink
|
||||
SystemInit
|
||||
SetClk166MHz
|
||||
SPI_Init
|
||||
GetOtaSize build/bin/ota.bin
|
||||
if $ImageOtaSize != 0
|
||||
FlasherInit
|
||||
FlasherLoad flasher/rtl8710_flasher.bin
|
||||
set $FixOtaAddr = 0x80000
|
||||
set $pbuffer = $rtl8710_flasher_buffer + 0x20
|
||||
FlasherRdBlock 0x9000 0x1000
|
||||
set $ImageOtaAddr = {int}($pbuffer)
|
||||
if $ImageOtaAddr != $FixOtaAddr
|
||||
printf "ImageOtaAddr = 0x%08x - Invalid!\n", $ImageOtaAddr
|
||||
set {int}($pbuffer) = $FixOtaAddr
|
||||
set $Temp = $ImageOtaAddr & $FixOtaAddr
|
||||
if $Temp != $FixOtaAddr
|
||||
printf "FlashSecErase at 0x9000\n"
|
||||
FlashSecErase 0x9000
|
||||
printf "Write offset 0x9000 4096 bytes\n"
|
||||
FlasherWrBlock 0x9000 0x1000
|
||||
else
|
||||
printf "Write offset 0x9000 4 bytes\n"
|
||||
FlasherWrBlock 0x9000 0x0004
|
||||
end
|
||||
end
|
||||
FlasherWrite build/bin/ota.bin $FixOtaAddr $ImageOtaSize
|
||||
restore build/bin/ota.bin binary $pbuffer 0 0x1000
|
||||
set {int}($pbuffer + 0x08) = 0x35393138
|
||||
set {int}($pbuffer + 0x0C) = 0x31313738
|
||||
FlasherWrBlock $FixOtaAddr 0x10
|
||||
FlashImagesInfo
|
||||
end
|
||||
monitor reset
|
||||
SetBootFlash
|
||||
monitor go
|
||||
quit
|
17
Firmware/tools/flash/gdb_rdflash.jlink
Normal file
17
Firmware/tools/flash/gdb_rdflash.jlink
Normal file
|
@ -0,0 +1,17 @@
|
|||
# GDB Jlink read fullflash
|
||||
# Init
|
||||
source -v tools/flash/gdb_flasher.jlink
|
||||
InitJlink
|
||||
SystemInit
|
||||
SPI_Init
|
||||
monitor speed 12000
|
||||
#FlashInfo
|
||||
# Read FullFlash
|
||||
printf "Read FullFlash:\n"
|
||||
set $dumpstartaddr = $SPI_FLASH_BASE
|
||||
set $dumpendaddr = $SPI_FLASH_BASE + 0x100000
|
||||
printf "Start addr of dumping = 0x%08x\n", $dumpstartaddr
|
||||
printf "End addr of dumping = 0x%08x\n", $dumpendaddr
|
||||
dump binary memory ../fullflash.bin $dumpstartaddr $dumpendaddr
|
||||
printf "FullFlash saved in ./build/bin/fullflash.bin - OK.\n"
|
||||
quit
|
11
Firmware/tools/flash/gdb_run_ram.jlink
Normal file
11
Firmware/tools/flash/gdb_run_ram.jlink
Normal file
|
@ -0,0 +1,11 @@
|
|||
#
|
||||
# J-LINK GDB SERVER initialization
|
||||
#
|
||||
source -v tools/flash/gdb_flasher.jlink
|
||||
InitJlink
|
||||
load Debug/obj/build.axf
|
||||
SetBootCall4
|
||||
monitor reset
|
||||
monitor go
|
||||
quit
|
||||
|
171
Firmware/tools/flash/gdb_wrfile.jlink
Normal file
171
Firmware/tools/flash/gdb_wrfile.jlink
Normal file
|
@ -0,0 +1,171 @@
|
|||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherInit #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherInit
|
||||
set $rtl8710_flasher_capacity = 0
|
||||
set $rtl8710_flasher_auto_erase = 1
|
||||
set $rtl8710_flasher_auto_verify = 1
|
||||
set $rtl8710_flasher_firmware_ptr = 0x10001000
|
||||
set $rtl8710_flasher_buffer = 0x10008000
|
||||
set $rtl8710_flasher_buffer_size = 421888
|
||||
set $rtl8710_flasher_sector_size = 4096
|
||||
set $rtl8710_flasher_auto_erase_sector = 0xFFFFFFFF
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherWait #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherWait
|
||||
set $fresult = {int}($rtl8710_flasher_buffer)
|
||||
while ($fresult != 0)
|
||||
set $fresult = {int}($rtl8710_flasher_buffer)
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherLoad #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherLoad
|
||||
if $rtl8710_flasher_capacity == 0
|
||||
printf "initializing RTL8710 flasher\n"
|
||||
restore $arg0 binary $rtl8710_flasher_firmware_ptr 0 968
|
||||
monitor reset
|
||||
set $pc = $rtl8710_flasher_firmware_ptr
|
||||
set $sp = 0x1ffffffc
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
#continue
|
||||
monitor go
|
||||
FlasherWait
|
||||
set $id = {int}($rtl8710_flasher_buffer + 0x0C)
|
||||
set $rtl8710_flasher_capacity = 1 << (($id >> 16) & 0x0ff)
|
||||
if ($id == 0x1420c2)
|
||||
printf "Flash ID = 0x%08x : MX25L8006E (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10
|
||||
else
|
||||
printf "Flash ID = 0x%08x : (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10
|
||||
end
|
||||
printf "RTL8710 flasher initialized\n"
|
||||
else
|
||||
printf "reinitializing RTL8710 flasher\n"
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherWrBlock #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherWrBlock
|
||||
#printf "FlashWrBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 4
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
error "write error, offset 0x%08x", $arg0
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherVrBlock #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherVrBlock
|
||||
#printf "FlashVrBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 5
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x0C)
|
||||
set $status = {int}($status + $arg0)
|
||||
error "verify error, offset 0x%08x", $status
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlashSecErase #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlashSecErase
|
||||
#printf "FlashSecErase 0x%08x, 0x%08x\n", $rtl8710_flasher_buffer, $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 2
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherWrite #
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherWrite
|
||||
set $sector = 0
|
||||
set $offset = 0
|
||||
set $size = $arg2
|
||||
while $offset < $size
|
||||
set $len = $size - $offset
|
||||
if $len > $rtl8710_flasher_buffer_size
|
||||
set $len = $rtl8710_flasher_buffer_size
|
||||
end
|
||||
set $flash_offset = $arg1 + $offset
|
||||
printf "write offset 0x%08x\n", $flash_offset
|
||||
set $parms1 = $rtl8710_flasher_buffer + 0x20 - $offset
|
||||
set $parms2 = $offset
|
||||
set $parms3 = $offset + $len
|
||||
restore $arg0 binary $parms1 $parms2 $parms3
|
||||
if $rtl8710_flasher_auto_erase != 0
|
||||
set $count_i = $flash_offset
|
||||
while $count_i < ($flash_offset + $len)
|
||||
set $sector = $count_i/$rtl8710_flasher_sector_size
|
||||
if $rtl8710_flasher_auto_erase_sector != $sector
|
||||
set $parms1 = $sector * $rtl8710_flasher_sector_size
|
||||
printf "erase sector %d at 0x%08x\n", $sector, $parms1
|
||||
FlashSecErase $parms1
|
||||
set $rtl8710_flasher_auto_erase_sector = $sector
|
||||
end
|
||||
set $count_i = $count_i + 1
|
||||
end
|
||||
end
|
||||
FlasherWrBlock $flash_offset $len
|
||||
printf "wrote %d bytes at 0x%08x\n", $len, $flash_offset
|
||||
if $rtl8710_flasher_auto_verify != 0
|
||||
printf "verify offset 0x%08x len %d\n", $flash_offset, $len
|
||||
FlasherVrBlock $flash_offset $len
|
||||
end
|
||||
set $offset = $offset + $rtl8710_flasher_buffer_size
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
source -v tools/flash/gdb_flasher.jlink
|
||||
source -v tools/flash/file_info.jlink
|
||||
|
||||
InitJlink
|
||||
SystemInit
|
||||
SetClk166MHz
|
||||
SPI_Init
|
||||
FlasherInit
|
||||
FlasherLoad tools/flash/rtl8710_flasher.bin
|
||||
call1
|
||||
if $ImageSize != 0
|
||||
set $ImageEnd = $ImageSize + $ImageAddr + 0x4000
|
||||
if $rtl8710_flasher_capacity >= $ImageEnd
|
||||
printf "Write Image size %d to Flash addr 0x%08x:\n", $ImageSize, $ImageAddr
|
||||
call2
|
||||
else
|
||||
printf "Error: Image size is too big!\n"
|
||||
end
|
||||
else
|
||||
printf "Error: Image size is zero!\n"
|
||||
end
|
||||
FlashImagesInfo
|
||||
monitor reset
|
||||
SetBootFlash
|
||||
monitor go
|
||||
printf "Load Complete!\n"
|
||||
quit
|
183
Firmware/tools/flash/gdb_wrflash.jlink
Normal file
183
Firmware/tools/flash/gdb_wrflash.jlink
Normal file
|
@ -0,0 +1,183 @@
|
|||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherInit ---------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherInit
|
||||
set $rtl8710_flasher_capacity = 0
|
||||
set $rtl8710_flasher_auto_erase = 1
|
||||
set $rtl8710_flasher_auto_verify = 1
|
||||
set $rtl8710_flasher_firmware_ptr = 0x10001000
|
||||
set $rtl8710_flasher_buffer = 0x10008000
|
||||
set $rtl8710_flasher_buffer_size = 421888
|
||||
set $rtl8710_flasher_sector_size = 4096
|
||||
set $rtl8710_flasher_auto_erase_sector = 0xFFFFFFFF
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherWait ---------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
define FlasherWait
|
||||
set $fresult = {int}($rtl8710_flasher_buffer)
|
||||
while ($fresult != 0)
|
||||
set $fresult = {int}($rtl8710_flasher_buffer)
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherLoad ---------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
define FlasherLoad
|
||||
if $rtl8710_flasher_capacity == 0
|
||||
printf "initializing RTL871x flasher\n"
|
||||
restore $arg0 binary $rtl8710_flasher_firmware_ptr 0 968
|
||||
monitor reset
|
||||
set $pc = $rtl8710_flasher_firmware_ptr
|
||||
set $sp = 0x1ffffffc
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
monitor go
|
||||
FlasherWait
|
||||
set $id = {int}($rtl8710_flasher_buffer + 0x0C)
|
||||
set $rtl8710_flasher_capacity = 1 << (($id >> 16) & 0x0ff)
|
||||
if ($id == 0x1420c2)
|
||||
printf "Flash ID = 0x%08x : MX25L8006E (%d kbytes)\n", $id, $rtl8710_flasher_capacity>>10
|
||||
else
|
||||
printf "Flash ID = 0x%08x : ? (default: %d kbytes)\n", $id, $rtl8710_flasher_capacity>>10
|
||||
end
|
||||
printf "RTL871x flasher initialized\n"
|
||||
else
|
||||
printf "reinitializing RTL871x flasher\n"
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherWrBlock ------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
define FlasherWrBlock
|
||||
#printf "FlashWrBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 4
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
error "write error, offset 0x%08x", $arg0
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherVrBlock ------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
define FlasherVrBlock
|
||||
#printf "FlashVrBlock 0x%08x, 0x%08x\n", $arg0, $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 5
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x14) = $arg1
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x08)
|
||||
if $status > 0
|
||||
set $status = {int}($rtl8710_flasher_buffer + 0x0C)
|
||||
set $status = {int}($status + $arg0)
|
||||
error "verify error, offset 0x%08x", $status
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlashSecErase -------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
define FlashSecErase
|
||||
#printf "FlashSecErase 0x%08x, 0x%08x\n", $rtl8710_flasher_buffer, $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x04) = 2
|
||||
set {int}($rtl8710_flasher_buffer + 0x08) = 0
|
||||
set {int}($rtl8710_flasher_buffer + 0x10) = $arg0
|
||||
set {int}($rtl8710_flasher_buffer + 0x00) = 1
|
||||
FlasherWait
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
# FlasherWrite --------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
define FlasherWrite
|
||||
set $sector = 0
|
||||
set $offset = 0
|
||||
set $size = $arg2
|
||||
while $offset < $size
|
||||
set $len = $size - $offset
|
||||
if $len > $rtl8710_flasher_buffer_size
|
||||
set $len = $rtl8710_flasher_buffer_size
|
||||
end
|
||||
set $flash_offset = $arg1 + $offset
|
||||
printf "write offset 0x%08x\n", $flash_offset
|
||||
set $parms1 = $rtl8710_flasher_buffer + 0x20 - $flash_offset
|
||||
set $parms2 = $flash_offset
|
||||
set $parms3 = $flash_offset + $len
|
||||
restore $arg0 binary $parms1 $parms2 $parms3
|
||||
if $rtl8710_flasher_auto_erase != 0
|
||||
set $count_i = $flash_offset
|
||||
while $count_i < ($flash_offset + $len)
|
||||
set $sector = $count_i/$rtl8710_flasher_sector_size
|
||||
if $rtl8710_flasher_auto_erase_sector != $sector
|
||||
set $parms1 = $sector * $rtl8710_flasher_sector_size
|
||||
printf "erase sector %d at 0x%08x\n", $sector, $parms1
|
||||
FlashSecErase $parms1
|
||||
set $rtl8710_flasher_auto_erase_sector = $sector
|
||||
end
|
||||
set $count_i = $count_i + 1
|
||||
end
|
||||
end
|
||||
FlasherWrBlock $flash_offset $len
|
||||
printf "wrote %d bytes at 0x%08x\n", $len, $flash_offset
|
||||
if $rtl8710_flasher_auto_verify != 0
|
||||
printf "verify offset 0x%08x len %d\n", $flash_offset, $len
|
||||
FlasherVrBlock $flash_offset $len
|
||||
end
|
||||
set $offset = $offset + $rtl8710_flasher_buffer_size
|
||||
end
|
||||
end
|
||||
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------------------------------------------
|
||||
pwd
|
||||
source -v tools/flash/gdb_flasher.jlink
|
||||
source -v tools/flash/flash_file.jlink
|
||||
InitJlink
|
||||
SystemInit
|
||||
SetClk166MHz
|
||||
SPI_Init
|
||||
FlashImagesInfo
|
||||
#SetFirwareSize $wr_flile
|
||||
call1
|
||||
if $FirmwareSize == 0
|
||||
error "FirmwareSize = 0!"
|
||||
end
|
||||
FlasherInit
|
||||
FlasherLoad tools/flash/rtl8710_flasher.bin
|
||||
if $Image1Size != 0
|
||||
printf "Write Image1 size %d to Flash addr 0x00000000:\n", $Image1Size
|
||||
#FlasherWrite $wr_flile 0 $Image1Size
|
||||
call2
|
||||
if $Image2Size != 0 && $Image2Addr >= $Image1Size
|
||||
if $Image3Size != 0 && $Image3Addr > $Image2Size
|
||||
set $Image2Size = $Image2Size + $Image3Size
|
||||
printf "Write Image2&3 size %d to Flash addr 0x%08x:\n", $Image2Size, $Image2Addr
|
||||
else
|
||||
printf "Write Image2 size %d to Flash addr 0x%08x:\n", $Image2Size, $Image2Addr
|
||||
end
|
||||
#FlasherWrite $wr_flile $Image2Addr $Image2Size
|
||||
call3
|
||||
end
|
||||
end
|
||||
FlashImagesInfo
|
||||
monitor reset
|
||||
SetBootFlash
|
||||
monitor go
|
||||
printf "Load Complete!\n"
|
||||
quit
|
340
Firmware/tools/flash/rtl8710.ocd
Normal file
340
Firmware/tools/flash/rtl8710.ocd
Normal file
|
@ -0,0 +1,340 @@
|
|||
#
|
||||
# OpenOCD script for RTL8710
|
||||
# Copyright (C) 2016 Rebane, rebane@alkohol.ee
|
||||
#
|
||||
set CHIPNAME rtl8195a
|
||||
set CHIPSERIES ameba1
|
||||
|
||||
# Adapt based on what transport is active.
|
||||
|
||||
source [find target/swj-dp.tcl]
|
||||
|
||||
if { [info exists CHIPNAME] } {
|
||||
set _CHIPNAME $CHIPNAME
|
||||
} else {
|
||||
set _CHIPNAME rtl8710
|
||||
}
|
||||
|
||||
if { [info exists ENDIAN] } {
|
||||
set _ENDIAN $ENDIAN
|
||||
} else {
|
||||
set _ENDIAN little
|
||||
}
|
||||
|
||||
if { [info exists WORKAREASIZE] } {
|
||||
set _WORKAREASIZE $WORKAREASIZE
|
||||
} else {
|
||||
set _WORKAREASIZE 0x800
|
||||
}
|
||||
|
||||
if { [info exists CPUTAPID] } {
|
||||
set _CPUTAPID $CPUTAPID
|
||||
} else {
|
||||
set _CPUTAPID 0x2ba01477
|
||||
}
|
||||
|
||||
swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID
|
||||
|
||||
set _TARGETNAME $_CHIPNAME.cpu
|
||||
target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
|
||||
|
||||
$_TARGETNAME configure -work-area-phys 0x10001000 -work-area-size $_WORKAREASIZE -work-area-backup 0
|
||||
|
||||
# adapter_khz 500
|
||||
adapter_nsrst_delay 100
|
||||
|
||||
if {![using_hla]} {
|
||||
cortex_m reset_config sysresetreq vectreset
|
||||
}
|
||||
|
||||
set rtl8710_flasher_firmware_ptr 0x10001000
|
||||
set rtl8710_flasher_buffer 0x10008000
|
||||
set rtl8710_flasher_buffer_size 262144
|
||||
set rtl8710_flasher_sector_size 4096
|
||||
|
||||
array set rtl8710_flasher_code {
|
||||
0 0xB671B57F 1 0x25FF4B58 2 0x6B196B1A 3 0x7040F042 4 0x69D96318 5 0xF4414E55
|
||||
6 0x69D97480 7 0xF8D361DC 8 0xF8C32120 9 0xF8D35120 10 0xF8C31124 11 0x47B05124
|
||||
12 0x47B04E4F 13 0x47984B4F 14 0x60104A4F 15 0x484F47B0 16 0x60012100 17 0x2C006804
|
||||
18 0x4D4DD0FC 19 0xB93E682E 20 0x60264C49 21 0x47B04E46 22 0x47984B46 23 0xE7ED6020
|
||||
24 0x2B01682B 25 0x4E42D109 26 0x4C4647B0 27 0x47A02006 28 0x47904A45 29 0x47A020C7
|
||||
30 0x682AE00D 31 0xD10E2A02 32 0x47B04E3B 33 0x20064C3F 34 0x483F47A0 35 0x493F4780
|
||||
36 0x68084D3F 37 0x47B047A8 38 0x47A02004 39 0x6828E7CE 40 0xD1132803 41 0x47A04C32
|
||||
42 0x24004838 43 0x4E396805 44 0x68311960 45 0xD206428C 46 0x4B384A37 47 0x221018A1
|
||||
48 0x34104798 49 0x4D2AE7F3 50 0xE7B847A8 51 0x29046829 52 0x2400D11B 53 0x6806482F
|
||||
54 0xD2B042B4 55 0x47A84D24 56 0x20064E28 57 0x4B2847B0 58 0x49284798 59 0x680A4B2A
|
||||
60 0x18A018E1 61 0xF44F4B2A 62 0x47987280 63 0x200447A8 64 0xF50447B0 65 0x47A87480
|
||||
66 0x682CE7E4 67 0xD1232C05 68 0x47984B17 69 0x4D1F2400 70 0x4294682A 71 0x481BD28F
|
||||
72 0x68012210 73 0x18604E1D 74 0x47B04669 75 0x1B19682B 76 0xBF282910 77 0x23002110
|
||||
78 0xD011428B 79 0xF81D4A16 80 0x18A05003 81 0x42B55CC6 82 0x3301D101 83 0x4A15E7F4
|
||||
84 0x60112101 85 0xE7726054 86 0x25014E12 87 0xE76E6035 88 0x47A84D03 89 0xE7D63410
|
||||
90 0x40000200 91 0x100011BD 92 0x100013DD 93 0x10001289 94 0x1000800C 95 0x10008000
|
||||
96 0x10008004 97 0x1000130D 98 0x100013ED 99 0x10008010 100 0x10001335 101 0x10008014
|
||||
102 0x10008020 103 0x10001221 104 0x10001375 105 0x10008008 106 0x6A5A4B03 107 0xD0FB0512
|
||||
108 0x0060F893 109 0xBF004770 110 0x40006000 111 0x6B194B17 112 0xF4416B1A 113 0x63187040
|
||||
114 0x69186919 115 0x0110F041 116 0xF8D36119 117 0x220000C0 118 0x0106F020 119 0x00C0F8D3
|
||||
120 0x10C0F8C3 121 0x00C0F8D3 122 0x0101F040 123 0x00C0F8D3 124 0x10C0F8C3 125 0x43BCF503
|
||||
126 0x609A6899 127 0x20016AD9 128 0x691962DA 129 0x69596118 130 0x61592102 131 0x619A6999
|
||||
132 0x61DA69D9 133 0x64DA6CD9 134 0xBF004770 135 0x40000200 136 0x460EB570 137 0xB34A4614
|
||||
138 0xF3C04B15 139 0x681A4507 140 0x7240F44F 141 0x685A601A 142 0xF3C02103 143 0x2C102207
|
||||
144 0x2410BF28 145 0x605CB2C0 146 0x1060F883 147 0x5060F883 148 0xF8832101 149 0xF8832060
|
||||
150 0x689A0060 151 0x60992500 152 0x47984B08 153 0x35015570 154 0x42A2B2AA 155 0x4804D3F8
|
||||
156 0xF0116A81 157 0xD1FA0301 158 0x60836881 159 0xBD704620 160 0x40006000 161 0x100011A9
|
||||
162 0x4C10B5F8 163 0x68232003 164 0x7340F44F 165 0x68636023 166 0x60602101 167 0x68A3229F
|
||||
168 0x60A14D0B 169 0x2060F884 170 0x460647A8 171 0x460747A8 172 0x040347A8 173 0x2707EA43
|
||||
174 0x0006EA47 175 0x4B036AA1 176 0x0201F011 177 0x6899D1FA 178 0xBDF8609A 179 0x40006000
|
||||
180 0x100011A9 181 0x4C0BB510 182 0x68232001 183 0x7340F44F 184 0x68636023 185 0x60602105
|
||||
186 0x60A068A2 187 0xF8844A06 188 0x47901060 189 0x4B036AA1 190 0x0201F011 191 0x6899D1FA
|
||||
192 0xBD10609A 193 0x40006000 194 0x100011A9 195 0x21014B08 196 0xF44F681A 197 0x601A7280
|
||||
198 0x6099689A 199 0x0060F883 200 0x48036A9A 201 0x0101F012 202 0x6883D1FA 203 0x47706081
|
||||
204 0x40006000 205 0x21014B0E 206 0xF44F681A 207 0x601A7280 208 0x2220689A 209 0xF8836099
|
||||
210 0xF3C02060 211 0xF3C04107 212 0xB2C02207 213 0x1060F883 214 0x2060F883 215 0x0060F883
|
||||
216 0x4A036A99 217 0x0001F011 218 0x6893D1FA 219 0x47706090 220 0x40006000 221 0xB36AB530
|
||||
222 0x25014B17 223 0xF44F681C 224 0x601C7480 225 0x2402689C 226 0xF883609D 227 0xF3C04060
|
||||
228 0xF3C04507 229 0xB2C02407 230 0x5060F883 231 0x7F80F5B2 232 0xF44FBF28 233 0xF8837280
|
||||
234 0xF8834060 235 0x20000060 236 0x4C095C0D 237 0xF8843001 238 0xB2855060 239 0xD3F74295
|
||||
240 0x07496A99 241 0x6AA0D5FC 242 0xF0104B03 243 0xD1FA0101 244 0x60996898 245 0xBD304610
|
||||
246 0x40006000 247 0x4B02B508 248 0x07C04798 249 0xBD08D4FB 250 0x100012D5 251 0x4B04B508
|
||||
252 0xF0004798 253 0xB2C10002 254 0xD0F82900 255 0xBF00BD08 256 0x100012D5
|
||||
}
|
||||
|
||||
set rtl8710_flasher_command_read_id 0
|
||||
set rtl8710_flasher_command_mass_erase 1
|
||||
set rtl8710_flasher_command_sector_erase 2
|
||||
set rtl8710_flasher_command_read 3
|
||||
set rtl8710_flasher_command_write 4
|
||||
set rtl8710_flasher_command_verify 5
|
||||
|
||||
set rtl8710_flasher_ready 0
|
||||
set rtl8710_flasher_capacity 0
|
||||
set rtl8710_flasher_auto_erase 0
|
||||
set rtl8710_flasher_auto_verify 0
|
||||
set rtl8710_flasher_auto_erase_sector 0xFFFFFFFF
|
||||
|
||||
proc rtl8710_flasher_init {} {
|
||||
global rtl8710_flasher_firmware_ptr
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_capacity
|
||||
global rtl8710_flasher_ready
|
||||
global rtl8710_flasher_code
|
||||
|
||||
if {[expr {$rtl8710_flasher_ready == 0}]} {
|
||||
echo "initializing RTL8710 flasher"
|
||||
halt
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
array2mem rtl8710_flasher_code 32 $rtl8710_flasher_firmware_ptr [array size rtl8710_flasher_code]
|
||||
reg faultmask 0x01
|
||||
reg sp 0x20000000
|
||||
reg pc $rtl8710_flasher_firmware_ptr
|
||||
resume
|
||||
rtl8710_flasher_wait
|
||||
set id [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]]
|
||||
set rtl8710_flasher_capacity [expr {2 ** [expr {($id >> 16) & 0xFF}]}]
|
||||
set rtl8710_flasher_ready 1
|
||||
echo "RTL8710 flasher initialized"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_mrw {reg} {
|
||||
set value ""
|
||||
mem2array value 32 $reg 1
|
||||
return $value(0)
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_wait {} {
|
||||
global rtl8710_flasher_buffer
|
||||
while {[rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x00}]]} { }
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_load_block {local_filename offset len} {
|
||||
global rtl8710_flasher_buffer
|
||||
load_image $local_filename [expr {$rtl8710_flasher_buffer + 0x20 - $offset}] bin [expr {$rtl8710_flasher_buffer + 0x20}] $len
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_read_block {offset len} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_command_read
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_read
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x14}] $len
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
rtl8710_flasher_wait
|
||||
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]]
|
||||
if {[expr {$status > 0}]} {
|
||||
error "read error, offset $offset"
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_write_block {offset len} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_command_write
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_write
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x14}] $len
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
rtl8710_flasher_wait
|
||||
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]]
|
||||
if {[expr {$status > 0}]} {
|
||||
error "write error, offset $offset"
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flasher_verify_block {offset len} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_command_verify
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_verify
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x14}] $len
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
rtl8710_flasher_wait
|
||||
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]]
|
||||
if {[expr {$status > 0}]} {
|
||||
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]]
|
||||
set status [expr {$status + $offset}]
|
||||
error "verify error, offset $status"
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flash_read_id {} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_capacity
|
||||
global rtl8710_flasher_command_read_id
|
||||
rtl8710_flasher_init
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_read_id
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
rtl8710_flasher_wait
|
||||
set id [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]]
|
||||
set manufacturer_id [format "0x%02X" [expr {$id & 0xFF}]]
|
||||
set memory_type [format "0x%02X" [expr {($id >> 8) & 0xFF}]]
|
||||
set memory_capacity [expr {2 ** [expr {($id >> 16) & 0xFF}]}]
|
||||
echo "manufacturer ID: $manufacturer_id, memory type: $memory_type, memory capacity: $memory_capacity bytes"
|
||||
}
|
||||
|
||||
proc rtl8710_flash_mass_erase {} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_command_mass_erase
|
||||
rtl8710_flasher_init
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_mass_erase
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
rtl8710_flasher_wait
|
||||
}
|
||||
|
||||
proc rtl8710_flash_sector_erase {offset} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_command_sector_erase
|
||||
rtl8710_flasher_init
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_sector_erase
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset
|
||||
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
|
||||
rtl8710_flasher_wait
|
||||
}
|
||||
|
||||
proc rtl8710_flash_read {local_filename loc size} {
|
||||
global rtl8710_flasher_buffer
|
||||
global rtl8710_flasher_buffer_size
|
||||
rtl8710_flasher_init
|
||||
for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} {
|
||||
set len [expr {$size - $offset}]
|
||||
if {[expr {$len > $rtl8710_flasher_buffer_size}]} {
|
||||
set len $rtl8710_flasher_buffer_size
|
||||
}
|
||||
set flash_offset [expr {$loc + $offset}]
|
||||
echo "read offset $flash_offset"
|
||||
rtl8710_flasher_read_block $flash_offset $len
|
||||
dump_image _rtl8710_flasher.bin [expr {$rtl8710_flasher_buffer + 0x20}] $len
|
||||
exec dd conv=notrunc if=_rtl8710_flasher.bin "of=$local_filename" bs=1 "seek=$offset"
|
||||
echo "read $len bytes"
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flash_write {local_filename loc} {
|
||||
global rtl8710_flasher_buffer_size
|
||||
global rtl8710_flasher_sector_size
|
||||
global rtl8710_flasher_auto_erase
|
||||
global rtl8710_flasher_auto_verify
|
||||
global rtl8710_flasher_auto_erase_sector
|
||||
rtl8710_flasher_init
|
||||
set sector 0
|
||||
set size [file size $local_filename]
|
||||
for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} {
|
||||
set len [expr {$size - $offset}]
|
||||
if {[expr {$len > $rtl8710_flasher_buffer_size}]} {
|
||||
set len $rtl8710_flasher_buffer_size
|
||||
}
|
||||
set flash_offset [expr {$loc + $offset}]
|
||||
echo "write offset $flash_offset"
|
||||
rtl8710_flasher_load_block $local_filename $offset $len
|
||||
if {[expr {$rtl8710_flasher_auto_erase != 0}]} {
|
||||
for {set i $flash_offset} {$i < [expr {$flash_offset + $len}]} {incr i} {
|
||||
set sector [expr {$i / $rtl8710_flasher_sector_size}]
|
||||
if {[expr {$rtl8710_flasher_auto_erase_sector != $sector}]} {
|
||||
echo "erase sector $sector"
|
||||
rtl8710_flash_sector_erase [expr {$sector * $rtl8710_flasher_sector_size}]
|
||||
set rtl8710_flasher_auto_erase_sector $sector
|
||||
}
|
||||
}
|
||||
}
|
||||
rtl8710_flasher_write_block $flash_offset $len
|
||||
echo "wrote $len bytes"
|
||||
if {[expr {$rtl8710_flasher_auto_verify != 0}]} {
|
||||
echo "verify offset $flash_offset"
|
||||
rtl8710_flasher_verify_block $flash_offset $len
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flash_verify {local_filename loc} {
|
||||
global rtl8710_flasher_buffer_size
|
||||
rtl8710_flasher_init
|
||||
set size [file size $local_filename]
|
||||
for {set offset 0} {$offset < $size} {set offset [expr {$offset + $rtl8710_flasher_buffer_size}]} {
|
||||
set len [expr {$size - $offset}]
|
||||
if {[expr {$len > $rtl8710_flasher_buffer_size}]} {
|
||||
set len $rtl8710_flasher_buffer_size
|
||||
}
|
||||
set flash_offset [expr {$loc + $offset}]
|
||||
echo "read offset $flash_offset"
|
||||
rtl8710_flasher_load_block $local_filename $offset $len
|
||||
echo "verify offset $flash_offset"
|
||||
rtl8710_flasher_verify_block $flash_offset $len
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flash_auto_erase {on} {
|
||||
global rtl8710_flasher_auto_erase
|
||||
if {[expr {$on != 0}]} {
|
||||
set rtl8710_flasher_auto_erase 1
|
||||
echo "auto erase on"
|
||||
} else {
|
||||
set rtl8710_flasher_auto_erase 0
|
||||
echo "auto erase off"
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_flash_auto_verify {on} {
|
||||
global rtl8710_flasher_auto_verify
|
||||
if {[expr {$on != 0}]} {
|
||||
set rtl8710_flasher_auto_verify 1
|
||||
echo "auto verify on"
|
||||
} else {
|
||||
set rtl8710_flasher_auto_verify 0
|
||||
echo "auto verify off"
|
||||
}
|
||||
}
|
||||
|
||||
proc rtl8710_reboot {} {
|
||||
echo "# Set processor clock to default before system reset"
|
||||
mww 0x40000014 0x00000021
|
||||
sleep 10
|
||||
echo "# Reboot (system reset)"
|
||||
mww 0xE000ED0C 0x05FA0007
|
||||
}
|
||||
|
BIN
Firmware/tools/flash/rtl8710_flasher.bin
Normal file
BIN
Firmware/tools/flash/rtl8710_flasher.bin
Normal file
Binary file not shown.
|
@ -7,6 +7,7 @@ TOOLS_PATH ?= $(SDK_PATH)component/soc/realtek/8195a/misc/iar_utility/common/too
|
|||
|
||||
FLASHER_TYPE = Jlink
|
||||
FLASHER_SPEED = 3500
|
||||
FLASHER_PATH = $(SDK_PATH)flasher/
|
||||
#FLASHER_PATH = $(SDK_PATH)flasher/
|
||||
FLASHER_PATH = tools/flash/
|
||||
|
||||
JLINK_PATH ?= C:/Data/JLink_V618c/
|
||||
|
|
Loading…
Reference in a new issue