First commit

This commit is contained in:
superminaren 2026-05-05 23:39:23 +02:00
commit 0c0cb55450
2 changed files with 120 additions and 0 deletions

0
README.md Normal file
View File

120
rp2040_badge_pinout.md Normal file
View File

@ -0,0 +1,120 @@
# RP2040 Connection List — Securityfest Badge 2026
A programmer-friendly breakdown of how the RP2040 (U2) is wired on the badge.
## 🔌 Programming & Debug
| Function | RP2040 Pin | Notes |
|---|---|---|
| **USB-C (J2)** | USB_DM (46), USB_DP (47) | Primary way to flash firmware (UF2 bootloader / picotool / PlatformIO) |
| **BOOTSEL button (SW3)** | Pulls QSPI_CS low | Hold while plugging in USB or while pressing RESET to enter UF2 bootloader |
| **RESET button (SW1)** | RUN (26) | Pulls RUN to GND through R6 (330 Ω) |
| **SWCLK test point** | SWCLK (24) | For SWD debugging (e.g. with a Picoprobe / J-Link) |
| **SWDIO test point** | SWDIO (25) | Same — these are exposed as test pads, not a header |
| **Crystal X1** | XIN (20), XOUT (21) | External clock source |
To flash: hold `BOOTSEL`, press and release `RESET`, release `BOOTSEL` → device shows up as `RPI-RP2` mass storage.
## 🎮 Buttons (all active-LOW, enable internal pull-ups)
| GPIO | Pin | Function | Schematic Net |
|---|---|---|---|
| GPIO9 | 12 | **A** button (SW2) | RP_BTN_A |
| GPIO10 | 13 | **B** button (SW4) | RP_BTN_B |
| GPIO11 | 14 | **Up** (SW5) | RP_BTN_UP |
| GPIO12 | 15 | **Down** (SW8) | RP_BTN_DWN |
| GPIO13 | 16 | **Left** (SW6) | RP_BTN_LFT |
| GPIO14 | 17 | **Right** (SW7) | RP_BTN_RGT |
All buttons short to GND when pressed — there are no external pull-ups, so configure with `gpio_pull_up()` (or equivalent in your SDK).
## 💡 LEDs
| GPIO | Pin | Function | Notes |
|---|---|---|---|
| GPIO15 | 18 | **Flashlight LEDs** (FLED13) | Drives MOSFET Q1 gate (FL_LED net). Set HIGH to turn on. |
| GPIO23 | 35 | Front LED 1 | Direct drive |
| GPIO24 | 36 | Front LED 2 | Direct drive |
| GPIO25 | 37 | Front LED 3 | Direct drive |
| GPIO26 / ADC0 | 38 | Front LED 4 | Direct drive (ADC capable but used as LED) |
## 🟦 LED Matrix (9×9 Charlieplex via IS31FL3731)
The 9×9 matrix is driven by the IS31FL3731 (U1). You don't talk to the LEDs directly — you talk to the chip over a **dedicated I²C bus**:
| GPIO | Pin | Function |
|---|---|---|
| GPIO2 | 4 | **SDA_LED** → IS31FL3731 SDA |
| GPIO3 | 5 | **SCL_LED** → IS31FL3731 SCL |
The IS31FL3731 has its `AD` pin tied to GND, so its I²C address is `0x74`. There are existing libraries for this chip (CircuitPython, Adafruit, etc.).
## 🧩 Main I²C bus (shared with SAO + expansion header)
| GPIO | Pin | Function |
|---|---|---|
| GPIO4 | 6 | **SDA** (4.7 kΩ pull-up via R29) |
| GPIO5 | 7 | **SCL** (4.7 kΩ pull-up via R28) |
## 🔧 SAO Connector (J3 — DEFCON Simple Add-On)
| RP2040 GPIO | SAO Pin |
|---|---|
| 3V3 | Power |
| GND | Ground |
| GPIO4 (SDA) | SDA |
| GPIO5 (SCL) | SCL |
| GPIO0 | SAO_GPIO1 |
| GPIO1 | SAO_GPIO2 |
GPIO0 and GPIO1 are also UART0 TX/RX by default — handy for a SAO that wants serial.
## 📍 Expansion Header (J1, 8-pin)
Exposes spare GPIOs and the main I²C bus:
| Pin | Net | RP2040 |
|---|---|---|
| 1 | +3V3 | — |
| 2 | GND | — |
| 3 | GP19 | GPIO19 (pin 30) |
| 4 | GP18 | GPIO18 (pin 29) |
| 5 | GP17 | GPIO17 (pin 28) |
| 6 | GP16 | GPIO16 (pin 27) |
| 7 | SCL | GPIO5 |
| 8 | SDA | GPIO4 |
GPIO1619 are great for SPI (SPI0: SCK=GP18, TX=GP19, RX=GP16, CS=GP17) if you want to add peripherals.
## 💾 External Flash (W25Q128JVS — 16 MB)
You normally don't touch these — the bootrom and SDK handle them — but for completeness:
| Function | RP2040 Pin |
|---|---|
| QSPI_CS | 56 |
| QSPI_SCLK | 52 |
| QSPI_SD0 | 53 |
| QSPI_SD1 | 55 |
| QSPI_SD2 | 54 |
| QSPI_SD3 | 51 |
## ⚡ Power
- **+3V3** rail comes from either the TPS63020 buck-boost (battery side) or the AP2112K-3.3 LDO (USB-C side), combined through a Schottky diode.
- All RP2040 power pins (IOVDD, DVDD, VREG_VIN, ADC_AVDD, USB_VDD) tie to +3V3 with local decoupling.
## 🚫 Unused / available GPIOs
These pins aren't wired to anything on the schematic — fair game for hacks, mods, or bodges:
`GPIO6, GPIO7, GPIO8, GPIO20, GPIO21, GPIO22, GPIO27 (ADC1), GPIO28 (ADC2), GPIO29 (ADC3)`
---
## Quick programming cheat-sheet
- USB CDC serial works out of the box on the USB-C port.
- Use `gpio_pull_up()` on all 6 button pins.
- Two I²C buses available — `i2c0`/`i2c1` mapping depends on your firmware, but **GPIO2/3 = LED matrix**, **GPIO4/5 = user/SAO bus**.
- ADC0 is already taken (front LED 4); ADC13 are free if you want analog inputs.