В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > AVR
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


30.8. Защита энергонезависимой памяти

Для защиты Flash-памяти и EEPROM от записи и/или чтения предусмотрены Lock-биты, позволяющие ограничить доступ для внешних программаторов и прикладной программы. Более детально о доступных настройках Lock-бит и их использованию см. в 4.15.12 "Описание регистров контроллера энергонезависимой памяти".

30.9. Предотвращение нарушения данных

Когда напряжение VCC становится меньше минимального рабочего напряжения МК, существует опасность нарушения чтения или записи Flash-памяти, так как напряжение питания может оказаться слишком малым для надлежащей работы ЦПУ и Flash-памяти.

30.9.1. Сбои во время записи

Для гарантирования корректности уровня напряжения на фазе завершения последовательности записи во Flash-память, сразу после её запуска автоматически включаются в работу встроенные супервизор питания (BOD) и детектор кратковременных просадок напряжения. Если любой из этих блоков генерирует сигнал сброса, последовательность программирования отменяется. В таком случае, если сбой в питании привел к полной отмене программирования или к его частичному выполнению, после восстановления корректного уровня напряжения питания программирование NVM необходимо начать заново.

30.9.2. Сбои во время чтения

Чтение NVM может дать некорректный результат, если напряжение питания настолько мало, что ЦПУ неправильно интерпретирует инструкции. Чтобы избежать этого, необходимо включить в работу супервизор питания (BOD).

30.10. Проверка CRC

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

Сразу после запуска логики проверки CRC, ЦПУ приостанавливает работу на время вычисления CRC, а вычисленная контрольная сумма будет доступна в регистре данных NVM. На вычисление CRC для каждого слова из заданного диапазона адресов затрачивается один цикл синхронизации ЦПУ.

Для проверки CRC используется полином x24 + 4x3 + 3x +1.

30.11. Самопрограммирование под управлением программы загрузчика

Чтение и запись EEPROM и Flash-памяти можно выполнять программно. Данная возможность называется самопрограммированием. Программа загрузчика (хранится в загрузочном секторе Flash-памяти) имеет возможность чтения и записи Flash-памяти программ, сигнатурного кода пользователя и EEPROM, а также записи Lock-бит, но только в направлении усиления защиты. Код программы, хранящийся в секторе прикладной программы, имеет возможность чтения Flash-памяти, сигнатурного кода пользователя, калибровочных данных и Fuse-бит, а также чтения и записи EEPROM.

30.11.1. Программирование Flash-памяти

Программа загрузчика для загрузки и обновления коды программы самим микроконтроллером использует механизм самопрограммирования с истинной поддержкой чтения во время записи. Данная возможность позволяет реализовать функцию гибкого обновления прикладной программы под управлением программы загрузчика, расположенной в загрузочном секторе Flash-памяти. Программа загрузчика для передачи кода программы может использовать любой из доступных интерфейсов. Она имеет возможности записи любого сектора Flash-памяти, в т.ч. загрузочного сектора. Это означает, что программа загрузчика способна обновить или стереть сама себя, если в ней более нет потребности.

30.11.1.1. Сектор прикладной программы и загрузочный сектор

При использовании самопрограммирования необходимо учитывать, что сектор прикладной программы и загрузочный сектор имеют некоторые отличия. Сектор прикладной программы относится к типу RWW, т.е. поддерживает чтение во время записи, а загрузочный сектор относится к типу NRWW. т.е. не поддерживает чтение во время записи. Здесь под чтением во время записи понимается возможность чтения именно загрузочного сектора, т.к. только из него можно инициировать самопрограммирование секторов Flash-памяти. Сможет ЦПУ исполнять код программы или приостановит свою работу в процессе обновления программы загрузчиком, зависит от адреса Flash-памяти, по которому выполняется программирование.

  • Во время стирания или записи страницы, расположенной внутри сектора прикладной программы (RWW), возможность чтения загрузочного сектора (NRWW) сохраняется. Это означает, что ЦПУ может работать и исполнять код программы из загрузочного сектора (NRWW).
  • Во время стирания или записи страницы, расположенной внутри загрузочного сектора (NRWW), ЦПУ приостанавливается на время выполнения всей операции и код программы не может исполняться.

