Главная » Bascom-8051, Basic, Железо » Программирование EEPROM AT89S82252 BASCOM-8051

0

Микроконтроллер модели AT89S8252 содержит электрически перепрограммируемую  память EEPROM (емкостью 2 Кбайта), которая доступна для записи и считывания средствами программы пользователя. EEPROM представляет собой энергонезависимую память, обеспечивающую хранение данных неограниченное время и при выключенном питании. Bascom имеет два оператора (WRITEEEPROM и READEEPROM), дающих возможность простого доступа  к  этой памяти. Эти операторы позволяют сохранять и воспроизводить значения переменных всех типов за исключением индексированных (элементов массивов). Каждый из операторов может использоваться в двух вариантах:

а)  без  указания  адреса  расположения  записываемой  или  считываемой  переменной  в  EEPROM.  При компиляции  не  указанный  адрес  вычисляется  автоматически  и  подставляется  соответственно  применяемой переменной, т.е. каждой сохраняемой переменной будет соответствовать только одна ячейка EEPROM (того же размера).  Это  удобно,  когда  достаточно  обеспечить  простое  сохранение  каких-то  значений,  размещенных  в регистрах, а затем произвести их восстановление;

б) с указанием адреса расположения данных в EEPROM. Этот вариант обеспечивает большую гибкость и лучше подходит для сложных задач.

Ниже приведены два примера программ с использованием операторов записи и чтения данных EEPROM.

В первом примере запись и чтение выполняется без указания адреса. Компилятор занимает  ячейки EEPROM в порядке  применения  операторов  записи.  Расположение  данных  в  EEPROM  после  компиляции  всегда  можно посмотреть в файле сообщений, но программа пользователя, естественно,  этого сделать не может.

‘——————————————– ‘ пример простого доступа к EEPROM AT89S8252

‘——————————————–

Dim Byt As Byte , Wrd As Word , Intg As Integer , Lng As Long , Sng As Single ‘инициализируем переменные всех типов. С индексированными не работает

Byt = 10 : Wrd = 2000 : Intg = -10000 : Lng = 10000000 : Sng = 3.3333

‘запишем их значения в EEPROM без указания адреса Writeeeprom Byt : Writeeeprom Wrd : Writeeeprom Intg Writeeeprom Lng : Writeeeprom Sng

‘очистим переменные

Byt = 0 : Wrd = 0 : Intg = 0 : Lng = 0 : Sng = 0

‘считаем записанные значения также без указания адреса Readeeprom Byt : Readeeprom Wrd : Readeeprom Intg Readeeprom Lng : Readeeprom Sng

‘посмотрим, что получилось

Print Byt ; "_" ; Wrd ; "_" ; Intg ; "_" ; Lng ; "_" ; Sng

End

В  другом  примере  операторы  WRITEEEPROM  и  READEEPROM  применяются  с  указанием  адреса расположения данных, что позволяет производить запись или чтение любой  необходимой области EEPROM, благодаря чему, становится возможным произвольный порядок доступа к памяти.

Теперь   рассмотрим   вопрос   обеспечения   достоверности   сохраняемых   данных.   Известно,   что   при выключении   питания   микроконтроллера   существует   короткий   момент    (несколько   миллисекунд),   когда происходит сбой текущей программы, но способность исполнять команды, записанные в ПЗУ еще сохраняется. В результате появляется возможность повреждения  записанных данных, если при сбое происходит попадание на участок программы, выполняющей запись в EEPROM. Для повышения надежности хранения данных применяют аппаратные средства  в виде устройств быстрого сброса или выключения питания при сбоях электропитания. Кроме  этого, важными составляющими системы защиты данных остаются и программные средства,  первое из которых – контроль исправности блока записанных данных. В приведенном примере содержатся элементы такой защиты:

а)   введена дополнительная ячейка для хранения контрольной суммы блока данных.  Причем данные, записываемые  в  регистр  контрольной  суммы,  лишь  дополняют  ее,  до  одного  и  того  же  значения  –  5AH («нормальной контрольной суммы»);

б)  после  каждой  операции  записи  производится  балансировка  контрольной  суммы  блока  данных  до нормального значения;

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

‘——————————————————— ‘ использование EEPROM AT89C8252 как калибровочной памяти

‘——————————————————— Dim K0 As Const 0               ‘блок из 8-ми констант

