Программирование AVR AVR061: старая версия протокола обмена STK500 Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

AVR061: старая версия протокола обмена STK500 Печать
Добавил(а) microsin   

Здесь приведен перевод апноута AVR061: STK500 Communication Protocol [1], посвященного ранней версии протокола обмена STK500. В апноуте AVR068 [2] описывается версия новая версия 2.0 протокола STK500, содержащая некоторые дополнения к оригинальной старой версии (в частности, новая версия поддерживает одновременно STK500 и AVRISP, введены номер последовательности пакета и контрольная сумма).

[Что такое STK500]

Прим. переводчика: под STK500 часто понимают как стартеркит STK500 [3], так и протокол [1], который он поддерживает. Стартеркит STK500 - это специальная плата, позволяющая макетировать устройства на различных микроконтроллерах AVR, разрабатывать программы для них, прошивать память программ и данных микроконтроллеров, фьюзы и биты защиты. Пошаговая отладка не поддерживается, отлаживать программы firmware можно только с помощью отладочного вывода через UART и методом написал-прошил-проверил. Таким образом, стартеркит STK500 имеет в своем составе программатор микроконтроллеров AVR, и протокол STK500 по сути и предназначен для управления этим программатором.

STK500-top-side

Стартеркит STK500 подключается к компьютеру через стандартный порт RS232 (COM-порт). Для подключения через USB нужно использовать переходники USB-COM порт (виртуальный COM-порт, класс USB CDC). Некоторые программаторы микроконтроллеров AVR поддерживают протокол STK500 поверх подключения по USB. Протокол STK500 поддерживает open source утилита AVRDUDE, которая может работать на *nix компьютерах (Linux, FreeBSD) и Mac OS, это позволяет использовать стартеркит STK500 или поддерживающий этот одноименный протокол программатор на других операционных системах, не только под Windows.

Протокол STK500 предназначен для обмена между компьютером PC (с запущенной на нем средой разработки и программирования AVR Studio) и стартер-китом STK500. Протокол основан на более ранних разработках (прим. переводчика: см. STK200, AVR910, AVR911), и полностью совместим с ними, так что не должно быть переназначения или перекрытия команд. Последующие секции подробно описывают каждую часть протокола. Все команды и ответы на команды являются стандартными символами ASCII в диапазоне 0x00 .. 0x7F. Данные могут быть любыми символами в диапазоне 0x00 .. 0xFF.

Определения всех команд, ответов, параметров и других заданных величин можно найти в файле commamd.h. Коды устройств можно найти в файле devices.h. Эти файлы можно найти в секциях сайта Atmel, посвященных программному обеспечению, или см. [4], папка AVR061 архива. В конце статьи будет приведен обзор по информации кодов устройств, сигнатуры, биты фьюзов (fuse bits), биты защиты (lock bits) каждого из поддерживаемых в настоящее время устройств. "Устройства" - это микроконтроллеры AVR (megaAVR, tinyAVR).

Прим. переводчика: программатор микроконтроллеров AVR (или загрузчик bootloader) может эмулировать поведение стартеркита STK500, тогда обычно говорят, что программатор поддерживает протокол STK500. Поддержка протокола STK500 программатором (или бутлоадером) позволяет добиться совместимости с популярной средой разработки AVR Studio. Это дает возможность программировать микроконтроллеры через встроенную в AVR Studio утилиту программирования AVRISP (как с графическим интерфейсом, так и с помощью утилиты командной строки).

[Определения ответов STK500 (Response Definitions)]

Эта секция описывает значения допустимых ответов от стартеркита STK500. Некоторые из ответов будут частями более сложных ответов, также содержащих данные, в зависимости от команды.

Мнемоника ответа Описание
Resp_STK_OK OK. Отправляется после выполнения допустимой команды.
Resp_STK_FAILED Failed. Отправляется, если выполнение команды завершилось с ошибкой.
Resp_STK_INSYNC Insync. Означает установку синхронизации. Отправляется после приема команды Sync_CRC_EOP.
Resp_STK_NOSYNC Nosync. Означает, что пропала синхронизация. Отправляется, если не была принята Sync_CRC_EOP после команды.
Resp_STK_UNKNOWN Отправляется в ответ на неизвестную команду, если эта неизвестная команда непосредственно сопровождается Sync_CRC_EOP.
Resp_STK_NODEVICE Nodevice. Отправляется в ответ на Cmnd_STK_ENTER_PROGMODE, если предварительно не были установлены правильные параметры устройства командой Cmnd_STK_SET_DEVICE.

[Определения команд (Command Definitions)]

В этой секции описаны команды, которые распознает и обрабатывает стартеркит STK500.

Check if Starterkit Present. Команда проверяет наличие подключенного к PC (через канал обмена RS-232 или виртуальный COM-порт, класс USB CDC).

Формат команды: Cmnd_STK_GET_SIGN_ON, Sync_CRC_EOP
Код команды 0x31
Resp_STK_INSYNC, sign_on_message, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 1. Параметры Cmnd_STK_GET_SIGN_ON.

Имя параметра Использование поля Формат поля
sign_on_message Строка текста. Здесь всегда "AVR STK". 7 байт

Get Synchronization. Эта команда используется для того, чтобы попытаться восстановить синхронизацию, когда она потеряна. Эта команда будет периодически отправляться, пока не будет получен ответ Resp_STK_INSYNC.

Формат команды: Cmnd_STK_GET_SYNC, Sync_CRC_EOP
Код команды 0x30
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Get Parameter Value. Получение значения допустимого параметра стартеркита STK500. Если параметр не используется, то будет возвращен тот же параметр совместно с ответом Resp_STK_FAILED для указания на ошибку. См. в статье секцию "Определения параметров" для информации по допустимым параметрам и что они означают.

Формат команды: Cmnd_STK_GET_PARAMETER, parameter, Sync_CRC_EOP
Код команды 0x41
Resp_STK_INSYNC, value, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_INSYNC, parameter, Resp_STK_FAILED - ответ, если не был указан parameter.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 3. Параметры Cmnd_STK_GET_PARAMETER.

