Поиск по сайту: |
|
По базе: |
|
Главная страница > Обзоры по типам > Микроконтроллеры > AVR |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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-памяти, по которому выполняется программирование.
Сектор сигнатурного кода пользователя относится к типу 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-указателя и использовать его по другому назначению.
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-памяти
Прим.:
30.11.2.1. Чтение Flash-памяти Инструкция (E)LPM предназначена для чтения одного байта из Flash-памяти.
Загрузка регистра назначения будет выполнена при выполнении инструкции LPM. 30.11.2.2. Стирание страничного буфера Flash-памяти Данная команда предназначена для стирания страничного буфера Flash-памяти.
Флаг занятости NVM (BUSY) в регистре статуса NVM (NVM STATUS) будет установлен до тех пор, пока не будет стерт страничный буфер. 30.11.2.3. Загрузка страничного буфера Flash-памяти Данная команда предназначена для загрузки страничного буфера Flash-памяти.
Повторяйте шаги 2…4 вплоть до завершения загрузки страничного буфера Flash-памяти. В незагруженных ячейках хранится значение 0xFFFF, для которого не определена инструкция ЦПУ AVR. 30.11.2.4. Стирание страницы Flash-памяти Данная команда предназначена для стирания одной страницы Flash-памяти.
Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция стирания. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен. 30.11.2.5. Запись страницы Flash-памяти Данная команда предназначена для записи содержимого страничного буфера Flash-памяти в одну страницу Flash-памяти.
Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция записи. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен. 30.11.2.6. Вычисление CRC для диапазона Flash-памяти Данная команда предназначена для проверки содержимого Flash-памяти в пределах заданного диапазона после завершения самопрограммирования.
На время выполнения этой операции флаг BUSY в регистре NVM STATUS удерживается равным единице, а ЦПУ приостанавливает свою работу. Результат выполнения операции (контрольная сумма CRC) будет доступен в регистре данных NVM DATA. Команду проверки CRC для диапазона Flash-памяти можно использовать, только если биты Boot Lock не запрограммированы (т.е. блокировка доступа отключена). Если биты Boot Lock той области, в которой выполняется проверка СRC, запрограммированы, выполнение команды отменяется. 30.11.2.7. Стирание сектора прикладной программы Данная команда предназначена для стирания всего сектора прикладной программы.
На время выполнения операции флаг BUSY регистра STATUS становится равным единице, а ЦПУ приостанавливает свою работу. 30.11.2.8. Стирание страницы сектора прикладной программы/загрузочного сектора Данные команды предназначены для стирания одной страницы сектора прикладной программы или загрузочного сектора.
Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция стирания. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен. 30.11.2.9. Запись страницы сектора прикладной программы/загрузочного сектора Данные команды предназначены для записи страничного буфера Flash-памяти в одну страницу сектора прикладной программы или загрузочного сектора.
Флаг BUSY в регистре NVM STATUS остается равным единице до тех пор, пока не завершится операция стирания. Флаг занятости сектора Flash-памяти (FBUSY) удерживается равным единице все время, пока Flash-память занята, при этом, доступ к сектору прикладной программы невозможен. Если в Z-указатель будет записан некорректный адрес страницы, выполнение NVM-команды будет отменено. Команда стирания страницы сектора прикладной программы выполняется только в случае, если Z-указатель адресуется на сектор прикладной программы. Аналогичным образом, для выполнения команды стирания страницы загрузочного сектора необходимо, чтобы Z-указатель адресовал на загрузочный сектор. 30.11.2.10. Стирание и запись страницы сектора прикладной программы/загрузочного сектора Данные команды предназначены для стирания одной страницы flash-памяти, а затем записи страничного буфера Flash-памяти в эту же страницу сектора прикладной программы или загрузочного сектора.
Флаг BUSY в регистре NVM STATUS остается установленным вплоть до завершения операции. Занятость Flash-памяти сигнализируется установкой флага FBUSY, при этом, теряется возможность доступа к сектору прикладной программы. Если в Z-указатель будет записан некорректный адрес страницы, выполнение команды NVM будет отменено. Команда стирания и записи страницы сектора прикладной программы выполняется только в случае, если Z-указатель адресуется на сектор прикладной программы. Аналогичным образом, для выполнения команды стирания и записи страницы загрузочного сектора необходимо, чтобы Z-указатель адресовал на загрузочный сектор. 30.11.2.11. Вычисление CRC в секторе прикладной программы/загрузочном секторе Данные команды предназначены для проверки содержимого сектора прикладной программы и загрузочного сектора после самопрограммирования.
На время вычисления CRC устанавливается флаг BUSY в регистре NVM STATUS, а работа ЦПУ приостанавливается. Результат вычисления контрольной суммы CRC будет доступен в регистрах данных NVM. 30.11.2.12. Стирание сигнатурного кода пользователя Данная команда предназначена для стирания сигнатурного кода пользователя.
На время выполнения операции устанавливается флаг BUSY в регистре NVM STATUS, а работа ЦПУ приостанавливается. Сектор сигнатурного кода пользователя относится к типу NRWW. 30.11.2.13. Запись сигнатурного кода пользователя Данная команда предназначена для записи содержимого страничного буфера Flash-памяти в сектор сигнатурного кода пользователя.
На время выполнения операции устанавливается флаг BUSY в регистре NVM STATUS, а работа ЦПУ приостанавливается. По завершении записи инициируется очистка страничного буфера Flash-памяти, при этом, остановка ЦПУ не выполняется. 30.11.2.14. Чтение сигнатурного кода пользователя/калибровочных данных Данные команды предназначены для чтения одного байта из сектора сигнатурного кода пользователя или сектора калибровочных данных.
Загрузка регистра-получателя выполняется в процессе выполнения инструкции 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-битам
30.11.3.1. Запись Lock-бит Данная команда предназначена для программирования бит Boot Lock, но только в направлении усиления защиты.
В процессе выполнения команды, флаг BUSY регистра NVM STATUS удерживается в установленном состоянии. ЦПУ приостанавливает работу до завершения исполнения команды. Данную команду можно выполнять как из загрузочного сектора, так и из сектора прикладной программы. По завершении записи Lock-бит происходит автоматическое стирание страничного буфера EEPROM и Flash-памяти. 30.11.3.2. Чтение Fuse-бит Данная команда предназначена для чтения из программы Fuse-бит.
Результат выполнения операции будет доступен в регистре 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 в памяти данных, загрузка данных в страничный буфер 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
30.11.5.1. Загрузка страничного буфера EEPROM Данная команда предназначена для записи одного байта в страничный буфер EEPROM.
Повторите шаги 2-3 нужное число раз. 30.11.5.2. Стирание страничного буфера EEPROM Данная команда предназначена для стирания страничного буфера EEPROM.
Флаг BUSY регистра NVM STATUS в процессе выполнения операции равен единице. 30.11.5.3. Стирание страницы EPPROM Данная команда предназначена для стирания одной страницы EEPROM.
Флаг BUSY в регистре NVM STATUS в процессе выполнения операции равен единице. Команды стирания страницы стирают только те ячейки страницы, загрузка которых была выполнена в страничный буфер EEPROM. 30.11.5.4. Запись страницы EEPROM Данная команда предназначена для записи загруженного страничного буфера EEPROM в одну страницу EEPROM. Запись выполняется только тех ячеек, которые предварительно были загружены в страничный буфер EEPROM.
Флаг BUSY регистра NVM STATUS равен единице вплоть до завершения операции. 30.11.5.5. Стирание и запись страницы EEPROM Данная команда позволяет за один подход выполнить стирание страницы EEPROM, а затем запись страничного буфера EEPROM в только что стертую страницу EEPROM.
Флаг BUSY в регистре NVM STATUS остается установленным до завершения операции. 30.11.5.6. Стирание EEPROM Данная команда предназначена для стирания тех ячеек всех страниц EEPROM, которые были загружены ранее в страничный буфер EEPROM.
Флаг BUSY регистра NVM STATUS удерживается в установленном состоянии вплоть до завершения операции. 30.11.5.7. Чтение EPPROM Команда чтения EEPROM предназначена для чтения одного байта из EEPROM.
Считанный байт данных будет доступен в NVM DATA0.
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|