204 lines
8 KiB
Python
Executable file
204 lines
8 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
mcu_dict = {
|
|
52832: {
|
|
'flash_size': 290816,
|
|
'data_size': 51712,
|
|
'extra_flags': '-DNRF52832_XXAA -DNRF52',
|
|
'ldscript': 'nrf52832_s132_v6.ld',
|
|
'uf2_family': 0x00
|
|
},
|
|
52833: {
|
|
'flash_size': 286720,
|
|
'data_size': 106496,
|
|
'extra_flags': '-DNRF52833_XXAA {build.flags.usb}',
|
|
'ldscript': 'nrf52833_s140_v7.ld',
|
|
'uf2_family': '0x621E937A'
|
|
},
|
|
52840: {
|
|
'flash_size': 815104,
|
|
'data_size': 237568,
|
|
'extra_flags': '-DNRF52840_XXAA {build.flags.usb}',
|
|
'ldscript': 'nrf52840_s140_v6.ld',
|
|
'uf2_family': '0xADA52840'
|
|
}
|
|
}
|
|
|
|
|
|
def build_upload(mcu, name):
|
|
print("# Upload")
|
|
print(f"{name}.bootloader.tool=bootburn")
|
|
print(f"{name}.upload.tool=nrfutil")
|
|
print(f"{name}.upload.protocol=nrfutil")
|
|
if mcu == 52832:
|
|
print(f"{name}.upload.use_1200bps_touch=false")
|
|
print(f"{name}.upload.wait_for_upload_port=false")
|
|
print(f"{name}.upload.native_usb=false")
|
|
else:
|
|
print(f"{name}.upload.use_1200bps_touch=true")
|
|
print(f"{name}.upload.wait_for_upload_port=true")
|
|
print(f"{name}.upload.maximum_size={mcu_dict[mcu]['flash_size']}")
|
|
print(f"{name}.upload.maximum_data_size={mcu_dict[mcu]['data_size']}")
|
|
print()
|
|
|
|
|
|
def build_header(mcu, name, variant, vendor_name, product_name, boarddefine, vid, pid_list):
|
|
prettyname = vendor_name + " " + product_name
|
|
print()
|
|
print("# -----------------------------------")
|
|
print(f"# {prettyname}")
|
|
print("# -----------------------------------")
|
|
print(f"{name}.name={prettyname}")
|
|
print()
|
|
|
|
print("# VID/PID for Bootloader, Arduino & CircuitPython")
|
|
for i in range(len(pid_list)):
|
|
print(f"{name}.vid.{i}={vid}")
|
|
print(f"{name}.pid.{i}={pid_list[i]}")
|
|
print()
|
|
|
|
build_upload(mcu, name)
|
|
|
|
print("# Build")
|
|
print(f"{name}.build.mcu=cortex-m4")
|
|
print(f"{name}.build.f_cpu=64000000")
|
|
print(f"{name}.build.board={boarddefine}")
|
|
print(f"{name}.build.core=nRF5")
|
|
print(f"{name}.build.variant={variant}")
|
|
print(f'{name}.build.usb_manufacturer="{vendor_name}"')
|
|
print(f'{name}.build.usb_product="{product_name}"')
|
|
|
|
mcu_info = mcu_dict[mcu]
|
|
print(f"{name}.build.extra_flags={mcu_info['extra_flags']}")
|
|
print(f"{name}.build.ldscript={mcu_info['ldscript']}")
|
|
print(f"{name}.build.openocdscript=scripts/openocd/daplink_nrf52.cfg")
|
|
if mcu != 52832:
|
|
print(f"{name}.build.vid={vid}")
|
|
print(f"{name}.build.pid={pid_list[0]}")
|
|
print(f"{name}.build.uf2_family={mcu_info['uf2_family']}")
|
|
print()
|
|
|
|
|
|
def build_softdevice(mcu, name):
|
|
print("# Menu: SoftDevice")
|
|
if mcu == 52832:
|
|
print(f"{name}.menu.softdevice.s132v6=S132 6.1.1")
|
|
print(f"{name}.menu.softdevice.s132v6.build.sd_name=s132")
|
|
print(f"{name}.menu.softdevice.s132v6.build.sd_version=6.1.1")
|
|
print(f"{name}.menu.softdevice.s132v6.build.sd_fwid=0x00B7")
|
|
elif mcu == 52833:
|
|
print(f"{name}.menu.softdevice.s140v7=S140 7.3.0")
|
|
print(f"{name}.menu.softdevice.s140v7.build.sd_name=s140")
|
|
print(f"{name}.menu.softdevice.s140v7.build.sd_version=7.3.0")
|
|
print(f"{name}.menu.softdevice.s140v7.build.sd_fwid=0x0123")
|
|
elif mcu == 52840:
|
|
print(f"{name}.menu.softdevice.s140v6=S140 6.1.1")
|
|
print(f"{name}.menu.softdevice.s140v6.build.sd_name=s140")
|
|
print(f"{name}.menu.softdevice.s140v6.build.sd_version=6.1.1")
|
|
print(f"{name}.menu.softdevice.s140v6.build.sd_fwid=0x00B6")
|
|
print()
|
|
|
|
|
|
def build_debug(name):
|
|
print("# Menu: Debug Level")
|
|
print(f"{name}.menu.debug.l0=Level 0 (Release)")
|
|
print(f"{name}.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0")
|
|
print(f"{name}.menu.debug.l1=Level 1 (Error Message)")
|
|
print(f"{name}.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1")
|
|
print(f"{name}.menu.debug.l2=Level 2 (Full Debug)")
|
|
print(f"{name}.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2")
|
|
print(f"{name}.menu.debug.l3=Level 3 (Segger SystemView)")
|
|
print(f"{name}.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3")
|
|
print(f"{name}.menu.debug.l3.build.sysview_flags=-DCFG_SYSVIEW=1")
|
|
print()
|
|
|
|
|
|
def build_debug_output(name):
|
|
print("# Menu: Debug Port")
|
|
print(f"{name}.menu.debug_output.serial=Serial")
|
|
print(f"{name}.menu.debug_output.serial.build.logger_flags=-DCFG_LOGGER=0")
|
|
print(f"{name}.menu.debug_output.serial1=Serial1")
|
|
print(f"{name}.menu.debug_output.serial1.build.logger_flags=-DCFG_LOGGER=1 -DCFG_TUSB_DEBUG=CFG_DEBUG")
|
|
print(f"{name}.menu.debug_output.rtt=Segger RTT")
|
|
print(f"{name}.menu.debug_output.rtt.build.logger_flags=-DCFG_LOGGER=2 -DCFG_TUSB_DEBUG=CFG_DEBUG -DSEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL")
|
|
|
|
|
|
def build_global_menu():
|
|
print("menu.softdevice=SoftDevice")
|
|
print("menu.debug=Debug Level")
|
|
print("menu.debug_output=Debug Port")
|
|
|
|
|
|
def make_board(mcu, name, variant, vendor_name, product_name, boarddefine, vid, pid_list):
|
|
build_header(mcu, name, variant, vendor_name, product_name, boarddefine, vid, pid_list)
|
|
build_softdevice(mcu, name)
|
|
build_debug(name)
|
|
build_debug_output(name)
|
|
|
|
|
|
# ------------------------------
|
|
# main
|
|
# ------------------------------
|
|
build_global_menu()
|
|
|
|
# ------------------------------
|
|
# Adafruit Boards
|
|
# ------------------------------
|
|
|
|
adafruit_boards_list = [
|
|
[52832, "feather52832", "feather_nrf52832", "Adafruit", "Feather nRF52832", "NRF52832_FEATHER",
|
|
"0x239A", []],
|
|
|
|
[52840, "feather52840", "feather_nrf52840_express", "Adafruit", "Feather nRF52840 Express", "NRF52840_FEATHER",
|
|
"0x239A", ["0x8029", "0x0029", "0x002A", "0x802A"]],
|
|
|
|
[52840, "feather52840sense", "feather_nrf52840_sense", "Adafruit", "Feather nRF52840 Sense", "NRF52840_FEATHER_SENSE",
|
|
"0x239A", ["0x8087", "0x0087", "0x0088", "0x8088"]],
|
|
|
|
[52840, "feather_nrf52840_sense_tft", "feather_nrf52840_sense_tft", "Adafruit", "Feather nRF52840 Sense TFT", "NRF52840_FEATHER_SENSE_TFT",
|
|
"0x239A", ["0x8087", "0x0087", "0x0088", "0x8088"]], # TODO shared VID with sense for now
|
|
|
|
[52840, "itsybitsy52840", "itsybitsy_nrf52840_express", "Adafruit", "ItsyBitsy nRF52840 Express", "NRF52840_ITSYBITSY -DARDUINO_NRF52_ITSYBITSY",
|
|
"0x239A", ["0x8051", "0x0051", "0x0052", "0x8052"]],
|
|
|
|
[52840, "cplaynrf52840", "circuitplayground_nrf52840", "Adafruit", "Circuit Playground Bluefruit", "NRF52840_CIRCUITPLAY",
|
|
"0x239A", ["0x8045", "0x0045", "0x8046"]],
|
|
|
|
[52840, "cluenrf52840", "clue_nrf52840", "Adafruit", "CLUE", "NRF52840_CLUE",
|
|
"0x239A", ["0x8071", "0x0071", "0x8072"]],
|
|
|
|
[52840, "ledglasses_nrf52840", "ledglasses_nrf52840", "Adafruit", "LED Glasses Driver nRF52840", "NRF52840_LED_GLASSES",
|
|
"0x239A", ["0x810D", "0x010D", "0x810E"]],
|
|
|
|
[52840, "mdbt50qrx", "raytac_mdbt50q_rx", "Raytac", "nRF52840 Dongle", "MDBT50Q_RX",
|
|
"0x239A", ["0x810B", "0x010B", "0x810C"]],
|
|
|
|
[52840, "metro52840", "metro_nrf52840_express", "Adafruit", "Metro nRF52840 Express", "NRF52840_METRO",
|
|
"0x239A", ["0x803F", "0x003F", "0x0040", "0x8040"]],
|
|
|
|
# [52833, "feather52833", "feather_nrf52833_express", "Adafruit", "Feather nRF52833 Express", "NRF52833_FEATHER",
|
|
# "0x239A", ["0x8029", "0x0029", "0x002A", "0x802A"]],
|
|
]
|
|
|
|
for b in adafruit_boards_list:
|
|
make_board(*b)
|
|
|
|
# ------------------------------
|
|
# 3rd Party Boards
|
|
# ------------------------------
|
|
|
|
print()
|
|
print()
|
|
print("# -------------------------------------------------------")
|
|
print("# Boards that aren't made by Adafruit")
|
|
print("# and are not officially supported")
|
|
print("# -------------------------------------------------------")
|
|
|
|
thirdparty_boards_list = [
|
|
[52840, "pca10056", "pca10056", "Nordic", "nRF52840 DK", "NRF52840_PCA10056", "0x239A", ["0x80DA", "0x00DA"]],
|
|
[52833, "pca10100", "pca10100", "Nordic", "nRF52833 DK", "NRF52833_PCA10100", "0x239A", ["0x80D8", "0x00D8"]],
|
|
[52840, "particle_xenon", "particle_xenon", "Particle", "Xenon", "PARTICLE_XENON", "0x239A", ["0x80DA", "0x00DA"]],
|
|
]
|
|
|
|
for b in thirdparty_boards_list:
|
|
make_board(*b)
|