OLIMEX / ESP32-POE2

Power Over Ethernet Internet of Things POE IoT board with Espressif ESP32 WiFi, Bluetooth and wired 100Mbit Ethehernet with 25W power delivery
GNU General Public License v3.0
13 stars 5 forks source link

I2C does not does work on pins 13 - 16. Why is GPIO16 connected to GPIO33 through a 10ohm resistor #2

Open JulesThuillier opened 6 months ago

JulesThuillier commented 6 months ago

Using the ESP-POE2 board and Olimex BME280 board I tried the simple example provided by Olimex (https://github.com/OLIMEX/ESP32-POE/blob/master/SOFTWARE/ARDUINO/ESP32_PoE_MOD_BME280/ESP32_PoE_MOD_BME280.ino), the I2C communication with BME280 does not work. Using a protocol analyser I see data on SDA (GPIO13) but SCL (GPIO16) is always HIGH.

Moving forward with my investigation, I look at ESP-POE2 schematic and see the following connection :

Screenshot 2024-05-16 at 11 24 38

Can somebody explain why is this here ?

So I tried to replace SCL pin with GPIO5, and tada ! It works. It is not really a solution in itself because your UEXT connectors uses GPIO16 for SCL.

Last test was to remove R19, and still did not work. I finally stumbled on this piece of information :

Screenshot 2024-05-16 at 11 35 58

And that seems to be the answer. It's a bit confusing that this exact pin was chosen for UEXT SCL pin... Any plan to fix this ?

DanKoloff commented 5 months ago

This is not an issue to fix. Just we designed the board to be suitable for two types of ESP32 modules - with or without PSRAM (our ESP32-POE and ESP32-POE-ISO modules are designed in the same manner).

The ESP32 module without PSRAM is ESP32-WROOM and the ESP32 module with PSRAM is called ESP32-WROVER.

By default in ESP32-POE2 design we place the ESP32-WROVER module with PSRAM.

The difference between ESP32-WROOM and ESP32-WROVER modules is that the ESP32-WROVER uses two of the GPIOs for the PSRAM (GPIO16 and GPIO17). So in boards with ESP32-WROVER module (like ESP32-POE2) - Ethernet clock is GPIO0 instead of GPIO17 and GPIO33 is routed to the UEXT (instead of GPIO16).

So if you have problems with Ethernet - make sure that in your code - clock is set to GPIO0.

If you want to use GPIO16 at the UEXT, consider that GPIO16 is replaced by GPIO33 and use GPIO33 in the code (instead of GPIO16).