summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyles Watson <mylesgw@chromium.org>2015-07-17 13:05:43 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-08-04 19:22:12 +0000
commit050db0510ef2d7ed72f1befc9bd0569d69bf0e4a (patch)
tree8a5a6fb5c7ff16df460d2d75fcfedc16469ef573
parentd804e8fdbd1e9f238317c68d235add1806dcd49f (diff)
downloadchrome-ec-050db0510ef2d7ed72f1befc9bd0569d69bf0e4a.tar.gz
flash_ec: add support for SWD, nrf51, and hadoken
BUG=none TEST=manual BRANCH=none flash_ec --board=hadoken flash_ec --board=npcx_evb flash_ec --board=samus Use openocd in SWD mode to flash the nRF51 chip. Use warm_reset to exit DEBUG mode. Change-Id: Iaf2827d4ce5be6d61431a3de7ab4f86aa4adde02 Signed-off-by: Myles Watson <mylesgw@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/287039 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rwxr-xr-xutil/flash_ec16
-rw-r--r--util/openocd/lm4_chip.cfg7
-rw-r--r--util/openocd/npcx_chip.cfg7
-rw-r--r--util/openocd/nrf51_chip.cfg14
-rw-r--r--util/openocd/nrf51_cmds.tcl22
-rw-r--r--util/openocd/servo.cfg8
6 files changed, 71 insertions, 3 deletions
diff --git a/util/flash_ec b/util/flash_ec
index 4ccfa2d0fc..3f0a9174a2 100755
--- a/util/flash_ec
+++ b/util/flash_ec
@@ -85,6 +85,10 @@ BOARDS_NPCX=(
npcx_evb_arm
)
+BOARDS_NRF51=(
+ hadoken
+)
+
BOARDS_MEC1322=(
cyan
glados
@@ -403,6 +407,16 @@ function flash_lm4() {
}
+function flash_nrf51() {
+ OCD_CHIP_CFG="nrf51_chip.cfg"
+ OCD_CMDS="init; flash_nrf51 ${IMG} ${FLAGS_offset}; exit_debug_mode_nrf51; shutdown;"
+
+ flash_openocd
+
+ # waiting 100us for the reset pulse is not necessary, it takes ~2.5ms
+ dut_control swd_reset:on swd_reset:off
+}
+
function flash_npcx() {
IMG_PATH="${EC_DIR}/build/${BOARD}"
OCD_CHIP_CFG="npcx_chip.cfg"
@@ -486,6 +500,8 @@ elif $(in_array "${BOARDS_STM32_DFU[@]}" "${BOARD}"); then
CHIP="stm32_dfu"
elif $(in_array "${BOARDS_NPCX[@]}" "${BOARD}"); then
CHIP="npcx"
+elif $(in_array "${BOARDS_NRF51[@]}" "${BOARD}"); then
+ CHIP="nrf51"
elif $(in_array "${BOARDS_MEC1322[@]}" "${BOARD}"); then
CHIP="mec1322"
elif [ -n "${FLAGS_chip}" ]; then
diff --git a/util/openocd/lm4_chip.cfg b/util/openocd/lm4_chip.cfg
index ec3bb4143c..3dffa2dc66 100644
--- a/util/openocd/lm4_chip.cfg
+++ b/util/openocd/lm4_chip.cfg
@@ -1,4 +1,11 @@
+ftdi_layout_init 0x0018 0x009b
+
+# open collector oe only
+ftdi_layout_signal nSRST -oe 0x0020
+
+reset_config trst_only
+
source [find target/stellaris.cfg]
source [find lm4x_cmds.tcl]
diff --git a/util/openocd/npcx_chip.cfg b/util/openocd/npcx_chip.cfg
index 8e137307e5..ddd01df5a4 100644
--- a/util/openocd/npcx_chip.cfg
+++ b/util/openocd/npcx_chip.cfg
@@ -2,3 +2,10 @@
source [find npcx.cfg]
source [find npcx_cmds.tcl]
+ftdi_layout_init 0x0018 0x009b
+
+# open collector oe only
+ftdi_layout_signal nSRST -oe 0x0020
+
+reset_config trst_only
+
diff --git a/util/openocd/nrf51_chip.cfg b/util/openocd/nrf51_chip.cfg
new file mode 100644
index 0000000000..f0e78897d6
--- /dev/null
+++ b/util/openocd/nrf51_chip.cfg
@@ -0,0 +1,14 @@
+
+#nRF51 uses SWD
+transport select swd
+# Since nTRST is repurposed, we need a different layout_init setting
+ftdi_layout_init 0x0008 0x009b
+
+ftdi_layout_signal SWDIO_OE -nalias nTRST
+ftdi_layout_signal SWD_EN -alias TMS
+
+#Disable fast flashing, it only works with ST-Link and CMSIS-DAP
+set WORKAREASIZE 0
+source [find target/nrf51.cfg]
+source [find nrf51_cmds.tcl]
+
diff --git a/util/openocd/nrf51_cmds.tcl b/util/openocd/nrf51_cmds.tcl
new file mode 100644
index 0000000000..711b27574d
--- /dev/null
+++ b/util/openocd/nrf51_cmds.tcl
@@ -0,0 +1,22 @@
+# Copyright 2015 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Command automation for Nordic nRF51 chip
+
+proc flash_nrf51 {path offset} {
+ reset halt;
+ program $path $offset;
+}
+
+proc unprotect_nrf51 { } {
+ reset halt;
+ nrf51 mass_erase;
+}
+
+# enable reset by writing 1 to the RESET register
+# This will disconnect the debugger with the following message:
+# Polling target nrf51.cpu failed, trying to reexamine
+proc exit_debug_mode_nrf51 { } {
+ mww 0x40000544 1;
+}
diff --git a/util/openocd/servo.cfg b/util/openocd/servo.cfg
index 362e4f814d..8331a9bc08 100644
--- a/util/openocd/servo.cfg
+++ b/util/openocd/servo.cfg
@@ -6,7 +6,9 @@ gdb_flash_program enable
interface ftdi
# VID/PID for servo v2, servo v3
ftdi_vid_pid 0x18d1 0x5002 0x18d1 0x5004 0x18d1 0x500d
-ftdi_layout_init 0x0c08 0x0f1b
-ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400
-ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800
+# Only initialize Port A
+ftdi_channel 0
+
+# unbuffered connection data == oe
+ftdi_layout_signal nTRST -data 0x0010 -oe 0x0010