Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added mflash/flashloader/ramcode/mx1550.elf
Binary file not shown.
26 changes: 18 additions & 8 deletions mflash/flashloader/scripts/cmd.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,37 @@ proc mflash_erase { addr size } {
}

proc mflash_write { file addr } {
set ffstr [string repeat \xff 4096]
set f [open $file r]

set percent 0
set size [file size $file]
set remain $size
while {$remain > 0} {
set n $($remain > $::mflash_buf_size ? $::mflash_buf_size : $remain)
mww $::MFLASH_CMD_LOC $::CMD_WRITE
mww $::MFLASH_ARG0_LOC $addr
mww $::MFLASH_ARG1_LOC $n
load_image_bin $file $($size - $remain) $::MFLASH_BUF_LOC $n
set remain $($remain - $n)
set addr $($addr + $n)

mflash_cmd_run 1000
set data [read $f $n]
set need_download [string equal -length $n $data $ffstr]

if {$need_download == 0 } {
mww $::MFLASH_CMD_LOC $::CMD_WRITE
mww $::MFLASH_ARG0_LOC $addr
mww $::MFLASH_ARG1_LOC $n
load_image_bin $file $($size - $remain) $::MFLASH_BUF_LOC $n

mflash_cmd_run 1000
}

set remain $($remain - $n)
set addr $($addr + $n)
set percent_now $(($size - $remain) * 100 / $size)
if { $percent_now > $percent } {
set percent $percent_now
puts "$percent%"
}
}

close $f
}

proc mflash_read { file addr size } {
Expand Down Expand Up @@ -86,4 +96,4 @@ proc mflash_unlock { } {
mww $::MFLASH_CMD_LOC $::CMD_UNLOCK

mflash_cmd_run 1000
}
}
86 changes: 86 additions & 0 deletions mflash/targets/mx1550.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#
# OpenOCD setup script for mx1550
#

if { ![info exists CHIPNAME] } {
set CHIPNAME mx1550
}

if { ![info exists CPUTAPID] } {
set CPUTAPID 0x2ba01477
}

set T2_CHIP_VER {Unknown}

proc mmio_rd {size addr} {
set val(0) 0
mem2array val $size $addr 1
return $val(0)
}

proc mmio_wr {size addr val} {
set x(0) $val
array2mem x $size $addr 1
}

proc t2_detect_version {} {
global T2_CHIP_VER
set chipid [mmio_rd 32 0xfc016c]
set maskid [mmio_rd 8 0xfc0170]

if {$chipid == [expr 0x790daf]} {
set T2_CHIP_VER {F1}
} else {
set chipid [mmio_rd 32 0xfc0170]
set maskid [mmio_rd 8 0xfc0174]

if {$chipid == [expr 0x00790da0]} {
set T2_CHIP_VER {G0}
} elseif {$chipid == [expr 0x00790da1]} {
set T2_CHIP_VER {H0}
} else {
set T2_CHIP_VER [format "UNKNOWN:%08x:%02x" $chipid $maskid]
}
}
}

proc t2_reset_pre {} {
# RESET_DEVICE: Sysrstreq = CPU RESET
mmio_wr 32 0xfc0104 8
# CLKSEL=0
mmio_wr 8 0xfc0106 0
}

proc t2_reset_end {} {
# Clear RESET_REASON (to give the apperance of a power-on reset)
mmio_wr 8 0xfc0100 0
}

adapter_khz 10000
set _TARGETNAME $CHIPNAME.cpu

swd newdap $CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $CPUTAPID
target create $_TARGETNAME cortex_m -endian little -chain-position $_TARGETNAME
#transport select jtag
#jtag newtap $CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $CPUTAPID

#if { [llength [info commands dap]] == 0 } {
# OpenOCD version 0.10 and older that doesn't have a 'dap' command
# target create $CHIPNAME.cpu cortex_m -endian little -chain-position $CHIPNAME.cpu
#} else {
# Newer versions of OpenOCD needs the DAP created explicitly
# dap create $CHIPNAME.dap -chain-position $CHIPNAME.cpu
# target create $CHIPNAME.cpu cortex_m -endian little -dap $CHIPNAME.dap
#}

$CHIPNAME.cpu configure -event examine-end { t2_detect_version }
$CHIPNAME.cpu configure -event reset-assert-pre { t2_reset_pre }
$CHIPNAME.cpu configure -event reset-end { t2_reset_end }

cortex_m reset_config sysresetreq

proc flash_alg_pre_init { } {
reset halt
}

set FLASH_ALG_CONFIG_START 0x000000000004ad28