project
Adom Custom Electronic Load
Public Made by Adomby adom
Two-layer digitally controlled electronic-load prototype. Compact R11 is under active electrical, cooling and probe-access review; not a manufacturing release.
← Commit history
Reject stale-high latch on ARM and record tested output-locked rebuild
6 files changed
+874−18
build/stm32-bringup/build-manifest.jsonadded+828@@ -0,0 +1,828 @@+{+ "status": "compiled-only-output-locked",+ "flashed": false,+ "physical_usb_verified": false,+ "load_enable_supported": false,+ "production_boot_freshness": false,+ "lab_boot_id": "lab20261009bringup",+ "vid": 51966,+ "pid": 16385,+ "toolchain": "arm-none-eabi-gcc (15:13.2.rel1-2) 13.2.1 20231009",+ "dependencies": {+ "tinyusb": {+ "commit": "5f3d88cdbe87ede4fcaddc6a095dcf2edb100f65",+ "url": "https://github.com/hathach/tinyusb.git"+ },+ "cmsis_device_g0": {+ "commit": "f484fe852535f913a02ee79787eafa74dd7f9488",+ "url": "https://github.com/STMicroelectronics/cmsis_device_g0.git"+ },+ "stm32g0xx_hal_driver": {+ "commit": "a248a9e484d58943b46c68f6c49b4b276778bd59",+ "url": "https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git"+ },+ "CMSIS_5": {+ "commit": "2b7495b8535bdcb306dac29b9ded4cfb679d7e5c",+ "url": "https://github.com/ARM-software/CMSIS_5.git"+ }+ },+ "sources": {+ "firmware/fan_tach.c": "844f00c1f77e39529bd8f667d543ecee187ff4fe91108aedb7a2c36eb22846fa",+ "firmware/fan_tach.h": "20fc7b0bbb1a040dfd0453e3af22cf62e7a564241c28cf9cd08dd9b6d87ddf80",+ "firmware/instruments.h": "1bcd895abf8fe74c5a96028b8b559eafdff0919e970244d4445ccbd72b7a6ee6",+ "firmware/load_core.c": "85017ff0a3e37e7b5e41604989326fe623e7f73427ecd8e1a29c63a38d003638",+ "firmware/load_core.h": "408263af21e6c15e82f4118343a2b7d0dd2db61808754c0b91021acd1146fadf",+ "firmware/load_protocol.c": "208d7e7fb9a05da31c3c200b018f5b188e53ac3d95ac2288a61f683b4f3df1af",+ "firmware/load_protocol.h": "f64f6b689d57501031515e8ee9f8c8349a2cea63738e73db16f95e747caf91fb",+ "firmware/stm32/README.md": "da1875c99b20608e8bdb6bba59d3a3dc045261cfa5bbcf2df1792089f31f4dc4",+ "firmware/stm32/clock.c": "f42f5c1ff229b065a048218ecc575624276aaa229e0bc340d80c80eec35416d2",+ "firmware/stm32/dependencies.json": "7e8f3c17a59c856371a9f411dce6a9dadafbb8c8edd5ede5e4e5cf46b1567e92",+ "firmware/stm32/fan_input.c": "d4ebe5572dbbcd1a3ea84c4e31442732a7237e94d554ec8acdc07142486e92f8",+ "firmware/stm32/fan_input.h": "6dc99727c0e3aa5f711cdfd00b4c53d7bf123ad6698bbe842a64ec6b7d87e77b",+ "firmware/stm32/licenses/CMSIS_5-LICENSE.txt": "b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1",+ "firmware/stm32/licenses/cmsis_device_g0-LICENSE.txt": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",+ "firmware/stm32/licenses/stm32g0xx_hal_driver-LICENSE.txt": "3564c849dfd5e628732afb7933ccb1c983b53f7ac6bb237b6177691339082671",+ "firmware/stm32/licenses/tinyusb-LICENSE.txt": "b01185698f530f4f61b28f42d5a4d6bbe7834bde6a63f00773235628a7bdce22",+ "firmware/stm32/main.c": "522b0960564c91dca05b876f0ab05aad4707ac57fb5190b623f7e8e92f3ef84d",+ "firmware/stm32/stm32g0b1kc.ld": "1c938076e760300379115ee955589434dba7b84d1bb945dd41cf39abd342fd13",+ "firmware/stm32/stm32g0xx_hal_conf.h": "2e2a3aed4bf01ce3f890df69061e740369ed8839bb53d5b1be745be4de185b6f",+ "firmware/stm32/syscalls.c": "bbfcedecfe5f33380424ab90cdb89c842c6a5717e01298a29ec43aef24c1524d",+ "firmware/stm32/tusb_config.h": "dfbb343cc609aa2693058b7d7e6e6c487524222cbe3eab5296568eca0b7d3970",+ "firmware/stm32/usb_descriptors.c": "ed2666d7115f05a07088dd92ebf35a600aadd8d9878fae2eb7635201b8f0b2a9",+ "tools/build_stm32_bringup.py": "20f8d74fa7bfc8d3ea9a4ba5fce1b912b98a88389285111ff70d58fde4aa93f2"+ },+ "artifacts": {+ "adom-load-bringup.hex": "1ee596b32a04a79ea6994515f4bc4d7e50e9c6afa037a40a65864f95d53b2e55",+ "adom-load-bringup.bin": "2f4b39f60ba4e6cd5af8de22b2224af326ea31ea9eafc68992a42e50531b734a",+ "adom-load-bringup.map": "38255082269a58d4b152f41c2cc6d3a7962eada683b12971c69e3541cdc08ab6",+ "adom-load-bringup.elf": "9ef8fce195c337c3e47d37be92f47b64cd6f189a4b57df7e1d72b5a441c2852e"+ },+ "commands": [+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/load_core.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/00-load_core.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/load_protocol.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/01-load_protocol.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/fan_tach.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/02-fan_tach.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/stm32/fan_input.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/03-fan_input.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/stm32/main.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/04-main.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/stm32/clock.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/05-clock.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/stm32/usb_descriptors.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/06-usb_descriptors.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-std=c11",+ "-Werror",+ "-c",+ "/home/adom/project/adom-custom-electronic-load/firmware/stm32/syscalls.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/07-syscalls.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/src/tusb.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/08-tusb.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/src/common/tusb_fifo.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/09-tusb_fifo.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/src/device/usbd.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/10-usbd.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/src/class/cdc/cdc_device.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/11-cdc_device.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/12-dcd_stm32_fsdev.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/src/portable/st/stm32_fsdev/fsdev_common.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/13-fsdev_common.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/14-stm32g0xx_hal.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_cortex.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/15-stm32g0xx_hal_cortex.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_pwr.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/16-stm32g0xx_hal_pwr.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_pwr_ex.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/17-stm32g0xx_hal_pwr_ex.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_rcc.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/18-stm32g0xx_hal_rcc.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_rcc_ex.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/19-stm32g0xx_hal_rcc_ex.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_gpio.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/20-stm32g0xx_hal_gpio.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Source/Templates/system_stm32g0xx.c",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/21-system_stm32g0xx.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-Os",+ "-g3",+ "-ffunction-sections",+ "-fdata-sections",+ "-fno-common",+ "-fstack-usage",+ "-Wall",+ "-Wextra",+ "-DSTM32G0B1xx",+ "-DUSE_HAL_DRIVER",+ "-DADOM_BRINGUP_OUTPUT_LOCK=1",+ "-DADOM_USB_VID=51966",+ "-DADOM_USB_PID=16385",+ "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+ "-I/home/adom/project/adom-custom-electronic-load/firmware",+ "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+ "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+ "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+ "-c",+ "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Source/Templates/gcc/startup_stm32g0b1xx.s",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/22-startup_stm32g0b1xx.o"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+ "-mcpu=cortex-m0plus",+ "-mthumb",+ "-nostartfiles",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/00-load_core.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/01-load_protocol.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/02-fan_tach.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/03-fan_input.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/04-main.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/05-clock.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/06-usb_descriptors.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/07-syscalls.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/08-tusb.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/09-tusb_fifo.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/10-usbd.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/11-cdc_device.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/12-dcd_stm32_fsdev.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/13-fsdev_common.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/14-stm32g0xx_hal.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/15-stm32g0xx_hal_cortex.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/16-stm32g0xx_hal_pwr.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/17-stm32g0xx_hal_pwr_ex.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/18-stm32g0xx_hal_rcc.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/19-stm32g0xx_hal_rcc_ex.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/20-stm32g0xx_hal_gpio.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/21-system_stm32g0xx.o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/22-startup_stm32g0b1xx.o",+ "-T",+ "/home/adom/project/adom-custom-electronic-load/firmware/stm32/stm32g0b1kc.ld",+ "-Wl,--gc-sections,--print-memory-usage",+ "-Wl,-Map=/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.map",+ "-L/home/adom/project/adom-load-firmware-toolchain/root/usr/lib/arm-none-eabi/newlib/thumb/v6-m/nofp",+ "-Wl,--start-group",+ "-lc",+ "-lm",+ "-lnosys",+ "-lgcc",+ "-Wl,--end-group",+ "-o",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-objcopy",+ "-O",+ "ihex",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.hex"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-objcopy",+ "-O",+ "binary",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.bin"+ ],+ [+ "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-size",+ "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf"+ ]+ ]+}
docs/status.md+6@@ -1,3 +1,9 @@+# Current checkpoint - 2026-10-09, 20:10 UTC++Board 18 remains unchanged and native-connected. A separate package cooling calculator and chart now expose contact-area conversion, package/interface/sink resistance, and the difference between a ducted-flow scenario and installed fan performance. Three numerical unit/energy-balance checks pass. This sensitivity study does not pass the thermal gate or qualify a selected assembly. See [package cooling review](package-cooling-review.md).++Firmware ARM now rejects a hardware latch that was already high before the request. The verified low-to-high handshake is covered in both the core and framed-protocol tests. Sanitizer-backed C suites and 20 Python tests pass. The output-locked STM32 image rebuilds at 64,600 flash bytes and 23,968 reserved/used RAM bytes; no flash or physical testing occurred.+ # Current checkpoint - 2026-10-09, 18:19 UTC The nine reviewed D1 thermal vias are now landed, native-saved and adopted by AIFlow. The actual saved board has zero native DRC errors and zero opens, with 15 existing library warnings. Six via coordinates differ from the offline generator by at most one nanometre per axis; this is explicitly audited, not called exact equality. Other track/via geometry matches, and filled-zone differences are below 0.000001 mm2. Both native 2D and 3D views were inspected. Formal Fields/current/thermal and finish gates remain incomplete.
firmware/load_core.c+3−1@@ -29,7 +29,9 @@ void load_off(load_core *c){c->enable=false;c->dac_code=0;c->applied_a=0;c->requ bool load_set_current(load_core *c,float a){if(!isfinite(a)||a<0||a>3)return false;c->requested_a=a;return true;} void load_heartbeat(load_core *c,uint32_t now){c->lease_ms=now;} bool load_arm(load_core *c,const load_sample *s){- if(c->state!=LOAD_OFF || !s->assembly_qualified || checks(c,s))return false;+ /* A pre-existing high latch is not acknowledgement of this ARM request.+ The adapter must first verify reset low, then pulse ARM_CLK and observe high. */+ if(c->state!=LOAD_OFF || s->latch_q || !s->assembly_qualified || checks(c,s))return false; c->state=LOAD_ARMED;c->last_tick_ms=s->now_ms;c->arm_started_ms=s->now_ms;return true; } bool load_clear_fault(load_core *c,const load_sample *s){
firmware/stm32/README.md+4@@ -42,3 +42,7 @@ This is compiled integration, not a measured fan test. Confirm the fan's pulse count, external pull-up, oscillator accuracy, ISR latency under USB traffic, disconnect/stuck-wire behavior and physical stall response on the actual board. No fan drive, load-enable, or assembly qualification is introduced by this input.++## ARM acknowledgement freshness++The portable core refuses ARM if the sampled hardware latch is already high. A new ARM sequence requires a verified low latch before the adapter pulses ARM_CLK, then a high acknowledgement within the existing 100 ms timeout. Stale-high latch state cannot authorize a new run. Host core and framed-protocol tests cover this refusal and the normal low-to-high transition. The output-locked MCU image still never executes the functional handshake, and hardware verification remains required.
tests/test_load_core.c+28−17@@ -3,48 +3,59 @@ #include <math.h> #include <stdio.h> static load_sample good(uint32_t t){return (load_sample){.now_ms=t,.sample_ms=t,.last_tach_ms=t,.fan_rpm=7000,.fan_rpm_valid=true,.volts=5,.amps=0,.case_c=25,.sensors_valid=true,.hw_ok=true,.latch_q=true,.assembly_qualified=true};}+/* Existing policy cases begin after the adapter has verified latch reset. */+static bool arm_from_low(load_core *c,load_sample *s){s->latch_q=false;return load_arm(c,s);} int main(void){ load_core c;load_init(&c,0);load_sample s=good(0); assert(!c.enable&&c.dac_code==0);+ /* Stale high acknowledgement must not authorize a new run. */+ assert(!load_arm(&c,&s));assert(c.state==LOAD_OFF&&!c.enable&&!c.dac_code);+ s.latch_q=false;assert(load_arm(&c,&s));+ s=good(10);s.latch_q=false;load_tick(&c,&s);+ assert(c.state==LOAD_ARMED&&!c.enable&&!c.dac_code);+ s=good(20);load_tick(&c,&s);assert(c.state==LOAD_RUNNING);+ load_off(&c);s=good(30);assert(!load_arm(&c,&s));+ load_init(&c,0);s=good(0);+ assert(!load_set_current(&c,NAN));assert(!load_set_current(&c,INFINITY));assert(!load_set_current(&c,3.01f));assert(!load_set_current(&c,-1));- s.assembly_qualified=false;assert(!load_arm(&c,&s));s.assembly_qualified=true;- assert(load_set_current(&c,3));assert(load_arm(&c,&s));+ s.assembly_qualified=false;assert(!arm_from_low(&c,&s));s.assembly_qualified=true;+ assert(load_set_current(&c,3));assert(arm_from_low(&c,&s)); for(unsigned t=10;t<=1000;t+=10){s=good(t);load_heartbeat(&c,t);load_tick(&c,&s);} assert(c.applied_a<=1.001f&&c.applied_a>.99f); /* 5W bring-up ceiling */ s=good(1010);s.volts=24;load_tick(&c,&s);assert(c.applied_a<=5.0f/24); s=good(1020);s.hw_ok=false;load_tick(&c,&s);assert(c.state==LOAD_FAULT&&!c.enable&&!c.dac_code); s=good(1030);load_tick(&c,&s);assert(c.state==LOAD_FAULT);assert(!load_clear_fault(&c,&s)); s.latch_q=false;assert(load_clear_fault(&c,&s));assert(c.state==LOAD_OFF);- assert(load_arm(&c,&s));s=good(1040);s.sample_ms=900;load_tick(&c,&s);assert(c.faults&F_SENSOR);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);s.case_c=NAN;load_tick(&c,&s);assert(c.faults&F_SENSOR);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(1001);load_tick(&c,&s);assert(c.faults&F_LINK);- load_init(&c,UINT32_MAX-10);s=good(UINT32_MAX-10);assert(load_arm(&c,&s));s=good(5);load_tick(&c,&s);assert(c.state==LOAD_RUNNING); /* clock wrap */- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));+ assert(arm_from_low(&c,&s));s=good(1040);s.sample_ms=900;load_tick(&c,&s);assert(c.faults&F_SENSOR);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(10);s.case_c=NAN;load_tick(&c,&s);assert(c.faults&F_SENSOR);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(1001);load_tick(&c,&s);assert(c.faults&F_LINK);+ load_init(&c,UINT32_MAX-10);s=good(UINT32_MAX-10);assert(arm_from_low(&c,&s));s=good(5);load_tick(&c,&s);assert(c.state==LOAD_RUNNING); /* clock wrap */+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s)); for(unsigned t=10;t<=260;t+=10){s=good(t);s.last_tach_ms=0;load_tick(&c,&s);}assert(c.faults&F_FAN);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);s.case_c=55;load_tick(&c,&s);assert(c.faults&F_THERMAL);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);load_tick(&c,&s);s=good(20);s.latch_q=false;load_tick(&c,&s);assert(c.faults&F_HARDWARE);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(10);s.case_c=55;load_tick(&c,&s);assert(c.faults&F_THERMAL);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(10);load_tick(&c,&s);s=good(20);s.latch_q=false;load_tick(&c,&s);assert(c.faults&F_HARDWARE); /* Fan evidence must be qualified before arm, and stays required while running. */ const float bad_rpm[]={0,4999,10001,NAN,INFINITY}; for(unsigned i=0;i<sizeof(bad_rpm)/sizeof(bad_rpm[0]);i++){- load_init(&c,0);s=good(0);s.fan_rpm=bad_rpm[i];assert(!load_arm(&c,&s));- s=good(0);assert(load_arm(&c,&s));s=good(10);s.fan_rpm=bad_rpm[i];load_tick(&c,&s);+ load_init(&c,0);s=good(0);s.fan_rpm=bad_rpm[i];assert(!arm_from_low(&c,&s));+ s=good(0);assert(arm_from_low(&c,&s));s=good(10);s.fan_rpm=bad_rpm[i];load_tick(&c,&s); assert(c.state==LOAD_FAULT&&(c.faults&F_FAN)&&!c.enable&&!c.dac_code); s=good(20);load_tick(&c,&s);assert(c.state==LOAD_FAULT); /* no automatic restart */ }- load_init(&c,0);s=good(0);s.fan_rpm_valid=false;assert(!load_arm(&c,&s));+ load_init(&c,0);s=good(0);s.fan_rpm_valid=false;assert(!arm_from_low(&c,&s)); load_init(&c,0); load_off(&c);assert(c.state==LOAD_OFF&&!c.enable&&c.requested_a==0); /* An analog-loop fault can violate actual power despite a low requested current. */- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s)); s=good(10);s.volts=24;s.amps=1;load_tick(&c,&s); assert(c.state==LOAD_FAULT&&(c.faults&F_ENVELOPE)&&!c.enable&&!c.dac_code);- load_init(&c,0);s=good(0);s.amps=1.09f;assert(load_arm(&c,&s));+ load_init(&c,0);s=good(0);s.amps=1.09f;assert(arm_from_low(&c,&s)); s=good(10);s.amps=1.11f;load_tick(&c,&s);assert(c.faults&F_ENVELOPE); /* Fresh heartbeats cannot keep an unacknowledged arm waiting indefinitely. */- load_init(&c,UINT32_MAX-50);s=good(UINT32_MAX-50);s.latch_q=false;assert(load_arm(&c,&s));+ load_init(&c,UINT32_MAX-50);s=good(UINT32_MAX-50);s.latch_q=false;assert(arm_from_low(&c,&s)); for(unsigned dt=10;dt<=100;dt+=10){s=good((UINT32_MAX-50)+dt);s.latch_q=false;load_heartbeat(&c,s.now_ms);load_tick(&c,&s);} assert(c.state==LOAD_FAULT&&(c.faults&F_HARDWARE)&&!c.enable&&!c.dac_code);- load_init(&c,0);s=good(0);c.power_limit_w=NAN;assert(!load_arm(&c,&s));- c.power_limit_w=25;assert(!load_arm(&c,&s)); /* Unqualified raised ceiling is refused. */+ load_init(&c,0);s=good(0);c.power_limit_w=NAN;assert(!arm_from_low(&c,&s));+ c.power_limit_w=25;assert(!arm_from_low(&c,&s)); /* Unqualified raised ceiling is refused. */ puts("load_core: safety policy tests passed (host C build; no MCU/HAL validation)"); }
tests/test_load_protocol.c+5@@ -40,6 +40,11 @@ int main(void){ for(size_t n=0;n<strlen(q);n++){init();s=sample(0);for(size_t i=0;i<n;i++)load_protocol_byte(&p,q[i],&s,reply,sizeof(reply));load_protocol_byte(&p,'\n',&s,reply,sizeof(reply));fault();} /* A serial field can never supply trusted assembly qualification. */ init();command(2,"claim","",0);command(3,"arm",",\"assembly_qualified\":true",0);fault();+ /* A fresh serial ARM still refuses hardware acknowledgement left high. */+ init();command(2,"claim","",0);s=sample(0);s.latch_q=true;+ q="{\"id\":3,\"cmd\":\"arm\",\"boot\":\"boot0001\",\"owner\":\"" OWNER "\"}\n";+ for(size_t i=0;q[i];i++)load_protocol_byte(&p,q[i],&s,reply,sizeof(reply));+ assert(strstr(reply,"arm_interlock"));fault(); init();command(2,"claim","",0);before=stops; assert(send("{\"id\":3,\"cmd\":\"arm\",\"boot\":\"boot9999\",\"owner\":\"" OWNER "\"}\n",0));fault();assert(stops>before); /* Bounded deterministic byte fuzz under ASan/UBSan, including 0xff and NUL. */