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

  Переглядів 7,077

Олег Волков

Олег Волков

2 роки тому

Давно просили снять видео по работе с какой-нибудь внешней памятью, чтоб сохранять настройки. Внутреннюю память МК использовать не хочется. EEPROM мне нравится надежностью и простотой. Пишешь в любой участок памяти, читаешь с любого участка памяти. Красота, да и только.
Скачать библиотеку: github.com/Solderingironspb/A...
Мы вконтакте: solderingiron.stm32
ЯндексДзен: zen.yandex.ru/id/622208eed2eb...

КОМЕНТАРІ: 79
@G0rm1998
@G0rm1998 2 роки тому
Спасибо большое, вы очень помогли разобраться с работой с EEPROM! Никак не получалось собрать для себя рабочий тестовый пример пока не наткнулся на ваше видео.
@user-ci4fz9co3b
@user-ci4fz9co3b 2 роки тому
Спасибо за урок, всегда полезно посмотреть когда другие чего нибудь кодят. Я байтики пишу прямо во флешь в конец памяти, благо у С8Т6 странички по 2 кило.
@OpenFrimeTVcom
@OpenFrimeTVcom 2 роки тому
о, новая информация. спасибо.
@wdm_frwrd
@wdm_frwrd 2 роки тому
Спасибо за второе(?) видео по теме CRC! В связке STM32F303 и AT24C04 библиотека работает, но только если указать, что это 24c02. Странно :) С 24c32 всё ОК!
@Solderingironspb
@Solderingironspb 2 роки тому
Проверьте, может мы с параметрами немного накосячили. У меня только 128 всегда были, тестануть на всех моделях не было возможности)
@KARMAElectronics
@KARMAElectronics Рік тому
Хорошее подробное видео) Настоятельно рекомендую использовать внутреннюю flash микроконтроллера как более универсальное решение P. S. Если забыл подтяжку накрайняк можно включить внутренние 10к и отлаживаться на малых скоростях
@Solderingironspb
@Solderingironspb Рік тому
Я думал о внутренней подтяжке линии i2c, но на F103 чет их нет походу. На других сериях были.
@sozdatelEd
@sozdatelEd Рік тому
Можно пошаговую инструкцию как включить внутреннее подтягивающее сопротивление на 10к? ноги контроллера stm32f103xx для i2c настраиваются как альтернативная функция и работают как "открытый коллектор". Согласно документy DS5319 STmicroelectronics предлагают электрическую схему в которой установлены внешние подтягивающие резисторы по 4,7кОм на каждую линию шины i2c. Согласно всё той же документации внутренние подтягивающие резисторы pull-up и pull-down в районе 40кОм.
@KARMAElectronics
@KARMAElectronics Рік тому
@@sozdatelEd как правильно заметил автор канала - на других контроллерах вполне возможно) RM0360 p137 А на 103 действительно возможности нет (сорян, забыл), давненько я с ними плотно не занимался, всё миландры для МК внутренней разработки нашей компании)
@ebjikkolu4757
@ebjikkolu4757 2 роки тому
Спасибо ,было вкусно . Работал с EEPROM внутри часов DS1307 ,там 56 байт ,вроде .Сделал из этого мини блокнот для заметок . Упомянули что занимаетесь в промышленной сфере .Хотелось бы услышать ваше мнение насколько возможно AVR-щику ,STM-щику перейти от конструктора к более серьезным вещам .Да и вообще интересно бы было послушать вашу историю становления в этой сфере .С уважением
@Solderingironspb
@Solderingironspb 2 роки тому
чтоб перейти с пониманием в разработку более менее надежных устройств - нужно поработать с надежными устройствами вживую, поразбирать их, посмотреть, как именитые фирмы делают какие-либо решения и попытаться сделать аналог. Если удастся еще и протестировать в тех же условиях эксплуатации - то вообще замечательно. В большинстве случаев, в последнее время, я просто сижу, смотрю, кто как строит контроллеры, что-то подчерпываю и делаю похожее устройство из деталей, что есть под рукой. Сейчас вот разрабатываю устройство для подключения кондуктометрических датчиков уровня воды. (То что в интернете все ардуинщики подключают к щупам постоянку и показывают, что у них все работает и все счастливы - так делать нельзя. Нужно переменное напряжение. Опять же это можно встретить в основном только в промышленности.) Только сделать нормальный генератор +/- 5В 25 Гц без контроллеров и прочего - это уже опыт получил, т.к. кучу вариантов перебрал. А потом из переменки детектировать наличие воды, усилить сигнал, чтоб пустить на компаратор или АЦП ПЛК - это еще одно приключение) Нужно просто с этим всем работать, чтоб понимать хоть немного, на что опираться и какие цели преследовать.
@user-tg5jn2vg3x
@user-tg5jn2vg3x 2 роки тому
Большое спасибо за видео. Как всегда очень интересно и максимально информативно!
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 2 роки тому
На 103 камни и2с дико глючно работает. Я вместо еепром использую fram , там нет заморочек с временем записи и со страницами, все гораздо удобнее
@PsymoNbond
@PsymoNbond 2 роки тому
2 включенных i2c не могут правильно работать на 103 камне(у меня не получилось запустить) эх)
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 2 роки тому
@@PsymoNbond . Должны быть решения, почитай errata sheet
@sozdatelEd
@sozdatelEd 2 роки тому
с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.
@SevenNightdreemVeryPavlovny
@SevenNightdreemVeryPavlovny 2 роки тому
@@sozdatelEd там есть ещё баг который вылезает когда частота тактирования высокая, глюк описан, программное решение есть, но если надо и2ц то я нахрен не хочу 103 камни в принципе применять)
@sozdatelEd
@sozdatelEd 2 роки тому
@@SevenNightdreemVeryPavlovny высокая насколько? у меня все проекты с того года работают. 1,2 МГц i2c в некоторых проектах делал. Полёт нормальный.😎
@user-ld7vr3fz3p
@user-ld7vr3fz3p Рік тому
Спасибо, но есть несколько моментов: Почему адрес 0x50, хотя в datasheet написано MSB 1010xxxy LSB. Или младший бит y, определяющий запись/чтение, уже не бит? Адрес страницы: инкремент в микросхеме при записи идет в пределах этой самой страницы. Попробуйте в AT24C128 с размером страницы 64 байта записать подряд 10-ть байт с адреса 60. Первые 4-ре запишутся как нужно, а остальные "улетят" на 0-вой адрес и продолжат с него. Микросхема начинает запись в память с момента появления сигнала STOP на шине и пишет принятый в оперативку буфер. Отсюда и "глюк", который я описал.
@user-xn5lf6fx1l
@user-xn5lf6fx1l 9 місяців тому
Думаю, что ответ на вопрос можно найти в вырезке из даташита на 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. "
@user-ld7vr3fz3p
@user-ld7vr3fz3p 9 місяців тому
@@user-xn5lf6fx1l Вы же привели то же, что написал я выше. И у автора "Пример - AT24C128".
@user-xn5lf6fx1l
@user-xn5lf6fx1l 9 місяців тому
@@user-ld7vr3fz3p Извиняюсь, походу я неправильно понял ваш комментарий !
@ciklomat
@ciklomat 2 роки тому
Было бы здорово, если бы вы не использовали библиотеку HAL и дописывать задержки потому ,что не куда торопиться это ни есть гуд.
@Solderingironspb
@Solderingironspb 2 роки тому
Задержки необходимы для работы с этим типом памяти
@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 логи всякие нужны... логи всякие важны))) Ситуации разные бывают и иногда нужно очень часто производить запись я одну и ту же область памяти.
@OpenFrimeTVcom
@OpenFrimeTVcom 2 роки тому
еще читал что и2с не правильно инициализируется.. выпадает в ошибку HAL_BUSY не встречались с таким?
@Solderingironspb
@Solderingironspb 2 роки тому
Урок#11. На второй минуте рассказывал про это) ukposts.info/have/v-deo/hKhia4eMeH9i2ok.html
@OpenFrimeTVcom
@OpenFrimeTVcom 2 роки тому
@@Solderingironspb ух. одной проблемой меньше. отлично)
@sozdatelEd
@sozdatelEd 2 роки тому
@@Solderingironspb с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.
@sozdatelEd
@sozdatelEd 2 роки тому
@@OpenFrimeTVcom 22пф параллельно подтягивающему резистору линии SDA решает все проблемы. И не надо код править как описано в статье
@OpenFrimeTVcom
@OpenFrimeTVcom 2 роки тому
@@sozdatelEd очень странно, а что именно было в лог анализаторе? помеха или что?
@PsymoNbond
@PsymoNbond 2 роки тому
а структуры тоже можно таким образом записывать? да еще и с проверкой CRC32
@alx123
@alx123 2 роки тому
да, но за раз можно записать не более одной страницы, и если структура больше, надо дробить или писать словами/байтами (насчет реализации в библиотеке не знаю).
@PsymoNbond
@PsymoNbond 2 роки тому
Спасибо за совет)
@Solderingironspb
@Solderingironspb 2 роки тому
Под структуры нужно чуть-чуть дописать функцию, чтоб CRC32 от всей структуры считалось.
@namename2031
@namename2031 11 місяців тому
5:02 Я вам тут не обучающее видео записываю, поэтому не буду вам рассказывать. А так, чисто похвастаться. Я вас понял, когда я научусь подключать еепром к СТМ плате, я обязательно посмотрю ваш ролик. Но это не точно.
@Solderingironspb
@Solderingironspb 11 місяців тому
Потому что был на канале уже исчерпывающий ролик по crc, где я рассказывал что это и для чего: STM32. CRC. Теория. Как считать. Алгоритм. CRC HAL. Аппаратный блок. CRC-8/16/32 бита. ukposts.info/have/v-deo/kamCo6SMgahzz2g.html
@user-zw2gp8jh1r
@user-zw2gp8jh1r 5 місяців тому
а теперь все то же самое, но в arduino ide!!!
@Solderingironspb
@Solderingironspb 5 місяців тому
А теперь все то же самое повтори сам, где хочешь)
@user-mu1xd1zq6v
@user-mu1xd1zq6v Рік тому
Добрый день. Пробую использовать Вашу библиотеку 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 Рік тому
Добрый день, возникают ошибки при записи. Если Писать, а потом сразу читать то ошибок не возникает, а если записывать сразу до половины всей памяти, а потом читать, считывается каша! AT24Cxx_write AT24Cxx_write AT24Cxx_write AT24Cxx_write ...... AT24Cxx_write AT24Cxx_read AT24Cxx_read AT24Cxx_read ..... AT24Cxx_read
@Solderingironspb
@Solderingironspb Рік тому
А Вы дилей используете при записи?
Visual Studio + VisualGDB + STM32. Обзор. Пробный проект.
29:38
Олег Волков
Переглядів 8 тис.
The World's Fastest Cleaners
00:35
MrBeast
Переглядів 91 млн
ВИРУСНЫЕ ВИДЕО / Мусорка 😂
00:34
Светлый Voiceover
Переглядів 8 млн
Помилка,  яку зробило військове керівництво 🙄
01:00
Радіо Байрактар
Переглядів 343 тис.
LCD1602/LCD2004. Подключаем к Stm32 по i2c.
29:43
Олег Волков
Переглядів 10 тис.
Using an EEPROM to replace combinational logic
25:22
Ben Eater
Переглядів 1,4 млн
Урок 27. EEPROM настройки | Часть 1 | Программирование микроконтроллеров AVR
29:25
Программирование микроконтроллеров для начинающих!
Переглядів 47 тис.
STM32 #7. PWM - для изменения яркости LEDs
27:40
NR.electronics
Переглядів 5 тис.
iPhone 15 Precision Finding | Find Your Friends | Apple
2:52
Що покаже Apple, гнучкі айфони та Windows переходить на ARM
17:49
Ноталка Шелягіна
Переглядів 59 тис.