Имя параметра Использование поля Формат поля
parameter Любой допустимый параметр, который задан в command.h. 1 байт (0x00 .. 0x7F)
value Любое 8-битное значение. 1 байт (0x00 .. 0xFF)

Set Parameter Value. Установка значения допустимого параметра в стартерките STK500. См. в статье секцию Параметры для информации по допустимым параметрам и что они означают.

Формат команды: Cmnd_STK_SET_PARAMETER, parameter, value, Sync_CRC_EOP
Код команды 0x40
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_INSYNC, parameter, Resp_STK_FAILED - ответ, если не был указан parameter.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 4. Параметры Cmnd_STK_SET_PARAMETER.

Имя параметра Использование поля Формат поля
parameter Любой допустимый параметр, который задан в command.h. 1 байт (0x00 .. 0x7F)
value Любое 8-битное значение. 1 байт (0x00 .. 0xFF)

Set Device Programming Parameters. Установка параметров программирования для текущего устройства. Эти параметры должны быть установлены перед тем, как стартеркит может войти в режим программирования (Programming mode).

Формат команды: Cmnd_STK_SET_DEVICE, devicecode, revision, progtype, parmode, polling, selftimed, lockbytes, fusebytes, flashpollval1, flashpollval2, eeprompollval1, eeprompollval2, pagesizehigh, pagesizelow, eepromsizehigh, eepromsizelow, flashsize4, flashsize3, flashsize2, flashsize1, Sync_CRC_EOP
Код команды 0x42
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 5. Параметры Cmnd_STK_SET_DEVICE.

Имя параметра Использование поля Формат поля
devicecode Код устройства (микроконтроллера), как он задан в файле devices.h. 1 байт
revision Ревизия устройства. В настоящий момент этот параметр не используется. Должен быть установлен в 0. 1 байт
progtype Определяет, какие режимы программирования поддерживаются:
0 - оба режима, и Parallel/High-voltage, и Serial
1 - только Parallel/High-voltage
1 байт
parmode Задает, имеет ли устройство полный параллельный интерфейс программирования, или псевдопараллельный интерфейс программирования:
0 - Pseudo parallel interface
1 - Full parallel interface
1 байт
polling Задает, будет ли использоваться опрос (polling) во время доступа через SPI к программируемому чипу (ISP-программирование).
0 - опрос не может использоваться
1 - может использоваться опрос
1 байт
selftimed Задает, как передаются инструкции программирования, с самотактированием (self-timed) или нет.
0 - self timed не используется
1 - self timed используется
1 байт
lockbytes Количество байт защиты. В настоящее время этот параметр не используется. Он должен быть установлен в действительное количество байт защиты для обеспечения совместимости в будущем. 1 байт
fusebytes Количество байт фьюзов. В настоящее время этот параметр не используется. Он должен быть установлен в действительное количество байт фьюзов для обеспечения совместимости в будущем. 1 байт
flashpollval1 Значение интервала опроса для FLASH, см. даташит на устройство. 1 байт
flashpollval2 То же самое, что и flashpollval1. 1 байт
eeprompollval1 Значение интервала опроса 1 для EEPROM (P1), см. даташит на устройство. 1 байт
eeprompollval2 Значение интервала опроса 2 для EEPROM (P2), см. даташит на устройство. 1 байт
pagesizehigh Размер страницы FLASH в байтах для устройств, использующих режим программирования страниц, старший байт 16-битной величины. 1 байт
pagesizelow Размер страницы FLASH в байтах для устройств, использующих режим программирования страниц, младший байт 16-битной величины. 1 байт
eepromsizehigh Размер страницы EEPROM в байтах, старший байт 16-битной величины. 1 байт
eepromsizelow Размер страницы EEPROM в байтах, младший байт 16-битной величины. 1 байт
flashsize4 Размер FLASH в байтах, байт 4 (самый старший байт) от 32-битной величины. 1 байт
flashsize3 Размер FLASH в байтах, байт 3 от 32-битной величины. 1 байт
flashsize2 Размер FLASH в байтах, байт 2 от 32-битной величины. 1 байт
flashsize1 Размер FLASH в байтах, байт 1 (самый младший) от 32-битной величины. 1 байт

Set Extended Device Programming Parameters. Устанавливает расширенные параметры программирования для текущего устройства.

Формат команды: Cmnd_SET_DEVICE_EXT, commandsize, eeprompagesize, signalpagel, signalbs2, Synch_CRC_EOP
Код команды 0x45
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 6. Параметры Cmnd_SET_DEVICE_EXT.

Имя параметра Использование поля Формат поля
commandsize Задает, сколько байт дополнительных параметров содержит команда. В этом случае значение должно быть рано 4 (для параметров eepromsize, signalpagel и signalbs2). В последующих версиях STK500 может принимать и другие параметры. 1 байт
eeprompagesize Размер в байтах страницы EEPROM. 1 байт
signalpagel Задает, на какой порт должен быть выведен сигнал PAGEL. Например: signalpagel = 0xD7, в этом случае PAGEL привязан к порту PORTD7. 1 байт
signalbs2 Задает, к какому порт должен быть привязан сигнал BS2. Пример см. в параметре signalpagel. 1 байт
ResetDisable Задает, имеет ли устройство фьюз RSTDSBL (в этом случае значение 1) или нет (значение 0). 1 байт

