The completion executor finished its correction/routing pass. Before that pass, I confirmed the board was 65 × 56.5 mm but had an out-of-bounds Pi header, overlapping copper, severe congestion, and 19 unrouted connections.
Remaining
Independently inspect the executor’s final placement and routing
Re-run ERC/DRC to confirm zero airwires, overlaps, and out-of-bounds parts
Verify Pi 3B+ header and mounting-hole geometry
I can’t perform those final checks because no ACUs are currently available.
Received notification from "Raspberry Pi HAT PCB" that it finished — picking the work back up.
The Raspberry Pi HAT PCB executor reports the correction/routing pass completed, but I cannot independently inspect or reconcile the resulting board because the account currently has no available ACUs.
Still required before fabrication:
Re-run ERC/DRC and confirm zero airwires, shorts, overlaps, and out-of-bounds items
Disable onboard PWM analog audio when using PWM LED output; USB or HDMI audio is preferred.
On Raspberry Pi 3, add core_freq=250 to /boot/config.txt (or the active firmware config path for the installed OS) for stable SPI timing.
Use the rpi_ws281x default/safe DMA selection for Pi 3 and avoid DMA channel 5.
Startup Sequence
Start with all pixel buffers black/off.
Initialize the dual-channel PWM driver.
Initialize SPI0 at the encoder's required bit rate.
Transmit an all-off frame to each output.
Test one output at a time at low brightness, then test simultaneous updates.
Dependencies
rpi-ws281x / rpi_ws281x for the two PWM channels.
Python spidev or equivalent SPI WS2812 encoding library for GPIO10.
Run with the permissions required by the selected library; add the service user to appropriate gpio/spi groups where supported.
Validation Notes
A single rpi_ws281x PWM instance is the supported method for two simultaneous PWM strings. PWM plus an independent SPI driver is the intended three-output architecture, but must be bench-tested against the exact Pi OS, kernel, and library versions before deployment.