Есть ли у STM32F103 EEPROM?
Обновлено Редакция GAW
В STM32F103 нет отдельной памяти данных EEPROM, как у ATmega328P: в составе только флеш-память программ 64 или 128 КБ и ОЗУ 20 КБ. Настройки, которые должны пережить выключение, хранят одним из трёх способов.
| Способ | Объём | Ресурс записи | Когда подходит |
|---|---|---|---|
| Страница флеш-памяти | 1 КБ на страницу | 10 000 стираний | настройки, калибровки |
| Резервные регистры | 20 байт | это регистры, а не флеш-память | счётчики, флаги; нужна батарейка на VBAT |
| Внешняя EEPROM по I2C | 32 КБ у 24LC256 | по даташиту микросхемы | частая запись, большие журналы |
Флеш-память вместо EEPROM
У STM32F103 средней плотности флеш-память разбита на страницы по 1 КБ — у версии со 128 КБ их 128. Писать можно 16-битными словами, а стирать — только страницу целиком, за 20–40 мс. Всё это время процессор не может читать флеш-память: по руководству PM0075 шина останавливается, поэтому код из флеш и прерывания ждут конца стирания. Обычно под данные отдают последнюю страницу и следят, чтобы программа её не занимала. Адреса и номера страниц для каждого семейства покажет калькулятор секторов флеш-памяти STM32.
Чтобы не стирать страницу при каждом изменении, данные дописывают в неё записями «номер параметра + значение», а при чтении берут последнюю запись с нужным номером. Если запись занимает 4 байта, в странице 1 КБ их помещается
и одно стирание приходится на 256 изменений. Если питание пропадёт во время стирания, страница окажется испорченной, поэтому в ST AN2594 данные хранят на двух страницах: у каждой в заголовке записано состояние — стёрта, принимает данные или действительна, — и после включения программа берёт действительную. Так устроены библиотеки эмуляции EEPROM на флеш-памяти.
Если нужна настоящая EEPROM
У других семейств она есть: например, у STM32L0 рядом с флеш-памятью стоит отдельная data EEPROM. Для STM32F103 остаются внешняя микросхема — например, EEPROM 24LC256 с шиной I²C — или аккуратная работа с флеш-памятью, которую описывает статья «Flash и загрузчик STM32».
Похожие вопросы
Почему нельзя просто перезаписать одну ячейку флеш-памяти?
Флеш-память STM32F1 пишется 16-битными словами, а стирается только целыми страницами по 1 КБ. Чтобы изменить уже записанное значение, страницу приходится стирать целиком, а это 20–40 мс и один цикл из ресурса 10 000.
Сколько данных можно хранить в резервных регистрах?
У STM32F103x8 и STM32F103xB десять 16-битных резервных регистров — 20 байт. Они сохраняются, пока есть питание на VDD или батарейка на VBAT, и подходят для пары счётчиков или флагов, но не для больших настроек.
Сколько страниц флеш-памяти у STM32F103C8?
У STM32F103C8 64 КБ флеш-памяти средней плотности, то есть 64 страницы по 1 КБ; у STM32F103CB со 128 КБ — 128 страниц. Под данные обычно отдают последнюю страницу.
Источники
- STMicroelectronics. DS5319 Rev 20. STM32F103x8, STM32F103xB datasheet — память: 64 или 128 КБ флеш и 20 КБ SRAM, EEPROM в составе нет; табл. 28 — стирание страницы 1 КБ 20–40 мс, запись 16-битного слова 40–70 мкс; табл. 29 — ресурс не менее 10 тыс. циклов; 2.3.14 — десять 16-битных резервных регистров, 20 байт данных пользователя, сохраняются при питании от VBAT
- STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — 3.3.3 — флеш-память программируется по 16 бит; у medium-density устройств основная память — 128 страниц по 1 КБ, у high-density — страницы по 2 КБ
- STMicroelectronics. PM0075 (Doc ID 17863 Rev 2). STM32F10xxx Flash memory microcontrollers, programming manual — раздел Overview — попытка читать флеш-память во время записи или стирания останавливает шину: выборка кода и данных из флеш невозможна, пока операция не закончится; запись выполняется только в стёртое слово, иначе она пропускается с флагом PGERR
- STMicroelectronics. AN2594 (Doc ID 13718 Rev 3). EEPROM emulation in STM32F10x microcontrollers — 1.2 — запись во флеш прерывается сбросом процессора и пропаданием питания; 2.1 — эмуляция на двух страницах одного размера, состояние страницы в заголовке: ERASED, RECEIVE_DATA, VALID_PAGE; переменная — 16-битный адрес и 16-битное значение, 256 записей на странице 1 КБ; EE_Init восстанавливает данные, если питание пропало во время обновления, стирания или переноса страницы
Нашли ошибку?
Смотрите также
- Карта флеш-памяти STM32Секторы и страницы, адрес → сектор, что стирать, CubeProgrammer и HAL
- EEPROMЭнергонезависимая память для настроек и калибровки
- Flash и загрузчик STM32Страницы и секторы, BOOT0, системный загрузчик, AN3155, IAP, option bytes, RDP
- STM32L0Cortex-M0+, до 32 МГц, малое потребление: L010, L0x1, L0x2 с USB, L0x3 с ЖКИ — линейки и распиновки