EEPROM AT24Cxx. Подключаем к STM32. CRC32.

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 ก.พ. 2025
  • Давно просили снять видео по работе с какой-нибудь внешней памятью, чтоб сохранять настройки. Внутреннюю память МК использовать не хочется. EEPROM мне нравится надежностью и простотой. Пишешь в любой участок памяти, читаешь с любого участка памяти. Красота, да и только.
    Скачать библиотеку: github.com/Sol...
    Мы вконтакте: solderi...
    ЯндексДзен: zen.yandex.ru/...

ความคิดเห็น • 79

  • @G0rm1998
    @G0rm1998 2 ปีที่แล้ว +3

    Спасибо большое, вы очень помогли разобраться с работой с EEPROM!
    Никак не получалось собрать для себя рабочий тестовый пример пока не наткнулся на ваше видео.

  • @АлександрДаскаль-е6т
    @АлександрДаскаль-е6т 2 ปีที่แล้ว +3

    Спасибо за урок, всегда полезно посмотреть когда другие чего нибудь кодят. Я байтики пишу прямо во флешь в конец памяти, благо у С8Т6 странички по 2 кило.

  • @KARMAElectronics
    @KARMAElectronics 2 ปีที่แล้ว +1

    Хорошее подробное видео)
    Настоятельно рекомендую использовать внутреннюю flash микроконтроллера как более универсальное решение
    P. S. Если забыл подтяжку накрайняк можно включить внутренние 10к и отлаживаться на малых скоростях

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว

      Я думал о внутренней подтяжке линии i2c, но на F103 чет их нет походу. На других сериях были.

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      Можно пошаговую инструкцию как включить внутреннее подтягивающее сопротивление на 10к?
      ноги контроллера stm32f103xx для i2c настраиваются как альтернативная функция и работают как "открытый коллектор". Согласно документy DS5319 STmicroelectronics предлагают электрическую схему в которой установлены внешние подтягивающие резисторы по 4,7кОм на каждую линию шины i2c. Согласно всё той же документации внутренние подтягивающие резисторы pull-up и pull-down в районе 40кОм.

    • @KARMAElectronics
      @KARMAElectronics 2 ปีที่แล้ว

      @@sozdatelEd как правильно заметил автор канала - на других контроллерах вполне возможно)
      RM0360
      p137
      А на 103 действительно возможности нет (сорян, забыл), давненько я с ними плотно не занимался, всё миландры для МК внутренней разработки нашей компании)

  • @ebjikkolu4757
    @ebjikkolu4757 2 ปีที่แล้ว +2

    Спасибо ,было вкусно . Работал с EEPROM внутри часов DS1307 ,там 56 байт ,вроде .Сделал из этого мини блокнот для заметок . Упомянули что занимаетесь в промышленной сфере .Хотелось бы услышать ваше мнение насколько возможно AVR-щику ,STM-щику перейти от конструктора к более серьезным вещам .Да и вообще интересно бы было послушать вашу историю становления в этой сфере .С уважением

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว +5

      чтоб перейти с пониманием в разработку более менее надежных устройств - нужно поработать с надежными устройствами вживую, поразбирать их, посмотреть, как именитые фирмы делают какие-либо решения и попытаться сделать аналог. Если удастся еще и протестировать в тех же условиях эксплуатации - то вообще замечательно. В большинстве случаев, в последнее время, я просто сижу, смотрю, кто как строит контроллеры, что-то подчерпываю и делаю похожее устройство из деталей, что есть под рукой. Сейчас вот разрабатываю устройство для подключения кондуктометрических датчиков уровня воды. (То что в интернете все ардуинщики подключают к щупам постоянку и показывают, что у них все работает и все счастливы - так делать нельзя. Нужно переменное напряжение. Опять же это можно встретить в основном только в промышленности.) Только сделать нормальный генератор +/- 5В 25 Гц без контроллеров и прочего - это уже опыт получил, т.к. кучу вариантов перебрал. А потом из переменки детектировать наличие воды, усилить сигнал, чтоб пустить на компаратор или АЦП ПЛК - это еще одно приключение) Нужно просто с этим всем работать, чтоб понимать хоть немного, на что опираться и какие цели преследовать.

  • @wdm_frwrd
    @wdm_frwrd 2 ปีที่แล้ว

    Спасибо за второе(?) видео по теме CRC! В связке STM32F303 и AT24C04 библиотека работает, но только если указать, что это 24c02. Странно :) С 24c32 всё ОК!

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว

      Проверьте, может мы с параметрами немного накосячили. У меня только 128 всегда были, тестануть на всех моделях не было возможности)

  • @АлександрСадальский-ж4в
    @АлександрСадальский-ж4в 2 ปีที่แล้ว +1

    Большое спасибо за видео. Как всегда очень интересно и максимально информативно!

  • @openFrimeTv
    @openFrimeTv 2 ปีที่แล้ว +1

    о, новая информация. спасибо.

  • @sozdatelEd
    @sozdatelEd 2 ปีที่แล้ว

    Позволю себе немного критики:
    1. Почему адрес 0x50? В даташите же полный байт приведён и там даже где-то написано OxA0 + адрес установленный ножками A0 и A1. Почему сразу нормально не писать? HAL конечно дальше сам выставляет нулевой бит этого байта в зависимости от того читаем мы или записываем данные.
    2. Почему в библиотеке задержка по 10мс, когда по документации необходимы 5мс? У нас нет других задач и можно ждать, когда либа передаст управление основной логике)))?
    А вообще советую использовать память FRAM серии FM24xx. Там триллионы циклов перезаписи, 150 лет гарантии записи против 40 лет у AT и вообще не надо ждать 5мс после записи. Полная совместимость с серией AT24. Просто запаял и радуемся убрав задержки.

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว

      1. Можно писать сразу, можно не сразу. Кто как привык.
      2. В какие-то разы бывало, что не отрабатывало нормально с 5мс, увеличили до 10мс.
      Можете с 5мс потестить. По поводу задержек, я не совсем понимаю, чего у всех бомбит. Есть важные задачи, требующие точного соблюдения тайминга? пустите эту задачу тогда по таймеру, ему пофиг будет на дилей и процессы, кушающие много времени в основном цикле. Т.е. проблема надумана на самом деле.
      С теми же дисплеями, как они время процессорное жрут, никого не смущает?) Увидели дилей маленький и все, у всех сразу бомбит, мол как же так, теперь основной цикл будет прерываться.
      FRAM FM24xx тоже потестим. Триллионы цилов перезаписи конечно круто и 150 лет против 40 лет, но блин....Вы серьезно?!) Вам 40 лет мало?) Вам миллиона перезаписи настройки мало?)

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      @@Solderingironspb ну бомбит потому что есть опыт. А про дисплей не совсемм корректный пример. Разница в том что "действовать" в это время, или "бездействовать". Можно за это время кучу задач выполнить, а контроллер тупо висит в ожидании завершения задежки.
      Есть проекты где миллиона перезаписей одного блока мало. Ресурс у микросхемы заканчивается через несколько месяцев эксплуатации устройства. Ситуации разные бывают.

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      @@Solderingironspb "можете потестить с 5мс"
      А что мне тестить? У меня в разных проектах такая память используется. Везде 5мс хватает. Проверено на 24C 02, 04, 08, 32, 64, 256, CM02

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว

      Ну если сохранять на нее каждую минуту что-то, то да…а если использовать чисто для настроек устройства, то норм. К тому же, можно смещение делать, чтоб в одну ячейку не писать постоянно.

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      @@Solderingironspb логи всякие нужны... логи всякие важны)))
      Ситуации разные бывают и иногда нужно очень часто производить запись я одну и ту же область памяти.

  • @ИванСидоров-к9м
    @ИванСидоров-к9м ปีที่แล้ว

    Спасибо, но есть несколько моментов:
    Почему адрес 0x50, хотя в datasheet написано MSB 1010xxxy LSB. Или младший бит y, определяющий запись/чтение, уже не бит?
    Адрес страницы: инкремент в микросхеме при записи идет в пределах этой самой страницы. Попробуйте в AT24C128 с размером страницы 64 байта записать подряд 10-ть байт с адреса 60. Первые 4-ре запишутся как нужно, а остальные "улетят" на 0-вой адрес и продолжат с него. Микросхема начинает запись в память с момента появления сигнала STOP на шине и пишет принятый в оперативку буфер. Отсюда и "глюк", который я описал.

    • @АлександровичЯ-к5с
      @АлександровичЯ-к5с ปีที่แล้ว

      Думаю, что ответ на вопрос можно найти в вырезке из даташита на EEPROM - AT24C1024B
      " PAGE WRITE: The 1024K EEPROM is capable of 256-byte page writes.
      A page write is initiated the same way as a byte write, but the microcontroller does not send a
      stop condition after the first data word is clocked in. Instead, after the EEPROM acknowledges
      receipt of the first data word, the microcontroller can transmit up to 255 more data words. The
      EEPROM will respond with a zero after each data word received. The microcontroller must terminate
      the page write sequence with a stop condition (see Figure 7-3 on page 11).
      The data word address lower 8 bits are internally incremented following the receipt of each data
      word. The higher data word address bits are not incremented, retaining the memory page row
      location. When the word address, internally generated, reaches the page boundary, the following
      byte is placed at the beginning of the same page. If more than 256 data words are
      transmitted to the EEPROM, the data word address will “roll over” and previous data will be
      overwritten. The address “rollover” during write is from the last byte of the current page to the
      first byte of the same page. "

    • @ИванСидоров-к9м
      @ИванСидоров-к9м ปีที่แล้ว

      @@АлександровичЯ-к5с Вы же привели то же, что написал я выше. И у автора "Пример - AT24C128".

    • @АлександровичЯ-к5с
      @АлександровичЯ-к5с ปีที่แล้ว

      @@ИванСидоров-к9м
      Извиняюсь, походу я неправильно понял ваш комментарий !

  • @ciklomat
    @ciklomat 2 ปีที่แล้ว

    Было бы здорово, если бы вы не использовали библиотеку HAL и дописывать задержки потому ,что не куда торопиться это ни есть гуд.

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว

      Задержки необходимы для работы с этим типом памяти

  • @openFrimeTv
    @openFrimeTv 2 ปีที่แล้ว +1

    еще читал что и2с не правильно инициализируется.. выпадает в ошибку HAL_BUSY
    не встречались с таким?

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว +1

      Урок#11. На второй минуте рассказывал про это) th-cam.com/video/Lx17QUAI1yU/w-d-xo.html

    • @openFrimeTv
      @openFrimeTv 2 ปีที่แล้ว +1

      @@Solderingironspb ух. одной проблемой меньше. отлично)

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      @@Solderingironspb с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      @@openFrimeTv 22пф параллельно подтягивающему резистору линии SDA решает все проблемы. И не надо код править как описано в статье

    • @openFrimeTv
      @openFrimeTv 2 ปีที่แล้ว

      @@sozdatelEd очень странно, а что именно было в лог анализаторе? помеха или что?

  • @SevenNightdreemVeryPavlovny
    @SevenNightdreemVeryPavlovny 2 ปีที่แล้ว

    На 103 камни и2с дико глючно работает. Я вместо еепром использую fram , там нет заморочек с временем записи и со страницами, все гораздо удобнее

    • @PsymoNbond
      @PsymoNbond 2 ปีที่แล้ว

      2 включенных i2c не могут правильно работать на 103 камне(у меня не получилось запустить) эх)

    • @SevenNightdreemVeryPavlovny
      @SevenNightdreemVeryPavlovny 2 ปีที่แล้ว

      @@PsymoNbond . Должны быть решения, почитай errata sheet

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว +2

      с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.

    • @SevenNightdreemVeryPavlovny
      @SevenNightdreemVeryPavlovny 2 ปีที่แล้ว

      @@sozdatelEd там есть ещё баг который вылезает когда частота тактирования высокая, глюк описан, программное решение есть, но если надо и2ц то я нахрен не хочу 103 камни в принципе применять)

    • @sozdatelEd
      @sozdatelEd 2 ปีที่แล้ว

      @@SevenNightdreemVeryPavlovny высокая насколько? у меня все проекты с того года работают. 1,2 МГц i2c в некоторых проектах делал. Полёт нормальный.😎

  • @namename2031
    @namename2031 ปีที่แล้ว

    5:02
    Я вам тут не обучающее видео записываю, поэтому не буду вам рассказывать.
    А так, чисто похвастаться.
    Я вас понял, когда я научусь подключать еепром к СТМ плате, я обязательно посмотрю ваш ролик.
    Но это не точно.

    • @Solderingironspb
      @Solderingironspb  ปีที่แล้ว +1

      Потому что был на канале уже исчерпывающий ролик по crc, где я рассказывал что это и для чего: STM32. CRC. Теория. Как считать. Алгоритм. CRC HAL. Аппаратный блок. CRC-8/16/32 бита.
      th-cam.com/video/YyQonUJrBn4/w-d-xo.html

  • @PsymoNbond
    @PsymoNbond 2 ปีที่แล้ว

    а структуры тоже можно таким образом записывать? да еще и с проверкой CRC32

    • @alx123
      @alx123 2 ปีที่แล้ว +1

      да, но за раз можно записать не более одной страницы, и если структура больше, надо дробить или писать словами/байтами (насчет реализации в библиотеке не знаю).

    • @PsymoNbond
      @PsymoNbond 2 ปีที่แล้ว

      Спасибо за совет)

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว +1

      Под структуры нужно чуть-чуть дописать функцию, чтоб CRC32 от всей структуры считалось.

  • @Ёшкинсвет-к2х
    @Ёшкинсвет-к2х ปีที่แล้ว

    а теперь все то же самое, но в arduino ide!!!

    • @Solderingironspb
      @Solderingironspb  ปีที่แล้ว

      А теперь все то же самое повтори сам, где хочешь)

  • @СергейРыляков
    @СергейРыляков 2 ปีที่แล้ว

    Добрый день. Пробую использовать Вашу библиотеку AT24Cxx.h и почему-то при компиляции вылетает 19 ошибок. Использую отладочную плату STM32 Smart. v2.0 на микроконтроллере stm32f103c8t6. EEPROM уже на плате присутствует. Судя по даташиту адресс у памяти 0x28. В хедере я адресс изменил. Вот то, что выдал мне компилятор. Эти все ошибки отметились именно в файлах Вашей библиотеки. Вы не помежете разобраться?
    Description Resource Path Location Type
    'GPIO_PIN_5' undeclared (first use in this function) AT24Cxx.h /EEPROM_Demo/Inc line 95 C/C++ Problem
    'GPIOB' undeclared (first use in this function) AT24Cxx.h /EEPROM_Demo/Inc line 94 C/C++ Problem
    'HAL_MAX_DELAY' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 43 C/C++ Problem
    'HAL_MAX_DELAY' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 72 C/C++ Problem
    'HAL_MAX_DELAY' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 160 C/C++ Problem
    'HAL_OK' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 26 C/C++ Problem
    'I2C_MEMADD_SIZE_16BIT' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 43 C/C++ Problem
    'I2C_MEMADD_SIZE_16BIT' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 72 C/C++ Problem
    'I2C_MEMADD_SIZE_16BIT' undeclared (first use in this function) AT24Cxx.c /EEPROM_Demo/Src line 160 C/C++ Problem
    unknown type name 'CRC_HandleTypeDef' AT24Cxx.h /EEPROM_Demo/Inc line 70 C/C++ Problem
    unknown type name 'I2C_HandleTypeDef' AT24Cxx.h /EEPROM_Demo/Inc line 65 C/C++ Problem
    unknown type name 'uint16_t' AT24Cxx.h /EEPROM_Demo/Inc line 134 C/C++ Problem
    unknown type name 'uint16_t' AT24Cxx.h /EEPROM_Demo/Inc line 135 C/C++ Problem
    unknown type name 'uint16_t' AT24Cxx.h /EEPROM_Demo/Inc line 136 C/C++ Problem
    unknown type name 'uint16_t' AT24Cxx.h /EEPROM_Demo/Inc line 137 C/C++ Problem
    unknown type name 'uint8_t' AT24Cxx.h /EEPROM_Demo/Inc line 134 C/C++ Problem
    unknown type name 'uint8_t' AT24Cxx.h /EEPROM_Demo/Inc line 135 C/C++ Problem
    unknown type name 'uint8_t' AT24Cxx.h /EEPROM_Demo/Inc line 136 C/C++ Problem
    unknown type name 'uint8_t' AT24Cxx.h /EEPROM_Demo/Inc line 137 C/C++ Problem
    "WP_Pin" redefined AT24Cxx.h /EEPROM_Demo/Inc line 95 C/C++ Problem
    control reaches end of non-void function [-Wreturn-type] AT24Cxx.c /EEPROM_Demo/Src line 29 C/C++ Problem
    implicit declaration of function 'HAL_CRC_Calculate' [-Wimplicit-function-declaration] AT24Cxx.c /EEPROM_Demo/Src line 186 C/C++ Problem
    implicit declaration of function 'HAL_Delay' [-Wimplicit-function-declaration] AT24Cxx.c /EEPROM_Demo/Src line 46 C/C++ Problem
    implicit declaration of function 'HAL_I2C_IsDeviceReady' [-Wimplicit-function-declaration] AT24Cxx.c /EEPROM_Demo/Src line 26 C/C++ Problem
    implicit declaration of function 'HAL_I2C_Mem_Read' [-Wimplicit-function-declaration] AT24Cxx.c /EEPROM_Demo/Src line 160 C/C++ Problem
    implicit declaration of function 'HAL_I2C_Mem_Write' [-Wimplicit-function-declaration] AT24Cxx.c /EEPROM_Demo/Src line 43 C/C++ Problem

  • @FastovConstantine
    @FastovConstantine 2 ปีที่แล้ว

    Добрый день, возникают ошибки при записи. Если Писать, а потом сразу читать то ошибок не возникает, а если записывать сразу до половины всей памяти, а потом читать, считывается каша!
    AT24Cxx_write
    AT24Cxx_write
    AT24Cxx_write
    AT24Cxx_write
    ......
    AT24Cxx_write
    AT24Cxx_read
    AT24Cxx_read
    AT24Cxx_read
    .....
    AT24Cxx_read

    • @Solderingironspb
      @Solderingironspb  2 ปีที่แล้ว

      А Вы дилей используете при записи?