Добавляем внешнюю память I2C EEPROM
Возникла у меня необходимость добавить память EEPROM на не имеющую её плату управления (в моём случае это была SKR 2 Rev.A).
Сначала я хотел просто купить на Алиэкспрессе готовый модуль BTT EEPROM V1.0, но изучив схемы этого модуля и платы SKR-2 решил, что и проще, и правильнее, и намного быстрее будет сделать свой вариант модуля I2C EEPROM. С актуализированной, а не c унаследованной из эпохи Arduino/RAMPS, схемотехникой.
Шина I2C
Для начала посмотрим на организацию шины I2C.
Обратите внимание: линий шины I2C «подтягиваются» к питанию только в одном месте.
Плата SKR 2: разъём I2C
Здесь нужно обратить внимание на то, что на модуль, подключаемый к шине I2C, плата подаёт питание +5 В, при этом сигнальные линии шины «подтянуты» платой к источнику +3,3 В.
Формально, для шины I2C это вполне допустимо, так как она использует сигнальные порты типа открытый сток или открытый коллектор в схеме «монтажное ИЛИ»). Но подключаемые к ней устройства должны быть рассчитаны на соответствующие напряжения питания и шины I2C.
Схема модуля BTT EEPROM V1.0
Здесь сигнальные линии микросхемы U1 оказываются «подтянуты» к напряжению питания модуля (в данном случае это +5В) через резисторы 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 (но мне такие пока что не попадались).
Еще больше интересных статей
Постобработка TPU (FDplast) - горячее масло
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Про новую УФ камеру. Сделали.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Решил я тут попробовать перейти с 8 бит на 32.
Готовы...
Комментарии и вопросы
что характерно количество воро...
Судя по тексту и фото головы п...
Жаль, что не везде так.
Здравствуйте. Прошу помоч...
Всем привет друзья!Приобрел БУ...
Решил погрузиться с головой в...
Всем добрый вечер! Неожиданно...