nRF51_OTA_strip.py: python script that strips an nRF51 image
nRF51_OTA_strip.py
- Committer:
- Jean-Philippe Brucker
- Date:
- 2015-08-26
- Revision:
- 0:5a3618245257
File content as of revision 0:5a3618245257:
#/usr/bin/env python3 # Remove the SoftDevice part of an nRF51 application, to make it # transferable over the air import intelhex from os.path import exists from sys import argv, exit if not argv[2:]: print("usage: %s <input hex file> <output name>" % argv[0]) exit(1) in_file, out_file = argv[1:3] # Set start address if autodetection doesn't work start_address = None if exists(out_file): confirm = input("File %s exists. Replace (y/N)? " % out_file) if not confirm.lower().startswith("y"): print("Nothing to do.") exit(0) hex_in = intelhex.IntelHex() hex_in.fromfile(in_file, format='hex') # Try to guess where application starts: first word contains the # application's stack base for app_start in ( 0x16000, # Version 7.1.0 of S110 SoftDevice 0x18000, # 8.0.0 0x1c000, # 1.0 S130 ): # Read first word (little-endian) try: w = hex_in.tobinarray(start=app_start, size=4) except intelhex.NotEnoughDataError: continue word = w[3] << 24 | w[2] << 16 | w[1] << 8 | w[0] # Assume stack pointer is at the end of RAM if word in ( 0x20004000, # 16K 0x20008000, # 32K ): start_address = app_start print("Found application at %x" % start_address) break if not start_address: print("Application start address not found") exit(2) hex_out = hex_in[start_address:] hex_out.tofile(out_file, format="hex")