Enter Program Mode. Вход в режим программирования для выбранного устройства. Перед вызовом этой команды предварительно должны быть установлены командой Cmnd_STK_SET_DEVICE режим программирования и параметры программирования устройства. В противном случае команда Cmnd_STK_ENTER_PROGMODE потерпит неудачу, и будет возвращен ответ Resp_STK_NODEVICE.
Формат команды: Cmnd_STK_ENTER_PROGMODE, Sync_CRC_EOP
Код команды 0x50
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_INSYNC, Resp_STK_NODEVICE - ответ, если не были предварительно настроены параметры программирования.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Leave Program Mode. Команда производит вывод стартеркита из режима программирования.
Формат команды: Cmnd_STK_LEAVE_PROGMODE, Sync_CRC_EOP
Код команды 0x51
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Chip Erase. Производит очистку памяти программируемого устройства.
Формат команды: Cmnd_STK_CHIP_ERASE, Sync_CRC_EOP
Код команды 0x52
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Check for Address Autoincrement. Проверка - используется ли автоматический инкремент адреса при использовании команд Cmnd_STK_PROG/READ_FLASH/EEPROM. Поскольку STK500 всегда автоматически инкрементирует адрес, то результат выполнения этой команды всегда один и тот же - положительный.
Формат команды: Cmnd_STK_CHECK_AUTOINC, Sync_CRC_EOP
Код команды 0x53
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Load Address. Команда загружает в стартеркит 16-битный адрес. Эта команда используется для установки адреса последующих операций чтения или записи памяти FLASH (non-volatile, энергонезависимая память программ) или EEPROM (non-volatile, энергонезависимая память данных). Команда загрузки адреса всегда должна использоваться до вызова команд Cmnd_STK_PROG_PAGE или Cmnd_STK_READ_PAGE.
Формат команды: Cmnd_STK_LOAD_ADDRESS, addr_low, addr_high, Sync_CRC_EOP
Код команды 0x55
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 11. Параметры Cmnd_STK_LOAD_ADDRESS.

Имя параметра Использование поля Формат поля
addr_low Младший байт (LSB) адреса. 1 байт
addr_high Старший байт (MSB) адреса. 1 байт

Program Flash Memory. Программирует одно слово (2 байта) в память FLASH.

Прим. переводчика: память FLASH почти всегда используется для хранения программы (firmware) и/или констант в платформе микроконтроллеров AVR. Если это программа, то 1 слову (2 байтам) памяти FLASH соответствует одна инструкция исполняемого кода AVR (иногда это часть инструкции). Если это данные, то 1 слову соответствуют 2 байта данных констант.

Формат команды: Cmnd_STK_PROG_FLASH, flash_low, flash_high, Sync_CRC_EOP
Код команды 0x60
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 12. Параметры Cmnd_STK_PROG_FLASH.

Имя параметра Использование поля Формат поля
flash_low Младший байт (LSB) слова для программирования. 1 байт
flash_high Старший байт (MSB) слова для программирования. 1 байт

Program Data Memory. Программирует 1 байт в память EEPROM (non-volatile, энергонезависимая память данных).

Формат команды: Cmnd_STK_PROG_DATA, data, Sync_CRC_EOP
Код команды 0x61
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 13. Параметры Cmnd_STK_PROG_DATA.

Имя параметра Использование поля Формат поля
data Байт для программирования. 1 байт

Program Fuse Bits. Программирует биты фьюзов. Назначение битов фьюзов поддерживаемых в настоящее время устройств описано в приложении, в конце статьи.

Примечание: для программирования ISP используйте команду Cmnd_STK_UNIVERSAL с соответствующими байтами команды ISP (можно найти в даташите на программируемое устройство).

Прим. переводчика: fuse переводится как "плавкий предохранитель", "перемычка". Биты фьюзов предназначены для энергонезависимой установки режима работы микроконтроллера AVR - выбор тактового генератора, тип используемого резонатора, наличие поддержки boot-секции, разрешена ли отладка, разрешено ли ISP-программирование и т. п.

Формат команды: Cmnd_STK_PROG_FUSE, fuse_low, fuse_high, Sync_CRC_EOP
Код команды 0x62
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 14. Параметры Cmnd_STK_PROG_FUSE.

Имя параметра Использование поля Формат поля
fuse_low Младший байт фьюзов. 1 байт
fuse_high Старший байт фьюзов. 1 байт

Program Fuse Bits Extended. Программирует расширенные биты фьюзов. Назначение битов фьюзов поддерживаемых в настоящее время устройств описано в приложении, в конце статьи.

Примечание: для программирования ISP используйте команду Cmnd_STK_UNIVERSAL с соответствующими байтами команды ISP (можно найти в даташите на программируемое устройство).

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

Формат команды: Cmnd_STK_PROG_FUSE_EXT, fuse_low, fuse_high, fuse_ext, Sync_CRC_EOP
Код команды 0x65
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 15. Параметры Cmnd_STK_PROG_FUSE_EXT.

Имя параметра Использование поля Формат поля
fuse_low Младший байт фьюзов. 1 байт
fuse_high Старший байт фьюзов. 1 байт
fuse_ext Расширенный байт фьюзов. 1 байт

Program Lock Bits. Программирует биты защиты микроконтроллера. Назначение битов защиты поддерживаемых в настоящее время устройств описано в приложении, в конце статьи.

Прим. переводчика: биты защиты управляют доступом (на чтение, запись) к различным областям памяти микроконтроллера - память программ, boot-секция, память данных и т. п. Установка битов защиты позволяет защитить от незаконного доступа (с целью копирования или реверс-инжиниринга) к программному обеспечению (firmware) микроконтроллера AVR. 8 бит фьюзов группируются в байт фьюзов (fuse byte), и различают младший, старший и расширенный байты фьюзов. Исходное (незапрограммированное) состояние фьюзов - лог. 1 (байт фьюзов 0xFF). Когда значение фьюза программируется, то он переводится в состояние лог. 0. Такое поведение связано с технологией памяти FLASH, и иногда создает некоторую путаницу в понимании состояния бит фьюзов. Для вычисления байтов фьюзов и понимания их назначения (для разных моделей чипов AVR) есть очень хороший онлайн-ресурс - сайт Engbedded Atmel AVR® Fuse Calculator site:engbedded.com.

Формат команды: Cmnd_STK_PROG_LOCK, lock, Synch_CRC_EOP
Код команды 0x63
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 16. Параметры Cmnd_STK_PROG_LOCK.

