7.3 KiB
JC4827W543 pin audit
Comparison of the GPIO assignments in this tree against the vendor documentation at https://github.com/lsdlsd88/JC4827W543 (GUITION factory docs: spec PDF, IO pin distribution xlsx, Arduino demos).
Board variants: JC4827W543N (no touch), ...R (resistive XPT2046),
...C (capacitive GT911). Ours is the C model.
1. Vendor-documented pin allocation (authoritative)
From 5-IO pin distribution/4.3 inches IO pin distribution.xlsx,
cross-checked against the demo sketches
(1-Demo/Demo_Arduino/3_3-* and 4_*):
| GPIO | Vendor function | Notes |
|---|---|---|
| 0 | BOOT button | also wired to LCD_TE |
| 1 | BL_CTRL |
LCD backlight |
| 2 | SPECK_LRCLK |
onboard speaker amp I2S WS |
| 3 | CTP_INT / RTP_IRQ |
touch interrupt (both models) |
| 4 | CTP_SCL |
GT911 I2C SCL |
| 5 | free | |
| 6 | free | |
| 7 | free | |
| 8 | CTP_SDA |
GT911 I2C SDA |
| 9 | free | |
| 10 | TF_CS |
microSD slot |
| 11 | RTP_DIN / TF_MISO |
shared SPI: resistive touch / SD |
| 12 | RTP_CLK / TF_CLK |
shared SPI |
| 13 | RTP_DIO / TF_MOSI |
shared SPI |
| 14 | free | |
| 15 | free | exposed on header (P2/P3 area) |
| 16 | free | exposed on header; used by vendor LED demo |
| 17 | U1TXD |
UART1 header (P5), usable if UART1 unused |
| 18 | U1RXD |
UART1 header (P5), usable if UART1 unused |
| 19 | USB+ |
USB D+ |
| 20 | USB- |
USB D- |
| 21 | LCD_A0 |
QSPI data 0 |
| 22–25 | — | do not exist on ESP32-S3 |
| 26–34 | — | flash/PSRAM or non-existent |
| 35 | not available | octal PSRAM (xlsx marks explicitly) |
| 36, 37 | free per xlsx | but consumed by octal PSRAM on N8R8/R8 modules — treat as unavailable until module variant confirmed |
| 38 | RTP_CS (resistive model) |
on the C model this is the GT911 reset line — see §3 |
| 39 | LCD_A3 |
QSPI data 3 |
| 40 | LCD_A2 |
QSPI data 2 |
| 41 | SPECK_DIN |
speaker amp I2S data in |
| 42 | SPECK_BCLK |
speaker amp I2S BCLK |
| 43 | U0TXD |
console |
| 44 | U0RXD |
console |
| 45 | LCD_CS |
QSPI chip select |
| 46 | free per xlsx | strapping pin (LOG); output-only-ish, use with care |
| 47 | LCD_CLK |
QSPI clock |
| 48 | LCD_A1 |
QSPI data 1 |
The board carries an onboard I2S speaker amplifier (datasheets for
NS4168 / AX9835 ship in 4-Driver_IC_Data_Sheet), a Speak connector
(P7), BAT connector (P6), TF slot, UART0 console, UART1 header and a
scattering of free-IO headers (P2–P5: GPIO 15, 16, 17, 18 visible on
the structure diagram). Vendor demos drive LEDs on GPIO 16/17 and a
DHT11 on GPIO 27 — note GPIO 27 is not in the vendor pin table,
so that demo value is suspect/generic.
2. What the code assigns today
board_jc4827w543 (components/board_jc4827w543/board.c)
| Signal | Code GPIO | Vendor | Match |
|---|---|---|---|
| LCD CS | 45 | 45 LCD_CS |
yes |
| LCD SCK | 47 | 47 LCD_CLK |
yes |
| LCD D0 | 21 | 21 LCD_A0 |
yes |
| LCD D1 | 48 | 48 LCD_A1 |
yes |
| LCD D2 | 40 | 40 LCD_A2 |
yes |
| LCD D3 | 39 | 39 LCD_A3 |
yes |
| LCD BL | 1 | 1 BL_CTRL |
yes |
| TP SDA | 8 | 8 CTP_SDA |
yes |
| TP SCL | 4 | 4 CTP_SCL |
yes |
| TP INT | 3 | 3 CTP_INT |
yes |
| TP RST | 38 | 38 (demo: TOUCH_RES 38) |
yes — see §3 |
| Motor EN | GPIO_NUM_NC |
n/a | deliberately unassigned |
hal_display_nv3041a.c
Driver NV3041A over QSPI via esp_lcd SPI host, 480×272, quad
mode, 40 MHz. Matches the vendor demo
(Arduino_ESP32QSPI(45,47,21,48,40,39) + Arduino_NV3041A,
Arduino_Canvas(480,272)).
Caveat: the spec sheet PDF lists the driver chip as "ST3401A" — that string appears nowhere else; every demo and the burn files use NV3041A. Treat the PDF label as a typo.
hal_input_gt911.c
GT911 at I2C addr 0x5D (GT911_SLAVE_ADDRESS1 in the vendor
touch.h), I2C_NUM_0 @ 400 kHz on SDA 8 / SCL 4. Reset sequence
(drive INT low, pulse RST, release INT to input) selects the 0x5D
address per the GT911 datasheet — matches the vendor demo's
TOUCH_RES 38 / TOUCH_INT 3 wiring.
board_wroom + hal_* (classic ESP32, unchanged)
| Signal | GPIO | Source |
|---|---|---|
| Stepper STEP | 12 | config.h, hal_motor.c |
| Stepper DIR | 14 | config.h, hal_motor.c |
| Stepper EN (active LOW) | 27 | config.h, hal_motor.c, board_wroom |
| DS18B20 | 13 | config.h, hal_temp.c |
| Beeper | 25 | config.cpp, hal_audio.c |
| LCD 2004 I2C | SDA 21 / SCL 22, addr 0x27 | config.cpp, hal_display_lcd2004.c |
| Keypad rows | 19, 18, 5, 17, 16 | config.cpp, hal_input_keypad.c |
| Keypad cols | 15, 2, 0, 4 | config.cpp, hal_input_keypad.c |
Self-consistent with docs/CURRENT_STATE.md. Not related to the S3
panel.
3. Findings / discrepancies
-
Display and touch pins are all correct. Every QSPI, backlight and GT911 pin in
board_jc4827w543/board.cmatches both the vendor xlsx and the vendor Arduino demos. No changes needed. -
TP_RST on GPIO 38 is undocumented for the C model. The xlsx labels IO38
RTP_CS(its resistive-touch function). The capacitive demos (LvglWidgets/touch.h) setTOUCH_RES 38, so on the C variant IO38 is clearly the GT911 reset. Our code is right, but the vendor table alone would not tell you that — the demo code is the authority here. -
Motor EN/STEP/DIR are unassigned on the S3 board (
GPIO_NUM_NCinboard.c). Correct call — but usable free pins do exist. Candidates from the vendor table + headers:- Safest (plain free, on headers): 15, 16 and UART1 header 17, 18 if UART1 is unused.
- Free in xlsx but not obviously headered: 5, 6, 7, 9, 14.
- Avoid: 0 (BOOT/LCD_TE), 1–4/8 (LCD+touch+speaker), 10–13 (TF/RTP SPI), 19/20 (USB), 21 (LCD D0), 35–37 (octal PSRAM), 38–48 (used/strapping), 43/44 (console).
- GPIO 46 is xlsx-free but is a strapping pin — last resort only.
- Octal PSRAM (
sdkconfig.s3:CONFIG_SPIRAM_MODE_OCT=y) means 33–37 are off-limits even though the xlsx only flags 35.
-
Audio on S3 should use I2S, not a beeper GPIO. The board has a speaker amp on IO2 (LRCLK), IO41 (DIN), IO42 (BCLK) — P7
Speakconnector.hal_audiocurrently builds the LEDC buzzer only for esp32 and a stub elsewhere; an S3 implementation should drive I2S on those pins rather than allocating a GPIO. -
DS18B20 on S3 needs one free GPIO (any of §3's candidates; it only needs input+open-drain drive). Hal currently stubs temp on non-esp32.
-
Reserved/bus-shared notes: GPIO 0 carries
LCD_TEin addition to BOOT — do not use it for anything else. TF card SPI (10–13) is shared with resistive-touch signals on R models; on our C model it's purely the SD slot. -
No conflicts found between the code's S3 selections and the vendor map — every consumed pin is one the vendor assigns to that same function.
Suggested motor wiring (for when S3 motor support lands)
| Signal | Suggested GPIO | Rationale |
|---|---|---|
| STEP | 16 | free, on header, no boot function |
| DIR | 15 | free, on header |
| EN (active LOW) | 17 or 18 | UART1 header; free if UART1 unused |
| DS18B20 | 9 or 14 | free, any GPIO works |
If UART1 is wanted for something else, use 5/6/7 for EN/temp instead. Keep motor EN's disable-first behaviour (drive inactive at boot before enabling output mode) whatever pins are chosen.