Skip to content

FAQ & Troubleshooting

This page collects the most frequently encountered issues when working with the ESP32-S3-Touch-LCD-4.3 (Type B), along with their root causes and solutions. Most problems fall into a few categories: memory configuration, IO expander initialization order, and interface multiplexing.

Display remains blank after flashing firmware

Section titled “Display remains blank after flashing firmware”

The most common cause is PSRAM not being enabled. The 800x480 RGB framebuffer requires approximately 750 KB per buffer, which far exceeds the ESP32-S3’s 512 KB of internal SRAM. In Arduino IDE, set Tools > PSRAM to OPI PSRAM. In ESP-IDF, ensure CONFIG_SPIRAM=y and CONFIG_SPIRAM_MODE_OCT=y in sdkconfig. Also verify that Flash Size is set to 16MB — an incorrect flash size setting can cause the bootloader to fail before reaching your application code.

RS-485 data is received but corrupted or missing

Section titled “RS-485 data is received but corrupted or missing”

This is a known regression in certain ESP-IDF and Arduino ESP32 versions that affects UART half-duplex timing in the RS-485 driver. Upgrade to ESP-IDF v5.5.2 or downgrade the Arduino esp32 board package to v3.0.7. If upgrading is not immediately practical, verify your baud rate and check that the DE/RE control lines are toggling correctly by monitoring them with a logic analyzer.

CAN bus transmission reports errors (no ACK)

Section titled “CAN bus transmission reports errors (no ACK)”

CAN requires at least two active nodes on the bus. A single transmitting node will report ACK errors because no receiver acknowledges the frame — this is by design in the CAN specification, not a hardware fault. For single-board testing, use TWAI_MODE_NO_ACK in the TWAI general config structure. For multi-node setups, verify that 120-ohm termination is enabled at both endpoints of the bus and that CANH/CANL wiring is correct (not swapped).

CAN bus reception fails when using UCANV2.0 software

Section titled “CAN bus reception fails when using UCANV2.0 software”

Try restarting the COM port connection in the UCANV2.0 application. If using a serial debugger simultaneously, uncheck the DTR checkbox — DTR can trigger the auto-download circuit on the CH343P, pulling the ESP32-S3 into boot mode and interfering with normal operation.

Verify that Wire.begin() is called with the correct pins: Wire.begin(8, 9) where SDA is IO8 and SCL is IO9. If only some devices are missing from the scan, the CH422G IO expander may need to release peripherals from reset. Initialize the IO expander first, set the appropriate reset lines HIGH, then run the I2C scan again. The GT911 touch controller and display driver in particular will not respond until their reset lines are deasserted.

The GT911’s I2C address depends on the state of its reset and interrupt pins during power-on. It may appear at 0x14 or 0x5D depending on the boot sequence. On this board, the touch controller reset is managed by the CH422G IO expander (EXIO1). Ensure the IO expander is initialized first and has released the touch controller from reset by driving EXIO1 HIGH. The ESP32_Display_Panel and similar display driver libraries handle this initialization sequence automatically.

The SD card chip select is routed through the CH422G IO expander (EXIO4). You must initialize the IO expander and pull EXIO4 LOW before attempting to mount the SD card. If mount still fails, verify the card is formatted as FAT32 (not exFAT or NTFS), is properly seated in the slot, and is not write-protected. The SPI bus clock speed may also need to be reduced for older or lower-quality cards.

Press and hold the BOOT button, then press and release RESET, then release BOOT. The board should appear as a USB serial device ready for flashing. If using the CH343P port (Type-C2, top port), the auto-download circuit should handle this automatically via DTR/RTS toggling from your IDE or flash tool. If automatic download fails, the manual button sequence is the reliable fallback.

The FSUSB42 USB multiplexer is controlled by the CH422G’s EXIO5 output. For USB device mode, EXIO5 should be LOW, routing GPIO19 and GPIO20 to the USB connector. For USB host mode, EXIO5 should be HIGH. The demo code sets this during IO expander initialization. Note that when EXIO5 is HIGH, GPIO19 and GPIO20 are routed to the CAN transceiver instead of USB — these two functions are mutually exclusive because they share the same physical pins through the multiplexer.

lv_conf.h not found during Arduino compilation

Section titled “lv_conf.h not found during Arduino compilation”

Copy lv_conf.h from the LVGL library’s root directory to your Arduino libraries folder — specifically, place it in the parent folder that contains the lvgl library folder, not inside the lvgl folder itself. Open the copied file and change #if 0 to #if 1 at the very top to enable the configuration. Also verify that your library installation path does not contain non-ASCII characters, as the Arduino build system can fail silently when paths include accented letters or other Unicode characters.

Board crashes or reboots during display initialization

Section titled “Board crashes or reboots during display initialization”

This usually indicates insufficient memory allocation for the RGB LCD frame buffers. The display requires large contiguous memory blocks that can only come from PSRAM on this board. Ensure PSRAM is enabled and running in OPI (octal) mode at the correct speed. If using ESP-IDF with a 120 MHz PSRAM clock configuration, try falling back to 80 MHz to rule out signal integrity issues on the PSRAM bus. Reducing the number of frame buffers from two to one, or using a smaller partial buffer with LVGL’s direct mode, can also help in memory-constrained configurations.

Battery charging LED (CHG) never turns off

Section titled “Battery charging LED (CHG) never turns off”

The CS8501 charger IC has a fixed charge termination current threshold. If the battery capacity is very small (under 500mAh) or the battery is old and has degraded internal resistance, the charger may cycle between charging and termination states, causing the CHG LED to flicker or stay on indefinitely. Use a battery between 500mAh and 2000mAh for reliable charge termination behavior.

Keep metallic objects, plastic enclosures with conductive coatings, and other conductors away from the PCB antenna area. The antenna is a meandering trace printed on the PCB near the ESP32-S3 module and is sensitive to nearby materials that can detune it or absorb RF energy. If the board is mounted in an enclosure, ensure there is at least 10mm of clearance between the antenna region and any enclosure wall, and avoid placing ground planes or copper pours beneath the antenna on custom carrier boards.