summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2023-05-25 23:07:47 +0100
committerGitHub <noreply@github.com>2023-05-25 23:07:47 +0100
commit873922d98fea19f872ed8c5c79a20ed575ccff44 (patch)
tree6c9817d35e7a0d7b9f4f93007c47629b5c8f3ea0 /util
parented69d78f27a384bca11f2d815224083120941580 (diff)
Implement UF2 device type id extension tag (#21029)
Diffstat (limited to 'util')
-rwxr-xr-xutil/uf2conv.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/util/uf2conv.py b/util/uf2conv.py
index 52d3861cba..578b2b4977 100755
--- a/util/uf2conv.py
+++ b/util/uf2conv.py
@@ -151,10 +151,15 @@ class Block:
flags = 0x0
if familyid:
flags |= 0x2000
+ if devicetype:
+ flags |= 0x8000
hd = struct.pack("<IIIIIIII",
UF2_MAGIC_START0, UF2_MAGIC_START1,
flags, self.addr, 256, blockno, numblocks, familyid)
hd += self.bytes[0:256]
+ if devicetype:
+ hd += bytearray(b'\x08\x29\xa7\xc8')
+ hd += bytearray(devicetype.to_bytes(4, 'little'))
while len(hd) < 512 - 4:
hd += b"\x00"
hd += struct.pack("<I", UF2_MAGIC_END)
@@ -283,6 +288,8 @@ def main():
parser.add_argument('-f', '--family', dest='family', type=str,
default="0x0",
help='specify familyID - number or name (default: 0x0)')
+ parser.add_argument('-t' , '--device-type', dest='devicetype', type=str,
+ help='specify deviceTypeID extension tag - number')
parser.add_argument('-o', '--output', metavar="FILE", dest='output', type=str,
help='write output to named file; defaults to "flash.uf2" or "flash.bin" where sensible')
parser.add_argument('-d', '--device', dest="device_path",
@@ -312,6 +319,9 @@ def main():
except ValueError:
error("Family ID needs to be a number or one of: " + ", ".join(families.keys()))
+ global devicetype
+ devicetype = int(args.devicetype, 0) if args.devicetype else None
+
if args.list:
list_drives()
else: