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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

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

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

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

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

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

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

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

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

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

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

Адресация 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.2. Адресация Flash-памяти при самопрограммировании

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

Прим.:

· Команда вычисления CRC для диапазона Flash-памяти использует побайтную адресацию Flash-памяти.

· В зависимости от того, какой сектор flash-памяти адресуется (прикладной программы или загрузочный).

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

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

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

· Запишите в Z-указатель адрес байта, подлежащего чтению.

· Запишите код команды NO_OPERATION в регистр команды энергонезависимой памяти (NVM CMD).

· Выполните инструкцию LPM.

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



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 362; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.216.94.152 (0.013 с.)