From bdfe381a055a80c9c0e48e508f4f0dc680c89a0c Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Mon, 20 Jul 2026 17:36:16 +0800 Subject: [PATCH] buspirate_ctrl: Include npcx_monitor It's always the same binary. It's chip, not mainboard specific. So just include it here for convenience. That allows us to provide just the ec.bin as a script parameter. Example: ./buspirate_ctrl.py --flash ~/Downloads/ec.bin Signed-off-by: Daniel Schaefer --- scripts/buspirate_ctrl.py | 35 +++++++++++++++++++++++++---------- scripts/npcx_monitor.bin | Bin 0 -> 736 bytes 2 files changed, 25 insertions(+), 10 deletions(-) create mode 100755 scripts/npcx_monitor.bin diff --git a/scripts/buspirate_ctrl.py b/scripts/buspirate_ctrl.py index 67db992..4528909 100755 --- a/scripts/buspirate_ctrl.py +++ b/scripts/buspirate_ctrl.py @@ -24,7 +24,8 @@ ./buspirate_ctrl.py --pty-bridge # PTY bridge (Ctrl+C to stop) ./buspirate_ctrl.py --pty-bridge --reset # Bridge, then reset (captures boot log) ./buspirate_ctrl.py --pty-bridge --enter-flash-mode # Bridge + enter flash mode - ./buspirate_ctrl.py --flash ./result/ # Full flash workflow + ./buspirate_ctrl.py --flash ./result/ # Full flash workflow (build dir) + ./buspirate_ctrl.py --flash ~/Downloads/ec.bin # Flash single ec.bin (monitor from script dir) ./buspirate_ctrl.py --flash ./result/ --no-reset # Flash without reboot ./buspirate_ctrl.py --flash ./result/ --log # Flash, reset, print boot log @@ -467,14 +468,26 @@ def cmd_log(bp, reset=False, debug=False): print("\nLog stopped.", file=sys.stderr) -def cmd_flash(bp, firmware_dir, no_reset=False, log=False, debug=False): - """Full flash workflow: enter flash mode, PTY bridge, uartupdatetool, reset.""" - fw_dir = Path(firmware_dir) - ec_bin = fw_dir / "ec.bin" - monitor_bin = fw_dir / "npcx_monitor.bin" +def cmd_flash(bp, firmware_path, no_reset=False, log=False, debug=False): + """Full flash workflow: enter flash mode, PTY bridge, uartupdatetool, reset. - if not ec_bin.exists() or not monitor_bin.exists(): - sys.exit(f"Error: ec.bin and/or npcx_monitor.bin not found in {fw_dir}") + firmware_path may be a build directory (containing ec.bin and + npcx_monitor.bin) or a single ec.bin file, in which case + npcx_monitor.bin is taken from this script's directory. + """ + fw_path = Path(firmware_path).expanduser() + if fw_path.is_dir(): + ec_bin = fw_path / "ec.bin" + monitor_bin = fw_path / "npcx_monitor.bin" + if not ec_bin.exists() or not monitor_bin.exists(): + sys.exit(f"Error: ec.bin and/or npcx_monitor.bin not found in {fw_path}") + else: + ec_bin = fw_path + monitor_bin = Path(__file__).resolve().parent / "npcx_monitor.bin" + if not ec_bin.exists(): + sys.exit(f"Error: {ec_bin} not found") + if not monitor_bin.exists(): + sys.exit(f"Error: npcx_monitor.bin not found in {monitor_bin.parent}") print(f"Firmware: {ec_bin}") @@ -551,8 +564,10 @@ def main(): help="Hold EC in reset (RST low)") group.add_argument("--pty-bridge", action="store_true", help="PTY bridge (blocks until Ctrl+C)") - group.add_argument("--flash", metavar="DIR", - help="Full flash workflow with uartupdatetool") + group.add_argument("--flash", metavar="PATH", + help="Full flash workflow with uartupdatetool. " + "PATH is a build dir with ec.bin + npcx_monitor.bin, " + "or a single ec.bin file (monitor taken from script dir)") # Combinable flags parser.add_argument("--reset", action="store_true", diff --git a/scripts/npcx_monitor.bin b/scripts/npcx_monitor.bin new file mode 100755 index 0000000000000000000000000000000000000000..f3fae2b762ed364785671ab643fbfa240f1cf54d GIT binary patch literal 736 zcmXw0KWGzC7=QOJZPF&OfmBH&#k-_Rq}2vN44sZNTrnpo=-^NxVuuWZr=*EPXo8C! z1gRp_AX11rh#*(Ucw9;s*R&3j7OMy*wu9Hi_^u*;ewVhx`}6(z{rTQgE22U|!Bn|Z zym}%zlwOEmsIC8?GdI%1%J9X9q0+sZxNhMpcVgjsftrlgbN%_aS)~0LJARBYF%4@; zJ1q+`G5hvTY3Jnqd)+#`4ebe9Z_=NhG%4>-Ig~(JGC4w(KuXn%!k-3_JOX#c`I;2H z5{Y^wn)KhFG$r1zs#A9CQiAz_M$G~ZX4ENLJ(vmRskwD<{-mu&w@(B1)!-4$o5nuc zu=BjKIQu+TDy;SWts$d92$g)5zT^{YT&fk^V~-3n!i{j@vJ}wVlN-zHIiD_W^E^81 z_PQ!W0QMcKVh^65z^U9Z&vJ*1rMWey^-*uSBo3?V#v!IE_F}vOz_x%Yi*wbsL|nS9 z?NF+1XS|ffJycz;X9GEOg?Y8oD-&T*_R7HCLlpOIXp0nCUc$-5ySSsKH`T7nk}+s; z?k^&+1!y&V=+AcvSOK+GfrQK1miR4eyLo__C0ObD&O>?5tzoBr9xJmL`OVdV-!))U zzzOYxS*=PBdN_vK*TEwnNx;~f9f#AqnZUPw1{1O2I?Sc6?zhO_e^Dm~K(MG33)1^3H