Программирование AVR AVR069: протокол обмена AVRISP mkII Thu, November 21 2024  

Поделиться

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

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


AVR069: протокол обмена AVRISP mkII Печать
Добавил(а) microsin   

Здесь приведен перевод апноута 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 AVRISP-MkII-IMG_1255.JPG AVRISP-MkII-IMG_1258.JPG

Если коротко, то 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 и т. п.).

AVR068-XML-file-example-fig61

Рис. 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.

 

Комментарии  

 
0 #4 Дмитрий 25.12.2014 13:48
Ну на самом деле я уже давно пользуюсь AtmelStudio. Поначалу да она тормозила жестко, что есть то есть. Но сейчас уже работает вполне неплохо. Глюков и тормозов давно не наблюдаю, более-менее ее вылизали. Удобство работы выше чем в AVR Studio 4.19, в разы.
Цитировать
 
 
0 #3 Дмитрий 25.12.2014 13:28
Ладно, подожду пока Dean Kamera основатель LUFA допилит прошивку под новую версии студии. А пока и на той что работает посижу. Надеюсь долго ждать не придется.

microsin: почему бы и нет, многие так делают. Я например вообще предпочитаю пользоваться AVR Studio 4.19, она не такая тормозная как Atmel Studio. Насчет "допиливания" прошивки: не первый и не последний раз это уже делается, и не первый и не последний раз меняется версия Atmel Studio. Это процесс бесконечный.
Цитировать
 
 
0 #2 Дмитрий 25.12.2014 13:16
Непонятно зачем они это делают? Возможно специально чтоб не пользовались всякими клонами, а покупали их оригинальные программаторы. Если пользоваться AVRDUDE, то тогда надо снести драйвера от Atmel и установить драйвера LIBUSB? И прошивку в программаторе поменять заточенную под AVRDUDE?

microsin: понятно, зачем они это делают - хотят заработать больше денег, и хотят улучшить функционал. Как бы убивают 2 зайцев. Насчет драйвера AVRISP-mkII для AVRDUDE: ИМХО сносить драйвера Atmel не обязательно, достаточно установить драйвер фильтра LibUSB. И само собой, прошивка AVRISP и версия AVRDUDE должны быть совместимы друг с другом.
Цитировать
 
 
0 #1 Дмитрий 25.12.2014 10:01
Почему то мой программатор ISPMKII перестал работать с самой последней версией AtmelStudio6.2. С предыдущей работает сборка 6.2.1153. А с последней никак. не знаете в чем дело и куда копать. Скачал с LUFA самую последнюю версию прошивки. Тоже не работает.

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

Однако ИМХО оно того не стоит. Гораздо проще настроить в Atmel Studio вызов внешнего командного файла, который запускает для программировани я утилиту наподобие AVRDUDE.
Цитировать
 

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


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

Top of Page