Dim K1 As Const 4               ‘с плавающей точкой

Dim K2 As Const 8               ‘определим их

Dim K3 As Const 12              ‘расположение в EEPROM

Dim K4 As Const 16              ‘каждая константа занимает

Dim K5 As Const 20              ‘по 4 байта

Dim K6 As Const 24

Dim K7 As Const 28

Dim End_dae As Const 31         ‘последний адрес блока констант

Dim Csum As Const 32            ‘регистр контрольной суммы

Dim End_eep As Const 32         ‘последний адрес всего блока

Dim N_cs As Const A5            ‘нормальное значение контрольной суммы

‘необходимые переменные

Dim Nm As Byte , Tmp As Byte , Sum As Byte , Sng As Single ‘запишем блок данных в EEPROM иэ таблицы

For Nm = 0 To 7

Sng = Lookup(nm , Dvs) : Tmp = Lookup(nm , Dva)  ‘данные и адрес

Writeeeprom Sng , Tmp Next

‘вычислим контрольную сумму блока констант

Sum = 0

For Nm = 0 To End_dae     ‘суммируем значение каждого байта блока данных

Readeeprom Tmp , Nm : Sum = Sum + Tmp

Next    Sum = N_cs – Sum  ‘вычислим дополнение до нормального значения

Writeeeprom Sum , Csum ‘запишем дополнение

‘перед считыванием данных проверим исправность всего записанного блока

Sum = 0                   ‘вычислим контрольную сумму всего блока

For Nm = 0 To End_eep

Readeeprom Tmp , Nm : Sum = Sum + Tmp Next

If Sum <> N_cs Then       ‘проверим: совпадает с нормальным значением?

Print "Error EEPROM!"  ‘если нет, как-то проиндицируем

End If

‘посмотрим, что получилось

For Nm = 0 To 7

Tmp = Lookup(nm , Dva) : Readeeprom Sng , Tmp Print Tmp ; "-" ; Nm ; "-" ; Sng

Next

‘таблица адресов констант

Dva:

‘Data K0 , K1 , K2 , K3 , K4 , K5 , K6 , K7 ‘так компилятор не понимает

Data 0 , 4 , 8 , 12 , 16 , 20 , 24 , 28    ‘нужно записывать только цифры

‘таблица инициализируемых значений

Dvs:

Data 1.1! , 1.2! , 1.3! , 1.4! , 1.5! , 1.6! , 1.7! , 1.8!

Необходимость   применения   средств   защиты   сохраняемых   данных   бесспорна,   т.к.    вероятность повреждения одного байта EEPROM без принятия аппаратных средств достаточно  велика и составляет около 0.000001  (в  сумме  –  0.002  для  EEPROM  емкостью  2  Кбайта).   Применение  аппаратных  средств  снижает вероятность  сбоев на  три-четыре  порядка. Однако,  они не  исключаются  совсем, например, при выключении питания в момент записи. Для защиты  от сбоев следует применять и программные средства защиты данных. Очень  эффективным   средством  защиты  данных  является  применение  двух  дублирующих  блоков  данных. Использование больше двух дублирующих блоков не имеет практического смысла, т.к.  вероятность выхода из строя микросхемы с записанными данными выше, чем у  продублированных данных (далее нужно дублировать микросхемы памяти). Двойное дублирование блоков данных широко применяется в измерительной технике для хранения   калибровочных  коэффициентов,  и  показало  исключительную  надежность.  Перечислим   основные моменты организации дублированной энергонезависимой памяти:

а) оба блока должны быть одинаковыми и содержать собственные регистры контрольной суммы;

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

в) при считывании данные берутся из блока с правильной контрольной суммой;

г) при необходимости неисправный блок может быть восстановлен.

И  последнее,  для  устройств  с  повышенными  требованиями  к  надежности  хранения  данных  следует применять внешнюю энергонезависимую память, как и при использовании микроконтроллеров других типов (не имеющих EEPROM). Наиболее удобны для этого  микросхемы с последовательным доступом серий 24Cxx или 93Cxx,  имеющие  соответственно  I2C-  и  SPI-интерфейсы,  средства  для  работы  с  которыми,  в  Bascom  также доступны.

Источник: М.Л.Кулиш, СПРАВОЧНИК ПО ПРОГРАММИРОВАНИЮ BASCOM-8051, Краснодар 2001

По теме:

  • Комментарии