diff options
author | Farouk Bouabid <farouk.bouabid@theobroma-systems.com> | 2023-10-13 11:55:14 +0200 |
---|---|---|
committer | Farouk Bouabid <farouk.bouabid@theobroma-systems.com> | 2023-10-18 15:39:00 +0200 |
commit | 013926cf10256ac38c3bd1ade98fafbc9b8a285a (patch) | |
tree | 713bf82e3fa6f663de19ee61e024ebc1bd60f55b | |
parent | 893ef579c6ca9e2cbcc09cb2112e0b06b2b07556 (diff) |
mule-attiny: i2c_flash: make the firmware path optional
The flashing tool is now able to retrieve bootloader data. Let's make
the user capable of just reading these information through the console
without having to flash anything.
Relates-to: RNG-147
Signed-off-by: Farouk Bouabid <farouk.bouabid@theobroma-systems.com>
-rw-r--r-- | mule-attiny/i2c-flash/README.md | 3 | ||||
-rwxr-xr-x | mule-attiny/i2c-flash/src/mule-attiny_i2c_flash/i2c_flash.py | 31 |
2 files changed, 20 insertions, 14 deletions
diff --git a/mule-attiny/i2c-flash/README.md b/mule-attiny/i2c-flash/README.md index 140c5e8..7a0fe7c 100644 --- a/mule-attiny/i2c-flash/README.md +++ b/mule-attiny/i2c-flash/README.md @@ -23,7 +23,7 @@ directories listed in `PATH` environment variable. # Running instructions ``` -usage: i2c_flash.py [-h] -f FIRMWARE -c BOOT_REQ_GPIOCHIP -g BOOT_REQ_GPIO -b +usage: i2c_flash.py [-h] [-f FIRMWARE] -c BOOT_REQ_GPIOCHIP -g BOOT_REQ_GPIO -b I2C_BUS -rc UPDI_RESET_GPIOCHIP -rg UPDI_RESET_GPIO Script to flash mule-ATtiny firmware through I2C-Flashloader @@ -32,6 +32,7 @@ options: -h, --help show this help message and exit -f FIRMWARE, --firmware FIRMWARE Path to the firmware binary file + If not specified, this script will only print out the bootloader info and exit. -c BOOT_REQ_GPIOCHIP, --boot_req_gpiochip BOOT_REQ_GPIOCHIP Boot request gpiochip index number (e.g. 0 if /dev/gpiochip0)/ diff --git a/mule-attiny/i2c-flash/src/mule-attiny_i2c_flash/i2c_flash.py b/mule-attiny/i2c-flash/src/mule-attiny_i2c_flash/i2c_flash.py index 7beea78..c362384 100755 --- a/mule-attiny/i2c-flash/src/mule-attiny_i2c_flash/i2c_flash.py +++ b/mule-attiny/i2c-flash/src/mule-attiny_i2c_flash/i2c_flash.py @@ -95,7 +95,7 @@ def get_blhdr(blhdr): if id == BLHdrID.VERSION: return BLVersionHdr(blhdr) # Add other bootloader header IDs here - raise Exception(f"Unknown {id} ID for payload header") + raise Exception(f"Unknown ID ({id}) for payload header") class BLHdr(): @@ -148,16 +148,14 @@ class BLParser(): @classmethod def parse(cls, payload): if not payload: - logging.error("No bootloader data is available!") - return + raise Exception("No bootloader data is available!") cursor = 0 while cursor < len(payload): blhdr = get_blhdr(payload[cursor]) clss = blhdr.payload_class() cursor += 1 if len(payload) < cursor + blhdr.len(): - logging.error(f"Invalid data header of type {type(blhdr).__name__}") - return + raise Exception(f"Invalid data header of type {type(blhdr).__name__}") yield clss(blhdr, payload[cursor:cursor + blhdr.len()]) cursor += blhdr.len() @@ -242,8 +240,10 @@ def main(): prog='i2c_flash.py', description='Script to flash mule-ATtiny firmware through I2C-Flashloader', epilog='') - - parser.add_argument('-f', '--firmware', required=True, help="Path to the firmware binary file") + parser.add_argument('-f', '--firmware', required=False, # User can just retrieve bl_data without flashing + help="Path to the firmware binary file. " + "If not specified, this script will only print out the bootloader info and exit." + ) parser.add_argument('-c', '--boot_req_gpiochip', type=int, required=True, help="Boot request gpiochip index number (e.g. 0 if /dev/gpiochip0)/") # noqa: E501 parser.add_argument('-g', '--boot_req_gpio', type=int, required=True, help="Boot request GPIO index in the gpiochip (e.g. if GPIO3_A5, boot_req_gpiochip is 3 and boot_req_gpio is 5") # noqa: E501 parser.add_argument('-b', '--i2c_bus', type=int, required=True, help="I2C bus index (e.g. 2 if /dev/i2c-2) connected to ATtiny") # noqa: E501 @@ -253,11 +253,12 @@ def main(): # Get binarry path from cli args = parser.parse_args() - # Open binary file and copy data to "_bin" bytearray - _bin = load_bin(args.firmware) + if args.firmware: + # Open binary file and copy data to "_bin" bytearray + _bin = load_bin(args.firmware) - if not is_valid_bin(_bin): - sys.exit(INVALID_BIN) + if not is_valid_bin(_bin): + sys.exit(INVALID_BIN) # Make sure kernel doesn't access the isl1208 address while flashing if pathlib.Path(f"/sys/bus/i2c/drivers/rtc-isl1208/{args.i2c_bus}-{BL_I2C_DEV:04x}").exists(): @@ -286,8 +287,12 @@ def main(): for d in bl_data: logging.info(d) - bootCtrl.exitRoMode() - ret = fw_flash(_bin, args.i2c_bus) + if args.firmware: + bootCtrl.exitRoMode() + ret = fw_flash(_bin, args.i2c_bus) + else: + logging.info("Nothing to do. Please provide a firmware using '-f'") + ret = FLASH_OK except Exception as err: raise err |