Raspberry Pi LED Wiring


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
  • Verify Pi 3B+ header and mounting-hole geometry
  • Review trace widths, ground return paths, connector labels, and top-side assembly
  • Generate manufacturing files only after those checks pass
Review board state
Check ERC and DRC
Verify HAT mechanics
Prepare fabrication checklist

Firmware Getting Started
Pin Mapping

Table


FunctionBCM GPIOPhysical pinPeripheral
Strip 1 data1812PWM0
Strip 2 data1333PWM1
Ring data1019SPI0 MOSI
  1. Configure both strips as channel 0 and channel 1 of one rpi_ws281x PWM instance.
  2. Drive the ring with a dedicated SPI WS2812 encoder using /dev/spidev0.0 or a compatible SPI library.
  3. Serialize updates if testing finds clock/DMA contention; keep all three outputs independently addressable in the application model.
Raspberry Pi Configuration
  • Enable SPI: sudo raspi-config -> Interface Options -> SPI.
  • Reserve SPI0 exclusively for the ring.
  • 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
  1. Start with all pixel buffers black/off.
  2. Initialize the dual-channel PWM driver.
  3. Initialize SPI0 at the encoder's required bit rate.
  4. Transmit an all-off frame to each output.
  5. 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.
  • Pin Mapping

  • Recommended Software Architecture

  • Raspberry Pi Configuration

  • Startup Sequence

  • Dependencies

  • Validation Notes