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>
This commit is contained in:
Zbigniew Bodek
2021-04-06 19:56:59 +02:00
committed by Naveen Saini
parent d52c30f411
commit 15c5eea4ca
2 changed files with 12 additions and 1 deletions

View File

@@ -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:
break
if now >= timeout:

View File

@@ -8,3 +8,6 @@ require conf/machine/include/tune-cortexm4.inc
MACHINEOVERRIDES =. "nordic:"
TUNE_FEATURES = "armv7m cortexm4"
# Target type for this machine used by Pyocd
PYOCD_TARGET = "nrf52"