Не могу отключить внутренний интерфейс I2C подтягиваний на ESP32
Я разработал специальную плату ESP32 на модуле WROVER-IE. Чтобы сохранить низкое энергопотребление, я использую GPIO-управляемый высокочастотный полевой транзистор для отключения неиспользуемых периферийных устройств в режиме глубокого сна.
Проблема: Я подтянул SSD1306 I2C OLED к этому AUX rail. Он отлично работает, когда устройство бодрствует. В setup() я запускаю OLED через ssd1306.begin(), и с этого момента контакты SCL и SDA (22, 21) всегда привязаны к 3,3В, пока я не сброшу ESP32.
Шина I2C, всегда привязанная к 3.3, заканчивается кровотечением через подтягивающие резисторы и в рельс AUX, что приводит к нежелательному току в спящем режиме.
Есть ли способ отключить внутренние I2C-блоки на ESP32?
Вещи, которые я пробовал до сих пор:
- Установка SDA, SCL в качестве выходного и низкого уровня записи (не работает)
- Установка SDA, SCL в качестве ВВОДА и/или записи НИЗКОГО уровня (ничего не делает)
- Вызов
gpio_hold_dis(gpio_num_t(SDA));
(ничего не делает)
Сейчас я пытаюсь проанализировать библиотеку esp32-hal-i2c.c, но не нахожу никаких исправлений. Любая помощь очень ценится!
Изменить, добавить схему:
-N
@Nick Johnson, 👍2
Обсуждение1 ответ
Я решил эту проблему. Для тех, кто хотел бы отключить внутренние отсоединения на шине I2C ESP32, вам нужно отключить весь драйвер, прежде чем переводить устройство в спящий режим.
Во-первых, включите библиотеку периферийных драйверов из IDF:
#include "driver/periph_ctrl.h"
Затем позвоните перед сном следующему человеку:
rtc_gpio_isolate(gpio_num_t(SDA));
rtc_gpio_isolate(gpio_num_t(SCL));
periph_module_disable(PERIPH_I2C0_MODULE);
digitalWrite(SDA, 0);
digitalWrite(SCL, 0);
Это остановит ESP32 от вытягивания контактов 21 и 22 во время глубокого сна. Вызов display.begin() или wire.begin() перезапустит драйвер после пробуждения.
- Одинаковый вывод на дисплеях с разными I2C-адресами (библиотека AdaFruit, ESP32)
- Как выбрать альтернативные контакты I2C на ESP32?
- Запуск 7-контактного OLED-дисплея с 4 контактами (I2C)
- Минимальное значение I2C-подтягивающий резистор для arduino
- digitalRead не читает входной контакт ESP8266-01
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- Несколько подчиненных устройств I2C на Arduino — Pull-up значения
- PN532 не обнаруживает RFID-карту при подключении к ESP32 в режиме I2C, но отлично работает с Arduino Uno
"Шина I2C, всегда привязанная к 3.3, в конечном итоге истекает кровью через подтягивающие резисторы"-откуда вы это знаете? Подтягивания не потребляют никакой энергии, пока вы не общаетесь по шине., @Sim Son
Если я удалю OLED-дисплей, напряжение AUX на направляющей AUX рассеивается. Я создам диграмму, @Nick Johnson