Здесь приведен перевод апноута AVR069: AVRISP mkII Communication Protocol [1], посвященного протоколу обмена AVRISP mkII. Описаны поддерживаемые основные команды, команды ISP и их опции (параметры), форматы команд и ответов на них. Протокол AVRISP mkII во многом совпадает с протоколом STK600 [3] (фактически является подмножеством STK600, но есть и незначительные отличия).
Firmware, поддерживающее AVRISP mkII, распространяется вместе с AVR Studio® 4.12 и более поздними версиями. Определения всех команд, ответов, параметров и других заданных величин можно найти в разделе 6.1.
Все параметры, относящихся к каждому конкретному устройству (микроконтроллеру AVR), можно найти в XML файлах, такой файл есть для каждого поддерживаемого устройства. XML-файлы описания устройств поставляются в составе AVR Studio. Вы можете загрузить последнюю версию AVR Studio 4 с сайта Atmel. См. раздел 4, где сказано как найти значения параметров для AVRISP mkII.
[Что такое AVRISP mkII]
Если коротко, то AVRISP mkII это просто программатор AVR [2] для микроконтроллеров AVR (серий ATtinyXX, ATmegaXX и других) с интерфейсом ISP. Он может также программировать микроконтроллеры устаревшей серии AT89 (популярное некогда семейство 8051, или MSC51). Существует также множество клонов программатора AVRISP mkII, firmware которых создано на основе библиотеки LUFA. Исходный код клона программатора AVRISP mkII свободно доступен, и любой может сделать свой собственный программатор на любой макетной плате с чипом AVR USB (например на макетных платах AVR-USB162, AVR-USB162MU, AVR-USB32U4 и других).
ISP означает In-System Programming (программирование в системе). При этом способе программирования микроконтроллер (программируемое устройство) запаян прямо в конечное радиоэлектронное изделие, и подключается к программатору (STK500 или AVRISP) через 4 сигнальных провода MOSI, MISO, SCK, GND (режим последовательного программирования на основе интерфейса SPI). Через эти 4 провода идет обмен данными с программируемым устройством. Также к программатору идут 2 дополнительных провода VCC и ~RST. С помощью сигнала VCC программатор (STK500 или AVRISP) определяет, имеется ли питание на программируемом устройстве, а с помощью сигнала ~RST переводит устройство в режим программирования. Режим программирования ISP также иногда называют последовательным режимом программирования (Serial Program Mode), так как данные в программируемое устройство передаются бит за битом, последовательно.
[2 Обмен данными через интерфейс USB]
Весь обмен данными между AVRISP mkII и компьютером PC происходит через интерфейс USB. Интерфейс USB задействует 2 конечные точки типа bulk, одна IN (направление от AVRISP mkII к компьютеру) и одна OUT (от компьютера к AVRISP mkII). Дескрипторы USB можно найти в разделе 6.2.
2.1 Формат пакета
Компьютер PC (хост) отправляет команды к AVRISP mkII, который в высылает на них ответы. Каждая команда генерирует ответ. Как команды, так и ответы могут быть по размеру больше, чем максимальный размер пакета для конечных точек bulk, так что команда или ответ может быть разделен на несколько пакетов IN/OUT. Короткий пакет показывает конец команды или ответа. Команды и соответствующие им ответы показаны в разделе 3.
2.2 Драйвер USB
Чтобы можно было обмениваться данными с AVRISP mkII, должен быть установлен драйвер на компьютере хоста. Драйвер может быть написан с нуля при помощи DDK (driver development kit). В пакете установки AVR Studio 4 имеется готовый драйвер USB, лицензированный от компании Jungo (www.jungo.com). После получения лицензии от Jungo, стороннее программное обеспечение (не AVR Studio) может использовать тот же драйвер, что и AVR Studio. Тогда пользователь может использовать и AVR Studio, и другие инструменты без изменения драйверов.
Примечание: обновления firmware для AVRISP mkII может обновляться только с помощь специально предназначенного для этого программного обеспечения, поставляемого вместе с AVR Studio. Это автоматически требует наличия установленного драйвера, предоставленного вместе с AVR Studio.
[3 Команды]
Этот раздел описывает все команды, которые могут быть введены для AVRISP mkII, и все возможные ответы на них, которые отправляет AVRISP mkII обратно к хосту. Для всех команд AVRISP mkII произведет ответ, где идентификатор ответа (answer ID) будет равен идентификатору команды (command ID). Первый байт в команде всегда command ID, и первый байт в ответе всегда answer ID.
3.1 Основные команды
Эти команды не относятся к какому-то конкретному режиму программирования.
3.1.1 CMD_SIGN_ON
Эта команда возвращает уникальную строку подписи (сигнатуру) для AVRISP mkII, который имеет эту реализацию протокола. Значение сигнатуры будет "AVRISP_mk2".
Таблица 3-1. Формат команды CMD_SIGN_ON.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_SIGN_ON |
Идентификатор команды. |
Таблица 3-2. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_SIGN_ON |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK |
Всегда ОК. |
Signature length |
1 байт |
10 |
Длина строки сигнатуры. |
|
8 байт |
"AVRISP_mk2" |
Строка сигнатуры (не null-terminated, т. е. не ASCIIZ, без завершающего нулевого байта). |
3.1.2 CMD_SET_PARAMETER
Хост может установить множество параметров в AVRISP mkII. См. раздел 3.4 Параметры для описания каждого параметра. Все параметры имеют однобайтные значения.
Таблица 3-3. Формат команды CMD_SET_PARAMETER.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_SET_PARAMETER |
Идентификатор команды. |
Parameter ID |
1 байт |
|
Какой параметр нужно установить. |
Value |
1 байт |
|
Новое значение параметра. |
Таблица 3-4. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_SET_PARAMETER |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK или STATUS_CMD_FAILED |
Значение статуса, которое показывает результат выполнения операции. |
3.1.3 CMD_GET_PARAMETER
Хост также может запросить из AVRISP mkII значения различных параметров.
Таблица 3-5. Формат команды CMD_GET_PARAMETER.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_GET_PARAMETER |
Идентификатор команды. |
Parameter ID |
1 байт |
|
Какой параметр нужно получить. |
Таблица 3-6. Формат ответа, если CMD_GET_PARAMETER завершилась успешно.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_GET_PARAMETER |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK |
Значение статуса, которое показывает успешное выполнение операции. |
Parameter value |
1 байт |
|
Значение параметра. |
Таблица 3-7. Формат ответа, если CMD_GET_PARAMETER завершилась с ошибкой.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_GET_PARAMETER |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_FAILED |
Значение статуса, которое показывает завершение операции по ошибке. |
Единственная причина, которая привела к ошибке - запрос недопустимого параметра.
3.1.4 CMD_OSCCAL
Эта команда производит процедуру калибровки, как описано в апноуте AVR053.
Таблица 3-8. Формат команды CMD_OSCCAL.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_OSCCAL |
Идентификатор команды. |
Таблица 3-9. Формат ответа, если команда завершилась.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_OSCCAL |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK или STATUS_CMD_FAILED |
Значение статуса, которое показывает результат выполнения операции. |
3.5 CMD_LOAD_ADDRESS
Эта команда загружает адрес в AVRISP mkII. Далее поступят команды Program Flash, Read Flash, Program EEPROM или Read EEPROM, которые будут работать с адресом, установленным этой командой. Команда CMD_LOAD_ADDRESS используется для режимов программирования. Все вышеперечисленные команды, которые читают и записывают память, автоматически инкрементируют внутренний счетчик адреса AVRISP mkII, так что команду CMD_LOAD_ADDRESS нужно вызвать только один раз.
Таблица 3-12. Формат команды CMD_LOAD_ADDRESS.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_LOAD_ADDRESS |
Идентификатор команды. |
Address |
4 байта |
|
Адрес, 4 байта, старший байт MSB идет первым. |
Для типов памяти, адресуемых по словам (память программ FLASH), параметр Address является адресом слова. Если в таком адресе установлен бит 31, то это означает, что последующая операция чтения/записи будет выполнена на памяти, размер которой больше 64 килобайт. Это показывает AVRISP mkII, что должна быть выполнена загрузка расширенного адреса (load extended address). См. даташит для устройств, у которых объем памяти больше 64 килобайт.
Таблица 3-13. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_LOAD_ADDRESS |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK |
Значение статуса, которое показывает успешное выполнение операции. |
3.6 CMD_FIRMWARE_UPGRADE
Когда хост пытается подключиться к программатору (AVRISP mkII), то он проверяет версию firmware. Обновление firmware инициализируется, если на компьютере имеется более новая версия. AVRISP mkII может "перегрузиться" в режим обновления (upgrade mode) путем использования этой команды.
Таблица 3-12. Формат команды CMD_FIRMWARE_UPGRADE.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_FIRMWARE_UPGRADE |
Идентификатор команды. |
Parameter ID |
9 байт |
"fwupgrade" |
Строка, разрешающая вход в режим обновления firmware. |
Таблица 3-13. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_FIRMWARE_UPGRADE |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK или STATUS_CMD_FAILED |
Значение статуса, которое показывает результат выполнения операции. |
Если возвращенный статус STATUS_CMD_OK, то AVRISP mkII отключится и войдет в режим обновления.
3.1.7 CMD_RESET_PROTECTION
Эта команда сбрасывает систему защиты от короткого замыкания (short circuit protection) после того, как было возвращено состояние короткого замыкания через PARAM_STATUS_TGT_CONN.
Таблица 3-14. Формат команды CMD_RESET_PROTECTION.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_RESET_PROTECTION |
Идентификатор команды. |
Таблица 3-15. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_RESET_PROTECTION |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
3.2 Команды программирования ISP (ISP Programming Commands)
Эти команды поддерживают программирование FLASH, EEPROM, байт фьюзов (fuse bytes), битов защиты (lock bits), сигнатуры, калибровки генератора (oscillator calibration) в режиме ISP.
3.2.1 CMD_ENTER_PROGMODE_ISP
Эта команда переводит target device (программируемое устройство, микроконтроллер) в режим программирования. XML путь: /AVRPART/ICE_SETTINGS/STK500_2/IspEnterProgMode/
Таблица 3-16. Формат команды CMD_ENTER_PROGMODE_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_ENTER_PROGMODE_ISP |
Идентификатор команды. |
timeout |
1 байт |
XML: timeout |
Таймаут команды (в миллисекундах). |
stabDelay |
1 байт |
XML: stabDelay |
Задержка (в миллисекундах), используемая для стабилизации pin. |
cmdexeDelay |
1 байт |
XML: cmdexeDelay |
Задержка (в миллисекундах) в соединении с выполнением команды EnterProgMode. |
synchLoops |
1 байт |
XML: synchLoops |
Количество циклов синхронизации. |
byteDelay |
1 байт |
XML: byteDelay |
Задержка (в миллисекундах) между каждым байтом в команде EnterProgMode. |
pollValue(1) |
1 байт |
XML: pollValue |
Значение задержки опроса, 0x53 для AVR. |
pollIndex |
1 байт |
XML: pollIndex |
Начальный адрес, принятый байт: 0 нет опроса (no polling), 3 AVR, 4 AT89xx |
cmd1(2) |
1 байт |
|
Передаваемый байт 1 команды. |
cmd2(2) |
1 байт |
|
Передаваемый байт 2 команды. |
cmd3(2) |
1 байт |
|
Передаваемый байт 3 команды. |
cmd4(2) |
1 байт |
|
Передаваемый байт 4 команды. |
Примечания:
(1) Параметр pollValue показывает, после какого переданного через SPI байта нужно ожидать ответного байта, так как интерфейс SPI реализован двунаправленно (один байт выходит, и вместе с этим приходит другой байт). (2) cmd1, cmd2, cmd3 и cmd4 являются байтами инструкции набора команд SPI Serial Programming Instruction Set, который можно найти в даташите на программируемый target.
Таблица 3-17. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_ENTER_PROGMODE_ISP |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_TOUT, STATUS_CMD_OK или STATUS_CMD_FAILED |
Значение статуса, которое показывает результат выполнения операции. |
3.2.2 CMD_LEAVE_PROGMODE_ISP
Эта команда выводит AVRISP mkII (и программируемое устройство) из режима программирования. Устройство перейдет в нормальный рабочий режим выполнения программы. XML путь: /AVRPART/ICE_SETTINGS/AVRISP mkII_2/IspLeaveProgMode/
Таблица 3-18. Формат команды CMD_LEAVE_PROGMODE_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_LEAVE_PROGMODE_ISP |
Идентификатор команды. |
preDelay |
1 байт |
XML: preDelay |
Предзадержка (в миллисекундах). |
postDelay |
1 байт |
XML: postDelay |
Задержка после (в миллисекундах). |
Таблица 3-19. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_LEAVE_PROGMODE_ISP |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
3.2.3 CMD_CHIP_ERASE_ISP
Эта команда выполнит очистку памяти чипа в target device (целевое программируемое устройство, микроконтроллер). XML путь: /AVRPART/ICE_SETTINGS/STK500_2/IspChipErase/
Таблица 3-20. Формат команды CMD_CHIP_ERASE_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_CHIP_ERASE_ISP |
Идентификатор команды. |
eraseDelay |
1 байт |
XML: eraseDelay |
Задержка (в миллисекундах), обеспечивающая завершение операции стирания. |
pollMethod |
1 байт |
XML: pollMethod |
Метод опроса, 0 использовать задержку, 1 использовать команду определения занятости (RDY/BSY command). |
cmd1 |
1 байт |
|
Передаваемый байт 1 команды очистки. |
cmd2 |
1 байт |
|
Передаваемый байт 2 команды очистки. |
cmd3 |
1 байт |
|
Передаваемый байт 3 команды очистки. |
cmd4 |
1 байт |
|
Передаваемый байт 4 команды очистки. |
Таблица 3-21. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_CHIP_ERASE_ISP |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK или STATUS_CMD_TOUT |
Значение статуса, которое показывает результат выполнения операции. |
3.2.4 CMD_PROGRAM_FLASH_ISP
Эта команда будет программировать данные в память FLASH на target device, если завершится успешно.
XML путь: /AVRPART/ICE_SETTINGS/STK500_2/IspProgramFlash/
Таблица 3-22. Формат команды CMD_PROGRAM_FLASH_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_PROGRAM_FLASH_ISP |
Идентификатор команды. |
NumBytes |
2 байта |
|
Количество программируемых байт, старший байт MSB идет первым. |
mode |
1 байт |
XML: mode |
Байт режима (разъяснен ниже, см. таблицу 4-8). |
delay |
1 байт |
XML: delay |
Задержка, используемая для различных типов прерывания программирования, в соответствии с байтом режима. |
cmd1 |
1 байт |
|
Команда 1 (Load Page, Write Program Memory). |
cmd2 |
1 байт |
|
Команда 2 (Write Program Memory Page). |
cmd3 |
1 байт |
|
Команда 3 (Read Program Memory). |
poll1 |
1 байт |
XML: pollVal1 |
Значение опроса 1. |
poll2 |
1 байт |
XML: pollVal2 |
Значение опроса 2 (не используется при программировании FLASH). |
Data |
N байт |
|
N байт данных. |
Описание байта режима (Mode byte)
Параметр mode важен, так как он определяет, как эта команда работает. Назначение битов в байте mode показано в таблице 4-8.
Таблица 4-8. Биты в байте режима.
№ бита |
Описание |
Режим (mode) |
0 |
Выбор режима, Word/Page Mode (0 = word, 1 = page) |
|
1 |
Задержка по времени (Timed delay) |
Word Mode |
2 |
Опрос значения (Value polling) |
3 |
Опрос занятости (RDY/BSY polling) |
4 |
Задержка по времени (Timed delay) Page Mode |
Page Mode |
5 |
Опрос значения (Value polling) |
6 |
Опрос занятости (RDY/BSY polling) |
7 |
Запись страницы (Write page) |
Бит Word/Page Mode выбирает - поддерживает устройство программирование страниц, или нет. Байты команды отличаются от режима программирования по словам (word mode) и программирования по страницам (page mode). В случае word mode используются команды ISP Write Program Memory и Read Program Memory. В случае page mode используются команды Load Page, Write Program Memory Page и Read Program Memory. Инструкция read (чтение) используется, если установлено Value Polling соответствующим битом в байте режима. Бит выбора Low/High byte (3-й бит в командах Load Page, Write Program Memory) обрабатывается AVRISP mkII, так что оставьте этот бит очищенным. Значения инструкций набора команд SPI Serial Programming Instruction Set можно найти в даташите на программируемый target.
В соответствии с mode выбираются различные методы завершения – Timed delay (задержка по времени), Value polling (опрос значения) или RDY/BSY polling (опрос готовности/занятости).
Для операций со страницами, бит Write page указывает, должна ли быть выдана команда Write Program Memory Page после того, как данные загружены в буфер страницы. Для устройств, у которых размер страницы больше, чем AVRISP mkII можно передать в одной команде, должны быть выданы несколько команд CMD_PROGRAM_FLASH_ISP. В этом случае только последняя команда должна иметь установленным бит Write Page.
Примечание: в файле XML установлены только биты 0-6, потому что бит 7 не является константой и должен управляться программным обеспечением компьютера (хоста) PC.
Когда value polling используется чтобы определить, когда завершилась операция программирования, должен быть предоставлен poll1. Это значение показывает, что будет прочитано из устройства, когда осуществляется опрос при программировании. Это значение показывает, что программирование закончилось. Значение poll2 используется только для программирования EEPROM.
Таблица 3-23. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_PROGRAM_FLASH_ISP |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_OK, STATUS_CMD_TOUT или STATUS_RDY_BSY_TOUT |
Значение статуса, которое показывает результат выполнения операции. |
3.2.5 CMD_READ_FLASH_ISP
Если выполнится успешно, то эта команда прочитает данные из памяти FLASH target device. XML путь: /AVRPART/ICE_SETTINGS/STK500_2/IspReadFlash/
Таблица 3-24. Формат команды CMD_READ_FLASH_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_READ_FLASH_ISP |
Идентификатор команды. |
NumBytes |
2 байта |
XML: blockSize |
Общее количество байт для чтения, старший байт MSB идет первым. |
cmd1 |
1 байт |
|
Первый байт команды чтения памяти программ (Read Program Memory). Бит выбора младший/старший (3-й бит) обрабатывается в firmware. |
Таблица 4-11. Формат ответа, если CMD_READ_FLASH_ISP выполнилась.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_READ_FLASH_ISP |
Идентификатор ответа на команду. |
Status1 |
1 байт |
STATUS_CMD_OK |
|
Data |
N байт |
|
Данные, прочитанные из устройства. |
Status2 |
1 байт |
STATUS_CMD_OK |
|
Таблица 4-12. Формат ответа, если CMD_READ_FLASH_ISP не выполнилась.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_READ_FLASH_ISP |
Идентификатор ответа на команду. |
Status |
1 байт |
STATUS_CMD_FAILED |
Показывает ошибку. |
3.2.6 CMD_PROGRAM_EEPROM_ISP
См. команду CMD_PROGRAM_FLASH_ISP.
3.2.7 CMD_READ_EEPROM_ISP
См. команду CMD_READ_FLASH_ISP command.
3.2.8 CMD_PROGRAM_FUSE_ISP
Эта команда программирует фьюзы в target device.
Таблица 3-27. Формат команды CMD_PROGRAM_FUSE_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_PROGRAM_FUSE_ISP |
Идентификатор команды. |
cmd1(1) |
1 байт |
|
Байт 1 команды. |
cmd2(1) |
1 байт |
|
Байт 2 команды. |
cmd3(1) |
1 байт |
|
Байт 3 команды. |
cmd4(1) |
1 байт |
|
Байт 4 команды. |
Примечание (1): cmd1, cmd2, cmd3 и cmd4 это 4 байта команды низкого уровня ISP (из набора команд SPI Serial Programming Instruction Set, их можно найти в даташите на программируемое устройство), которая программирует фьюзы.
Таблица 3-28. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_PROGRAM_FUSE_ISP |
Идентификатор ответа на команду. |
Status1 |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
Status2 |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
3.2.9 CMD_READ_FUSE_ISP
Эта команда читает фьюзы в target device.
Таблица 3-29. Формат команды CMD_READ_FUSE_ISP.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_READ_FUSE_ISP |
Идентификатор команды. |
RetAddr(1) |
1 байт |
XML: RetAddr |
Адрес возврата. |
cmd1(2) |
1 байт |
|
Байт 1 команды. |
cmd2(2) |
1 байт |
|
Байт 2 команды. |
cmd3(2) |
1 байт |
|
Байт 3 команды. |
cmd4(2) |
1 байт |
|
Байт 4 команды. |
Примечания:
(1) RetAddr показывает, после какого переданного через SPI байта нужно сохранить возвращенный байт, так как интерфейс SPI реализован двунаправленно, как дуплекс (в процессе вывода одного байта одновременно вдвигается на вход другой). (2) cmd1, cmd2, cmd3 и cmd4 это 4 байта команды низкого уровня ISP (из набора команд SPI Serial Programming Instruction Set, их можно найти в даташите на программируемое устройство), которая программирует фьюзы.
Таблица 3-30. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_READ_FUSE_ISP |
Идентификатор ответа на команду. |
Status1 |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
data |
1 байт |
|
Байт данных фьюзов, прочитанный из устройства. |
Status2 |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
3.2.10 CMD_PROGRAM_LOCK_ISP
См. CMD_PROGRAM_FUSE. Эта команда в основном делает то же, что и команда программирования фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для программирования байта защиты.
3.2.11 CMD_READ_LOCK_ISP
См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта защиты.
3.2.12 CMD_READ_SIGNATURE_ISP
См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения одного из байт сигнатуры.
3.2.13 CMD_READ_OSCCAL_ISP
См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта OSCCAL.
3.2.14 CMD_SPI_MULTI
Эта обычная команда может использоваться для выполнения любых команд ISP. Команда записывает указанное количество байт в шину SPI, и при этом также возвращает указанное количество байт.
Таблица 3-31. Формат команды CMD_SPI_MULTI.
Поле |
Размер |
Значения |
Описание |
Command ID |
1 байт |
CMD_SPI_MULTI |
Идентификатор команды. |
NumTx |
1 байт |
0..255 |
Количество передаваемых байт. |
NumRx |
1 байт |
0..255 |
Количество принимаемых байт. |
RxStartAddr |
1 байт |
|
Начальный адрес возвращаемых данных. Указывает, на каком передаваемом байте ответ будет сохраняться и возвращаться. |
TxData |
0..255 байт |
|
Передаваемые данные. Количество байт указывается в NumTx. |
Если количество байт, которое нужно принять, оказалось больше, чем количество передаваемых байт, то firmware дополнит передачу необходимым количеством нулевых (0x00) байт. Это сделано для уменьшения затрат времени на передачу от PC к программатору AVRISP mkII.
Таблица 3-32. Формат ответа.
Поле |
Размер |
Значения |
Описание |
Answer ID |
1 байт |
CMD_SPI_MULTI |
Идентификатор ответа на команду. |
Status1 |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
Data |
0..255 байт |
|
Данные, прочитанные через шину ISP, как это было задано в команде. |
Status2 |
1 байт |
STATUS_CMD_OK |
Всегда OK. |
3.3 Возвращаемые значения (Return Values)
В этой секции описаны все возможные возвращаемые значения, и что именно они означают.
3.3.1 STATUS_CMD_OK успешное завершение (Success), команда выполнилась успешно.
3.3.2 Предупреждения (Warnings)
Все предупреждения имеют MSB установленным в 1 и MSB-1 сброшенным в 0.
Таблица 3-34. Значения возврата, коды предупреждений.
Значение |
Что означает |
STATUS_CMD_TOUT |
Истек таймаут команды. |
STATUS_RDY_BSY_TOUT |
Истек таймаут опроса вывода готовности/занятости (RDY/nBSY pin). |
STATUS_SET_PARAM_MISSING |
Команда установки параметра устройства потерпела ошибку в процессе выполнения. |
3.3.3 Ошибки (Errors)
Все ошибки имеют установленными в 1 и MSB, и MSB-1.
Таблица 10-3. Значения возврата, коды ошибок.
Значение |
Что означает |
STATUS_CMD_FAILED |
Команда завершилась с ошибкой. |
STATUS_CMD_UNKNOWN |
Неизвестная команда. |
3.4 Параметры
Следующие параметры могут быть прочитаны и/или записаны командами CMD_GET_PARAM и CMD_SET_PARAM (поле R/W означает тип доступа R на чтение, W на запись, RW и на чтение и на запись):
Таблица 3-36. Однобайтные параметры.
Значение |
Что означает |
R/W |
PARAM_BUILD_NUMBER_LOW |
Номер сборки firmware, младший байт. |
R |
PARAM_BUILD_NUMBER_HIGH |
Номер сборки firmware, старший байт. |
R |
PARAM_HW_VER |
Версия аппаратуры. |
R |
PARAM_SW_MAJOR |
Номер версии firmware главного управляющего MCU, байт мажор. |
R |
PARAM_SW_MINOR |
Номер версии firmware главного управляющего MCU, байт минор. |
R |
PARAM_VTARGET |
Напряжение питания цели (target, программируемый микроконтроллер). |
RW |
PARAM_SCK_DURATION |
Длительность периода ISP SCK. |
R |
PARAM_RESET_POLARITY |
Полярность сигнала сброс - на каком логическом уровне он активен, лог. 0 или лог. 1. |
W |
PARAM_STATUS_TGT_CONN |
Состояние подключения к target. |
R |
PARAM_DISCHARGEDELAY |
Задержка с состоянием сигнала сброса в высоком сопротивлении. |
W |
3.4.1 PARAM_BUILD_NUMBER_LOW
PARAM_BUILD_NUMBER_LOW и 3.4.1 PARAM_BUILD_NUMBER_HIGH вместе возвращают число, которое инкрементируется с каждой сборкой (build) firmware управляющего микроконтроллера (MCU) AVRISP mkII. Это число главным образом предназначено для внутреннего использования компанией Atmel.
3.4.2 PARAM_BUILD_NUMBER_HIGH
См. PARAM_BUILD_NUMBER_LOW.
3.4.3 PARAM_HW_VER
Возвращает номер ревизии аппаратуры.
3.4.4 PARAM_SW_MAJOR
PARAM_SW_MAJOR и PARAM_SW_MINOR возвращают версию firmware.
3.4.5 PARAM_SW_MINOR
См. PARAM_SW_MAJOR.
3.4.6 PARAM_VTARGET
Параметр напряжения питания цели (target voltage) указывается в вольтах x10. Например, значение параметра 42 (десятичное) соответствует 4.2V.
3.4.7 PARAM_SCK_DURATION
Когда используется интерфейс программирования ISP, то тактовая частота ISP должна быть такой, чтобы она не превышала максимальную частоту, которую может поддерживать программируемое устройство. Примечание: максимальная тактовая частота ISP зависит от частоты тактов устройства (device system clock), коэффициента деления внутреннего прескалера и т. д..
AVRISP mkII поддерживает частоты ISP от 51 Гц до 8.0 МГц. Значение параметра PARAM_SCK_DURATION можно найти по алгоритму, который показан в разделе 6.3.
3.4.8 PARAM_RESET_POLARITY
AVRISP mkII может программировать как семейство микроконтроллеров AT90 (AVR), так и семейство AT89 (8051). Они имеют разную полярность (активный уровень) вывода сброса RESET. Для AVR активный уровень сброса лог. 0, а для AT89 лог. 1.
Этот параметр устанавливает полярность сигнала сброса. Установите параметр в 1, когда программируете AVR, и в 0, когда программируете AT89.
Примечание: AVRISP mkII сохраняет этот параметр в EEPROM, так что при следующем выключении питания и новом включении заданная в последний раз установка будет снова применена к программатору.
3.4.9 PARAM_STATUS_TGT_CONN
Этот параметр возвращает текущий статус соединения с target. Каждый бит в параметре означает отдельный флаг состояния. См. таблицу ниже:
Значение бита |
Статус |
0x00 |
STATUS_ISP_READY |
0x01 |
STATUS_CONN_FAIL_MOSI |
0x02 |
STATUS_CONN_FAIL_RST |
0x04 |
STATUS_CONN_FAIL_SCK |
0x10 |
STATUS_TGT_NOT_DETECTED |
0x20 |
STATUS_TGT_REVERSE_INSERTED |
Установленный в лог. 1 бит означает ошибку - короткое замыкание сигнала, target не обнаружен, установлен в сокет в обратной полярности. Если возвращенное значение параметра 0x00, то это значит, что все в порядке. Если любой бит *_CONN_FAIL_* установлен в единицу, то нужно выдать команду CMD_RESET_PROTECTION.
Параметр должен быть проверен перед началом последовательности программирования, чтобы убедиться в корректном подключении target. Также параметр должен быт проверен после процедуры программирования, потому что программирование могло завершиться с ошибкой из-за короткого замыкания.
Короткое замыкание может быть определено только после того, как выдана команда входа в режим программирования (Enter Progmode), потому что управляющие схемы AVRISP mkII изолированы, когда AVRISP mkII находится в режиме ожидания.
3.4.10 PARAM_DISCHARGEDELAY
Имя параметра переводится как "параметр задержки для разряда". Этот параметр устанавливает период времени, в течение которого сигнал сброса имеет высокое сопротивление каждый раз, когда он должен быть переключен. Назначение параметра - уменьшить ток, который происходит из-за разряда/заряда конденсатора, который иногда подключен к сигналу сброса (reset pin).
Когда сброс переключается, то подключается резистор номиналом 510 Ом, который ограничивает пиковый ток до значения, допустимого для внутренних компонентов AVRISP mkII.
Задержка должна быть установлена в значение t > 510 Ом * C. Если конденсатор не подключен, то этот параметр может быть установлен в 0.
[4 Значения параметров в файлах XML]
Firmware программатора AVRISP mkII использует параметры для выбора алгоритмов программирования устройств (микроконтроллеров). Набор параметров является специфичным для определенного устройства AVR, так что наборы установок параметров находятся в файле описания устройства, который имеет формат XML (XML part description file). Здесь описывается, где можно найти значения параметров AVRISP mkII в файле XML, специфичном для конкретного устройства. После того, как Вы установили AVR Studio 4, все файлы XML можно найти в папке "%ProgramFiles%\Atmel\AVR Tools\PartDescriptionFiles\.
Прим. переводчика: для Atmel Studio 6.0 файлы XML расположены во многих папках. Файлы описания устройств, относящиеся к AVRISP mkII, находятся в папке c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRISPmkII\xml\. В других папках под папкой tools находятся XML-файлы для другого инструментария (AVRDragon, AVRISPmkII, JTAGICEmkII, STK500 и т. п.).
Рис. 6-1. Пример файла XML: ATmega2561.xml.
Откройте файл XML специальной программой редактирования/просмотра (xml editor/viewer, например XML Notepad или Internet Explorer). Все специфичные параметров устройства для STK500 и AVRISP размещены в узле STK500_2. Параметры команды CMD_ENTER_PROGMODE_ISP ищите в /AVRPART/ICE_SETTINGS_STK500_2/IspEnterProgMode.
[5 Пример последовательности команд]
Этот раздел содержит примеры - как подключиться к AVRISP mkII со стороны компьютера (PC Frontend), и как прочитать сигнатуру из устройства. См. раздел 3 Команды для описания команд и параметров.
7.1 Подключение (Connect)
Последовательность команд и параметров, отправляемая из AvrStudio в AVRISP mkII для подключения перечислена ниже.
• CMD_SIGN_ON • CMD_GET_PARAMETER, PARAM_HW_VER • CMD_GET_PARAMETER, PARAM_SW_MAJOR • CMD_GET_PARAMETER, PARAM_SW_MINOR
7.2 Чтение сигнатуры (Read Signature)
Ниже приведена последовательность команд и параметров, отправляемая от AvrStudio к AVRISP mkII, чтобы прочитать сигнатуру устройства через ISP. Обратите внимание, что для выполнения этого нужно подключить к AVRISP mkII программируемое устройство (target device).
• CMD_SET_PARAMETER, PARAM_RESET_POLARITY • CMD_GET_PARAMETER, PARAM_STATUS_TGT_CONN • CMD_ENTER_PROGMODE_ISP • CMD_READ_SIGNATURE_ISP • CMD_READ_SIGNATURE_ISP • CMD_READ_SIGNATURE_ISP • CMD_LEAVE_PROGMODE_ISP
[6 Приложение]
6.1 Команды и параметры
// *** [ Константы основных команд ] ***
#define CMD_SIGN_ON 0x01
#define CMD_SET_PARAMETER 0x02
#define CMD_GET_PARAMETER 0x03
#define CMD_OSCCAL 0x05
#define CMD_LOAD_ADDRESS 0x06
#define CMD_FIRMWARE_UPGRADE 0x07
#define CMD_RESET_PROTECTION 0x0A
// *** [ Константы команд ISP ] ***
#define CMD_ENTER_PROGMODE_ISP 0x10
#define CMD_LEAVE_PROGMODE_ISP 0x11
#define CMD_CHIP_ERASE_ISP 0x12
#define CMD_PROGRAM_FLASH_ISP 0x13
#define CMD_READ_FLASH_ISP 0x14
#define CMD_PROGRAM_EEPROM_ISP 0x15
#define CMD_READ_EEPROM_ISP 0x16
#define CMD_PROGRAM_FUSE_ISP 0x17
#define CMD_READ_FUSE_ISP 0x18
#define CMD_PROGRAM_LOCK_ISP 0x19
#define CMD_READ_LOCK_ISP 0x1A
#define CMD_READ_SIGNATURE_ISP 0x1B
#define CMD_READ_OSCCAL_ISP 0x1C
#define CMD_SPI_MULTI 0x1D
// *** [ Константы состояния ] ***
// Успех
#define STATUS_CMD_OK 0x00
// Предупреждения (Warnings)
#define STATUS_CMD_TOUT 0x80
#define STATUS_RDY_BSY_TOUT 0x81
#define STATUS_SET_PARAM_MISSING 0x82
// Ошибки (Errors)
#define STATUS_CMD_FAILED 0xC0
#define STATUS_CMD_UNKNOWN 0xC9
// *** [ Константы параметров ] ***
#define PARAM_BUILD_NUMBER_LOW 0x80
#define PARAM_BUILD_NUMBER_HIGH 0x81
#define PARAM_HW_VER 0x90
#define PARAM_SW_MAJOR 0x91
#define PARAM_SW_MINOR 0x92
#define PARAM_VTARGET 0x94
#define PARAM_SCK_DURATION 0x98
#define PARAM_RESET_POLARITY 0x9E
#define PARAM_STATUS_TGT_CONN 0xA1
#define PARAM_DISCHARGEDELAY 0xA4
// Статус
#define STATUS_ISP_READY 0x00
#define STATUS_CONN_FAIL_MOSI 0x01
#define STATUS_CONN_FAIL_RST 0x02
#define STATUS_CONN_FAIL_SCK 0x04
#define STATUS_TGT_NOT_DETECTED 0x10
#define STATUS_TGT_REVERSE_INSERTED 0x20
6.2 Дескрипторы USB (USB Descriptors)
Таблица 6-1. Дескриптор устройства (Device descriptor)
Имя |
Значение |
HEX |
bLength |
Valid |
0x12 |
bDescriptorType |
DEVICE |
0x01 |
bcdUSB |
1.1 |
0x0110 |
bDeviceClass |
Vendor-specific |
0xFF |
bDeviceSubClass |
Vendor-specific |
0x00 |
bDeviceProtocol |
None |
0x00 |
bMaxPacketSize0 |
16 |
0x10 |
idVendor |
Atmel Corporation |
0x03EB |
idProduct |
0x2104 |
0x2104 |
bcdDevice |
2.0 |
0x0200 |
iManufacturer |
1 |
0x01 |
iProduct |
2 "AVRISP mkII" |
0x02 |
iSerialNumber |
3 |
0x03 |
bNumConfigurations |
1 |
0x01 |
Таблица 6-2. Дескриптор конфигурации (Configuration descriptor)
Имя |
Значение |
HEX |
bLength |
Valid |
0x09 |
bDescriptorType |
CONFIGURATION |
0x02 |
wTotalLength |
32 байта |
0x0020 |
bNumInterface |
1 |
0x01 |
bConfigurationValue |
1 |
0x01 |
iConfiguration |
0 |
0x00 |
bmAttributes.Reserved |
ноль |
0x00 |
bmAttributes.RemoteWakeup |
Удаленное пробуждение не поддерживается. |
0x0 |
bmAttributes.SelfPowered |
Да |
0x1 |
bmAttributes.Reserved7 |
1 |
0x1 |
bMaxPower |
200 mA |
0x64 |
Таблица 6-3. Дескриптор интерфейса (Interface descriptor)
Имя |
Значение |
HEX |
bLength |
Valid |
0x09 |
bDescriptorType |
INTERFACE |
0x04 |
bInterfaceNumber |
0 |
0x00 |
bAlternateSetting |
0 |
0x00 |
bNumEndpoints |
2 |
0x02 |
bInterfaceClass |
Vendor-specific |
0xFF |
bInterfaceSubClass |
Vendor-specific |
0x00 |
bInterfaceProtocol |
None |
0x00 |
iInterface |
0 |
0x00 |
Таблица 6-4. Дескриптор конечной точки (Endpoint descriptor) IN
Имя |
Значение |
HEX |
bLength |
Valid |
0x07 |
bDescriptorType |
ENDPOINT |
0x05 |
bEndpointAddress |
2 IN |
0x82 |
bmAttributes.TransferType |
Bulk |
0x2 |
bmAttributes.Reserved |
ноль |
0x00 |
wMaxPacketSize |
64 байта |
0x0040 |
bInterval |
Игнорируется для конечных точек Bulk |
0x0A |
Таблица 6-5. Дескриптор конечной точки (Endpoint descriptor) OUT
Имя |
Значение |
HEX |
bLength |
Valid |
0x07 |
bDescriptorType |
ENDPOINT |
0x05 |
bEndpointAddress |
2 OUT |
0x02 |
bmAttributes.TransferType |
Bulk |
0x2 |
bmAttributes.Reserved |
ноль |
0x00 |
wMaxPacketSize |
64 байта |
0x0040 |
bInterval |
Игнорируется для конечных точек Bulk |
0x0A |
6.3 Вычисление тактовой частоты SCK для интерфейса ISP
AVRISP mkII поддерживает ряд частот SCK, показанных ниже в массиве avrispmkIIfreqs. Используйте алгоритм CalcSckDur(), чтобы найти значение параметра PARAM_SCK_DURATION по требуемой частоте SCK.
// Частоты SCK интерфейса ISP, поддерживаемые
// AVRISP mkII при программировании.
double avrispmkIIfreqs[] =
{
8000000, 4000000, 2000000, 1000000, 500000, 250000, 125000,
96386, 89888, 84211, 79208, 74767, 70797, 67227, 64000,
61069, 58395, 55945, 51613, 49690, 47905, 46243, 43244,
41885, 39409, 38278, 36200, 34335, 32654, 31129, 29740,
28470, 27304, 25724, 24768, 23461, 22285, 21221, 20254,
19371, 18562, 17583, 16914, 16097, 15356, 14520, 13914,
13224, 12599, 12031, 11511, 10944, 10431, 9963, 9468,
9081, 8612, 8239, 7851, 7498, 7137, 6809, 6478, 6178,
5879, 5607, 5359, 5093, 4870, 4633, 4418, 4209, 4019,
3823, 3645, 3474, 3310, 3161, 3011, 2869, 2734, 2611,
2484, 2369, 2257, 2152, 2052, 1956, 1866, 1779, 1695,
1615, 1539, 1468, 1398, 1333, 1271, 1212, 1155, 1101,
1049, 1000, 953, 909, 866, 826, 787, 750, 715, 682,
650, 619, 590, 563, 536, 511, 487, 465, 443, 422,
402, 384, 366, 349, 332, 317, 302, 288, 274, 261,
249, 238, 226, 216, 206, 196, 187, 178, 170, 162,
154, 147, 140, 134, 128, 122, 116, 111, 105, 100,
95.4, 90.9, 86.6, 82.6, 78.7, 75.0, 71.5, 68.2,
65.0, 61.9, 59.0, 56.3, 53.6, 51.1
};
UCHAR CalcSckDur(long sckFrequency)
{
UCHAR paramSckDuration;
// По умолчанию самое маленькое значение.
paramSckDuration = (UCHAR)sizeof(avrispmkIIfreqs)-1;
// Найти первую частоту, которая меньше запрашиваемой.
for (int i = 0; i < sizeof(avrispmkIIfreqs); i++)
{
if (avrispmkIIfreqs[i] <= sckFrequency)
{
paramSckDuration = i;
break;
}
}
return paramSckDuration;
}
[Ссылки]
1. AVR069: AVRISP mkII Communication Protocol site:atmel.com. 2. Программаторы для AVR. 3. AVR079: протокол обмена STK600. 4. Using the avrispmkII with avrdude on Windows site:eliaselectronics.com. |
Комментарии
microsin: почему бы и нет, многие так делают. Я например вообще предпочитаю пользоваться AVR Studio 4.19, она не такая тормозная как Atmel Studio. Насчет "допиливания" прошивки: не первый и не последний раз это уже делается, и не первый и не последний раз меняется версия Atmel Studio. Это процесс бесконечный.
microsin: понятно, зачем они это делают - хотят заработать больше денег, и хотят улучшить функционал. Как бы убивают 2 зайцев. Насчет драйвера AVRISP-mkII для AVRDUDE: ИМХО сносить драйвера Atmel не обязательно, достаточно установить драйвер фильтра LibUSB. И само собой, прошивка AVRISP и версия AVRDUDE должны быть совместимы друг с другом.
microsin: это случалось уже не первый раз - Atmel поменяла ожидаемую версию прошивки программатора, и возможно протокол. Если сами хотите исправить ошибку, не дожидаясь, пока кто-то это сделает за Вас, то нужно экспериментиров ать. Попробуйте поправить версию программатора в прошивке, посмотреть снифером USB, как поменялся протокол, и подкорректирова ть его обработку в прошивке программатора.
Однако ИМХО оно того не стоит. Гораздо проще настроить в Atmel Studio вызов внешнего командного файла, который запускает для программировани я утилиту наподобие AVRDUDE.
RSS лента комментариев этой записи