Сектор сигнатурного кода пользователя относится к типу NRWW, таким образом, его стирание или запись имеет особенности, идентичные загрузочному сектору.

При написании программы необходимо исключить доступ к сектору прикладной программы в процессе выполняющегося программирования. Это позволит избежать приостановки ЦПУ. Программа пользователя не может считывать данные, расположенные в секторе прикладной программы, в процессе работы программы загрузчика.

Таблица 30.1. Обзор возможностей секторов типа RWW и NRWW

Сектор, адресованный Z-указателем во время программирования Сектор, в котором сохраняется возможность чтения в процессе программирования Состояние ЦПУ Поддержка чтения во время записи
Сектор прикладной программы (RWW) Загрузочный сектор (NRWW) Работает Есть
Загрузочный сектор (NRWW) Нет Остановлен Нет
Сектор сигнатурного кода пользователя (NRWW) Нет Остановлен Нет

Сравнение секторов типов RWW и NRWW
Рисунок 30.1. Сравнение секторов типов RWW и NRWW

30.11.1.2. Адресация Flash-памяти

Адрес Flash-памяти как при чтении, так и при записи, задается через Z-указатель. Он образован двумя регистрами регистрового файла, ZL и ZH. У МК с объемом Flash-памяти более 64 кбайт указатель адреса дополняется регистром RAMPZ. Более детально о Z-указателе см. в 3.9.1 "X-, Y- и Z- регистры".

Поскольку доступ к Flash-памяти выполняется путем постраничной записи Z-указатель можно разделить на два битовых поля. Младшие биты указателя адресуют слова в пределах страницы, а старшие биты адресуют страницы в пределах Flash-памяти. Это показано на рисунке 30.2. Адрес слова в странице (FWORD) представлен битами [WORDMSB:1] Z-указателя. Оставшиеся биты [PAGEMSB:WORDMSB+1] Z-указателя хранят адрес страницы Flash-памяти (FPAGE). Совместно FWORD и FPAGE задают абсолютный адрес слова Flash-памяти.

При выполнении одной операции чтения Flash-памяти (ELPM и LMP) возвращается один байт. Является этот байт младшим или старшим байтом слова зависит от значения младшего бита (бит 0) Z-указателя. Если он равен нулю, считывается младший байт, а если единице - старший байт.

Размер битовых полей FWORD и FPAGE зависит от размера страницы и flash-памяти микроконтроллера. Узнать эти значения можно в документации на микроконтроллер.

Как только запускается программирование, выполняется фиксация адреса, после чего можно изменить значение Z-указателя и использовать его по другому назначению.

Адресация Flash-памяти при самопрограммировании
Рисунок 30.2. Адресация Flash-памяти при самопрограммировании

30.11.2. NVM-команды Flash-памяти

В таблице 30.1 представлены NVM-команды, которые можно использовать для доступа к Flash-памяти программ, сигнатурному коду и калибровочным данным. Когда используется самопрограммирование, команды с запуском по действию исполняются после установки бита CMDEX в регистре CTRLA NVM-контроллера. Команды с запуском по чтению исполняются, когда ЦПУ исполняет инструкцию (E)LPM. Наконец, команды с запуском по записи исполняются, когда ЦПУ выполняет инструкцию SPM (SPM).

В столбце "Защита от изменения" указывается, защищен запуск инструкции механизмом защиты от изменения конфигурации (CCP) или нет. Если запуск защищен, то необходимо придерживаться определенной и строго привязанной ко времени последовательности. Более детально об этом см. в 3.14.1 "CCP - регистр защиты от изменения конфигурации". В двух последних столбцах приведены данные о том, используется ли для адресации указатель адреса и какой регистр выступает в роли источника/назначения.

Алгоритм работы каждой команды более детально рассматривается в подразделах 30.11.1.1…30.11.2.14.

Таблица 30.2. Команды самопрограммирования Flash-памяти

