Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
367
Добавлен:
21.05.2015
Размер:
7.55 Mб
Скачать
      1. Программирование Flash-памяти

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

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

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

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

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

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

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

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

Сектор, адресованный Z-указателем во время программирования

Сектор, в котором сохраняется возможность чтения в процессе программирования

Состояние ЦПУ

Поддержка чтения во время записи

Сектор прикладной программы (RWW)

Загрузочный сектор (NRWW)

Работает

Есть

Загрузочный сектор (NRWW)

Нет

Остановлен

Нет

Сектор сигнатурного кода пользователя (NRWW)

Нет

Остановлен

Нет

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

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

      1. 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 были незапрограммированными.

Соседние файлы в папке Архитектура ЭВМ