AnasSarkiz/rp2040-usb-c-single-axis-dm542t-motion-controller--01a0e89c

A USB‑C RP2040 controller board with external QSPI flash, crystal clock, regulated 3.3/1.1/5 V power, boost-converted motor-driver supply, protected USB and limit inputs, status LEDs, reset/boot switches, and AO3400A MOSFET outputs for stepper-control signals.

Version
0.1.0-prototype.19
License
unset
Stars
0

scripts/install-arm-toolchain.py

"""Extract official Arm 13.2.Rel1 for Cortex-M0+; omit unrelated multilib targets only."""
from pathlib import Path
import hashlib
import json
import shutil
import tarfile

archive_path = Path("firmware/vendor/arm-toolchain.tar.xz")
with tarfile.open(archive_path) as archive:
    members = []
    omitted = []
    for entry in archive.getmembers():
        relative = entry.name.split("/", 1)[-1]
        # RP2040 uses only thumb/v6-m/nofp. Keep binaries, headers, licenses,
        # docs, baseline libraries and the complete v6-m multilib directories.
        skip = False
        for prefix in ("arm-none-eabi/lib/thumb/", "lib/gcc/arm-none-eabi/13.2.1/thumb/"):
            if relative.startswith(prefix) and not relative[len(prefix):].startswith("v6-m"):
                skip = True
        if relative.startswith("arm-none-eabi/lib/arm/"):
            skip = True
        (omitted if skip else members).append(entry)
    size = sum(entry.size for entry in members)
    if size + 50_000_000 > shutil.disk_usage(".").free:
        raise SystemExit(f"Need {size + 50_000_000} bytes free for the RP2040 toolchain")
    archive.extractall("firmware/vendor", members=members, filter="data")
    Path("evidence/toolchain-install.json").write_text(json.dumps({
        "source": "https://developer.arm.com/-/media/Files/downloads/gnu/13.2.Rel1/binrel/arm-gnu-toolchain-13.2.Rel1-darwin-arm64-arm-none-eabi.tar.xz",
        "archive_sha256": hashlib.sha256(archive_path.read_bytes()).hexdigest(),
        "extracted_bytes": size,
        "multilib_targets": "baseline and thumb/v6-m/nofp; unrelated multilib targets omitted to fit available storage",
        "omitted_members": [entry.name for entry in omitted],
    }, indent=2) + "\n")
    print(f"Installed official compiler and RP2040 runtime ({size} bytes)")