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, но мне такие ещё не попадались.
Поблагода₽ить за помощь
Если эта заметка оказалась для вас полезна, вы можете отблагодарить меня за проделанную для вас работу любой суммой на своё усмотрение, перейдя по данной ссылке.