CMD[6:0] Групповая конфигурация Описание Запуск Останов ЦПУ Занятость NVM Защита от изменения Указатель адреса Регистр данных
0x00 NO_OPERATION Нет операции/чтение Flash-памяти -/(E)LPM -/Нет Нет -/Нет -/Z-указатель -/Rd
Страничный буфер Flash-памяти
0x23 LOAD_FLASH_BUFFER Загрузка страничного буфера Flash-памяти SPM Нет Нет Нет Z-указатель R1:R0
0x26 ERASE_FLASH_BUFFER Стирание страничного буфера Flash-памяти CMDEX Нет Занят Есть Z-указатель -
Flash-память
0x2B ERASE_FLASH_PAGE Стирание страницы Flash-памяти SPM Нет/Есть(2) Занят Есть Z-указатель -
0x2E WRITE_FLASH_PAGE Запись страницы Flash-памяти SPM Нет/Есть(2) Занят Есть Z-указатель -
0x2F ERASE_WRITE_FLASH_PAGE Стирание и запись страницы Flash-памяти SPM Нет/Есть(2) Занят Есть Z-указатель -
0x3A FLASH_RANGE_CRC(3) Вычисление CRC для диапазона Flash-памяти CMDEX Есть Занят Есть DATA/ADDR(1) DATA
Сектор прикладной программы
0x20 ERASE_APP Стирание сектора прикладной программы SPM Есть Занят Есть Z-указатель -
0x22 ERASE_APP_PAGE Стирание страницы сектора прикладной программы SPM Нет Занят Есть Z-указатель -
0x24 WRITE_APP_PAGE Запись страницы сектора прикладной программы SPM Нет Занят Есть Z-указатель -
0x25 ERASE_WRITE_FLASH_PAGE Стирание и запись страницы сектора прикладной программы SPM Нет Занят Есть Z-указатель -
0x38 APP_CRC Вычисление CRC сектора прикладной программы CMDEX Есть Занят Есть - DATA
Загрузочный сектор
0x2A ERASE_BOOT_PAGE Стирание страницы загрузочного сектора SPM Есть Занят Есть Z-указатель -
0x2C WRITE_BOOT_PAGE Запись страницы загрузочного сектора SPM Есть Занят Есть Z-указатель -
0x2D ERASE_WRITE_BOOT_PAGE Стирание и запись страницы загрузочного сектора SPM Есть Занят Есть Z-указатель -
0x39 BOOT_CRC Вычисление CRC загрузочного сектора CMDEX Есть Занят Есть - DATA
Сигнатурный код пользователя
0x03 READ_USER_SIG_ROW Чтение сигнатурного кода пользователя LPM Нет Нет Нет Z-указатель Rd
0x18 ERASE_USER_SIG_ROW Стирание сигнатурного кода пользователя SPM Есть Есть Есть - -
0x1A WRITE_USER_SIG_ROW Запись сигнатурного кода пользователя SPM Есть Есть Есть - -
Калибровочные данные
0x02 READ_CALIB_ROW Чтение калибровочных данных LPM Нет Нет Нет Z-указатель Rd

Прим.:

  1. Команда вычисления CRC для диапазона Flash-памяти использует побайтную адресацию Flash-памяти.
  2. В зависимости от того, какой сектор flash-памяти адресуется (прикладной программы или загрузочный).
  3. Данная команда связана с Lock-битами и требует, чтобы биты Boot Lock были незапрограммированными.

30.11.2.1. Чтение Flash-памяти

Инструкция (E)LPM предназначена для чтения одного байта из Flash-памяти.

  1. Запишите в Z-указатель адрес байта, подлежащего чтению.
  2. Запишите код команды NO_OPERATION в регистр команды энергонезависимой памяти (NVM CMD).
  3. Выполните инструкцию LPM.

Загрузка регистра назначения будет выполнена при выполнении инструкции LPM.

30.11.2.2. Стирание страничного буфера Flash-памяти