Имя параметра Использование поля Формат поля
lock Биты защиты, как они определены в даташите. 1 байт

Program Page. Загружает блок данных в стартеркит, и программирует этими данными память FLASH или EEPROM текущего устройства. Размер блока данных не должен превышать 256 байт.
Формат команды: Cmnd_STK_PROG_PAGE, bytes_high, bytes_low, memtype, data, Sync_CRC_EOP
Код команды 0x64
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 17. Параметры Cmnd_STK_PROG_PAGE.

Имя параметра Использование поля Формат поля
bytes_high Старший байт размера блока данных. 1 байт
bytes_low Младший байт размера блока данных. 1 байт
memtype Тип памяти: "E" EEPROM, "F" FLASH 1 байт
data

Данные для программирования в FLASH или EEPROM. Если программируется FLASH, то последовательность данных содержит старший и младший байты (lowbyte:highbyte).

((bytes_high << 8)
| bytes_low) байт.

Read Flash Memory. Читает одно слово (2 байта) из памяти FLASH.
Формат команды: Cmnd_STK_READ_FLASH, Sync_CRC_EOP
Код команды 0x70
Resp_STK_INSYNC, flash_low, flash_high, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 18. Параметры ответа на Cmnd_STK_READ_FLASH.

Имя параметра Использование поля Формат поля
flash_low Младший байт. 1 байт
flash_high Старший байт. 1 байт

Read Data Memory. Читает 1 байт из памяти EEPROM.
Формат команды: Cmnd_STK_READ_DATA, Sync_CRC_EOP
Код команды 0x71
Resp_STK_INSYNC, data, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 19. Параметры ответа на Cmnd_STK_READ_DATA.

Имя параметра Использование поля Формат поля
data Байт данных. 1 байт

Read Fuse Bits. Читает состояние битов фьюзов. Назначение битов фьюзов поддерживаемых в настоящее время устройств описано в приложении, в конце статьи.

Примечание: для программирования ISP используйте команду Cmnd_STK_UNIVERSAL с соответствующими байтами команды ISP (можно найти в даташите на программируемое устройство).

Имейте в виду, что некоторые устройства комбинируют Lock bits и Fuse bits, так что получение действительных значений байт фьюзов требует использования Cmnd_STK_READ_LOCK. Это более подробно описано в приложении.

Формат команды: Cmnd_STK_READ_FUSE, Sync_CRC_EOP
Код команды 0x72
Resp_STK_INSYNC, fuse_low, fuse_high, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 20. Параметры ответа на Cmnd_STK_READ_FUSE.

Имя параметра Использование поля Формат поля
fuse_low Младший байт фьюзов. 1 байт
fuse_high Старший байт фьюзов. 1 байт

Read Fuse Bits Extended. Читает расширенные биты фьюзов. Назначение битов фьюзов поддерживаемых в настоящее время устройств описано в приложении, в конце статьи.

Примечание: для программирования ISP используйте команду Cmnd_STK_UNIVERSAL с соответствующими байтами команды ISP (можно найти в даташите на программируемое устройство).

Имейте в виду, что некоторые устройства комбинируют Lock bits и Fuse bits, так что получение действительных значений байт фьюзов требует использования Cmnd_STK_READ_LOCK. Это более подробно описано в приложении.

Формат команды: Cmnd_STK_READ_FUSE_EXT, Sync_CRC_EOP
Код команды 0x72
Resp_STK_INSYNC, fuse_low, fuse_high, fuse_ext, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 21. Параметры ответа на Cmnd_STK_READ_FUSE_EXT.

Имя параметра Использование поля Формат поля
fuse_low Младший байт фьюзов. 1 байт
fuse_high Старший байт фьюзов. 1 байт
fuse_ext Расширенный байт фьюзов. 1 байт

Read Lock Bits. Читает биты защиты. Назначение битов защиты поддерживаемых в настоящее время устройств описано в приложении, в конце статьи.

Примечание: для программирования ISP используйте команду Cmnd_STK_UNIVERSAL с соответствующими байтами команды ISP (можно найти в даташите на программируемое устройство).

Имейте в виду, что некоторые устройства комбинируют Lock bits и Fuse bits, так что получение действительных значений байт фьюзов требует использования Cmnd_STK_READ_LOCK. Это более подробно описано в приложении.

Формат команды: Cmnd_STK_READ_LOCK, Sync_CRC_EOP
Код команды 0x73
Resp_STK_INSYNC, lock, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 22. Параметры ответа на Cmnd_STK_READ_LOCK.

Имя параметра Использование поля Формат поля
lock Биты защиты. 1 байт

Read Page. Читает блок данных из FLASH или EEPROM в памяти текущего устройства. Размер блока данных не должен превышать 256 байт.

Формат команды: Cmnd_STK_READ_PAGE, bytes_high, bytes_low, memtype, Sync_CRC_EOP
Код команды 0x74
Resp_STK_INSYNC, data, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 23. Параметры Cmnd_STK_READ_PAGE.

Имя параметра Использование поля Формат поля
bytes_high Старший байт размера блока данных. 1 байт
bytes_low Младший байт размера блока данных. 1 байт
memtype Тип памяти: "E" EEPROM, "F" FLASH 1 байт
data

Данные, прочитанные из FLASH или EEPROM. Если FLASH, то последовательность данных содержит старший и младший байты (lowbyte:highbyte).

((bytes_high << 8)
| bytes_low) байт.

Read Signature Bytes. Чтение байт сигнатуры устройства.

Формат команды: Cmnd_STK_READ_SIGN, Sync_CRC_EOP
Код команды 0x75
Resp_STK_INSYNC, sign_high, sign_middle, sign_low, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 24. Параметры ответа на Cmnd_STK_READ_SIGN.

Имя параметра Использование поля Формат поля
sigh_high Старший байт сигнатуры. 1 байт
sign_middle Средний байт сигнатуры. 1 байт
sigh_low Младший байт сигнатуры. 1 байт

Read Oscillator Calibration Byte. Чтение байта калибровки генератора устройства.

