7.9 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 | P2 header (IO46/9/14/5) |
| 6 | free | P3 header (IO6/7/15/16) |
| 7 | free | P3 header (IO6/7/15/16) |
| 8 | CTP_SDA |
GT911 I2C SDA |
| 9 | free | P2 header (IO46/9/14/5) |
| 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 | P2 header (IO46/9/14/5) |
| 15 | free | P3 header (IO6/7/15/16) |
| 16 | free | P3 header (IO6/7/15/16); used by vendor LED demo |
| 17 | U1TXD |
P4 header (GND/3V3/17/18), usable if UART1 unused |
| 18 | U1RXD |
P4 header (GND/3V3/17/18), 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 | P2 header; strapping pin (LOG), input-only on ESP32-S3 — never an output |
| 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, and free-IO
headers: P2 exposes IO46/9/14/5, P3 exposes IO6/7/15/16, and
P4 is GND/3V3/17/18 (the UART1 header). 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 | 7 | 7 free (P3) | yes — locked |
| Motor STEP | 16 | 16 free (P3) | yes — locked |
| Motor DIR | 15 | 15 free (P3) | yes — locked |
| DS18B20 temp | 17 | 17 U1TXD (P4) |
yes — UART1 unused |
| Speaker BCLK | 42 | 42 SPECK_BCLK |
yes |
| Speaker LRCLK | 2 | 2 SPECK_LRCLK |
yes |
| Speaker DIN | 41 | 41 SPECK_DIN |
yes |
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 and DS18B20 are now locked on the S3 board. Header labels confirmed: P2 exposes IO46/9/14/5, P3 exposes IO6/7/15/16, P4 is GND/3V3/17/18 (the UART1 header).
- Motor STEP 16, DIR 15, EN 7 (active LOW) — all on P3; IO6 stays spare.
- DS18B20 on 17 — P4 puts GND, 3V3 and data on one header; UART1 is unused.
- Speaker amp I2S stays on the vendor pins: BCLK 42,
LRCLK 2, DIN 41 (P7
Speak). - 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 and on P2 but is input-only on the ESP32-S3 — never use it for outputs.
- 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.
Motor / temp / speaker wiring as locked (phase I01)
| Signal | GPIO | Rationale |
|---|---|---|
| STEP | 16 | free, P3 header, no boot function |
| DIR | 15 | free, P3 header |
| EN (active LOW) | 7 | free, P3 header |
| DS18B20 | 17 | P4 header carries GND/3V3/17/18 — one connector for the sensor |
| Speaker BCLK / LRCLK / DIN | 42 / 2 / 41 | onboard amp wired to P7 Speak |
Keep motor EN's disable-first behaviour (drive inactive at boot before enabling output mode).