Данная команда предназначена для стирания страничного буфера Flash-памяти.

  1. Запишите в NVM CMD команду стирания страничного буфера Flash-памяти.
  2. Установите бит исполнения команды (NVMEX) в регистре А управления энергонезависимой памятью (NVM CTRLA) с соблюдением привязанной ко времени последовательности CCP.

Флаг занятости NVM (BUSY) в регистре статуса NVM (NVM STATUS) будет установлен до тех пор, пока не будет стерт страничный буфер.

30.11.2.3. Загрузка страничного буфера Flash-памяти

Данная команда предназначена для загрузки страничного буфера Flash-памяти.

  1. Запишите в регистр NVM CMD команду загрузки страничного буфера Flash-памяти.
  2. Запишите в Z-указатель адрес слова, подлежащего записи.
  3. Запишите в регистры R1:R0 слово данных, подлежащее записи в буфер.
  4. Выполните инструкцию SPM. При выполнении операции загрузки страничного буфера инструкция SPM является незащищенной.

Повторяйте шаги 2…4 вплоть до завершения загрузки страничного буфера Flash-памяти. В незагруженных ячейках хранится значение 0xFFFF, для которого не определена инструкция ЦПУ AVR.

30.11.2.4. Стирание страницы Flash-памяти

Данная команда предназначена для стирания одной страницы Flash-памяти.

  1. Запишите в Z-указатель адрес подлежащей стиранию страницы flash-памяти. Адрес страницы должен быть записан в битовое поле PCPAGE. Прочие биты Z-указателя игнорируются при выполнении этой операции.
  2. Запишите в регистр NVM CMD команду стирания страницы Flash-памяти.
  3. Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция стирания. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен.

30.11.2.5. Запись страницы Flash-памяти

Данная команда предназначена для записи содержимого страничного буфера Flash-памяти в одну страницу Flash-памяти.

  1. Запишите в Z-указатель адрес подлежащей записи страницы flash-памяти. Адрес страницы должен быть записан в битовое поле PCPAGE. Прочие биты Z-указателя игнорируются при выполнении этой операции.
  2. Запишите в регистр NVM CMD команду записи страницы Flash-памяти.
  3. Выполните защищенную инструкцию SPM с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция записи. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен.

30.11.2.6. Вычисление CRC для диапазона Flash-памяти

Данная команда предназначена для проверки содержимого Flash-памяти в пределах заданного диапазона после завершения самопрограммирования.

  1. Запишите в регистр NVM CMD команду вычисления CRC для диапазона Flash-памяти.
  2. Запишите адрес начального байта в регистр адреса NVM (NVM ADDR).
  3. Запишите адрес последнего байта в регистр данных NVM (NVM DATA).
  4. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

На время выполнения этой операции флаг BUSY в регистре NVM STATUS удерживается равным единице, а ЦПУ приостанавливает свою работу.

Результат выполнения операции (контрольная сумма CRC) будет доступен в регистре данных NVM DATA.

Команду проверки CRC для диапазона Flash-памяти можно использовать, только если биты Boot Lock не запрограммированы (т.е. блокировка доступа отключена).

Если биты Boot Lock той области, в которой выполняется проверка СRC, запрограммированы, выполнение команды отменяется.

30.11.2.7. Стирание сектора прикладной программы

Данная команда предназначена для стирания всего сектора прикладной программы.

  1. Запишите в Z-указатель любой адрес, принадлежащей сектору прикладной программы.
  2. Запишите в регистр NVM CMD команду стирания сектора прикладной программы.
  3. Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

На время выполнения операции флаг BUSY регистра STATUS становится равным единице, а ЦПУ приостанавливает свою работу.

30.11.2.8. Стирание страницы сектора прикладной программы/загрузочного сектора

Данные команды предназначены для стирания одной страницы сектора прикладной программы или загрузочного сектора.

  1. Запишите в Z-указатель адрес подлежащей стиранию страницы. Адрес страницы должен быть записан в битовое поле ZPAGE. Прочие биты Z-указателя при выполнении данной операции игнорируются.
  2. Запишите в регистр NVM CMD команду стирания страницы сектора прикладной программы/загрузочного сектора.
  3. Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция стирания. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен.