Формат команды: Cmnd_STK_READ_OSCCAL, Sync_CRC_EOP
Код команды 0x76
Resp_STK_INSYNC, osc_cal_byte, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 25. Параметры ответа на Cmnd_STK_READ_OSCCAL.

Имя параметра Использование поля Формат поля
osc_cal_byte Байт калибровки генератора. 1 байт

Read Oscillator Calibration Byte Extended. Расширенное чтение байта калибровки генератора устройства.

Формат команды: Cmnd_STK_READ_OSCCAL_EXT, address, Sync_CRC_EOP
Код команды 0x78
Resp_STK_INSYNC, osc_cal_byte, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 26. Параметры Cmnd_STK_READ_OSCCAL_EXT.

Имя параметра Использование поля Формат поля
address Адрес для чтения байта калибровки генератора. 1 байт
osc_cal_byte Байт калибровки генератора. 1 байт

Universal Command. Универсальная команда, которая используется для отправки обычного 32-битного потока данных/команд напрямую в интерфейс SPI текущего устройства. В ответе возвращается последние выдвинутые 8 бит.

Формат команды: Cmnd_STK_UNIVERSAL, byte1, byte2, byte3, byte4, Sync_CRC_EOP
Код команды 0x56
Resp_STK_INSYNC, byte4_out, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 27. Параметры Cmnd_STK_UNIVERSAL.

Имя параметра Использование поля Формат поля
byte1 1 байт данных/команды SPI. 1 байт
byte2 2 байт данных/команды SPI. 1 байт
byte3 3 байт данных/команды SPI. 1 байт
byte4 4 байт данных/команды SPI. 1 байт
byte4_out Последние 8 бит ответа, выдвинутые из интерфейса SPI. 1 байт

Extended Universal Command. Расширенная универсальная команда, используемая для передачи любого количества байт в интерфейс SPI текущего устройства.

Формат команды: Cmnd_STK_UNIVERSAL_MULTI, number_of_bytes, data bytes, Sync_CRC_EOP
Код команды 0x57
Resp_STK_INSYNC, Resp_STK_OK - ответ, если команда была выполнена успешно.
Resp_STK_NOSYNC - ответ, если не был принят Sync_CRC_EOP.

Таблица 28. Параметры Cmnd_STK_UNIVERSAL_MULTI.

Имя параметра Использование поля Формат поля
number_of_bytes Количество отправляемых байт. Значение 0 .. 255 эквивалентно 1 .. 256 отправляемых байтов. 1 байт

[Определение параметров (Parameter Definitions)]

Hardware Version. Этот параметр определяет версию аппаратуры стартеркита.
Мнемоника: Parm_STK_HW_VER
Доступ: только чтение
Код параметра: 0x80

Software Version Major. Старшая (major) часть версии программного обеспечения firmware управляющего MCU стартеркита.
Мнемоника: Parm_STK_SW_MAJOR
Доступ: только чтение
Код параметра: 0x81

Software Version Minor. Младшая (minor) часть версии программного обеспечения firmware управляющего MCU стартеркита.
Мнемоника: Parm_STK_SW_MINOR
Доступ: только чтение
Код параметра: 0x82

Status LED. Устанавливает или запрашивает текущие установки светодиода состояния (status LED) стартеркита. Светодиод состояния является двойным светодиодом (красный и зеленый), который может светиться красным цветом, зеленым цветом, или желтым (если одновременно горят оба светодиода).
Мнемоника: Parm_STK_LEDS
Доступ: чтение и запись
Код параметра: 0x83

Таблица 32. Значение параметра Parm_STK_LEDS.

Значение Описание
0 Светодиод состояния не горит
1 Светодиод горит зеленым цветом
2 Светодиод горит красным цветом
3 Светодиод горит желтым цветом

Target Voltage (VTARGET). Устанавливает или запрашивает напряжение питания текущей цели (устройства, микроконтроллера AVR), VTARGET. Действительное напряжение (Real target voltage) является функцией от значения параметра, и может быть вычислено по формуле:

Real target voltage = [Parm_STK_VTARGET]/10.0

Мнемоника: Parm_STK_VTARGET
Доступ: чтение и запись
Код параметра: 0x84

Adjustable Voltage (AREF). Устанавливает или запрашивает значение текущего подстраиваемого напряжения (adjustable voltage, AREF). Действительное напряжение (Real adjustable voltage) является функцией от значения параметра, и может быть вычислено по формуле:

Real adjustable voltage = [Parm_STK_VADJUST]/10.0

Мнемоника: Parm_STK_VADJUST
Доступ: чтение и запись
Код параметра: 0x85

Oscillator Timer Prescaler Value. Устанавливает или запрашивает значение прескалера для генератора таймера MCU, который используется для организации подстраиваемого генератора (adjustable Oscillator). Действительное значение частоты является функцией параметров Parm_STK_OSC_PSCALE и Parm_STK_OSC_CMATCH, см. таблицу 35.

Мнемоника: Parm_STK_OSC_PSCALE
Доступ: чтение и запись
Код параметра: 0x86

Таблица 35. Значение параметра Parm_STK_OSC_PSCALE.

Значение Частота генератора
0 Генератор выключен
1 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*1*2)
2 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*8*2)
3 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*32*2)
4 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*64*2)
5 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*128*2)
6 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*256*2)
7 mcu_freq / (([Parm_STK_OSC_CMATCH]+1)*1024*2)

Oscillator Timer Compare Match Value. Устанавливает или запрашивает значение регистра совпадения таймера MCU, который используется для организации подстраиваемого генератора (adjustable Oscillator). Значение параметра Parm_STK_OSC_CMATCH - 16-битное число, от которого зависит генерируемая частота. См. описание параметра Parm_STK_OSC_PSCAL.

Мнемоника: Parm_STK_OSC_CMATCH
Доступ: чтение и запись
Код параметра: 0x87

