Объект stor.

Значок объекта stor.

Объект stor. даёт доступ к энергонезависимой памяти (EEPROM), в которой приложение может хранить данные, не теряющиеся при отключении питания устройства.

Внимание

По совету одного из заказчиков Tibbo напоминает: как и все остальные EEPROM на рынке, микросхемы EEPROM, применяемые в устройствах Tibbo, допускают ограниченное число циклов записи. Как говорится в статье Википедии на эту тему, у EEPROM «... ограниченный ресурс стираний и перепрограммирования, в современных EEPROM он достигает миллиона операций. Если EEPROM часто перепрограммируется во время работы компьютера, её ресурс становится важным фактором при проектировании».

Если вы планируете использовать объект stor., внимательно оцените, позволит ли выбранный режим работы с EEPROM обеспечить её надёжную работу в течение всего предполагаемого срока службы вашего изделия. Подробнее см. ниже раздел Как продлить и оценить ресурс EEPROM.

Свойство stor.size (только чтение) сообщает объём памяти EEPROM, доступный через объект stor.. Для записи данных в EEPROM служит метод stor.setdata, для чтения данных из EEPROM - метод stor.getdata.

Простой пример: как сохранить IP-адрес устройства в EEPROM:

dim s as string
dim x as byte
s=ddval(net.ip) 'this way it will take less space in the EEPROM (only 4 bytes needed)
x= stor.set(s,0) 'write EEPROM
'check result
if x<>len(s) then
	'EEPROM write failure- do something about this!
end if

А так эти данные читаются из EEPROM обратно:

net.ip=ddstr(stor.get(0,4))

Обратите внимание: в объекте stor. адреса отсчитываются с 1, а не с 0. То есть первая ячейка памяти имеет адрес 1.

Особая область конфигурации

Микросхема EEPROM устройства также хранит определённую конфигурационную информацию, необходимую самому устройству. Память, доступная приложению, равна ёмкости микросхемы за вычетом размера особой области конфигурации.

По умолчанию, обращаясь к первому байту EEPROM, вы на самом деле обращаетесь к первой ячейке памяти над особой областью конфигурации. Размер этого смещения возвращает свойство stor.base. При запуске stor.base равно размеру особой области конфигурации, поэтому программа имеет доступ только к памяти выше этой области.

При необходимости можно изменить stor.base и получить доступ к области конфигурации. Например, так можно изменить MAC-адрес - при следующей загрузке устройство начнёт использовать новый адрес.

Как продлить и оценить ресурс EEPROM

Несколько идей, как продлить жизнь EEPROM:

  • Сокращайте число обновлений данных в EEPROM. Например, если вы считаете события, не записывайте в EEPROM при каждом приращении счётчика. Держите переменную-счётчик в RAM и реализуйте политику обновления EEPROM: скажем, обновляйте EEPROM один раз на каждые 100 приращений счётчика в RAM или после x часов бездействия.
  • Прежде чем записывать данные в ячейку EEPROM, прочитайте её и проверьте, нет ли там уже этих данных. В EEPROM запись тех же данных в ту же ячейку всё равно считается циклом записи!
  • Применяйте выравнивание износа: распределяйте область хранения по диапазону адресов EEPROM. Например, если у вас 32-битный счётчик, создайте массив 32-битных ячеек и при каждом приращении счётчика переходите к следующей ячейке по кругу. Учитывайте это вместе со следующим пунктом...
  • Размещая в EEPROM часто обновляемые данные, старайтесь держать их в границах секторов. Как и во флеш-памяти, в EEPROM есть секторы. В устройствах Tibbo с EEPROM на 2 КБ сектора по 16 байт. В устройствах с EEPROM на 256 байт сектора по 8 байт. Когда вы обновляете данные в части сектора, изнашивается весь сектор! Считая границы секторов, учитывайте свойство stor.base - оно задаёт для всех ваших записей фиксированное смещение! Например, на EM1000 (EEPROM на 2 КБ) для записи в третий сектор EEPROM используйте stor.setdata(s,4), потому что stor.base = 29, а 29 + 4 = 33 (то есть первая ячейка третьего 16-байтного сектора).
  • Используйте избыточность: храните две и более копии данных EEPROM и защищайте их контрольными суммами. Если одна копия выйдет из строя, останется другая. Это же помогает при внезапном отключении питания: если питание пропадёт во время записи в EEPROM, данные могут быть потеряны, а резервная копия выручит в такой ситуации.
  • Подумайте об использовании библиотеки STG от Tibbo - она избавит вас от многих трудностей при работе с данными EEPROM.

Оценивая ресурс EEPROM в вашей системе, учитывайте следующее:

  • Всегда помните о секторной природе микросхем EEPROM. Запись даже одного байта в сектор сокращает срок службы всего сектора.
  • Запись строки из нескольких символов даёт столько циклов записи, сколько символов в этой строке. Выполнение stor.setdata("ABC",4) засчитывается как три цикла записи, а не один.
  • Высокая температура окружающей среды сокращает ресурс EEPROM.
  • Все оценки ресурса EEPROM от производителей носят вероятностный характер. Вам могут попасться «более крепкие» и «более слабые» экземпляры с сильно различающейся износостойкостью. В целом можно вполне уверенно считать, что ваша EEPROM выдержит не менее 1 миллиона циклов записи на сектор ... и всё же гарантий этого нет.
Исходный материал Tibbo обновлён 22 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке