Marlin: подключение I2C EEPROM

 

Возникла необходимость добавить память EEPROM на не имеющую её плату управления, в моём случае – на SKR 2. Сначала я собирался просто купить на Алиэкспрессе готовый модуль BTT EEPROM V1.0, но после изучения схем этого модуля и платы SKR-2 решил, что правильнее будет сделать свой вариант модуля I2C EEPROM. С актуализированной схемотехникой, а не c унаследованной из эпохи Arduino/RAMPS.

 

Шина I2C

Для начала посмотрим на организацию шины I2C.

Плата SKR 2: разъём I2C

Здесь интересно то, что на подключаемые к шине I2C плата подаёт питание 5 В, при этом сигнальные линии шины «подтянуты» к источнику 3,3 В.

Формально, для шины I2C это допустимо (шина использует сигнальные порты типа «открытый сток/открытый коллектор»), просто подключаемые к ней устройства должны быть рассчитаны на соответствующие напряжение питания и напряжение шины I2C.

 

Схема модуля BTT EEPROM V1.0

Обратите внимание, что сигнальные линии микросхемы U1 «подтянуты» к её напряжению питания через резисторы R1 и R2. При подключении к плате управления источники питания +5 В и +3.3 В платы управления оказываются соединены параллельно через «подтягивающие» резисторы платы и модуля, что неправильно, так как при этом возникает уравнивающий ток между этими двумя источниками. Такое вот эхо эпохи 3D-принтеров на Arduino/RAMPS.

Схема модуля I2C EEPROM

Напряжение питания +5 В, получаемое модулем с платы SKR 2, при помощи U1 понижается до +3.3 В, чем обеспечивается более широкая номенклатура применимых микросхем EEPROM (например, Microchip AT24C32E или AT24C32E-PUM с верхней границей питающих напряжений 3.6 В). Устанавливать «подтягивающие» резисторы для 5 и 6 выводов U2 не требуется, так как они уже установлены на платах управления.

В данном варианте модуля применена I2C EEPROM AT24C256 ёмкостью 32 КБ, но можно использовать любую микросхему I2C EEPROM с объёмом от 4 КБ (AT24C32 ) до 64 КБ (AT24C512 ).

Схема модуля изначально рассчитана на подключение к плате SKR 2, поэтому для других плат управление необходимо проверять распиновку сигналов SDA и SLC на разъёме I2C. На плате модуля (использована макетная плата Vero Board/Strip Board) предусмотрены разрывы дорожек сигнальных линий SDA и SLC, позволяющие при помощи перемычек коммутировать требуемым образом эти линии между микросхемой U2 и разъёмом J1.

 

Настройка прошивки Marlin 2

В файле Configuration.h необходимо раскомментировать строку #define EEPROM_SETTINGS и после блока стандартных настроек EEPROM добавить показанный ниже блок настроек для подключаемой внешней памяти I2C EEPROM.

Важно: указывается размер (объём) микросхемы памяти, а не её верхний (максимальный) адрес!

// Uncomment #define EXTERNAL_EEPROM_USE for external I2C EEPROM using

// (c) https://3dcrafter.trengtor.com

#define EXTERNAL_EEPROM_USE

#ifdef EXTERNAL_EEPROM_USE

    #ifndef I2C_EEPROM // Check & enable external I2C EEPROM use

    #define I2C_EEPROM

    #ifdef FLASH_EEPROM_EMULATION // Check & disable FLASH EEPROM emulation

        #undef FLASH_EEPROM_EMULATION

        #undef FLASH_EEPROM_LEVELING

    #endif

    #ifdef SRAM_EEPROM_EMULATION // Check & disable SRAM EEPROM emulation

        #undef SRAM_EEPROM_EMULATION

    #endif

    #ifdef MARLIN_EEPROM_SIZE // Check & disable any predefined EEPROM size

        #undef MARLIN_EEPROM_SIZE

    #endif

    // Uncomment the size of EEPROM chip you are using

    //#define MARLIN_EEPROM_SIZE 0x10000 // EEPROM AT24C512 (64Kb)

    #define MARLIN_EEPROM_SIZE 0x8000 // EEPROM AT24C256 (32Kb)

    //#define MARLIN_EEPROM_SIZE 0x4000 // EEPROM AT24C128 (16Kb)

    //#define MARLIN_EEPROM_SIZE 0x2000 // EEPROM AT24C64 (8Kb)

    //#define MARLIN_EEPROM_SIZE 0x1000// EEPROM AT24C32 (4Kb)

    #endif

#endif

 

Модуль BIGTREETECH EEPROM V1.0

Модуль BIGTREETECH EEPROM V1.0 тоже можно использовать, но с условием, что используемая с ним микросхема I2C EEPROM будет совместима с питанием 5 В. Кроме того, я рекомендую всё же удалять с этого модуля «подтягивающие» резисторы (отмечены на фото модуля красными крестиками): они там не нужны.

Оставлять их необходимо только в том случае, если у вас плата управления без «подтягивающих» резисторов шины I2C, но мне такие ещё не попадались.

Поблагода₽ить за помощь

Если эта заметка оказалась для вас полезна, вы можете отблагодарить меня за проделанную для вас работу любой суммой на своё усмотрение, перейдя по данной ссылке.