ISP SCK Duration. Устанавливает или запрашивает параметр для текущей длительности полупериода сигнала ISP SCK (тактовая частота ISP). Чтобы обеспечить корректное программирование, параметр Parm_STK_SCK_DURATION должен соответствовать следующему условию (target_freq это тактовая частота программируемого устройства в Гц):

[Parm_STK_SCK_DURATION] > (8*10^6 / target_freq) - 2

Мнемоника: Parm_STK_SCK_DURATION
Доступ: чтение и запись
Код параметра: 0x89

Buffer Size. Эти параметры запрашивают размер буфера обмена данными в управляющем MCU стартеркита. Параметры идут в форме 16-битного значения, где Parm_STK_BUFSIZEH старший байт, и Parm_STK_BUFSIZEL младший байт размера буфера.
Мнемоника: Parm_STK_BUFSIZEH:Parm_STK_BUFSIZEL
Доступ: только чтение
Коды параметра: 0x91:0x90

Topcard Detect. Запрашивает информацию о том, установлена карта верхнего уровня на STK500 или нет.
Мнемоника: Param_STK500_TOPCARD_DETECT
Доступ: только чтение
Коды параметра: 0x98

Таблица 39. Код установленной карты верхнего уровня.

Значение Описание
0 Зарезервировано для будущего использования
1 Определена дочерняя плата STK502
2 Определена дочерняя плата STK501
3 Установка top-card не обнаружена

[Приложение 1. Зарезервированные команды]

Имеется несколько команд (или символов команд), которые зарезервированы и не должны использоваться для этого продукта. Они либо используются для других продуктов AVR, либо зарезервированы для будущего использования. Все зарезервированные команды возвратят ответ NACK (символ '?') на эти зарезервированные команды:

• '%'
• ':'
• '<'
• '>'
• 'I'
• 'i'
• 'Q'
• 'q'
• 'U'
• 'u'
• 'Z'

[Приложение 2. Коды устройств (Device Codes)]

Таблица 40. Коды устройств (микроконтроллеров AVR).

Микроконтроллер Код
ATtiny11 0x11
ATtiny12 0x12
ATtiny15 0x13
ATtiny22 0x20
ATtiny26 0x21
ATtiny28 0x28
AT90S1200 0x33
AT90S2313 0x40
AT90S2323 0x41
AT90S2333 0x42
AT90S2343 0x43
AT90S4414 0x50
AT90S4433 0x51
AT90S4434 0x52
AT90S8515 0x60
AT90S8535 0x61
ATmega8 0x62
ATmega8515 0x63
ATmega8535 0x64
ATmega161 0x80
ATmega163 0x81
ATmega16 0x82
ATmega162 0x83
ATmega169 0x84
ATmega323 0x90
ATmega32 0x91
ATmega64 0xA0
ATmega103 0xB1
ATmega128 0xB2
AT89551 0xE1
AT89552 0xE2
AT86RF401 0xD0

[Приложение 3. Байты сигнатур (Signature Bytes)]

Таблица 41. Байты сигнатур устройств (микроконтроллеров AVR).

Адрес 0x002 0x001 0x000
ATtiny11 0x05 0x90 0x1E
ATtiny12 0x05 0x90 0x1E
ATtiny15 0x06 0x90 0x1E
ATtiny22 0x06 0x91 0x1E
ATtiny26 0x09 0x91 0x1E
ATtiny28 0x07 0x91 0x1E
AT90S1200 0x01 0x90 0x1E
AT90S2313 0x01 0x91 0x1E
AT90S2323 0x02 0x91 0x1E
AT90S2333 0x05 0x91 0x1E
AT90S2343 0x03 0x91 0x1E
AT90S4414 0x01 0x92 0x1E
AT90S4433 0x03 0x92 0x1E
AT90S4434 0x02 0x92 0x1E
AT90S8515 0x01 0x93 0x1E
AT90S8535 0x03 0x93 0x1E
ATmega8 0x07 0x93 0x1E
ATmega8515 0x06 0x93 0x1E
ATmega8535 0x08 0x93 0x1E
ATmega161 0x01 0x94 0x1E
ATmega163 0x02 0x94 0x1E
ATmega16 0x03 0x94 0x1E
ATmega162 0x04 0x94 0x1E
ATmega169 0x05 0x94 0x1E
ATmega323 0x01 0x95 0x1E
ATmega32 0x02 0x95 0x1E
ATmega64 0x02 0x96 0x1E
ATmega103 0x01 0x97 0x1E
ATmega128 0x02 0x97 0x1E
AT89551 0x06 0x51 0x1E
AT89552 0x06 0x52 0x1E
AT86RF401 0x81 0x91 0x1E

[Приложение 4. Биты защиты (Lock Bits)]

Для разъяснения бит защиты обратитесь к даташиту на конкретное устройство. Незапрограммированные биты должны быть установлены в лог. 1.

Таблица 42. Биты защиты устройств (микроконтроллеров AVR).

Биты защиты Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ATtiny11 1 1 1 1 1 LB2 LB1 1
ATtiny12 1 1 1 1 1 LB2 LB1 1
ATtiny15 1 1 1 1 1 LB2 LB1 1
ATtiny22 1 1 1 1 1 LB2 LB1 1
ATtiny26 1 1 1 1 1 LB2 LB1 1
ATtiny28 1 1 1 1 1 LB2 LB1 1
AT90S1200 1 1 1 1 1 LB1 LB2 1
AT90S2313 1 1 1 1 1 LB1 LB2 1
AT90S2323 1 1 1 1 1 LB2 LB1 1
AT90S2333 1 1 1 1 1 LB2 LB1 1
AT90S2343 1 1 1 1 1 LB2 LB1 1
AT90S4414 1 1 1 1 1 LB2 LB1 1
AT90S4433 1 1 1 1 1 LB2 LB1 1
AT90S4434 1 1 1 1 1 LB2 LB1 1
AT90S8515 1 1 1 1 1 LB2 LB1 1
AT90S8535 1 1 1 1 1 LB2 LB1 1
ATmega8 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega8515 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega8535 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega161 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega163 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega16 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega162 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega169 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega323 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega32 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega64 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
ATmega103 1 1 1 1 1 LB2 LB1 1
ATmega128 1 1 BLB12 BLB11 BLB02 BLB01 LB2 LB1
AT89551(1) -
AT89552(2) -
AT86RF401 1 1 1 1 1 LB2 LB1 1

