Intermittent I2C Bus Hangs on Custom ESP32-S3 PCB (FireBeetle)

userHead Oliver.Taylor 2026-01-17 13:32:25 3 Views0 Replies

I’m working on an embedded project using the DFRobot FireBeetle ESP32 and experiencing intermittent I2C reliability issues. The setup involves an IMU and an environmental sensor on a custom PCB. While the breadboard prototype was stable, the PCB version randomly hangs after a few hours of operation, requiring a full power cycle to recover.

What I’ve checked so far:

Pull-ups: Using external 4.7k resistors on both SDA/SCL.

Clock Speed: Reduced from 400kHz to 100kHz, but the hang still occurs.

Continuity: All traces and solder joints are solid.

I suspect it might be a bus lockup (SDA held low) or subtle EMC noise on the PCB that wasn't present on the breadboard. Has anyone implemented a robust I2C bus recovery routine (clocking out the bus) for the ESP32 on this platform? Or are there known decoupling requirements for FireBeetle that I might have missed in my PCB layout?

I've followed these:

 

Github Issue (Arduino-ESP32): I2C Bus Lockup and Recovery Discussion

Adafruit Learning System: Working with Multiple I2C Devices

Espressif Documentation: Hardware Design Guidelines for ESP32-S3 (Check section: Power Supply and Analog Inputs).

DFRobot FireBeetle Wiki: FireBeetle ESP32-S3 Pinout & Power