diff options
authorZbigniew Bodek <zbigniew.bodek@huawei.com>2021-04-06 19:56:59 +0200
committerNaveen Saini <naveen.kumar.saini@intel.com>2021-04-15 08:05:02 +0800
commit15c5eea4ca6fae11b483ed262ef55e72a1880a83 (patch)
parentd52c30f4113052d9b23fce076d5f094194da6036 (diff)
zephyr-flash-pyocd.bbclass: Fix problems with flashing particular boards
By default, pyocd uses generic target type called "cortex_m" which should be able to connect and debug but not flash the memory. Normally pyocd would warn us of using default target instead of proper one but this message wasn't displayed. Despite not providing target type, flashing process succeeded but results were undefined. On Nitrogen, sometimes it worked (especially for small images) and sometimes the programmed device crashed miserably. Fix flashing operation by providing pyocd target type acquired from the conditional PYOCD_TARGET variable declared for each machine (chip family). Signed-off-by: Zbigniew Bodek <zbigniew.bodek@huawei.com> Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
2 files changed, 12 insertions, 1 deletions
diff --git a/classes/zephyr-flash-pyocd.bbclass b/classes/zephyr-flash-pyocd.bbclass
index a873be4..6517945 100644
--- a/classes/zephyr-flash-pyocd.bbclass
+++ b/classes/zephyr-flash-pyocd.bbclass
@@ -27,6 +27,9 @@ python do_flash_usb() {
if not ids:
bb.fatal("No probe requested for programming. Make sure PYOCD_FLASH_IDS is set.")
+ # Fetch target type to pass to the ConnectHelper
+ target = d.getVar('PYOCD_TARGET')
# Program each ID
for id in ids:
bb.plain(f"Attempting to flash {os.path.basename(image)} to board {d.getVar('BOARD')} [{id}]")
@@ -35,7 +38,12 @@ python do_flash_usb() {
now = 0
step = 3
while True:
- session = ConnectHelper.session_with_chosen_probe(blocking=False, return_first=True, unique_id=id)
+ if target is not None:
+ session = ConnectHelper.session_with_chosen_probe(blocking=False, return_first=True, unique_id=id, target_override=target)
+ else:
+ bb.warn(f"Target type not provided. Flashing may fail or result in an undefined behavior.")
+ session = ConnectHelper.session_with_chosen_probe(blocking=False, return_first=True, unique_id=id)
if session:
if now >= timeout:
diff --git a/conf/machine/include/nrf52832.inc b/conf/machine/include/nrf52832.inc
index 73e628a..e938aa6 100644
--- a/conf/machine/include/nrf52832.inc
+++ b/conf/machine/include/nrf52832.inc
@@ -8,3 +8,6 @@ require conf/machine/include/tune-cortexm4.inc
TUNE_FEATURES = "armv7m cortexm4"
+# Target type for this machine used by Pyocd
+PYOCD_TARGET = "nrf52"