30.11.2.9. Запись страницы сектора прикладной программы/загрузочного сектора

Данные команды предназначены для записи страничного буфера Flash-памяти в одну страницу сектора прикладной программы или загрузочного сектора.

  1. Запишите в Z-указатель адрес подлежащей записи страницы. Адрес страницы должен быть записан в битовое поле PCPAGE. Прочие биты Z-указателя при выполнении данной операции игнорируются.
  2. Запишите в регистр NVM CMD команду записи страницы сектора прикладной программы/загрузочного сектора.
  3. Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция стирания. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен.

Если в Z-указатель будет записан некорректный адрес страницы, выполнение NVM-команды будет отменено. Команда стирания страницы сектора прикладной программы выполняется только в случае, если Z-указатель адресуется на сектор прикладной программы. Аналогичным образом, для выполнения команды стирания страницы загрузочного сектора необходимо, чтобы Z-указатель адресовал на загрузочный сектор.

30.11.2.10. Стирание и запись страницы сектора прикладной программы/загрузочного сектора

Данные команды предназначены для стирания одной страницы flash-памяти, а затем записи страничного буфера Flash-памяти в эту же страницу сектора прикладной программы или загрузочного сектора.

  1. Запишите в Z-указатель адрес подлежащей записи страницы. Адрес страницы должен быть записан в битовое поле PCPAGE. Прочие биты Z-указателя при выполнении данной операции игнорируются.
  2. Запишите в регистр NVM CMD команду стирания и записи страницы сектора прикладной программы/загрузочного сектора.
  3. Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается установленным вплоть до завершения операции. Занятость Flash-памяти сигнализируется установкой флага FBUSY, при этом, теряется возможность доступа к сектору прикладной программы.

Если в Z-указатель будет записан некорректный адрес страницы, выполнение команды NVM будет отменено. Команда стирания и записи страницы сектора прикладной программы выполняется только в случае, если Z-указатель адресуется на сектор прикладной программы. Аналогичным образом, для выполнения команды стирания и записи страницы загрузочного сектора необходимо, чтобы Z-указатель адресовал на загрузочный сектор.

30.11.2.11. Вычисление CRC в секторе прикладной программы/загрузочном секторе

Данные команды предназначены для проверки содержимого сектора прикладной программы и загрузочного сектора после самопрограммирования.

  1. Запишите в регистр NVM CMD команду проверки CRC в секторе прикладной программы/загрузочном секторе.
  2. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

На время вычисления CRC устанавливается флаг BUSY в регистре NVM STATUS, а работа ЦПУ приостанавливается. Результат вычисления контрольной суммы CRC будет доступен в регистрах данных NVM.

30.11.2.12. Стирание сигнатурного кода пользователя

Данная команда предназначена для стирания сигнатурного кода пользователя.

  • Запишите в регистр NVM CMD команду стирания сигнатурного кода пользователя.
  • Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

На время выполнения операции устанавливается флаг BUSY в регистре NVM STATUS, а работа ЦПУ приостанавливается. Сектор сигнатурного кода пользователя относится к типу NRWW.

30.11.2.13. Запись сигнатурного кода пользователя

Данная команда предназначена для записи содержимого страничного буфера Flash-памяти в сектор сигнатурного кода пользователя.

  1. Запишите в регистр NVM CMD команду записи сигнатурного кода пользователя.
  2. Выполните инструкцию SPM с использованием привязанной ко времени последовательности CCP.

На время выполнения операции устанавливается флаг BUSY в регистре NVM STATUS, а работа ЦПУ приостанавливается. По завершении записи инициируется очистка страничного буфера Flash-памяти, при этом, остановка ЦПУ не выполняется.

30.11.2.14. Чтение сигнатурного кода пользователя/калибровочных данных

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

  1. Запишите в Z-указатель адрес подлежащего чтению байта.
  2. Запишите в регистр NVM CMD команду чтения сигнатурного кода пользователя/калибровочных данных.
  3. Выполните инструкцию LPM.

