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

Микроконтроллеры AVR имеют от 1кБ до 128Кб перепрограммируемой флэш памяти программ и от 128 байт до 4 Кб энергонезависимой памяти данных. При поставке флэш память и память данных стерты (содержат $FF) и готовы к программированию. Микросхемы поддерживают высоковольтный (12В) параллельный режим программирования и низковольтный режим последовательного программирования. Напряжение +12В используется только для разрешения программирования, этот вывод не потребляет тока. Последовательный режим программирования предусмотрен для загрузки программы и данных в микроконтроллер в системе пользователя (внутрисистемное программирование).

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

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

Программирование битов блокировки памяти

Микроконтроллер AT90S2313 имеет два бита блокировки, которые могут быть оставлены незапрограммированными (1) или программироваться (0), при этом достигаются свойства приведенные в таблице 5.1.

Таблица 5.1 Назначение битов защиты
Биты блокировки Тип защиты
Режим LB1 LB2
1 1 1 Защита не установлена
2 0 1 Дальнейшее программирование флэш памяти и EEPROM запрещено
3 0 0 Как режим 2, но запрещено и чтение

Примечание: биты блокировки стираются только при полном стирании памяти

Код устройства

Все микроконтроллеры фирмы Atmel имеют 3-байтовый сигнатурный код, по которому идентифицируется устройство. Этот код может быть прочитан в параллельном и последовательном режимах. Эти три байта размещены в отдельном адресном пространстве и для AT90S2313 имеют следующие значения:

1. $000: $1E - код производителя - Atmel

2. $001: $91 - 2 кБ флэш памяти

3. $002: $01 - при $01=$91 - м/сх AT90S2313

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

Последовательная загрузка

Как память программ, так и память данных могут быть запрограммированы с использованием последовательной шины SPI, при этом вывод RESET должен быть подключен к земле. Последовательный интерфейс работает с выводами SCK, MOSI (вход) и MISO (выход). После подачи низкого уровня на RESET перепрограммированием/стиранием необходимо исполнить команду разрешения программирования.

При программировании памяти данных, во внутренний алгоритм программирования встроен цикл стирания (только при последовательном программировании), поэтому нет необходимости в выполнении команды стирания памяти. Команда стирания микросхемы переводит все ячейки памяти программ и данных в состояние $FF.

Флэш память программ и энергонезависимая память данных имеют отдельное адресное пространство: $0000 - $хххх для памяти программ и $000- $ххх для памяти данных.

При программировании необходимо подавать внешнюю тактовую частоту на вывод XTAL1 или подключить внешний тактовый генератор к выводам XTAL1 и XTAL2. Минимальные длительности низкого и высокого уровня сигнала SCK определены следующим образом:

Низкий: > 2 периодов XTAL1

Высокий: > 2 периодов XTAL1

Подтверждение данных

До завершения программировании нового байта, при чтении из памяти будет читаться значение $7F. Когда микросхема будет готова для записи следующего байта, будет выдаваться записанное значение. Это используется для определения момента, когда можно записывать следующий байт. Этот способ не будет работать для байта $7F, поэтому для записи этого числа перед программированием следующего байта придется выждать по крайней мере 4mS. Поскольку после стирания ячейки всегда устанавливаются в $FF, при программировании ячейки, содержащие $FF можно пропускать. Это не применимо при перезаписи EEPROM без стирания памяти программ. В этом случае подтверждение не работает для данных $7F и $FF, для этих значений перед программированием следующего байта необходимо выждать 4mS.

Алгоритм последовательного программирования

Для программирования и проверки микросхемы в режиме последовательного программирования рекомендуется следующая последовательность действий :

Последовательность включения питания:

Любую ячейку памяти можно проверить используя команду чтения, которая выдает содержимое указанной ячейки на последовательный вывод MISO/PB6.

По окончанию программирования вывод RESET может быть установлен в '1' для возобновления нормальной работы схемы.

Последовательность выключения питания (если необходимо)

Возможность внутрисхемного программирования микроконтроллеров AVR по последовательному синхронному интерфейсу SPI позволяет создавать простые и недорогие программаторы. Такие программаторы называют внутрисхемными (In-System Programmer, ISP).

При выполнении лабораторного практикума для программирования микроконтроллеров используется на наш взгляд наиболее простая и доступная программа AVReAL, которая поддерживает выходной формат файла AVRStudio и некоторым недостатком которой является то, что она не входит в число утилит AVRStudio и запускается из системной оболочки. Для более подробного изучения способов и средств программирования микроконтроллеров AVR рекомендуем обратиться на http://www.atmel.com/atmel/acrobat/doc0943.pdf.


Hosted by uCoz