Кремень КД Реклама
Кремень КМ Реклама

Добавляем внешнюю память I2C EEPROM

trengtor
Идет загрузка
Загрузка
08.11.2023
3141
3
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

18

Возникла у меня необходимость добавить память EEPROM на не имеющую её плату управления (в моём случае это была SKR 2 Rev.A).

Добавляем внешнюю память I2C EEPROM

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

Шина I2C

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

Добавляем внешнюю память I2C EEPROM

Обратите внимание: линий шины  I2C «подтягиваются» к питанию только в одном месте.

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

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

Добавляем внешнюю память I2C EEPROM

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

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

Здесь сигнальные линии микросхемы U1 оказываются «подтянуты» к напряжению питания модуля (в данном случае это +5В) через резисторы R1 и R2.

Добавляем внешнюю память I2C EEPROM

При подключении модуля к плате управления, её источники питания +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

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

Схема модуля изначально рассчитана на подключение к плате SKR 2, поэтому для других плат управление необходимо проверять распиновку сигналов SDA и SLC на разъёме I2C. 

Добавляем внешнюю память I2C EEPROM

На плате модуля (для неё был взят кусок макетной платы 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 EEPROM

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

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

18
Комментарии к статье
Лидер форум Реклама
Лидер форум М Реклама