Загрузка регистра-получателя выполняется в процессе выполнения инструкции LPM.

30.11.3. NVM-команды доступа к Fuse- и Lock-битам

В таблице 30.3 представлены NVM-команды Flash-памяти, предоставляющие доступ к Fuse- и Lock-битам. Все эти команды являются командами с запуском по действию. Для их выполнения необходимо установить бит CMDEX в регистре NVM CTRLA.

В столбце "Защита от изменения" указывается, защищен запуск инструкции механизмом защиты от изменения конфигурации (CCP) или нет. В двух последних столбцах приведены данные об используемых указателе адреса и регистре данных.

Алгоритм работы каждой команды более детально рассматривается в подразделах 30.11.3.1 и 30.11.3.2.

Таблица 30.3. Команды доступа к Fuse- и Lock-битам

CMD[6:0] Групповая конфигурация Описание Запуск Останов ЦПУ Занятость NVM Защита от изменения Указатель адреса Регистр данных
0x00 NO_OPERATION Нет операции - - - - - -
Fuse- и Lock-биты
0x07 READ_FUSES Чтение Fuse-бит CMDEX Нет Занят Нет ADDR DATA
0x08 WRITE_LOCK_BITS Запись Lock-бит CMDEX Нет Занят Есть ADDR -

30.11.3.1. Запись Lock-бит

Данная команда предназначена для программирования бит Boot Lock, но только в направлении усиления защиты.

  1. Запишите в регистр NVM DATA0 новое значение Lock-бит.
  2. Запишите в регистр NVM CMD команду записи Lock-бит.
  3. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

В процессе выполнения команды, флаг BUSY регистра NVM STATUS удерживается в установленном состоянии. ЦПУ приостанавливает работу до завершения исполнения команды.

Данную команду можно выполнять как из загрузочного сектора, так и из сектора прикладной программы.

По завершении записи Lock-бит происходит автоматическое стирание страничного буфера EEPROM и Flash-памяти.

30.11.3.2. Чтение Fuse-бит

Данная команда предназначена для чтения из программы Fuse-бит.

  1. Запишите в регистры NVM ADDR адрес, подлежащего чтению байта с fuse-битами.
  2. Запишите в регистр NVM CMD команду чтения Fuse-бит.
  3. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Результат выполнения операции будет доступен в регистре NVM DATA0. На время выполнения команды ЦПУ приостанавливает работу.

30.11.4.Программирование EEPROM

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

30.11.4.1. Адресация EEPROM

Доступ к EEPROM, также как и к Flash-памяти программ, осуществляется через NVM-контроллер, который расположен в пространстве памяти ввода-вывода. Альтернативно, доступ к EEPROM можно выполнять аналогично SRAM через пространство памяти данных.

Когда доступ к EEPROM выполняется посредством NVM-контроллера, для адресации используется регистр адреса NVM (ADDR), а для чтения/записи данных - регистр данных NVM (DATA).

При программировании страницы EEPROM, регистр ADDR можно представить в виде двух битовых полей. Младшие биты адреса задают адрес байта в странице, а старшие биты задают номер страницы EEPROM. Это отражено на рисунке 30.3. Адрес байта в странице (E2BYTE) задается битами [1:BYTEMSB] регистра ADDR. Оставшиеся биты [PAGEMSB:BYTEMSB+1] регистра ADDR хранят адрес страницы EEPROM (E2PAGE).

Совместно битовые поля E2BYTE и E2PAGE образуют абсолютный адрес байта в EEPROM. Размер полей E2WORD и E2PAGE зависит от размера страницы и объема flash-памяти МК, сведения о которых приведены в документации на МК.

Адресация EEPROM в пространстве памяти ввода-вывода
Рисунок 30.3. Адресация EEPROM в пространстве памяти ввода-вывода

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

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

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

30.11.5. NVM-команды EEPROM

В таблице 30.4 представлены NVM-команды, помощью которых можно выполнить доступ к EEPROM через NVM-контроллер. Команды самопрограммирования EEPROM с запуском по действию исполняются после установки бита CMDEX в регистре NVM CTRLA. Команды с запуском по чтению исполняются при чтении регистра NVM DATA0 (DATA0).