Примечания:
(1). Для дополнительной информации см. даташит AT89551.
(2). Для дополнительной информации см. даташит AT89552.

[Приложение 5. Биты фьюзов, младший байт (Fuse Bits, Low Byte)]

Для разъяснения бит фьюзов обратитесь к даташиту на конкретное устройство. Незапрограммированные биты должны быть установлены в лог. 1.

Таблица 43. Биты фьюзов устройств (микроконтроллеров AVR), младший байт.

Биты фьюзов Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ATtiny11 0 0 0 FSTRT RSTDSBL CKSEL2 CKSEL1 CKSEL0
ATtiny12 BODLVL BODEN SPIEN RSTDSBL CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATtiny15 BODLVL BODEN SPIEN RTDSBL 1 1 CKSEL1 CKSEL0
ATtiny22 1 1 SPIEN 1 1 1 1 RCEN
ATtiny26 PLLCK CKOPT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATtiny28 1 1 1 INTCAP CKSEL3 CKSEL2 CKSEL1 CKSEL0
AT90S1200 1 1 SPIEN 1 1 1 1 RCEN
AT90S2313 1 1 SPIEN 1 1 1 1 FSTRT
AT90S2323 1 1 SPIEN 1 1 1 1 FSTRT
AT90S2333 1 1 SPIEN BODLVL BODEN CKSEL2 CKSEL1 CKSEL0
AT90S2343 1 1 SPIEN 1 1 1 1 RCEN
AT90S4414 1 1 SPIEN 1 1 1 1 FSTRT
AT90S4433 1 1 SPIEN BODLVL BODEN CKSEL2 CKSEL1 CKSEL0
AT90S4434 1 1 SPIEN 1 1 1 1 FSTRT
AT90S8515 1 1 SIEN 1 1 1 1 FSTRT
AT90S8535 1 1 SPIEN 1 1 1 1 FSTRT
ATmega8 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega8515 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega8535 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega161 1 BOOTRST SPIEN BODLVL BODEN CKSEL2 CKSEL1 CKSEL0
ATmega163 BODLEV BODEN SPIEN 1 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega16 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega162 CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega169 CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega323 BODLEV BODEN 1 1 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega32 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega64 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
ATmega103 1 1 SPIEN 1 EESAVE 1 SUT1 SUT0
ATmega128 BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
AT89551 1 1 1 1 1 1 1 1
AT89552 1 1 1 1 1 1 1 1
AT86RF401 1 1 1 1 1 1 1 1

[Приложение 6. Биты фьюзов, старший байт (Fuse Bits, High Byte)]

Для разъяснения бит фьюзов обратитесь к даташиту на конкретное устройство. Незапрограммированные биты должны быть установлены в лог. 1.

Таблица 44. Биты фьюзов устройств (микроконтроллеров AVR), старший байт.

Биты фьюзов Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ATtiny11 1 1 1 1 1 1 1 1
ATtiny12 1 1 1 1 1 1 1 1
ATtiny15 1 1 1 1 1 1 1 1
ATtiny22 1 1 1 1 1 1 1 1
ATtiny26 1 1 1 RSTDISBL SPIEN EESAVE DOBLEVEL BODEN
ATtiny28 1 1 1 1 1 1 1 1
AT90S1200 1 1 1 1 1 1 1 1
AT90S2313 1 1 1 1 1 1 1 1
AT90S2323 1 1 1 1 1 1 1 1
AT90S2333 1 1 1 1 1 1 1 1
AT90S2343 1 1 1 1 1 1 1 1
AT90S4414 1 1 1 1 1 1 1 1
AT90S4433 1 1 1 1 1 1 1 1
AT90S4434 1 1 1 1 1 1 1 1
AT90S8515 1 1 1 1 1 1 1 1
AT90S8535 1 1 1 1 1 1 1 1
ATmega8 RSTDISBL WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega8515 S8515C WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega8535 S8515C WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega161 1 1 1 1 1 1 1 1
ATmega163 1 1 1 1 1 BOOTSZ1 BOOTSZ0 BOOTRST
ATmega16 OCDEN JTAGEN SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega162 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega169 OCDEN JTAGEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega323 OCDEN JTAGEN SPIEN 1 EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega32 OCDEN JTAGEN SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
ATmega64 OCDEN JTAGEN SPIEN CKOPT
ATmega103 1 1 1 1 1 1 1 1
ATmega128 OCDEN JTAGEN SPIEN CKOPT
AT89551 1 1 1 1 1 1 1 1
AT89552 1 1 1 1 1 1 1 1
AT86RF401 1 1 1 1 1 1 1 1

[Приложение 7. Расширенные биты фьюзов (Fuse Bits, Extended Byte)]

Для разъяснения бит фьюзов обратитесь к даташиту на конкретное устройство. Незапрограммированные биты должны быть установлены в лог. 1.

Таблица 45. Расширенные биты фьюзов устройств (микроконтроллеров AVR).

