~ruther/qmk_firmware

873922d98fea19f872ed8c5c79a20ed575ccff44 — Joel Challis 2 years ago ed69d78
Implement UF2 device type id extension tag (#21029)

2 files changed, 12 insertions(+), 1 deletions(-)

M builddefs/common_rules.mk
M util/uf2conv.py
M builddefs/common_rules.mk => builddefs/common_rules.mk +2 -1
@@ 152,6 152,7 @@ endif
# To produce a UF2 file in your build, add to your keyboard's rules.mk:
#      FIRMWARE_FORMAT = uf2
UF2CONV = $(TOP_DIR)/util/uf2conv.py
UF2CONV_ARGS ?=
UF2_FAMILY ?= 0x0

# Compiler flags to generate dependency files.


@@ 219,7 220,7 @@ gccversion :
	@$(BUILD_CMD)

%.uf2: %.elf
	$(eval CMD=$(HEX) $< $(BUILD_DIR)/$(TARGET).tmp && $(UF2CONV) $(BUILD_DIR)/$(TARGET).tmp --output $@ --convert --family $(UF2_FAMILY) >/dev/null 2>&1)
	$(eval CMD=$(HEX) $< $(BUILD_DIR)/$(TARGET).tmp && $(UF2CONV) $(UF2CONV_ARGS) $(BUILD_DIR)/$(TARGET).tmp --output $@ --convert --family $(UF2_FAMILY) >/dev/null 2>&1)
	#@$(SILENT) || printf "$(MSG_EXECUTING) '$(CMD)':\n"
	@$(SILENT) || printf "$(MSG_UF2) $@" | $(AWK_CMD)
	@$(BUILD_CMD)

M util/uf2conv.py => util/uf2conv.py +10 -0
@@ 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:

Do not follow this link