Тёмный

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

Олег Волков
Подписаться 10 тыс.
Просмотров 8 тыс.
50% 1

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

Наука

Опубликовано:

 

30 апр 2022

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 79   
@G0rm1998
@G0rm1998 2 года назад
Спасибо большое, вы очень помогли разобраться с работой с EEPROM! Никак не получалось собрать для себя рабочий тестовый пример пока не наткнулся на ваше видео.
@user-ci4fz9co3b
@user-ci4fz9co3b 2 года назад
Спасибо за урок, всегда полезно посмотреть когда другие чего нибудь кодят. Я байтики пишу прямо во флешь в конец памяти, благо у С8Т6 странички по 2 кило.
@OpenFrimeTVcom
@OpenFrimeTVcom 2 года назад
о, новая информация. спасибо.
@user-tg5jn2vg3x
@user-tg5jn2vg3x 2 года назад
Большое спасибо за видео. Как всегда очень интересно и максимально информативно!
@wdm_frwrd
@wdm_frwrd 2 года назад
Спасибо за второе(?) видео по теме CRC! В связке STM32F303 и AT24C04 библиотека работает, но только если указать, что это 24c02. Странно :) С 24c32 всё ОК!
@Solderingironspb
@Solderingironspb 2 года назад
Проверьте, может мы с параметрами немного накосячили. У меня только 128 всегда были, тестануть на всех моделях не было возможности)
@ebjikkolu4757
@ebjikkolu4757 2 года назад
Спасибо ,было вкусно . Работал с EEPROM внутри часов DS1307 ,там 56 байт ,вроде .Сделал из этого мини блокнот для заметок . Упомянули что занимаетесь в промышленной сфере .Хотелось бы услышать ваше мнение насколько возможно AVR-щику ,STM-щику перейти от конструктора к более серьезным вещам .Да и вообще интересно бы было послушать вашу историю становления в этой сфере .С уважением
@Solderingironspb
@Solderingironspb 2 года назад
чтоб перейти с пониманием в разработку более менее надежных устройств - нужно поработать с надежными устройствами вживую, поразбирать их, посмотреть, как именитые фирмы делают какие-либо решения и попытаться сделать аналог. Если удастся еще и протестировать в тех же условиях эксплуатации - то вообще замечательно. В большинстве случаев, в последнее время, я просто сижу, смотрю, кто как строит контроллеры, что-то подчерпываю и делаю похожее устройство из деталей, что есть под рукой. Сейчас вот разрабатываю устройство для подключения кондуктометрических датчиков уровня воды. (То что в интернете все ардуинщики подключают к щупам постоянку и показывают, что у них все работает и все счастливы - так делать нельзя. Нужно переменное напряжение. Опять же это можно встретить в основном только в промышленности.) Только сделать нормальный генератор +/- 5В 25 Гц без контроллеров и прочего - это уже опыт получил, т.к. кучу вариантов перебрал. А потом из переменки детектировать наличие воды, усилить сигнал, чтоб пустить на компаратор или АЦП ПЛК - это еще одно приключение) Нужно просто с этим всем работать, чтоб понимать хоть немного, на что опираться и какие цели преследовать.
@KARMAElectronics
@KARMAElectronics 2 года назад
Хорошее подробное видео) Настоятельно рекомендую использовать внутреннюю 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 действительно возможности нет (сорян, забыл), давненько я с ними плотно не занимался, всё миландры для МК внутренней разработки нашей компании)
@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 10 месяцев назад
Думаю, что ответ на вопрос можно найти в вырезке из даташита на 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 10 месяцев назад
@@user-xn5lf6fx1l Вы же привели то же, что написал я выше. И у автора "Пример - AT24C128".
@user-xn5lf6fx1l
@user-xn5lf6fx1l 10 месяцев назад
@@user-ld7vr3fz3p Извиняюсь, походу я неправильно понял ваш комментарий !
@OpenFrimeTVcom
@OpenFrimeTVcom 2 года назад
еще читал что и2с не правильно инициализируется.. выпадает в ошибку HAL_BUSY не встречались с таким?
@Solderingironspb
@Solderingironspb 2 года назад
Урок#11. На второй минуте рассказывал про это) ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-Lx17QUAI1yU.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 очень странно, а что именно было в лог анализаторе? помеха или что?
@ciklomat
@ciklomat 2 года назад
Было бы здорово, если бы вы не использовали библиотеку HAL и дописывать задержки потому ,что не куда торопиться это ни есть гуд.
@Solderingironspb
@Solderingironspb 2 года назад
Задержки необходимы для работы с этим типом памяти
@PsymoNbond
@PsymoNbond 2 года назад
а структуры тоже можно таким образом записывать? да еще и с проверкой CRC32
@alx123
@alx123 2 года назад
да, но за раз можно записать не более одной страницы, и если структура больше, надо дробить или писать словами/байтами (насчет реализации в библиотеке не знаю).
@PsymoNbond
@PsymoNbond 2 года назад
Спасибо за совет)
@Solderingironspb
@Solderingironspb 2 года назад
Под структуры нужно чуть-чуть дописать функцию, чтоб CRC32 от всей структуры считалось.
@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 логи всякие нужны... логи всякие важны))) Ситуации разные бывают и иногда нужно очень часто производить запись я одну и ту же область памяти.
@namename2031
@namename2031 Год назад
5:02 Я вам тут не обучающее видео записываю, поэтому не буду вам рассказывать. А так, чисто похвастаться. Я вас понял, когда я научусь подключать еепром к СТМ плате, я обязательно посмотрю ваш ролик. Но это не точно.
@Solderingironspb
@Solderingironspb Год назад
Потому что был на канале уже исчерпывающий ролик по crc, где я рассказывал что это и для чего: STM32. CRC. Теория. Как считать. Алгоритм. CRC HAL. Аппаратный блок. CRC-8/16/32 бита. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-YyQonUJrBn4.html
@user-zw2gp8jh1r
@user-zw2gp8jh1r 7 месяцев назад
а теперь все то же самое, но в arduino ide!!!
@Solderingironspb
@Solderingironspb 7 месяцев назад
А теперь все то же самое повтори сам, где хочешь)
@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 Год назад
А Вы дилей используете при записи?
Далее
SSD с кулером и скоростью 1 ГБ/с
0:47
Собери ПК и Получи 10,000₽
1:00
Просмотров 1,5 млн