Здесь приведен перевод апноута 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 подключается к компьютеру через стандартный порт 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. |