Run before every release on a real board, and after core changes in the area. Sketches are in tests/sketches/ and platform/libraries/*/examples/. The checklist itself lives in tests/hardware-checklist.md; results are recorded in the changelog.
| 1 · (any sketch) | New board: SW1 to GND, reset, upload, SW1 backSketch runs; later uploads work with no buttons | Passed 10-05 |
| 2 · blink | No wiringLED blinks at 1 Hz | Passed 10-05 |
| 3 · sdk_only_blink | No wiringLED blinks at 2 Hz (pico-sdk calls only) | Passed 10-05 |
| 4 · serial_echo | Serial Monitor at 115200Banner appears; typed text echoes back | Passed 10-05 |
| 5 · (any sketch) | Upload twice from the IDESecond upload works without touching the board (1200-baud touch, then copy to RPI-RP2) | Passed 10-05 |
| 5b · (any sketch) | Board already in BOOTSEL (RPI-RP2 drive showing, no port)Upload without a port still works, using the IDE Upload button (tested with the IDE's built-in Blink example) | Passed 10-09 |
| 6 · analog_read | Jumper AREF (2.048 V) to each of A0–A5 in turnPhyduino Pico ┌───────────────┐ │ AREF 2.048 V ●├──┐ jumper │ A0 ●├──┘ │ A1 ●│ │ A2 ●│ move the jumper's free end │ A3 ●│ to A0, then A1 … A5, │ A4 ●│ one input at a time │ A5 ●│ └───────────────┘A0–A2 ≈ 2540 (3.3 V scale), A3–A5 = 4095 (2.048 V scale); only the jumpered input changes |
Passed 10-05 |
| 7 · pwm_fade | No wiringLED fades smoothly up and down | Passed 10-05 |
| 8 · interrupts | Button D2 → GNDPhyduino Pico ┌──────────────┐ button │ D2 ●├───────o o──────┐ │ │ │ │ GND ●├─────────────────┘ └──────────────┘Count goes up once per press |
Passed 10-05 |
| 9 · tone_test | Piezo on D8Phyduino Pico piezo ┌──────────────┐ ┌─────┐ │ D8 ●├──────┤+ │ │ GND ●├──────┤- │ └──────────────┘ └─────┘Eight-note scale |
Passed 10-09 |
| 9b · tone_loopback | Wire D8 → D2 (no buzzer needed)Phyduino Pico ┌──────────────┐ │ D8 ●├──┐ │ │ │ jumper │ D2 ●├──┘ └──────────────┘Measured ≈ set frequency, duty ≈ 50 %; timed tone playing at 100 ms, stopped at 300 ms |
Passed 10-05 |
| 10 · uart_loopback | Wire D1 → D0Phyduino Pico ┌──────────────┐ │ D1 TX ●├──┐ │ │ │ jumper │ D0 RX ●├──┘ └──────────────┘Counter values echo in the Serial Monitor |
Passed 10-05 |
| 10b · uart2_loopback | Wire D4 → D5Phyduino Pico ┌──────────────┐ │ D4 TX ●├──┐ │ │ │ jumper │ D5 RX ●├──┘ └──────────────┘Counter values echo in the Serial Monitor (Serial2) |
Passed 10-05 |
| 11 · SpiLoopback | Wire D11 → D12Phyduino Pico ┌──────────────┐ │ D11 MOSI ●├──┐ │ │ │ jumper │ D12 MISO ●├──┘ └──────────────┘received == sent |
Passed 10-05 |
| 12 · I2CScanner | Any I2C device on SDA / SCLPhyduino Pico I2C device (3.3 V) ┌──────────────────┐ ┌──────────┐ │ 3.3V ●├───────┤ VIN │ │ GND ●├───────┤ GND │ │ SDA (D18,GPIO24)●├───────┤ SDA │ │ SCL (D19,GPIO25)●├───────┤ SCL │ └──────────────────┘ └──────────┘ No pull-ups on the Phyduino; most breakouts have their own.Its address is listed (found BMP280 at 0x77, seesaw encoder at 0x36) |
Passed 10-08 |
| 13 · PeripheralReceiver | Second board running i2c_controller on SDA / SCL / GND (e.g. a Raspberry Pi Pico 2; 5 V boards such as the UNO R4 need a level shifter) Raspberry Pi Pico 2 Phyduino Pico
(i2c_controller) (PeripheralReceiver, 0x42)
┌────────────────┐ ┌───────────────────┐
│ pin 6 GP4 SDA●├─────────────────┤● SDA (D18, GPIO24)│
│ pin 7 GP5 SCL●├─────────────────┤● SCL (D19, GPIO25)│
│ pin 8 GND ●├─────────────────┤● GND │
└────────────────┘ └───────────────────┘
Pull-ups (were needed), anywhere on the bus:
3.3 V ──┬────────┐
[4.7k] [4.7k]
│ │
SDA SCL
Don't join the 3V3 pins of the two boards.
5 V controllers (e.g. UNO R4) need a level shifter.“hello N” lines print; controller reads a rising counter (tested with a Raspberry Pi Pico 2) |
Passed 10-08 |
| 17 · cpu_speed | Tools > CPU Speed at 50, 133 (default) and 200 MHz; Serial Monitor at 115200LED blinks at 1 Hz; sys = F_CPU; peri = sys up to 133 MHz, 48 MHz above; vreg 1.15 V above 133 MHz, else 1.10 V; delay(1000) ≈ 1000000 us; loop time ∝ 1/F_CPU (got 243060 / 90680 / 60204 us) | Passed 10-09 |
| 18 · analog_read | CPU Speed 200 MHz; a known voltage under 2.048 V on A3 (e.g. a 1.5 V cell, a divider from 3.3 V, or the Analog Shield's temperature front end). Checks the MAX11635 start-conversion pulse is still long enough at the fastest clockPhyduino Pico potentiometer (10 kΩ) ┌───────────────┐ ┌───────┐ │ AREF 2.048 V ●├─────────────┤ end │ │ A3 ●├─────────────┤ wiper │ │ GND ●├─────────────┤ end │ └───────────────┘ └───────┘ Set it anywhere, then leave it. Or: a 1.5 V cell (+ to A3, − to GND), or the Analog Shield's temperature front end on A3.A3 reads the applied voltage (reading × 2.048 / 4095), same as at 133 MHz (Analog Shield temperature front end on A3: 2783 at 133 MHz, 2788 at 200 MHz, 2790 at 133 MHz again ≈ 1.39 V; steady within each run, the small rise is sensor drift) |
Passed 10-09 |
| 14 · usbpd_status | Tools > USB-PD Power: Up to 20 V. USB-PD charger that offers 20 V; Pico 2 running serial_bridge passes Serial1 to the PC (usbpd_status mirrors its output to Serial1). Open the Pico 2's Serial Monitor before plugging in the charger, or the “STUSB4500 found” line is missed USB-PD charger (20 V) PC
│ USB-C │ USB
▼ ▼
┌────────────────────┐ ┌─────────────────────┐
│ Phyduino Pico │ │ Raspberry Pi Pico 2 │
│ (usbpd_status) │ │ (serial_bridge) │
│ D1 TX (GPIO0) ●├──────────────┤● GP5 RX (pin 7) │
│ D0 RX (GPIO1) ●├──────────────┤● GP4 TX (pin 6) │
│ GND ●├──────────────┤● GND (pin 8) │
│ POK2 / POK3 LEDs │ └─────────────────────┘
└────────────────────┘
Only these three wires: VBUS is 20 V on a 20 V contract.“STUSB4500 found”; profiles 5.0V/2.0A 9.0V/1.0A 20.0V/0.5A; VBUS ≈ 20 V, POK3 lit (got 20.2 V) |
Passed 10-09 |
| 15 · usbpd_status | Same setup as 14; send 9, then 5, then f USB-PD charger (20 V) PC
│ USB-C │ USB
▼ ▼
┌────────────────────┐ ┌─────────────────────┐
│ Phyduino Pico │ │ Raspberry Pi Pico 2 │
│ (usbpd_status) │ │ (serial_bridge) │
│ D1 TX (GPIO0) ●├──────────────┤● GP5 RX (pin 7) │
│ D0 RX (GPIO1) ●├──────────────┤● GP4 TX (pin 6) │
│ GND ●├──────────────┤● GND (pin 8) │
│ POK2 / POK3 LEDs │ └─────────────────────┘
└────────────────────┘
Only these three wires: VBUS is 20 V on a 20 V contract.VBUS → ≈ 9 V (POK2 lit), → ≈ 5 V, → ≈ 20 V (got 9.1 V, 5.15 V, 20.2 V) |
Passed 10-09 |
| 16 · usbpd_status | Ordinary USB port (no PD)PC USB port ──── USB-C ────► Phyduino Pico (usbpd_status) 5 V only; Serial Monitor at 115200Contract offer 0, VBUS ≈ 5 V |
Passed 10-05 |
| 19 · usbpd_nvm | New board, once. Tools > USB-PD Power: Use chip's stored settings; Serial Monitor 115200; send r, then write5v; unplug and replug. Keep the printed r output as the board's backupr shows the NVM (ST factory: 3 profiles 5 V/1.5 A, 15 V/1.5 A, 20 V/1.0 A); after write5v the read-back shows 1 profile, 5 V/2.0 A and “OK: verified”; after replugging, usbpd_status (stored settings) shows profiles 5.0V/2.0A (got: factory NVM except sector 0 byte 3 = AB; only sector 3 written, 56 → 72; second board 11-11: same NVM, same result) |
Passed 10-09, 11-11 |
| 20 · usbpd_status | After 19: same setup as 14 but Tools > USB-PD Power: Use chip's stored settings; plug in the 20 V charger. Then rebuild with Up to 20 V USB-PD charger (20 V) PC
│ USB-C │ USB
▼ ▼
┌────────────────────┐ ┌─────────────────────┐
│ Phyduino Pico │ │ Raspberry Pi Pico 2 │
│ (usbpd_status) │ │ (serial_bridge) │
│ D1 TX (GPIO0) ●├──────────────┤● GP5 RX (pin 7) │
│ D0 RX (GPIO1) ●├──────────────┤● GP4 TX (pin 6) │
│ GND ●├──────────────┤● GND (pin 8) │
│ POK2 / POK3 LEDs │ └─────────────────────┘
└────────────────────┘
Only these three wires: VBUS is 20 V on a 20 V contract.
Uploads: unplug the charger, then connect the
Phyduino to the PC.VBUS ≈ 5 V from plug-in, profiles 5.0V/2.0A; with Up to 20 V, VBUS ≈ 20 V (menu changes working registers only; r in usbpd_nvm still shows 5 V only) (got, second board after its 19: 5.0V/2.0A, offer 1, 5.10 V; Up to 20 V: offer 5, 500 mA, 19.98 V, POK3 lit; r unchanged, sector 3 = 72) |
Passed 11-11 |
| 27 · UsbPdPower | Same setup as 14, but Tools > USB-PD Power: 5 V only (default); send 20, then 9, then 5, then 7 USB-PD charger (20 V) PC
│ USB-C │ USB
▼ ▼
┌────────────────────┐ ┌─────────────────────┐
│ Phyduino Pico │ │ Raspberry Pi Pico 2 │
│ (UsbPdPower) │ │ (serial_bridge) │
│ D1 TX (GPIO0) ●├──────────────┤● GP5 RX (pin 7) │
│ D0 RX (GPIO1) ●├──────────────┤● GP4 TX (pin 6) │
│ GND ●├──────────────┤● GND (pin 8) │
│ POK2 / POK3 LEDs │ └─────────────────────┘
└────────────────────┘
Only these three wires: VBUS is 20 V on a 20 V contract.
Commands arrive through the bridge on D0 RX,
so that wire is needed here.At start: profiles 5.0V/2.00A, VBUS ≈ 5 V; 20: “Asking for up to 20 V”, profiles 5.0V/2.00A 9.0V/1.00A 20.0V/0.50A, VBUS ≈ 20 V (POK3 lit); 9: VBUS ≈ 9 V (POK2 lit); 5: VBUS ≈ 5 V; 7: “Send 5, 9, 12, 15 or 20.” (got, second board, bridge on Serial2: start 5.0V/2.00A, offer 1, 5.10 V; 20: offer 5, 500 mA, 19.98 V, POK3 lit; 9: offer 2, 1000 mA, 9.00 V, POK2 lit; 5: offer 1, 5.10 V; 7 rejected; also 15: 15.0V/0.66A, offer 4, 14.97 V, then 9 again 9.00 V; each change within one status line) |
Passed 11-11 |
| 28 · MulticoreBasics | Tools > Operating System: None; Serial Monitor 115200“setup() runs on core 0”, then “loop() on core 0: n” once a second; LED flashes 100 ms on, 400 ms off at the same time | Passed 10-19 |
| 29 · MulticoreFifo | As 28LED blinks at 2 Hz throughout; four answers in order: 168, 1229, 9592, 78498 primes, the last about 20 s after the third (133 MHz) | Passed 10-19 |
| 30 · multicore_idle | As 28“PASS” once a second; echo = round + 1; count while idle +0, after resume a large number; LED blinks | Passed 10-19 |
| 31 · multicore_idle, MulticoreBasics | As 28 and 30, but Tools > Operating System: FreeRTOS (SMP)Same results as 28 and 30 | Passed 10-19 |
| 32 · FreeRtosTasks | FreeRTOS; Serial Monitor 115200LED toggles every 250 ms; “countTask on core 0/1: n” once a second; every 5 s a list with loop, blink, count, IDLE0, IDLE1, Tmr Svc; Cores 0x1 for loop, 0xffffffff for blink and count; no task's Stack column near 0 | Passed 10-19 |
| 33 · FreeRtosQueue | FreeRTOS; potentiometer wiper (or AREF) on A0Phyduino Pico potentiometer (10 kΩ) ┌───────────────┐ ┌───────┐ │ 3.3V ●├─────────────┤ end │ │ A0 ●├─────────────┤ wiper │ │ GND ●├─────────────┤ end │ └───────────────┘ └───────┘ Or a jumper from AREF to A0 (as in 6).A line every 100 ms, times 100 ms apart; A0 matches AnalogMillivolts; no “Queue full” (got, with the sketch's A0 changed to A3 for the wiring: 100 lines in 10 s all exactly 100 ms apart, A3 1804–1807 mV against 1803 mV in AnalogMillivolts, no “Queue full”) |
Passed 10-22 |
| 34 · serial_echo | FreeRTOS; type, then Upload another sketch with the port selectedEcho works; the IDE's 1200-baud reset still starts the upload (no BOOTSEL button) | Passed 10-19 |
| 35 · CmsisRtos2Threads | Tools > Operating System: FreeRTOS (SMP) + CMSIS-RTOS2; potentiometer wiper (or AREF) on A0Phyduino Pico potentiometer (10 kΩ) ┌───────────────┐ ┌───────┐ │ 3.3V ●├─────────────┤ end │ │ A0 ●├─────────────┤ wiper │ │ GND ●├─────────────┤ end │ └───────────────┘ └───────┘ Or a jumper from AREF to A0 (as in 6).“Kernel: FreeRTOS V11.1.0+”; LED flashes once a second (100 ms on); a line every 100 ms, times 100 ms apart; A0 matches AnalogMillivolts; no “Queue full” (got, with the sketch's A0 changed to A3 for the wiring: “Kernel: FreeRTOS V11.1.0+”, LED flashing once a second, 100 lines in 10 s all exactly 100 ms apart, A3 1804–1808 mV against 1803 mV in AnalogMillivolts, no “Queue full”) |
Passed 10-22 |
| 36 · FreeRtosTasks, MulticoreBasics | As 35 (CMSIS-RTOS2 option)Same results as 32 and 28, except that Prio is 23 for loop and 55 for Tmr Svc | Passed 10-19 |
| 21 · AnalogMillivolts | AREF jumper to each of A0–A5 in turn (as in 6); Serial Monitor 115200Phyduino Pico ┌───────────────┐ │ AREF 2.048 V ●├──┐ jumper │ A0 ●├──┘ │ A1 ●│ │ A2 ●│ move the jumper's free end │ A3 ●│ to A0, then A1 … A5, │ A4 ●│ one input at a time │ A5 ●│ └───────────────┘Full scale 3300 mV for A0–A2, 2048 mV for A3–A5; the jumpered pin reads ≈ 2048 mV on A0–A2 and ≈ 2047 mV on A3–A5 (got A0 2029–2058, A1 2035–2039, A2 2036–2041 mV, about 0.5 % low; A3, A4, A5 2047 mV) |
Passed 10-21 |
| 22 · AnalogAveraging | Potentiometer across 3.3 V and GND, wiper on A0; a second potentiometer across AREF and GND, wiper on A3; Serial Monitor 115200. Not AREF on A0 or a 3.3 V potentiometer on A3: each then follows the other ADC's reference and carries the slow ≈ 1 % drift of the 3.3 V rail, which averaging cannot removePhyduino Pico potentiometer 1 (A0: 0–3.3 V) ┌───────────────┐ ┌───────┐ │ 3.3V ●├─────────────┤ end │ │ A0 ●├─────────────┤ wiper │ │ │ ┌──┤ end │ │ │ │ └───────┘ │ GND ●├──────────┤ potentiometer 2 (A3: 0–2.048 V) │ │ │ ┌───────┐ │ │ └──┤ end │ │ A3 ●├─────────────┤ wiper │ │ AREF 2.048 V ●├─────────────┤ end │ │ │ └───────┘ └───────────────┘ 10 kΩ potentiometers; set each anywhere, then leave it.Spread shrinks as averaging rises from 1 to 32: clearly on A0 (≈ 10 → 1), only slightly on A3 (the MAX11635 is already quiet, ≈ 5 → 3) (got A0 spread 8–11, 4–5, 2–3, 2, 1–2 counts; A3 4–5, 7, 6, 4, 3. With AREF on A0 and a 3.3 V potentiometer on A3 the spread stayed 20–55 counts at every setting) |
Passed 10-21 |
| 23 · AnalogDifferential | Potentiometer wiper on A3 and A0 (one potentiometer for both, or one each; keep A3 under 2.048 V, e.g. a potentiometer across AREF and GND), A4 and A1 to GND; turn from 0 V upPhyduino Pico potentiometer (10 kΩ) ┌───────────────┐ ┌───────┐ │ AREF 2.048 V ●├─────────────┤ end │ │ A3 ●├──────────┬──┤ wiper │ │ A0 ●├──────────┘┌─┤ end │ │ A4 ●├──┐ │ └───────┘ │ A1 ●├──┤ │ │ GND ●├──┴────────┘ └───────────────┘ One potentiometer for both pairs: A3 − A4 and A0 − A1 both read the wiper.A3 − A4 matches A3 in AnalogMillivolts, below and above 1024 mV (above it, two readings); A0 − A1 matches A0 (got A3 − A4 870 and 1799 mV against A3 875 and 1802 mV, a few mV lower with the sketch's averaging 16; A0 − A1 1048 mV against A0 1058 − A1 8 mV; one potentiometer each) |
Passed 10-21 |
| 24 · AnalogReadMultiple | Serial Plotter 115200; AREF jumper to one analog pin at a time, or known, different voltages on several pins at once (e.g. the wiring of 23)Phyduino Pico ┌───────────────┐ │ AREF 2.048 V ●├──┐ jumper │ A0 ●├──┘ │ A1 ●│ │ A2 ●│ move the jumper's free end │ A3 ●│ to A0, then A1 … A5, │ A4 ●│ one input at a time │ A5 ●│ └───────────────┘ Or the wiring of 23 (traces A0, A1, A3, A4 at once).Six traces, ≈ 20 lines a second; only the jumpered pin's trace rises to ≈ 2048 mV (or each trace matches that pin in AnalogMillivolts) (got, wired as 23: A0 1056, A1 8, A3 1801, A4 0 mV, each matching AnalogMillivolts; 59 lines in 3 s) |
Passed 10-21 |
| 25 · AnalogBurst | Wire D2 → A0 (sketch plays 500 Hz on D2)Phyduino Pico ┌──────────────┐ │ D2 ●├──┐ │ │ │ jumper (500 Hz square wave, 0–3.3 V) │ A0 ●├──┘ └──────────────┘Plot shows a clean square wave, 40 samples per period; "Rate 20000 Hz"; mean ≈ 2048 (1950–2050: 500 samples are 12.5 periods, so it depends on where the burst starts) (got "Rate 20000 Hz", exactly 40 samples per period every time, duty 48–50 %, levels 9–11 and 4067–4080, no samples mid-edge, mean 1961–2050) |
Passed 10-21 |
| 25b · AnalogBurst | As 25, but PIN = A3, RATE_HZ = 200000 (MAX11635 clock mode 11); D2 → A3 through 10 kΩ, 10 kΩ from A3 to GND (1.65 V)Phyduino Pico ┌──────────────┐ │ D2 ●├────[10k]────┐ │ A3 ●├─────────────┤ A3: 0 V / ≈ 1.65 V at 500 Hz │ GND ●├────[10k]────┘ └──────────────┘ The divider keeps A3 under its 2.048 V full scale.Square wave between ≈ 0 and ≈ 3200–3300 counts (1.60–1.65 V, resistor tolerance); edges settle within ~8 samples (divider and the input filter); flat parts steady, with no isolated spikes or jumps by powers of two (those would mean misaligned result bytes); "Rate 197916 Hz" (nearest SPI clock to 200000); every burst the same. Rate / 500 ≈ 396 samples per period (edges ≈ 198 samples apart; 181 would mean the SPI is back in mode 0, which adds a gap between frames) (got lowest 0, highest 3234–3252, edges exactly 198 samples apart, no glitches in 2000 samples; on 10-21, before the fix, 181 apart) |
Passed 10-22 |
| 26 · AnalogBurstBackground | Steady voltage under 2.048 V on A3 (e.g. potentiometer); Serial Monitor 115200Phyduino Pico potentiometer (10 kΩ) ┌───────────────┐ ┌───────┐ │ AREF 2.048 V ●├─────────────┤ end │ │ A3 ●├─────────────┤ wiper │ │ GND ●├─────────────┤ end │ └───────────────┘ └───────┘ Set it anywhere, then leave it.LED blinks steadily at 2 Hz, from when the Serial Monitor opens ( setup() waits for it); ten lines a second; mean matches A3 in AnalogMillivolts, RMS of a few tenths of a mV (got 199 lines in 20 s, mean 1803.9 mV against A3 1801–1806 mV, RMS 0.20–0.23 mV) |
Passed 10-21 |
| Board tested | One Phyduino Pico, 2026-10-05, 2026-10-08, 2026-10-09, 2026-10-18, 2026-10-19, 2026-10-21 and 2026-10-22 (dates in the table are 2026). A second Phyduino Pico (COM23) on 2026-11-11 for 19, 20 and 27. | |
| Multicore 28–32, 34, 36 | 2026-10-19, board on COM5. 29: the 78498 answer took 20.1 s on core 1 at 133 MHz. 30–31: count while idle +0 in every round; after resume about 11 390 counts in 10 ms without FreeRTOS, 10 800–11 100 with it. 36: Prio 23 for loop, 55 for Tmr Svc; least free stack (words) loop 1940, count 902, blink 488; 32 the same with Prio 1 for loop. 34: echo checked in Tera Term (needs DTR on: with it off the board drops everything it sends), then Arduino IDE Upload of Blink with COM5 selected, no button. 33 and 35 were run later and passed on 2026-10-22 (see their rows). | |
| Analog 21–26 | 2026-10-21, board on COM5. Built with the CMake preset phyduino_pico; UF2
made with picotool 2.0.0, because the installed 2.2.0-a4 crashed on uf2 convert
on that PC (see Windows Smart App Control). 3.3 V rail: slow drift of about ±1 % (≈ ±30 mV,
from AREF read on A0), seen on A0–A2 whenever the source does not follow the rail. A3 reads
lower with averaging, about 7.5 mV at 32 against 1 in every round, with a potentiometer as
the source; probably the source impedance, not yet checked with a stiff source. 25b: the
MAX11635 clock mode 11 burst sampled at ≈ 181 kHz while it reported 197 916 Hz: in SPI
mode 0 the PL022 adds 1.5 SCLK between frames (17.5 per sample, not 16). Fixed 10-22 by running
the burst in mode 3 (the chip accepts either); passed 10-22. |
|
| A3–A5 pull-downs | On this board R47–R49 (100 kΩ) appear not to be connected, so unconnected A3–A5 inputs float. Hardware, not firmware. | |
| Windows Smart App Control | Blocks the unsigned picotool used to build the UF2. Turned off on the development PC; distribution fix still open. | |
| First PD contract current | On plugging into a charger the first 20 V contract asks 1000 mA, although the
profiles (from the chip's NVM) read 20 V/0.5 A; after setProfiles()
renegotiates it asks 500 mA. Cause not known yet. |
|
| Pico 2 used for 13–15, 20, 27 | Its GP0 (pin 1) does not transmit, so for 14–15 the bridge used
Serial1.setTX(12) (pin 16) instead. That board only; a working
Pico 2 could use GP0/GP1. On 2026-11-11, rebuilt with arduino-pico 6.3.2,
Serial1 sent nothing from GP12 either (loopback test), while Serial2 on
GP4/GP5 worked both ways; serial_bridge now uses Serial2 (GP4 TX pin 6,
GP5 RX pin 7), as the diagrams show. |