В столбце "Защита от изменения" указывается, защищен запуск инструкции механизмом защиты от изменения конфигурации (CCP) или нет. В двух последних столбцах приведены данные об используемых указателе адреса и регистре данных.

Алгоритм работы каждой команды более детально рассматривается в подразделах 30.11.5.1…30.11.5.7.

Таблица 30.4. Команды самопрограммирования EEPROM

CMD[6:0] Групповая конфигурация Описание Запуск Останов ЦПУ Занятость NVM Защита от изменения Указатель адреса Регистр данных
0x00 NO_OPERATION Нет операции - - - - - -
Страничный буфер EEPROM
0x33 LOAD_EEPROM_BUFFER Чтение страничного буфера EEPROM DATA0 Нет Нет Есть ADDR DATA0
0x36 ERASE_EEPROM_BUFFER Стирание страничного буфера EEPROM CMDEX Нет Занят Есть - -
EEPROM
0x32 ERASE_EEPROME_PAGE Стирание страницы EEPROM CMDEX Нет Занят Есть ADDR -
0x34 WRITE_EEPROME_PAGE Запись страницы EEPROM CMDEX Нет Занят Есть ADDR -
0x35 ERASE_WRITE_EEPROM_PAGE Стирание и запись страницы EEPROM CMDEX Нет Занят Есть ADDR -
0x30 ERASE_EEPROM Стирание EEPROM CMDEX Нет Занят Есть - -
0x06 READ_EEPROM Чтение EEPROM CMDEX Нет Нет Есть ADDR DATA0

30.11.5.1. Загрузка страничного буфера EEPROM

Данная команда предназначена для записи одного байта в страничный буфер EEPROM.

  1. Запишите в регистр NVM CMD команду загрузки страничного буфера EEPROM
  2. Запишите в регистр NVM ADDR0 адрес, по которому выполняется запись.
  3. Запишите в регистр NVM DATA0 данные, подлежащие записи. Это приведет к запуску исполнения команды.

Повторите шаги 2-3 нужное число раз.

30.11.5.2. Стирание страничного буфера EEPROM

Данная команда предназначена для стирания страничного буфера EEPROM.

  1. Запишите в регистр NVM CMD команду стирания страничного буфера EEPROM.
  2. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY регистра NVM STATUS в процессе выполнения операции равен единице.

30.11.5.3. Стирание страницы EPPROM

Данная команда предназначена для стирания одной страницы EEPROM.

  1. Запишите в регистр NVM CMD команду стирания страницы EEPROM.
  2. Запишите в регистр NVM ADDRESS адрес подлежащей стиранию страницы EEPROM.
  3. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS в процессе выполнения операции равен единице.

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

30.11.5.4. Запись страницы EEPROM

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

  1. Запишите в регистр NVM CMD команду записи страницы EEPROM.
  2. Запишите в регистр NVM ADDR адрес подлежащей записи страницы EEPROM.
  3. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY регистра NVM STATUS равен единице вплоть до завершения операции.

30.11.5.5. Стирание и запись страницы EEPROM

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

  1. Запишите в регистр NVM CMD команду стирания и записи страницы EEPROM.
  2. Запишите в регистр NVM ADDR адрес подлежащей записи страницы EEPROM.
  3. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY в регистре NVM STATUS остается установленным до завершения операции.

30.11.5.6. Стирание EEPROM

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

  1. Запишите в регистр NVM CMD команду стирания EPPROM.
  2. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции.

30.11.5.7. Чтение EPPROM

Команда чтения EEPROM предназначена для чтения одного байта из EEPROM.

  1. Запишите в регистр NVM CMD команду чтения EPPROM.
  2. Запишите в регистр NVM ADDR адрес, по которому будет выполняться чтение.
  3. Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Считанный байт данных будет доступен в NVM DATA0.



<-- Предыдущая страница Оглавление Следующая страница -->