mirror of
https://git.yoctoproject.org/meta-zephyr
synced 2026-09-14 06:49:32 +02:00
zephyr-flash-pyocd.bbclass: Implement configurable probe IDs to program
Implement logic to configure what probes to program based on the PYOCD_FLASH_IDS variable: 1. by default program all attached probes 2. change default behaviour by listing the probe IDs to flash CONNECT_TIMEOUT_SECONDS was also renamed to maintain consistency with the PYOCD_FLASH_IDS variable. One can query the IDs using `pyocd list`. The value of PYOCD_FLASH_IDS can also be injected into the datastore using BB_ENV_EXTRAWHITE. Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com> Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
This commit is contained in:
committed by
Naveen Saini
parent
7dcb47371b
commit
8d54c98cc2
@@ -1,4 +1,5 @@
|
||||
CONNECT_TIMEOUT_SECONDS ?= "30"
|
||||
PYOCD_CONNECT_TIMEOUT_SECONDS ?= "30"
|
||||
PYOCD_FLASH_IDS ?= "all"
|
||||
|
||||
python do_flash_usb() {
|
||||
try:
|
||||
@@ -7,26 +8,46 @@ python do_flash_usb() {
|
||||
except ImportError:
|
||||
bb.fatal("Flashing with pyocd needs the relevant python package. Make sure your host provides it or consult your distribution packages for how to install this prerequisite.")
|
||||
|
||||
timeout = int(d.getVar('CONNECT_TIMEOUT_SECONDS'))
|
||||
try:
|
||||
timeout = int(d.getVar('PYOCD_CONNECT_TIMEOUT_SECONDS'))
|
||||
except ValueError:
|
||||
bb.fatal(f"PYOCD_CONNECT_TIMEOUT_SECONDS was set to an invalid value: {d.getVar('PYOCD_CONNECT_TIMEOUT_SECONDS')}.")
|
||||
image = f"{d.getVar('DEPLOY_DIR_IMAGE')}/{d.getVar('PN')}.elf"
|
||||
bb.plain(f"Attempting to flash {image} to board {d.getVar('BOARD')}")
|
||||
ids = d.getVar('PYOCD_FLASH_IDS')
|
||||
|
||||
# Try to connect to a probe with a timeout
|
||||
now = 0
|
||||
step = 3
|
||||
while True:
|
||||
session = ConnectHelper.session_with_chosen_probe(blocking=False, return_first=True)
|
||||
if session:
|
||||
break
|
||||
if now >= timeout:
|
||||
bb.fatal("Timeout while trying to connect to a probe. Make sure the target device is connected and the udev is configured accordingly. See <https://github.com/mbedmicro/pyOCD/tree/master/udev> for help.")
|
||||
bb.warn("Can't connect to the probe. Retrying in %d seconds..." % step)
|
||||
time.sleep(step)
|
||||
now += step
|
||||
# Compute the list of IDs to program
|
||||
if ids == 'all':
|
||||
ids = []
|
||||
for probe in ConnectHelper.get_all_connected_probes(blocking=False):
|
||||
ids.append(probe.unique_id)
|
||||
if not ids:
|
||||
bb.fatal("No probe detected. Make sure your target is connected.")
|
||||
else:
|
||||
ids = ids.split()
|
||||
if not ids:
|
||||
bb.fatal("No probe requested for programming. Make sure PYOCD_FLASH_IDS is set.")
|
||||
|
||||
with session:
|
||||
FileProgrammer(session).program(image)
|
||||
session.board.target.reset()
|
||||
# Program each ID
|
||||
for id in ids:
|
||||
bb.plain(f"Attempting to flash {os.path.basename(image)} to board {d.getVar('BOARD')} [{id}]")
|
||||
|
||||
# Try to connect to a probe with a timeout
|
||||
now = 0
|
||||
step = 3
|
||||
while True:
|
||||
session = ConnectHelper.session_with_chosen_probe(blocking=False, return_first=True, unique_id=id)
|
||||
if session:
|
||||
break
|
||||
if now >= timeout:
|
||||
bb.fatal(f"Timeout while trying to connect to probe ID: {id}. Make sure the target device is connected and the udev is configured accordingly. See <https://github.com/mbedmicro/pyOCD/tree/master/udev> for help.")
|
||||
bb.warn(f"Can't connect to the probe ID: {id}. Retrying in {step} seconds...")
|
||||
time.sleep(step)
|
||||
now += step
|
||||
|
||||
# Program the selected probe
|
||||
with session:
|
||||
FileProgrammer(session).program(image)
|
||||
session.board.target.reset()
|
||||
}
|
||||
|
||||
addtask do_flash_usb after do_deploy
|
||||
|
||||
Reference in New Issue
Block a user