Биты фьюзов Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ATtiny11 - - - - - - - -
ATtiny12 - - - - - - - -
ATtiny15 - - - - - - - -
ATtiny22 - - - - - - - -
ATtiny26 - - - - - - - -
ATtiny28 - - - - - - - -
AT90S1200 - - - - - - - -
AT90S2313 - - - - - - - -
AT90S2323 - - - - - - - -
AT90S2333 - - - - - - - -
AT90S2343 - - - - - - - -
AT90S4414 - - - - - - - -
AT90S4433 - - - - - - - -
AT90S4434 - - - - - - - -
AT90S8515 - - - - - - - -
AT90S8535 - - - - - - - -
ATmega8 - - - - - - - -
ATmega8515 - - - - - - - -
ATmega8535 - - - - - - - -
ATmega161 - - - - - - - -
ATmega163 - - - - - - - -
ATmega16 - - - - - - - -
ATmega162 1 1 1 M161C BODLEVEL2 BODLEVEL1 BODLEVEL0 1
ATmega169 1 1 1 1 BODLEVEL2 BODLEVEL1 BODLEVEL0 RSTDISBL
ATmega323 - - - - - - - -
ATmega32 - - - - - - - -
ATmega64 1 1 1 1 1 1 M103C WDTON
ATmega103 - - - - - - - -
ATmega128 1 1 1 1 1 1 M103C WDTON
AT89551 - - - - - - - -
AT89552 - - - - - - - -
AT86RF401 - - - - - - - -

[Приложение 8. Устройства, которые на чтении комбинируют значения бит фьюзов и бит защиты]

Некоторые устройства комбинируют на чтении биты фьюзов и защиты в одной и той же команде и ответе. Для них будет правильным использовать команду Cmnd_STK_READ_LOCK. Вот эти устройства:

• AT90S1200
• AT90S2313
• AT90S2323
• AT90S2343
• AT90S4414
• AT90S8515
• AT90S4434
• AT90S8535
• ATtiny22

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

[Приложение 9. Чтение и запись битов фьюзов и защиты в Serial Mode]

Запись и чтение битов защиты и фьюзов в Serial mode в настоящий момент осуществляется командой Cmnd_STK_UNIVERSAL. Эта команда требует, чтобы команды ISP были корректно сформированы компьютером PC, и строго соответствовали формату. Эти команды не всегда простые. Следующие секции псевдокода иллюстрируют, как нужно использовать команду Cmnd_STK_UNIVERSAL. В псевдокоде используется функция:

UniversalCommand(UCHAR byte1, UCHAR byte2, UCHAR byte3, UCHAR *byte4);

byte1 .. byte4 должны быть установлены так, чтобы содержать битовый поток, предоставляющий команду и данные. На выходе функция возвращает byte4, который содержит последние 8 бит, выдвинутые из SPI интерфейса ISP. См. описание команды Cmnd_STK_UNIVERSAL в предыдущих секциях для получения дополнительной информации.

Чтение битов защиты

if (m_pDevice->ucLockBytes >= 1)
   UniversalCommandNew(0x58, 0, 0, &data)
// Некоторые устройства комбинируют чтение битов фьюзов и защиты в том же самом
// байте. Чтобы получить корректное значение битов защиты этих устройств,
// нужно замаскировать биты, которые не относятся к битам защиты. Также нужно
// применить сдвиг битов защиты в позицию, описанную в секции приложения,
// относящегося к битам защиты.
// Примечание: такое же маскирование данных должно быть выполнено, когда биты
// защиты читаются в Parallell mode.
if (устройство комбинирует биты Fuse и Lock)
{
   lock_byte = 0xff;
   if (! (data & 0x80))
      lock_byte &= 0xfd;
   if (! (data & 0x40))
      lock_byte &= 0xfb;
}

Запись битов защиты

if (если количество байт защиты >= 1)
{
   // Устройство, у которых имеется SPI с собственным тактированием (self-timing
   // programming), имеют другой формат программирования для младших бит защиты,
   // по сравнению с устройствами с внешним тактированием, кроме ATtiny12 и ATtiny15
   if ((устройство поддерживает self-timing programming) 
      && 
       (устройство не Attiny12 или Attiny15))
      UniversalCommand(0xAC, 0xE0, 0, &lock_byte))
   else
      UniversalCommand(0xAC, lock_byte | 0xF9, 0, &dummy_var))
   Sleep(50); // ожидание завершения операции записи бит защиты в устройство
}

Чтение битов фьюзов

// Как уже было упомянуто, некоторые устройства комбинируют биты фьюзов и защиты
// в одном и том же байте при операции чтения. Они имеют другой формат
// программирования, отличающийся от других устройств (без комбинирования).
if (устройство не комбинирует биты fuse и lock)
{
   if (количество байт фьюзов >= 1)
      UniversalCommandNew(0x50, 0, 0, &low_fuse_byte);
   if (количество байт фьюзов >= 2)
      UniversalCommandNew(0x58, 0x08, 0, &high_fuse_byte);
}
// Объединение битов фьюзов и защиты. Здесь происходит все точно так же, как
// при чтении битов защиты, за исключением того, что берется другая маска для
// получения битов фьюзов из возвращенных данных.
// Примечание: такое же маскирование данных должно быть выполнено, когда биты
// фьюзов читаются в Parallell mode.
else if (устройство комбинирует биты fuse и lock)
{
   if (количество битов lock >= 1)
      UniversalCommandNew(0x58, 0, 0, &low_fuse_byte);
   low_fuse_byte |= 0xC0;// биты, не относящиеся к фьюзам, устанавливаются в 1
}

Запись битов фьюзов

if (количество байтов fuse >= 1)
{
   // Устройства с self-timing SPI имеет отличающийся от других формат
   // программирования
   if (устройство поддерживает self-timing programming)
      UniversalCommand(0xAC, 0xA0, 0, &low_fuse_byte);
   else
      UniversalCommand(0xAC, (low_fuse_byte & 0x1F) | 0xA0, 0, &low_fuse_byte);
   Sleep(50); // ожидание завершения операции записи бит фьюзов в устройство
}
if (количество байтов fuse >= 2)
{
   UniversalCommandNew(0xAC, 0xA8, 0, &high_fuse_byte);
   Sleep(50); // ожидание завершения операции записи бит фьюзов в устройство
}

[Ссылки]

1. AVR061: STK500 Communication Protocol site:atmel.com.
2. AVR068: протокол обмена STK500 ver. 2.0.
3. STK500 Hardware Description site:atmel.no.
4. 131028avr061-avr068.zip.

 

Добавить комментарий


Защитный код
Обновить

Top of Page