Script for https://github.com/espressif/qemu/issues/76

June 15, 2023 ยท View on GitHub

import argparse import binascii import sys

def main(): parser = argparse.ArgumentParser(description="Generate efuse binary") parser.add_argument( "--mac", type=str, default="11:22:33:44:55:66", help="MAC address to use" ) parser.add_argument("output_file", type=argparse.FileType("wb"), help="Output file") args = parser.parse_args()

mac_addr_str = args.mac
mac_addr = binascii.unhexlify(mac_addr_str.replace(":", ""))
mac_addr_crc = calc_mac_addr_crc(mac_addr)

efuse_data = bytearray(124)

# MAC address
efuse_data[4:10] = mac_addr[::-1]
efuse_data[10] = mac_addr_crc

# Chip revision bits
efuse_data[13] = 0x80
efuse_data[22] = 0x10

args.output_file.write(efuse_data)

def calc_mac_addr_crc(mac_addr): i = 0 j = 0 crc = 0 length = len(mac_addr)

while length > 0:
    length -= 1
    crc = crc ^ mac_addr[j]
    j += 1

    for i in range(8):
        if (crc) & 0x01:
            crc = ((crc >> 1) ^ (0x8C)) & 0xFF
        else:
            crc = (crc >> 1) & 0xFF

return crc

if name == "main": sys.exit(main())