PCB pin trace
Source: the user's EasyEDA PCB JSON (editorVersion: 6.5.51, XIAO reference U8),
provided on 2026-09-27. GPIO translations were checked against the installed
Arduino XIAO_ESP32C3 pins_arduino.h. Top/bottom refer to the PCB drawing's Y axis.
| Signal | PCB net / connection | XIAO label | ESP32-C3 GPIO |
|---|---|---|---|
| Upper button, S2 (Y=3249.5) | S2.2 -> U8_3 -> U8 pad 3 | D2/A2 | 4 |
| Lower button, S1 (Y=3290) | S1.1 -> U8_2 -> U8 pad 2 | D1/A1 | 3 |
| RTC SDA | U7_SDA -> U8 pad 5 | SDA/D4 | 6 |
| RTC SCL | U7_SCL -> U8 pad 6 | SCL/D5 | 7 |
| EPD SCK | U5_4 -> U8 pad 9 | SCK/D8 | 8 |
| EPD MOSI | U5_3 -> U8 pad 11 | MOSI/D10 | 10 |
| EPD CS | U5_5 -> U8 pad 4 | D3/A3 | 5 |
| EPD DC | U5_6 -> U8 pad 8 | RX/D7 | 20 |
| EPD RST | U5_7 -> U8 pad 7 | TX/D6 | 21 |
| EPD BUSY | U5_8 -> U8 pad 10 | MISO/D9 | 9 |
Both buttons close to GND. R1 (100 kOhm) pulls U8_2 to VCC, and R2 (100 kOhm) pulls U8_3 to VCC. Firmware also enables the requested internal pull-ups. XIAO pad numbers are footprint terminal numbers, not GPIO numbers.
Upper button / buzzer conflict
Assembly clarification: the user confirmed that this is an older design and U3 is not fitted. The loading concern below does not apply to that assembly.
U3 (GSC4417YA-16R4000) pad 1 is on U8_3, and pad 2 is GND. The routed trace
from U3 pad 1 at (4024.61, 3344.5) joins S2's net at (4033.126, 3323.151).
Thus the buzzer and upper button share the same GPIO-to-ground path; this is
more than a duplicate net label in the footprint. If fitted, the buzzer may
load the pull-up and keep GPIO4 LOW even with S2 released.
Check the USB raw-input logs first. If GPIO4 stays LOW, power off and isolate U3 before retesting the button. Do not drive GPIO4 HIGH to test it: pressing the button would short that output to ground. A board revision should separate the button input from a suitable buzzer driver/output.
This trace establishes the design's connections, not solder continuity on the assembled board. It does not diagnose the reported RTC/display freeze; USB logs now distinguish RTC seconds, loop progress, and display BUSY waits.