Программирование AVR AVR079: протокол обмена STK600 Thu, April 18 2024  

Поделиться

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

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

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

Здесь приведен перевод апноута AVR079: STK600 Communication Protocol [1], посвященного протоколу обмена STK600. Описаны поддерживаемые команды и их опции, форматы команд и ответов на них. Протокол STK600 по командам и структуре очень похож на протокол STK500 версии 2.0 [3]. Основное отличие в том, что STK600 предназначен для работы поверх USB, а не поверх RS232, поэтому из STK600 удалены контрольная сумма, номер последовательности. Кроме того, в STK600 дополнительно заложены команды управления интерфейсом JTAG.

Firmware, поддерживающее STK600, распространяется вместе с AVR Studio® 4.14 и более поздними версиями. Определения всех команд, ответов, параметров и других заданных величин можно найти в файле command.h. Этот файл можно скачать с сайта Atmel, или см. [4], папка AVR068 архива. См. также Приложение.

Все параметры, относящихся к каждому конкретному устройству (микроконтроллеру AVR), можно найти в XML файлах, такой файл есть для каждого поддерживаемого устройства. XML-файлы описания устройств поставляются в составе AVR Studio. Вы можете загрузить последнюю версию AVR Studio 4 с сайта Atmel. Формат файлов XML описан в секции 12.

[Что такое STK600]

stk600

STK600 - специальная фирменная отладочная плата компании Atmel (стартеркит), являющаяся развитием популярного стартеркита STK500. STK600 теперь подключается к компьютеру через USB, что намного удобнее старого интерфейса RS232. STK600 позволяет писать и отлаживать программы для микроконтроллеров AVR разных серий (для этого используются разные дочерние платы), и позволяет их программировать. Таким образом, STK600 является не только платой разработчика, но и программатором, который может работать вместе с утилитами программирования в составе IDE AVR Studio (и Atmel Studio). Для обмена данными с управляющим MCU платы STK600 используется одноименный протокол.

[2. Обзор протокола STK600]

2.1 Обмен через интерфейс USB

STK600 производит обмен данными с компьютером PC через интерфейс USB. При этом задействованы 2 конечные точки типа bulk, одна IN (передача от STK600 в PC) и одна OUT (передача от PC к STK600). Дескрипторы USB можно найти в Приложении.

2.2 Формат пакета

PC отправляет команды к STK600, на которые получает ответы. Каждая команда приводит к выдаче ответа. И команды, и ответы могут иметь длину, превышающую максимальный размер пакета для конечных точек bulk, так что команда или ответ могут быть разделены на несколько пакетов IN/OUT. Короткий пакет показывает конец команды или ответа.

2.3 Драйвер USB

Чтобы осуществить обмен по протоколу STK600, на компьютере хоста, где работает AVR Studio, должен быть установлен драйвер. Драйвер может быть написан заново с помощью пакета разработчика DDK (driver development kit). В составе AVR Studio 4 имеется драйвер USB, лицензированный от Jungo (www.jungo.com). При полученной лицензии от Jungo сторонние разработчики могут создать драйвер, аналогичный драйверу AVR Studio. Пользователь может также использовать и AVR Studio, и другие инструменты без изменения драйверов.

Примечания: обновления firmware для STK600 могут осуществляться только с помощью специального программного обеспечения, поставляемого в составе AVR Studio. Это требует наличия установленного драйвера, поставляемого в составе AVR Studio (этот драйвер устанавливается инсталлятором AVR Studio).

2.4 Формат команды

Как было уже упомянуто, хост может передавать в STK600 команды, и все возможные ответы на команды могут быть отправлены обратно хосту. На все команды STK600 выдаст ответ с тем же самым идентификатором ID, который был в команде. Первый байт в команде всегда является идентификатором команды (command ID), и первый байт ответа всегда является идентификатором ответа (answer ID).

[3 Основные команды]

Эти команды не относятся к какому-то конкретному режиму программирования.

3.1 CMD_SIGN_ON

Эта команда возвращает уникальную строку подписи (сигнатуру) для STK600, который имеет эту реализацию протокола. Значение сигнатуры будет "STK600".

Таблица 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 байт 6 Длина строки сигнатуры.
8 байт "STK600" Строка сигнатуры (не null-terminated, т. е. не ASCIIZ, без завершающего нулевого байта).

3.2 CMD_SET_PARAMETER

Хост может установить множество параметров в STK600. См. раздел 11 Параметры для описания каждого параметра.

Таблица 3-3. Формат команды CMD_SET_PARAMETER для однобайтных значений параметра.

Поле Размер Значения Описание
Command ID 1 байт CMD_SET_PARAMETER Идентификатор команды.
Parameter ID 1 байт Какой параметр нужно установить.
Value 1 байт Новое значение параметра.

Таблица 3-4. Формат команды CMD_SET_PARAMETER для двухбайтных значений параметра.

Поле Размер Значения Описание
Command ID 1 байт CMD_SET_PARAMETER Идентификатор команды.
Parameter ID 1 байт Какой параметр нужно установить.
Value 1 байт Новое значение параметра, старший байт.
Value 1 байт Новое значение параметра, младший байт.

Таблица 3-5. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_SET_PARAMETER Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED Значение статуса, которое показывает результат выполнения операции.

3.3 CMD_GET_PARAMETER

Хост также может запросить из STK600 значения различных параметров.

Таблица 3-6. Формат команды CMD_GET_PARAMETER.

Поле Размер Значения Описание
Command ID 1 байт CMD_GET_PARAMETER Идентификатор команды.
Parameter ID 1 байт Какой параметр нужно получить.

Таблица 3-7. Формат ответа для однобайтного параметра, если CMD_GET_PARAMETER выполнена успешно.

Поле Размер Значения Описание
Answer ID 1 байт CMD_GET_PARAMETER Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Значение статуса, которое показывает успешное выполнение операции.
Parameter value 1 байт Значение параметра.

Таблица 3-8. Формат ответа для двухбайтного параметра, если CMD_GET_PARAMETER выполнена успешно.

Поле Размер Значения Описание
Answer ID 1 байт CMD_GET_PARAMETER Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Значение статуса, которое показывает успешное выполнение операции.
Parameter value 1 байт Значение параметра, старший байт.
Parameter value 1 байт Значение параметра, младший байт.

Таблица 3-9. Формат ответа, если CMD_GET_PARAMETER завершилась с ошибкой.

Поле Размер Значения Описание
Answer ID 1 байт CMD_GET_PARAMETER Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_FAILED Значение статуса, которое показывает завершение операции по ошибке.

3.4 CMD_OSCCAL

Эта команда производит процедуру калибровки, как описано в апноуте AVR053.

Таблица 3-10. Формат команды CMD_OSCCAL.

Поле Размер Значения Описание
Command ID 1 байт CMD_OSCCAL Идентификатор команды.

Таблица 3-11. Формат ответа, если команда завершилась.

Поле Размер Значения Описание
Answer ID 1 байт CMD_OSCCAL Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED Значение статуса, которое показывает результат выполнения операции.

3.5 CMD_LOAD_ADDRESS

Эта команда загружает адрес в STK600. Далее поступят команды Program Flash, Read Flash, Program EEPROM или Read EEPROM, которые будут работать с адресом, установленным этой командой. Команда CMD_LOAD_ADDRESS используется для режимов программирования high voltage parallel programming (HVPP, высоковольтное параллельное программирование), high voltage serial programming (HVSP, высоковольтное последовательное программирование) и low voltage serial programming (низковольтное последовательное программирование, ISP). Все вышеперечисленные команды, которые читают и записывают память, автоматически инкрементируют внутренний счетчик адреса STK600, так что команду CMD_LOAD_ADDRESS нужно вызвать только один раз.

Таблица 3-12. Формат команды CMD_LOAD_ADDRESS.

Поле Размер Значения Описание
Command ID 1 байт CMD_LOAD_ADDRESS Идентификатор команды.
Address 4 байта Адрес, 4 байта, старший байт MSB идет первым.

Для типов памяти, адресуемых по словам (память программ FLASH), параметр Address является адресом слова. Если в таком адресе установлен бит 31, то это означает, что последующая операция чтения/записи будет выполнена на памяти, размер которой больше 64 килобайт. Это показывает STK600, что должна быть выполнена загрузка расширенного адреса (load extended address). См. даташит для устройств, у которых объем памяти больше 64 килобайт.

Таблица 3-13. Формат ответа, если команда CMD_LOAD_ADDRESS выполнена успешно.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LOAD_ADDRESS Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Значение статуса, которое показывает успешное выполнение операции.

3.6 CMD_FIRMWARE_UPGRADE

Когда хост пытается подключиться к программатору (STK600), то он проверяет версию firmware. Обновление firmware инициализируется, если на компьютере имеется более новая версия. STK600 может "перегрузиться" в режим обновления (upgrade mode) путем использования этой команды.

Таблица 3-14. Формат команды CMD_FIRMWARE_UPGRADE.

Поле Размер Значения Описание
Command ID 1 байт CMD_FIRMWARE_UPGRADE Идентификатор команды.
Parameter ID 9 байт "fwupgrade" Строка, разрешающая вход в режим обновления firmware.

Таблица 3-15. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_FIRMWARE_UPGRADE Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED Значение статуса, которое показывает результат выполнения операции.

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

3.7 CMD_LOAD_RC_ID_TABLE

Эта команда отправляет программе firmware STK600 специальную таблицу Routing Card boardID. Каждая строка в этой таблице содержит в начале RC_id (идентификатор дочерней платы Routing Card, RC), затем SC_id (допустимая для использования с таким RC, Routing Card), и MAX_VTG (максимальное значение питания voltage target, допустимое для этой RC). Первые два байта данных таблицы содержат ревизию таблицы, старший байт MSB идет первым.

Таблица 3-16. Формат команды CMD_LOAD_RC_ID_TABLE.

Поле Размер Значения Описание
Command ID 1 байт CMD_LOAD_RC_ID_TABLE Идентификатор команды.
NumBytes 2 байта? Общее количество байт для отправки (включая 2 байта ревизии), старший байт MSB идет первым.
RC_ID_table 1 байт Старший (MSB) байт ревизии.
... 1 байт Младший (LSB) байт ревизии.
... 1 байт ID для Routing Card (RC).
... 1 байт ID для SC, разрешенным для использования с этой RC.
... 1 байт Максимальное значение VTG для RC.

Последние 3 строки будут повторяться для каждого типа RC, пока не будет отправлена вся таблица.

Таблица 3-17. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LOAD_RC_ID_TABLE Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

3.8 CMD_LOAD_EC_ID_TABLE

Эта команда отправляет программе firmware STK600 специальную таблицу Expansion Card boardID (таблица плат расширения EC). Каждая строка в этой таблице содержит EC_id (идентификатор EC), а также MAX_VTG (максимальное значение питания voltage target), допустимое для этой EC. Первые два байта данных таблицы содержат ревизию таблицы, старший байт MSB идет первым.

Таблица 3-18. Формат команды CMD_LOAD_EC_ID_TABLE.

Поле Размер Значения Описание
Command ID 1 байт CMD_LOAD_EC_ID_TABLE Идентификатор команды.
NumBytes 2 байта? Общее количество байт для отправки (включая 2 байта ревизии), старший байт MSB идет первым.
EC_ID_table 1 байт Старший (MSB) байт ревизии.
... 1 байт Младший (LSB) байт ревизии.
... 1 байт ID для Expansion Card (RC).
... 1 байт Максимальное значение VTG для RC.

Последние 2 строки будут повторяться для каждого типа EC, пока не будет отправлена вся таблица.

Таблица 3-19. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LOAD_EC_ID_TABLE Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

3.9 CMD_CHECK_TARGET_CONNECTION

Таблица 3-20. Формат команды CMD_CHECK_TARGET_CONNECTION.

Поле Размер Значения Описание
Command ID 1 байт CMD_CHECK_TARGET_CONNECTION Идентификатор команды.

Таблица 3-21. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_CHECK_TARGET_CONNECTION Идентификатор ответа на команду.
Answer value 1 байт См. таблицу 3-22 ниже. Состояние соединения с target.
Status 1 байт STATUS_CMD_OK

Эта команда запускает проверку соединения с target (программируемый микроконтроллер, подключенный через один из видов интерфейса программирования HVPP, HVSP, ISP). Значение ответа (Answer value) 6-битное, где биты 0-2 показывают состояние системы защиты от короткого замыкания, и биты 4-5 будут только показывать корректное соединение с target, если на target подано напряжение питания VTG. Бит 3 не используется ("Don’t care").

Таблица 3-22. Описания бит Answer value.

№ бита Статус Описание
0 STATUS_CONN_FAIL_MOSI Проблема с подключением сигнала MOSI (интерфейс ISP?).
1 STATUS_CONN_FAIL_RST Проблема с подключением сигнала RST (сброс).
2 STATUS_CONN_FAIL_SCK Проблема с подключением сигнала SCK (интерфейс ISP?).
4 STATUS_ISP_READY Проблема с готовностью ISP.
5 STATUS_TGT_REVERSE_INSERTED Чип target установлен в сокет наоборот.

Бит, установленный в лог. 1, показывает соответствующую ошибку. Это может быть, например, если есть короткое замыкание сигнала, если не обнаружен target, или он неправильно установлен в сокет.

Если возвращено значение 0x00, то это значит, что соединение с target в порядке. Параметр должен быть проверен перед запуском последовательности программирования, чтобы убедиться в правильности подключения target. Такая проверка должна быть выполнена также после выполнения последовательности программирования, если программирование завершилось неудачно, потому что может быть короткое замыкание в схеме. Короткое замыкание может быть определено только после выдачи команды входа в режим программирования (Enter Progmode), потому что схемы управления STK600 изолированы через ключи, когда STK600 находится в режиме ожидания (idle mode).

[4 Команды программирования ISP (ISP Programming Commands)]

Эти команды поддерживают программирование FLASH, EEPROM, байт фьюзов (fuse bytes), битов защиты (lock bits), сигнатуры, калибровки генератора (oscillator calibration) в режиме ISP.

Прим. переводчика: ISP означает In-System Programming (программирование в системе). При этом способе программирования микроконтроллер (программируемое устройство) запаян прямо в конечное радиоэлектронное изделие, и подключается к программатору (STK500, STK600 или AVRISP) через 4 сигнальных провода MOSI, MISO, SCK, GND (режим последовательного программирования на основе интерфейса SPI). Через эти 4 провода идет обмен данными с программируемым устройством. Также к программатору идут 2 дополнительных провода VCC и ~RST. С помощью сигнала VCC программатор (STK500, STK600 или AVRISP) определяет, имеется ли питание на программируемом устройстве, а с помощью сигнала ~RST переводит устройство в режим программирования. Режим программирования ISP также иногда называют последовательным режимом программирования (Serial Program Mode), так как данные в программируемое устройство передаются бит за битом, последовательно.

4.1 CMD_ENTER_PROGMODE_ISP

Эта команда переводит target device (программируемое устройство, микроконтроллер) в режим программирования.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspEnterProgMode/

Таблица 4-1. Формат команды 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.
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.

Таблица 4-2. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_ENTER_PROGMODE_ISP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_TOUT, STATUS_CMD_OK или STATUS_CMD_FAILED Значение статуса, которое показывает результат выполнения операции.

4.2 CMD_LEAVE_PROGMODE_ISP

Эта команда выводит STK600 (и программируемое устройство) из режима программирования. Устройство перейдет в нормальный рабочий режим выполнения программы.
XML путь: /AVRPART/ICE_SETTINGS/STK600_2/IspLeaveProgMode/

Таблица 4-3. Формат команды CMD_LEAVE_PROGMODE_ISP.

Поле Размер Значения Описание
Command ID 1 байт CMD_LEAVE_PROGMODE_ISP Идентификатор команды.
preDelay 1 байт XML: preDelay Предзадержка (в миллисекундах).
postDelay 1 байт XML: postDelay Задержка после (в миллисекундах).

Таблица 4-4. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LEAVE_PROGMODE_ISP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Всегда OK.

4.3 CMD_CHIP_ERASE_ISP

Эта команда выполнит очистку памяти чипа в target device (целевое программируемое устройство, микроконтроллер).
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspChipErase/

Таблица 4-5. Формат команды 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 команды очистки.

Таблица 4-6. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_CHIP_ERASE_ISP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_TOUT Значение статуса, которое показывает результат выполнения операции.

4.4 CMD_PROGRAM_FLASH_ISP

Эта команда будет программировать данные в память FLASH на target device, если завершится успешно.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspProgramFlash/

Таблица 4-7. Формат команды 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 команды очистки.
cmd3 1 байт Команда 2 (Write Program Memory Page).
cmd4 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) обрабатывается STK600, так что оставьте этот бит очищенным. Значения инструкций набора команд SPI Serial Programming Instruction Set можно найти в даташите на программируемый target.

В соответствии с mode выбираются различные методы завершения – Timed delay (задержка по времени), Value polling (опрос значения) или RDY/BSY polling (опрос готовности/занятости).

Для операций со страницами, бит Write page указывает, должна ли быть выдана команда Write Program Memory Page после того, как данные загружены в буфер страницы. Для устройств, у которых размер страницы больше, чем STK600 можно передать в одной команде, должны быть выданы несколько команд CMD_PROGRAM_FLASH_ISP. В этом случае только последняя команда должна иметь установленным бит Write Page.

Примечание: в файле XML установлены только биты 0-6, потому что бит 7 не является константой и должен управляться программным обеспечением компьютера (хоста) PC.

Когда value polling используется чтобы определить, когда завершилась операция программирования, должен быть предоставлен poll1. Это значение показывает, что будет прочитано из устройства, когда осуществляется опрос при программировании. Это значение показывает, что программирование закончилось. Значение poll2 используется только для программирования EEPROM.

Таблица 4-9. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_PROGRAM_FLASH_ISP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK, STATUS_CMD_TOUT или STATUS_RDY_BSY_TOUT Значение статуса, которое показывает результат выполнения операции.

4.5 CMD_READ_FLASH_ISP

Если выполнится успешно, то эта команда прочитает данные из памяти FLASH target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspReadFlash/

Таблица 4-10. Формат команды 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 Показывает ошибку.

4.6 CMD_PROGRAM_EEPROM_ISP

См. команду CMD_PROGRAM_FLASH_ISP.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspProgramEeprom/

4.7 CMD_READ_EEPROM_ISP

См. команду CMD_READ_FLASH_ISP command.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspReadEeprom/

4.8 CMD_PROGRAM_FUSE_ISP

Эта команда программирует фьюзы в target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspWriteFuse/

Таблица 4-13. Формат команды 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, их можно найти в даташите на программируемое устройство), которая программирует фьюзы.

Таблица 4-14. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_PROGRAM_FUSE_ISP Идентификатор ответа на команду.
Status1 1 байт STATUS_CMD_OK Всегда OK.
Data N байт Данные, прочитанные из устройства.
Status2 1 байт STATUS_CMD_OK Всегда OK.

4.9 CMD_READ_FUSE_ISP

Эта команда читает фьюзы в target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspReadFuse/

Таблица 4-15. Формат команды 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, их можно найти в даташите на программируемое устройство), которая программирует фьюзы.

Таблица 4-16. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_READ_FUSE_ISP Идентификатор ответа на команду.
Status1 1 байт STATUS_CMD_OK Всегда OK.
data 1 байт Байт данных фьюзов, прочитанный из устройства.
Status2 1 байт STATUS_CMD_OK Всегда OK.

4.10 CMD_PROGRAM_LOCK_ISP

См. CMD_PROGRAM_FUSE. Эта команда в основном делает то же, что и команда программирования фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для программирования байта защиты.

4.11 CMD_READ_LOCK_ISP

См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта защиты.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspReadLock/

4.12 CMD_READ_SIGNATURE_ISP

См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения одного из байт сигнатуры.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspReadSign/

4.13 CMD_READ_OSCCAL_ISP

См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта OSCCAL.
XML путь: /AVRPART/ICE_SETTINGS/STK600/IspReadOsccal/

4.14 CMD_SPI_MULTI

Эта обычная команда может использоваться для выполнения любых команд ISP. Команда записывает указанное количество байт в шину SPI, и при этом также возвращает указанное количество байт.

Таблица 4-17. Формат команды 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 к программатору (STK600).

Таблица 4-18. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_SPI_MULTI Идентификатор ответа на команду.
Status1 1 байт STATUS_CMD_OK Всегда OK.
Data 0..255 байт Данные, прочитанные через шину ISP, как это было задано в команде.
Status2 1 байт STATUS_CMD_OK Всегда OK.

[5 Команды параллельного режима программирования (Parallel Programming Mode)]

Прим. переводчика: под параллельным режимом программирования понимается особый режим подключения программируемого чипа к программатору, когда количество сигналов для передачи данных программирования увеличивается. Параллельный режим программирования сокращенно называют PP (Parallel Programming).

5.1 CMD_ENTER_PROGMODE_PP

Если выполнилась успешно, то эта команда переводит target device в режим программирования.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpEnterProgMode/

Таблица 5-1. Формат команды CMD_ENTER_PROGMODE_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_ENTER_PROGMODE_PP Идентификатор команды.
stabDelay 1 байт XML: stabDelay Задержка (в миллисекундах), используемая для стабилизации pin.
progModeDelay 1 байт XML: progModeDelay Задержка (в миллисекундах) в соединении с выполнением команды EnterProgMode.
latchCycles 1 байт XML: latchCycles Количество циклов синхронизации xtal, используемых для захвата OSCCAL.
toggleVtg 1 байт XML: toggleVtg Переключение Vtg при входе в режим программирования (0 нет, 1 да). Для устройств с функционалом запрета сброса RSTDSBL.
powerOffDelay 1 байт XML: powerOffDelay Задержка выключения питания. Дополнительная задержка (в миллисекундах) после того, как Vtg будет выключен, чтобы убедиться в том, что Vtg упало до достаточно низкого уровня.
resetDelayMs 1 байт XML: resetDelayMs RSTDELAY #1 (в миллисекундах). Дополнительная задержка между включением Vtg и переходом сброса в состояние лог. 1.
resetDelayUs 1 байт XML: resetDelayUs RSTDELAY #2 (в десятках микросекунд). Дополнительная задержка между включением Vtg и переходом сброса в состояние лог. 1. Общая задержка складывается: RSTDELAY #1 (ms) + RSTDELAY #2 (us x 10).

Таблица 5-2. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_ENTER_PROGMODE_PP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED Результат выполнения операции.

5.2 CMD_LEAVE_PROGMODE_PP

Если выполнилась успешно, то эта команда выводит target device из режима программирования.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpLeaveProgMode/

Таблица 5-4. Формат команды CMD_LEAVE_PROGMODE_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_LEAVE_PROGMODE_PP Идентификатор команды.
stabDelay 1 байт XML: stabDelay Задержка (в миллисекундах), используемая для стабилизации pin.
resetDelay 1 байт XML: resetDelay Задержка (в миллисекундах) для удержания RESET в состоянии лог. 0.

Таблица 5-5. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LEAVE_PROGMODE_PP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Всегда OK.

5.3 CMD_CHIP_ERASE_PP

Если выполнилась успешно, то эта команда произведет очистку памяти (chip erase) в target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpChipErase/

Таблица 5-6. Формат команды CMD_CHIP_ERASE_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_CHIP_ERASE_PP Идентификатор команды.
pulseWidth 1 байт XML: pulseWidth Длительность импульса /WR (в миллисекундах). Цикл 0 => 1.
pollTimeout 1 байт XML: pollTimeout Период таймаута (в миллисекундах) для ожидания появления флага занятости RDY/BSY. Если 0, то флаг RDY/BSY не используется.

Таблица 5-7. Формат ответа (одинаковый для всех результатов).

Поле Размер Значения Описание
Answer ID 1 байт CMD_CHIP_ERASE_PP Идентификатор ответа на команду.
Status 1 байт См. таблицу ниже. Значение результата операции Result Value.

Таблица 5-8. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_CHIP_ERASE_PP.

Значения Описание
STATUS_CMD_OK Операция завершилась успешно.
STATUS_RDY_BSY_TOUT За определенное время не было получено ответа от target device.

5.4 CMD_PROGRAM_FLASH_PP

Если выполнилась успешно, то эта команда запрограммирует данные в память FLASH target device. Для устройств, у которых FLASH организована странично, то используемые в этой команде адрес данных (data address) размер (size) должны соответствовать устройству. Например, одна команда ProgramFlash используется для программирования одной страницы в target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpProgramFlash/

Таблица 5-9. Формат команды CMD_PROGRAM_FLASH_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_PROGRAM_FLASH_PP Идентификатор команды.
Nmb bytes (MSB) 1 байт Общее количество байт для программирования (старший байт количества, MSB).
Nmb bytes (LSB) 1 байт Общее количество байт для программирования (младший байт количества, LSB).
mode 1 байт XML: mode Байт режима (разъясняется далее).
pollTimeout 1 байт XML: pollTimeout Таймаут опроса (в миллисекундах).
Data 1 1 байт Data 1 Data 1
... ... ... ...
Data N 1 байт Data N Data N

Описание байта режима mode

• Bit 0: этот бит показывает, используется байтовое '0' или страничное '1' программирование.
• Bit 1-3 являются битами, кодирующими размер страницы, который дается в байтах, не в словах, как указано в таблице 5-44.

Таблица 5-10. Биты конфигурации размера страницы.

Размер страницы Значение бит 3, 2, 1
256 000
2 001
4 010
8 011
16 100
32 101
64 110
128 111

• Bit 4-5 не используются.
• Bit 6 должен быть установлен в '1', когда должна быть запрограммирована самая последняя страница, иначе '0'.
• Bit 7 показывает, должна ли выдаваться запись страницы (page write, передача данных во FLASH). Обычно этот бит всегда должен быть установлен в '1'. Однако, если размер страницы target device слишком велик, чтобы быть обработанным одной командой Program Flash (потому что объем рабочей оперативной памяти SRAM в управляющем MCU STK600 ограничен), то этот бит может использоваться для применения 2 или большего количества команд для заполнения буфера страницы target device. Флаг переноса данных буфера во FLASH должен быть установлен в последней команде.

Примечание: в файле XML установлены только биты 0-3, так что биты 6-7 не статические, и их значением должно управлять программное обеспечение фронтэнда (эти функции выполняет среда AVR Studio).

Таблица 5-11. Формат ответа (одинаковый для всех результатов).

Поле Размер Значения Описание
Answer ID 1 байт CMD_PROGRAM_FLASH_PP Идентификатор ответа на команду.
Status 1 байт См. таблицу ниже. Значение результата операции Result Value.

Таблица 5-12. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_PROGRAM_FLASH_PP.

Значения Описание
STATUS_CMD_OK Операция завершилась успешно.
STATUS_RDY_BSY_TOUT За определенное время не было получено ответа от target device.

5.5 CMD_READ_FLASH_PP

Если выполнилась успешно, то эта команда прочитает данные памяти FLASH target device. Для устройств, у которых FLASH организована странично, то используемые в этой команде адрес данных (data address) размер (size) должны соответствовать устройству. Например, одна команда ReadFlash используется для чтения одной страницы в target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadFlash/

Таблица 5-13. Формат команды CMD_READ_FLASH_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_READ_FLASH_PP Идентификатор команды.
Nmb bytes (MSB) 1 байт Общее количество байт для чтения (старший байт количества, MSB).
Nmb bytes (LSB) 1 байт Общее количество байт для чтения (младший байт количества, LSB).

Таблица 5-14. Формат ответа, если команда CMD_READ_FLASH_PP была выполнена.

Поле Размер Значения Описание
Answer ID 1 байт CMD_READ_FLASH_PP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Показывает результат выполнения операции (всегда OK?).
Data Nmb байт Данные, прочитанные из устройства. Они будут дополнены нулями (0x00), если произошла ошибка таймаута при чтении устройства.
Status 1 байт STATUS_CMD_OK Значение результата операции Result Value.

5.6 CMD_PROGRAM_EEPROM_PP

Если выполнилась успешно, то эта команда запрограммирует одну страницу памяти EEPROM target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadEeprom/

Формат команды: см. CMD_PROGRAM_FLASH_PP.

5.7 CMD_READ_EEPROM_PP

Если выполнилась успешно, то эта команда прочитает данные памяти EEPROM target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadEeprom/

Формат команды: см. CMD_READ_FLASH_PP

5.8 CMD_PROGRAM_FUSE_PP

XML путь: /AVRPART/ICE_SETTINGS/STK600/PpProgramFuse/

Таблица 5-15. Формат команды CMD_PROGRAM_FUSE_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_PROGRAM_FUSE_PP Идентификатор команды.
Address 1 байт Адрес байта фьюзов для программирования (low, high, ext, ext2).
Data 1 байт Байт фьюзов для программирования.
pulseWidth 1 байт XML: pulseWidth Длительность (в миллисекундах) импульса /WR (цикл 0 => 1).
pollTimeout 1 байт XML: pollTimeout Таймаут (в миллисекундах) для опроса занятости RDY/BSY (0 означает не опрашивать).

Таблица 5-16. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_PROGRAM_FUSE_PP Идентификатор ответа на команду.
Status 1 байт См. таблицу ниже. Значение результата операции Result Value.

Таблица 5-17. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_PROGRAM_FUSE_PP.

Значения Описание
STATUS_CMD_OK Операция завершилась успешно.
STATUS_RDY_BSY_TOUT За определенное время не было получено ответа от target device.

5.9 CMD_READ_FUSE_PP

XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadFuse/

Таблица 5-18. Формат команды CMD_READ_FUSE_PP.

Поле Размер Значения Описание
Command ID 1 байт CMD_READ_FUSE_PP Идентификатор команды.
Address 1 байт Адрес байта фьюзов для чтения.

Таблица 5-19. Формат ответа, если команда была выполнена.

Поле Размер Значения Описание
Answer ID 1 байт CMD_READ_FUSE_PP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Показывает результат выполнения операции (всегда OK?).
Data 1 байт Данные, прочитанные из устройства. Содержат значение байта фьюзов low, high или ext. Данные будут дополнены нулями, если произошли ошибки при чтении.

5.10 CMD_PROGRAM_LOCK_PP

См. CMD_PROGRAM_FUSE.

Примечание: должен быть отправлен адрес, но он будет игнорироваться firmware.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpProgramLock/

5.11 CMD_READ_LOCK_PP

См. CMD_READ_FUSE_PP.

Примечание: должен быть отправлен адрес, но он будет игнорироваться firmware.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadLock/

5.12 CMD_READ_SIGNATURE_PP

См. CMD_READ_FUSE.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadSign/

5.13 CMD_READ_OSCCAL_PP

См. CMD_READ_FUSE.
XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadOsccal/

5.14 CMD_SET_CONTROL_STACK

Выгружает стек управления (Control stack) в STK. Это используется и для PP, и для HVSP.

Примечание: Control stack должен быть всегда выгружен перед выполнением любой команды программирования в высоковольтном режиме, если питание STK600 было выключено. Чтобы проверить, имеет ли контроллер допустимый стек управления, выполните чтение PARAM_CONTROLLER_INIT. См. раздел 11.7: PARAM_CONTROLLER_INIT.

Таблица 5-20. Формат команды CMD_SET_CONTROL_STACK.

Поле Размер Значения Описание
Command ID 1 байт CMD_SET_CONTROL_STACK Идентификатор команды.
Data 32 байта Данные стека управления.

Таблица 5-21. Формат ответа (одинаковый для всех результатов).

Поле Размер Значения Описание
Answer ID 1 байт CMD_SET_CONTROL_STACK Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Показывает результат выполнения операции (всегда OK?).

[6 Команды высоковольтного программирования HVSP (High Voltage Serial Programming Commands)]

Этот раздел описывает команды последовательного высоковольтного режима программирования (High Voltage Serial Programming, HVSP). Имейте в виду, что для HVSP, как и для параллельного программирования PP, нужна команда SetControlStack. Описание SetControlStack можно найти в секции 5.14 (относится к Parallel Programming, PP).

6.1 CMD_ENTER_PROGMODE_HVSP

Если завершилась успешно, эта команда вводит target device в режим программирования HVSP.
XML путь: /AVRPART/ICE_SETTINGS/STK600/HvspEnterProgMode/

Таблица 6-1. Формат команды CMD_ENTER_PROGMODE_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_ENTER_PROGMODE_HVSP Идентификатор команды.
stabDelay 1 байт XML: stabDelay Задержка (в миллисекундах), используемая для стабилизации pin.
CmdexeDelay 1 байт XML: cmdexeDelay Задержка (в миллисекундах) в соединении с выполнением команды EnterProgMode.
SynchCycles 1 байт XML: synchCycles Количество тактов синхронизации.
LatchCycles 1 байт XML: latchCycles Количество циклов PulseXtal1_HVSP.
ToggleVtg 1 байт XML: toggleVtg Переключение Vtg при входе в режим программирования (0 нет, 1 да). Для устройств с функционалом запрета сброса RSTDSBL.
PowoffDelay 1 байт XML: powoffDelay Задержка выключения питания. Дополнительная задержка (в миллисекундах) после того, как Vtg будет выключен, чтобы убедиться в том, что Vtg упало до достаточно низкого уровня.
resetDelay1 1 байт XML: resetDelay1 RSTDELAY #1 (в миллисекундах). Дополнительная задержка между включением Vtg и переходом сброса в состояние лог. 1.
resetDelay2 1 байт XML: resetDelay2 RSTDELAY #2 (в десятках микросекунд). Дополнительная задержка между включением Vtg и переходом сброса в состояние лог. 1. Общая задержка складывается: RSTDELAY #1 (ms) + RSTDELAY #2 (us x 10).

Таблица 6-2. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_ENTER_PROGMODE_HVSP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED Результат выполнения операции. Ошибка, если напряжение питания target > 5.5V или < 4.5V.

6.2 CMD_LEAVE_PROGMODE_HVSP

Если завершилась успешно, эта команда выводит target device из режима программирования HVSP.
XML path: /AVRPART/ICE_SETTINGS/STK600/HvspLeaveProgMode/

Таблица 6-3. Формат команды CMD_LEAVE_PROGMODE_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_LEAVE_PROGMODE_HVSP Идентификатор команды.
stabDelay 1 байт XML: stabDelay Задержка (в миллисекундах), используемая для стабилизации pin.
resetDelay 1 байт XML: resetDelay Задержка (в миллисекундах) в соединении с выполнением команды LeaveProgMode и Reset_low_duration.

Таблица 6-4. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LEAVE_PROGMODE_HVSP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Всегда OK.

6.3 CMD_CHIP_ERASE_HVSP

Если завершилась успешно, эта команда стирает содержимое памяти (chip erase) на target device.
XML path: /AVRPART/ICE_SETTINGS/STK600/HvspChipErase/

Таблица 6-5. Формат команды CMD_CHIP_ERASE_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_CHIP_ERASE_HVSP Идентификатор команды.
pollTimeout 1 байт XML: pollTimeout Период таймаута (в миллисекундах) для ожидания нарастания флага готовности RDY/BSY. Если 0, то флаг RDY/BSY не используется.
eraseTime 1 байт XML: eraseTime Время (в миллисекундах), чтобы обеспечить завершение стирания устройства. Если 0, то будет использоваться опрос.

Таблица 6-6. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_CHIP_ERASE_HVSP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_RDY_BSY_TOUT Значение результата операции Result Value.

6.4 CMD_PROGRAM_FLASH_HVSP

Если завершилась успешно, эта команда запрограммирует память FLASH на target device. Для устройств, у которых FLASH организована на основе страниц, адрес данных и размер, используемые для этой команды, должны соответствовать программируемому устройству. Например, одна команда ProgramFlash используется для программирования одной страницы на target device.
XML путь: /AVRPART/ICE_SETTINGS/STK600/HvspProgramFlash/

Таблица 6-7. Формат команды CMD_PROGRAM_FLASH_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_PROGRAM_FLASH_HVSP Идентификатор команды.
NumBytes 2 байта Общее количество байт для программирования (старший байт MSB идет первым).
mode 1 байт XML: mode Байт режима (разъясняется далее).
pollTimeout 1 байт XML: pollTimeout Таймаут опроса (в миллисекундах).
Data 1 1 байт Data 1
... ... ... ...
Data N 1 байт Data N

Описание байта режима (mode)

• Bit 0: этот бит показывает, будет использоваться побайтное '0' или страничное '1' программирование.
• Bit 1-3 задают размер страницы. Размер страницы указывается в байтах, не в словах, как показано в таблице 5-62.

Таблица 6-8. Конфигурация бит размера страницы (page size).

Размер страницы Значение бит 3, 2, 1
256 000
2 001
4 010
8 011
16 100
32 101
64 110
128 111

• Bit 4-5 не используются.
• Bit 6 должен быть установлен в '1', когда программируется самая последняя страница, иначе в '0'.
• Bit 7 показывает, должна ли быть выдана запись страницы (перенос данных во FLASH). Обычно этот бит всегда должен быть установлен в '1'. Однако если размер страницы target device превышает размер, который может быть обработан одной командой Program Flash (потому что количество доступного SRAM в STK600 ограничено), то эта возможность может использоваться для применения 2 или большего количества команд для заполнения буфера страницы target device. Флаг переноса данных во FLASH тогда должен быть установлен только в последней команде.

Примечание: в файле XML установлены только биты 0-3, так что биты 6-7 не статические, и их значением должно управлять программное обеспечение фронтэнда (эти функции выполняет среда AVR Studio).

Таблица 6-9. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_PROGRAM_FLASH_HVSP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_RDY_BSY_TOUT Значение результата операции Result Value.

6.5 CMD_READ_FLASH_HVSP

Если завершилась успешно, эта команда прочитает память FLASH на target device. Для устройств, у которых FLASH организована на основе страниц, адрес данных и размер, используемые для этой команды, должны соответствовать устройству. Например, одна команда ReadFlash используется для чтения одной страницы на target device.
XML path: /AVRPART/ICE_SETTINGS/STK600/HvspReadFlash/

Таблица 6-10. Формат команды CMD_READ_FLASH_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_READ_FLASH_HVSP Идентификатор команды.
NumBytes 2 байта XML: blockSize Общее количество байт для чтения (старший байт MSB идет первым).

Таблица 6-11. Формат ответа, если команда выполнилась.

Поле Размер Значения Описание
Answer ID 1 байт CMD_READ_FLASH_HVSP Идентификатор ответа на команду.
Status1 1 байт STATUS_CMD_OK Всегда ОК.
Data N байт Данные, прочитанные из устройства. Они будут дополнены нулями (0x00), если произошла ошибка при чтении устройства.
Status2 1 байт STATUS_CMD_OK Всегда ОК.

6.6 CMD_PROGRAM_EEPROM_HVSP

См. описание команды CMD_WRITE_FLASH_HVSP.
XML path: /AVRPART/ICE_SETTINGS/STK600/HvspProgramEeprom/

6.7 CMD_READ_EEPROM_HVSP

См. описание команды CMD_READ_FLASH_HVSP.
XML path: /AVRPART/ICE_SETTINGS/STK600/HvspReadEeprom/

6.8 CMD_PROGRAM_FUSE_HVSP

Эта команда программирует 1 байт фьюзов, указанный байтом адреса фьюзов (Fuse Address).
XML path: /AVRPART/ICE_SETTINGS/STK600/HvspProgramFuse/

Таблица 6-12. Формат команды CMD_PROGRAM_FUSE_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_PROGRAM_FUSE_HVSP Идентификатор команды.
Fuse Address 1 байт 0, 1 или 2 Адрес байта фьюзов для записи (0 low, 1 high, 2 ext).
Fuse Byte 1 байт Байт фьюзов для программирования.
pollTimeout 1 байт XML: pollTimeout Таймаут (в миллисекундах) для опроса.

Таблица 6-13. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_PROGRAM_FUSE_HVSP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_RDY_BSY_TOUT Значение результата операции Result Value.

6.9 CMD_READ_FUSE_HVSP

Эта команда читает 1 байт фьюзов, указанный байтом адреса фьюзов (Fuse Address).
XML путь: /AVRPART/ICE_SETTINGS/STK600/HvspReadFuse/

Таблица 6-14. Формат команды CMD_READ_FUSE_HVSP.

Поле Размер Значения Описание
Command ID 1 байт CMD_READ_FUSE_HVSP Идентификатор команды.
Fuse Address 1 байт 0, 1 или 2 Адрес байта фьюзов для чтения (0 low, 1 high, 2 ext).

Таблица 6-15. Формат ответа, если команда выполнилась.

Поле Размер Значения Описание
Answer ID 1 байт CMD_READ_FUSE_HVSP Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK Всегда ОК.
Fuse Byte 1 байт Данные, прочитанные из устройства (значение указанного байта фьюзов). Будут дополнены 0 байтами если произошла ошибка при чтении.

6.10 CMD_PROGRAM_LOCK_HVSP

См. CMD_PROGRAM_FUSE_HVSP.
Примечание: адрес указывать необходимо, но он будет игнорироваться.

6.11 CMD_READ_LOCK_HVSP

См. CMD_READ_FUSE_HVSP.
Примечание: адрес указывать необходимо, но он будет игнорироваться.

6.12 CMD_READ_SIGNATURE_HVSP

См. CMD_READ_FUSE_HVSP.

6.13 CMD_READ_OSCCAL_HVSP

См. CMD_READ_FUSE_HVSP.

[7 AVR8 JTAG]

Все команды AVR8 jtag начинаются с идентификатора CMD_JTAG_AVR (0x90).

В STK600 заложена реализация программирования через JTAG, эквивалентная аппаратному отладчику JTAGICE mkII (см. T0152-0007 JTAGICE mkII Communication Protocol, или [5]), но без структуры сообщений JTAGICE mkII и пакетов fifo. Например, в STK600 используется только тело сообщения MESSAGE_BODY.

Таблица 7-1. Общий формат команды CMD_JTAG_AVR.

Поле Размер Значения Описание
AVR8JTAG id 1 байт CMD_JTAG_AVR Идентификатор команды, "враппер JTAGICE".
Ice_command 1 байт CMND_xxxx Команда JTAG.
Payload n байт Полезная нагрузка, зависит от команды JTAG (Ice_command).

Таблица 7-2. Общий формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR Идентификатор ответа на команду.
ICE answer msg body n байт STATUS_CMD_OK Тело сообщения ответа отладчика ICE.

Перед выдачей команд AVR8 JTAG должны быть корректно установлены следующие параметры (с помощью команды CMD_SET_PARAMETER):

• PARAM_JTAG_ALLOW_FULL_PAGE_STREAM
• PARAM_JTAG_EEPROM_PAGE_SIZE
• PARAM2_JTAG_FLASH_PAGE_SIZE
• PARAM2_JTAG_FLASH_SIZE_H
• PARAM2_JTAG_FLASH_SIZE_L
• PARAM_JTAG_DAISY_BITS_BEFORE
• PARAM_JTAG_DAISY_BITS_AFTER
• PARAM_JTAG_DAISY_UNITS_BEFORE
• PARAM_JTAG_DAISY_UNITS_AFTER

7.1 Чтение и запись памяти (Memory Read / Write)

Для команд CMND_WRITE_MEMORY (запись памяти) и CMND_READ_MEMORY (чтение памяти) определены следующие режимы памяти (значения те же самые, что и для jtagice mkII):

Таблица 7-3. Допустимые значения результата (Result Values) для ответа на эту команду.

Мнемоника Значение
JTAGC_MemType_FLASH_PAGE 0xB0
JTAGC_MemType_EEPROM_PAGE 0xB1
JTAGC_MemType_FUSE_BITS 0xB2
JTAGC_MemType_LOCK_BITS 0xB3
JTAGC_MemType_SIGN_JTAG (ro, только чтение) 0xB4
JTAGC_MemType_OSCCAL_BYTE (ro, только чтение) 0xB5

7.1.1 CMND_READ_MEMORY

Эта команда читает указанное количество байт из выбранной памяти цели (target MCU, подключенный отлаживаемый микроконтроллер). Перед использованием этой команды target MCU должен находиться в режиме программирования (вход туда через CMND_ENTER_PROGMODE).

Таблица 7-4. Формат команды CMND_READ_MEMORY.

Поле Размер Значения Описание
AVR8JTAG id 1 байт CMD_JTAG_AVR Идентификатор команды.
Message ID 1 байт CMND_WRITE_MEMORY (0x05)
Memory type 1 байт JTAGC_MemType_xxxx Тип памяти, см. таблицу 7-3.
Byte count 4 байта Младший байт LSB идет первым. Количество байт для чтения.
Start address 4 байта Младший байт LSB идет первым. Начальный адрес памяти.

Таблица 7-5. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED
Data n байт Полезная нагрузка, если STATUS_CMD_OK.

7.1.2 CMND_WRITE_MEMORY

Эта команда записывает указанное количество байт в выбранную память цели (target MCU, подключенный отлаживаемый микроконтроллер). Перед использованием этой команды target MCU должен находиться в режиме программирования (вход туда через CMND_ENTER_PROGMODE).

Таблица 7-6. Формат команды CMND_WRITE_MEMORY.

Поле Размер Значения Описание
AVR8JTAG id 1 байт CMD_JTAG_AVR Идентификатор команды.
Message ID 1 байт CMND_WRITE_MEMORY (0x04)
Memory type 1 байт JTAGC_MemType_xxxx Тип памяти, см. таблицу 7-3.
Byte count 4 байта Младший байт LSB идет первым. Количество байт для записи.
Start address 4 байта Младший байт LSB идет первым. Начальный адрес памяти.
Data n байт данные Полезная нагрузка, Byte count байт данных для записи.

Таблица 7-7. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK, STATUS_CMD_TOUT или STATUS_CMD_FAILED

7.1.3 CMND_RESET

Эта команда поместит инструкцию RESET (сброс) в регистр инструкций JTAG цели (target MCU). Перед использованием этой команды target MCU должен находиться в режиме программирования (вход туда через CMND_ENTER_PROGMODE).

Таблица 7-8. Формат команды CMND_WRITE_MEMORY.

Поле Размер Значения Описание
AVR8JTAG id 1 байт CMD_JTAG_AVR Идентификатор команды.
Message ID 1 байт CMND_RESET (0x0B)

Таблица 7-9. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

7.1.4 CMND_ENTER_PROGMODE

Эта команда разрешает обмен данными между аппаратурой STK600 и target MCU, и она должна быть первой командой, перед тем как в STK600 отправлена первая команда JTAG. После приема этой команды MCU удерживается в состоянии сброса (reset state), и при этом разрешены чтение и запись памяти.

Таблица 7-10. Формат команды CMND_ENTER_PROGMODE.

Поле Размер Значения Описание
AVR8JTAG id 1 байт CMD_JTAG_AVR Идентификатор команды.
Message ID 1 байт CMND_ENTER_PROGMODE (0x14)

Таблица 7-11. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK или STATUS_CMD_FAILED Если произошла ошибка, то JTAG id не был успешно прочитан из target MCU.

7.1.5 CMND_LEAVE_PROGMODE

Эта команда освобождает target MCU, при этом в нем запускается программа firmware по вектору сброса.

Таблица 7-12. Формат команды CMND_LEAVE_PROGMODE.

Поле Размер Значения Описание
AVR8JTAG id 1 байт CMD_JTAG_AVR Идентификатор команды.
Message ID 1 байт CMND_LEAVE_PROGMODE (0x15)

Таблица 7-13. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

7.1.6 CMND_CHIP_ERASE

Эта команда производит очистку (erase) target MCU - вся память сбрасывается в состояние по умолчанию (все значения равны 0xFF), и сбрасывает биты защиты (lock bits переводятся в состояние по умолчанию, память становится незащищенной).

[8 AVR32 JTAG]

Все команды AVR32 jtag, за исключением команд для входа в режим программирования и выхода из него, начитаются с CMD_JTAG_AVR32 (0x80).

В STK600 заложена реализация программирования через JTAG, эквивалентная аппаратному отладчику JTAGICE mkII (см. T0152-0007 JTAGICE mkII Communication Protocol, или [5]), но без структуры сообщений JTAGICE mkII и пакетов fifo. Например, в STK600 используется только тело сообщения MESSAGE_BODY.

Перед выдачей любых команд AVR32 JTAG должны быть корректно установлены следующие параметры (с помощью команды CMD_SET_PARAMETER):

• PARAM_JTAG_DAISY_BITS_BEFORE
• PARAM_JTAG_DAISY_BITS_AFTER
• PARAM_JTAG_DAISY_UNITS_BEFORE
• PARAM_JTAG_DAISY_UNITS_AFTER

8.1 CMD_ENTER_PROGMODE_JTAG_AVR32

Эта команда разрешает обмен с интерфейсом JTAG на платформе AVR32. Эта команда должна быть выполнена первой из всех команд AVR32 JTAG.

Таблица 8-1. Формат команды CMD_ENTER_PROGMODE_JTAG_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_ENTER_PROGMODE_JTAG_AVR32 (0x81) Идентификатор команды.

Таблица 8-2. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_ENTER_PROGMODE_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

8.2 CMD_LEAVE_PROGMODE_JTAG_AVR32

Эта команда запрещает работу интерфейса JTAG.

Таблица 8-3. Формат команды CMD_LEAVE_PROGMODE_JTAG_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_LEAVE_PROGMODE_JTAG_AVR32 (0x82) Идентификатор команды.

Таблица 8-4. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_LEAVE_PROGMODE_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

8.3 CMD_RESET_AVR32

Эта команда помещает значение для сброса в регистр сброса JTAG (JTAG reset register) target MCU.

Таблица 8-5. Формат команды CMD_RESET_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMND_AVR32_RESET (0x2B)
Reset value 1 байт Зависит от MCU Значение сброса.

Таблица 8-6. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK

8.4 CMD_SAB_WRITE_AVR32

Эта команда записывает слово по указанному адресу SAB в target MCU.

Таблица 8-7. Формат команды CMD_SAB_WRITE_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMND_JTAG_SAB_WRITE (0x28)
SAB address 5 байт Адрес SAB Старший байт MSB идет первым.
Data 4 байта Старший байт MSB идет первым.

Таблица 8-8. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт RSP_OK или RSP_FAILED

8.5 CMD_SAB_READ_AVR32

Эта команда читает слово по указанному адресу SAB из target MCU.

Таблица 8-9. Формат команды CMD_SAB_READ_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMD_SAB_READ_AVR32 (0x29)
SAB address 5 байт Адрес SAB Старший байт MSB идет первым.

Таблица 8-10. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт RSP_FAILED или RSP_SCAN_CHAIN_READ
Data Старший байт MSB идет первым? Если RSP_SCAN_CHAIN_READ.

8.6 CMD_BLOCK_WRITE_AVR32

Эта команда записывает блок данных, начиная с указанного адреса SAB. N должно быть меньше 64, чтобы количество данных удовлетворяло максимальному размеру данных буфера STK600.

Таблица 8-11. Формат команды CMD_BLOCK_WRITE_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMND_JTAG_BLOCK_WRITE (0x2D)
count 1 байт n Количество слов < 64.
SAB address 8 байт Адрес SAB Значение адреса дополнено нулями, старший байт MSB идет первым.
data n * 4 байта

Таблица 8-12. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт RSP_OK, RSP_FAILED или RSP_ILLEGAL_VALUE

8.7 CMD_BLOCK_READ_AVR32

Эта команда читает блок данных, начиная с указанного адреса SAB. N должно быть меньше 64, чтобы количество данных удовлетворяло максимальному размеру данных буфера STK600.

Таблица 8-13. Формат команды CMD_BLOCK_READ_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMD_BLOCK_READ_AVR32 (0x2C)
count 1 байт n Количество слов < 64.
SAB address 5 байт Адрес SAB Старший байт MSB идет первым?
data n * 4 байта

Таблица 8-14. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт RSP_FAILED, RSP_ILLEGAL_VALUE или RSP_SCAN_CHAIN_READ
Data 4 байта Старший байт MSB идет первым? Если RSP_SCAN_CHAIN_READ.

8.8 CMD_NEXUS_WRITE_AVR32

Эта команда записывает слово в указанный регистр nexus. Это эквивалентно записи по адресу SAB OCD_REGISTER + < register > * 4.

Таблица 8-15. Формат команды CMD_NEXUS_WRITE_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMD_NEXUS_WRITE_AVR32 (0x26)
register 1 байт Регистр nexus.
Data 4 байта

Таблица 8-16. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт RSP_OK или RSP_FAILED

8.9 CMD_NEXUS_READ_AVR32

Эта команда читает слово из указанного регистра nexus. Это эквивалентно чтению по адресу SAB OCD_REGISTER + < register > * 4.

Таблица 8-17. Формат команды CMD_NEXUS_READ_AVR32.

Поле Размер Значения Описание
AVR32JTAG id 1 байт CMD_JTAG_AVR32 (0x80) Идентификатор команды.
ICE command 1 байт CMD_NEXUS_READ_AVR32 (0x27)
register 1 байт Регистр nexus.

Таблица 8-18. Формат ответа.

Поле Размер Значения Описание
Answer ID 1 байт CMD_JTAG_AVR32 Идентификатор ответа на команду.
Status 1 байт RSP_FAILED или RSP_SCAN_CHAIN_READ
Data 4 байта Старший байт MSB идет первым? Если RSP_SCAN_CHAIN_READ.

[9 Протокол XPROG]

Протокол программирования XPROG используется для устройств ATxmega, и он может использоваться как для физического интерфейса JTAG, так и для физического интерфейса PDI. Все многобайтные значения (например поля адреса или длины) имеют порядок байт big endian (старший байт MSB идет первым в последовательности).

9.1 CMD_XPROG_SETMODE

Перед использованием любой команды XPROG должен быть выбран желаемый интерфейс для протокола XPROG. Это может быть PDI или JTAG.

Таблица 9-1. Формат команды CMD_XPROG_SETMODE.

Смещение Поле Размер Значения Описание
0 Command id 1 байт CMD_XPROG_SETMODE Идентификатор команды.
1 Mode 1 байт 0 PDI mode, 1 JTAG mode Указывает, какой будет использоваться интерфейс для XPROG.

Таблица 9-2. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт CMD_XPROG_SETMODE Идентификатор команды.
1 Status 1 байт Здесь находится один из кодов ошибки. Значение XPRG_ERR_OK означает успешное завершение команды.

9.2 CMD_XPROG

Это враппер STK600 для всех специфических команд XPROG.

Таблица 9-3. Формат команды CMD_XPROG.

Смещение Поле Размер Значения Описание
0 Command id 1 байт CMD_XPROG Идентификатор команды.
1 XPROG Command n байт Любая команда XPROG. Длина поля n зависит от команды.

Таблица 9-4. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт CMD_XPROG Идентификатор команды.
1 XPROG answer n байт Ответ на любую команду XPROG. Здесь находятся данные ответа на команду XPROG. Длина поля n зависит от команды.

Команды XPROG описываются далее. Значение offset показывает смещение части XPROG относительно команды CMD_XPROG. Чтобы найти абсолютное смещение в команде STK600, добавьте 1.

9.2.1 XPRG_ENTER_PROGMODE

Эта команда разрешает режим программирования в устройстве путем разрешения аппаратуры интерфейса программирования и отправки ключа программирования.

Примечание перед использованием этой инструкции должен быть установлен интерфейс программирования (PDI или JTAG) специальной командой установки режима.

Таблица 9-5. Формат команды XPRG_ENTER_PROGMODE.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_ENTER_PROGMODE Идентификатор команды.

Таблица 9-6. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_ENTER_PROGMODE Идентификатор команды.
1 Status 1 байт Здесь находится один из заданных кодов ошибки.

9.2.2 XPRG_LEAVE_PROGMODE

Эта команда осуществляет выход из режима программирования устройства путем очистки флагов сброса и запрета аппаратуры интерфейса программирования.

Таблица 9-7. Формат команды XPRG_LEAVE_PROGMODE.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_LEAVE_PROGMODE Идентификатор команды.

Таблица 9-8. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_LEAVE_PROGMODE Идентификатор команды.
1 Status 1 байт Всегда XPRG_ERR_OK.

9.2.3 XPRG_SET_PARAMETER

Для корректной работы в программаторе нужно установить некоторые параметры. Используйте для инициализации интерфейса XPROG следующую команду:

Таблица 9-9. Формат команды XPRG_SET_PARAMETER.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_SET_PARAMETER Идентификатор команды.
1 Parameter 1 байт Один из параметров XPRG_PARAM Параметр для установки. Коды значений параметров см. в приложении.
2 Value 1..4 байта Значение, зависящее от параметра. Размер значения зависит от того, какой параметр устанавливается.

Таблица 9-10. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_SET_PARAMETER Идентификатор команды.
1 Status 1 байт Здесь находится один из заданных кодов ошибки.

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

Примечание: последние ревизии протокола программирования XPROG могут включать в себя новые параметры.

9.2.4 XPRG_ERASE

Области памяти XMega, фьюзы (fuses) и биты защиты (lockbits) могут быть очищены на разных уровнях: chip erase (это очищает полностью как области памяти, так и биты защиты), application erase (очищает только код приложения), boot erase (очистка секции загрузки) и EEPROM erase (очищает данные приложения). Здесь также можно очистить отдельные страницы в flash и EEPROM.

Таблица 9-11. Формат команды XPRG_ERASE.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_ERASE Идентификатор команды.
1 Erase mode 1 байт XPRG_ERASE_CHIP, XPRG_ERASE_APP, XPRG_ERASE_BOOT, XPRG_ERASE_EEPROM, XPRG_ERASE_APP_PAGE, XPRG_ERASE_BOOT_PAGE, XPRG_ERASE_EEPROM_PAGE или XPRG_ERASE_USERSIG Уровни очистки памяти, описание режимов см. в таблице 9-11a.
2 Address 4 байта Любое значение адреса. Адрес игнорируется, если выбран уровень очистки XPRG_ERASE_CHIP. Для всех прочих уровней очистки адрес должен указывать на место в области памяти, которое должно быть очищено. Адрес относится к пространству TIF.

Таблица 9-11a. Уровни очистки памяти XMEGA.

Мнемоника Описание
XPRG_ERASE_CHIP Полностью очищает чип и биты защиты.
XPRG_ERASE_APP Очищает память секции приложения.
XPRG_ERASE_BOOT Очищает память секции загрузки.
XPRG_ERASE_EEPROM Полностью очищает EEPROM.
XPRG_ERASE_APP_PAGE Очищает одну страницу секции приложения.
XPRG_ERASE_BOOT_PAGE Очищает одну страницу секции загрузки.
XPRG_ERASE_EEPROM_PAGE Очищает одну страницу EEPROM.
XPRG_ERASE_USERSIG Очищает сигнатуру пользователя.

Таблица 9-12. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_ERASE Идентификатор команды.
1 Status 1 байт Здесь находится один из заданных кодов ошибки.

9.2.5 XPRG_WRITE_MEM

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

Таблица 9-13. Формат команды XPRG_WRITE_MEM.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_WRITE_MEM Идентификатор команды.
1 Memory type 1 байт Задает тип памяти: XPRG_MEM_TYPE_APPL, XPRG_MEM_TYPE_BOOT, XPRG_MEM_TYPE_EEPROM, XPRG_MEM_TYPE_FUSE, XPRG_MEM_TYPE_LOCKBITS, XPRG_MEM_TYPE_USERSIG.
2 PageMode 1 байт Битовое поле. Если типы памяти XPRG_MEM_TYPE_APPL, XPRG_MEM_TYPE_BOOT или XPRG_MEM_TYPE_EEPROM, то бит 0 задает запись страницы, а бит 1 задает очистку страницы.
3 Address 4 байта Любое значение адреса. Адрес должен указывать на место в области памяти, которое должно быть записано. Адрес относится к пространству TIF.
7 Length 2 байта 1..512 Если программируется страница, и действительный размер страницы больше 256, то операция должна быть разделена на 2 или большее количество операций XPRG_WRITE_MEM, где только последняя операция имеет установленный бит записи страницы. Примечание: только память приложения, загрузки и EEPROM поддерживают операции со страницами, для всех других типов памяти поле длины Length должно быть установлено в 1.
9 Data N байт Данные для записи. Размер задан полем Length.

Таблица 9-14. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_WRITE_MEM Идентификатор команды.
1 Status 1 байт Здесь находится один из заданных кодов ошибки.

9.2.6 XPRG_READ_MEM

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

Таблица 9-15. Формат команды XPRG_READ_MEM.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_READ_MEM Идентификатор команды.
1 Memory type 1 байт Задает тип памяти: XPRG_MEM_TYPE_APPL, XPRG_MEM_TYPE_BOOT, XPRG_MEM_TYPE_EEPROM, XPRG_MEM_TYPE_FUSE, XPRG_MEM_TYPE_LOCKBITS, XPRG_MEM_TYPE_USERSIG, XPRG_MEM_TYPE_FACTORY_CALIBRATION.
2 Address 4 байта Любое значение адреса. Любое значение адреса. Адрес должен указывать на место в области памяти, которое должно быть прочитано. Адрес относится к пространству TIF.
6 Length 2 байта 1..256 Сколько байт должно быть прочитано.

Таблица 9-16. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_READ_MEM Идентификатор команды.
1 Status 1 байт Здесь находится один из заданных кодов ошибки.
2 Data N байт Здесь находятся прочитанные данные. Байты с младшими адресами идут первыми.

9.2.7 XPRG_READ_CRC

Эта команда запускает генератор CRC и возвращает трехбайтную контрольную сумму CRC.

Таблица 9-17. Формат команды XPRG_READ_CRC.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_READ_CRC Идентификатор команды.
1 CRC type 1 байт Задает тип памяти: приложения пользователя, загрузки или вся память FLASH целиком (XPRG_CRC_APP, XPRG_CRC_BOOT или XPRG_CRC_FLASH, см. приложение).

Таблица 9-18. Формат ответа.

Смещение Поле Размер Значения Описание
0 Command id 1 байт XPRG_READ_CRC Идентификатор команды.
1 Status 1 байт Здесь находится один из заданных кодов ошибки.
2 Data 3 байта Контрольная сумма, которую вычисляет само устройство.

[10 Возвращаемые значения (Return Values)]

В этой секции описаны все возможные возвращаемые значения, и что именно они означают.

10.1 STATUS_CMD_OK успешное завершение (Success), команда выполнилась успешно.

10.2 Предупреждения (Warnings)

Все предупреждения имеют MSB установленным в 1 и MSB-1 сброшенным в 0.

Таблица 10-2. Значения возврата, коды предупреждений.

Значение Что означает
STATUS_CMD_TOUT Истек таймаут команды.
STATUS_RDY_BSY_TOUT Истек таймаут опроса вывода готовности/занятости (RDY/nBSY pin).
STATUS_SET_PARAM_MISSING Команда установки параметра устройства потерпела ошибку в процессе выполнения.

10.3 Ошибки (Errors)

Все ошибки имеют установленными в 1 и MSB, и MSB-1.

Таблица 10-3. Значения возврата, коды ошибок.

Значение Что означает
STATUS_CMD_FAILED Команда завершилась с ошибкой.
STATUS_CKSUM_ERROR Ошибка контрольной суммы.
STATUS_CMD_UNKNOWN Неизвестная команда.

11. Параметры

Следующие параметры могут быть прочитаны и/или записаны командами CMD_GET_PARAM и CMD_SET_PARAM (поле R/W означает тип доступа R на чтение, W на запись, RW и на чтение и на запись):

Таблица 11-1. Однобайтные параметры.

Значение Что означает R/W
PARAM_HW_VER Ревизия аппаратуры. R
PARAM_SW_MAJOR Номер версии firmware главного управляющего MCU. R
PARAM_SW_MINOR Номер версии firmware главного управляющего MCU. R
PARAM_VTARGET Напряжение питания цели (target, программируемый микроконтроллер). RW
PARAM_STATUS Возвращает значение регистра состояния (status register). R
PARAM_STATUS_TGT_CONN Состояние подключения к target. R
PARAM_CONTROLLER_INIT Показывает, что питание платы выключено. R
PARAM_DISCHARGEDELAY Задержка с состоянием сигнала сброса в высоком сопротивлении. W
PARAM_SOCKETCARD_ID Значение идентификации карты сокета. R
PARAM_ROUTINGCARD_ID Значение идентификации карты разводки. R
PARAM_EXPCARD_ID Значение идентификации карты расширения. R
PARAM_SW_MAJOR_SLAVE1 Номер версии firmware подчиненного управляющего процессора 1 (slave 1 MCU). R
PARAM_SW_MINOR_SLAVE1 Номер версии firmware подчиненного управляющего процессора 1 (slave 1 MCU). R
PARAM_SW_MAJOR_SLAVE2 Номер версии firmware подчиненного управляющего процессора 2 (slave 2 MCU). R
PARAM_SW_MINOR_SLAVE2 Номер версии firmware подчиненного управляющего процессора 2 (slave 2 MCU). RW
PARAM_BOARD_ID_STATUS Возвращает состояние допустимости комбинации карт разводки и сокета. R
PARAM_RESET Состояние сброса в лог. 1 или в лог. 0. R
PARAM_JTAG_ALLOW_FULL_PAGE_STREAM Двоичное значение: разрешает ли target битовый поток полной страницы для чтения/записи памяти. R
PARAM_JTAG_EEPROM_PAGE_SIZE Размер страницы target EEPROM. RW
PARAM_JTAG_DAISY_BITS_BEFORE Предыдущее значение битов регистра инструкции. R

Таблица 11-2. Двухбайтные параметры.

Значение Что означает R/W
PARAM2_SCK_DURATION Длительность ISP SCK. RW
PARAM2_AREF0 Опорное напряжение АЦП (ADC reference voltage). RW
PARAM2_AREF1 Опорное напряжение АЦП (ADC reference voltage). RW
PARAM2_CLOCK_CONF Значения регистра для программируемого генератора. RW
PARAM2_RC_ID_TABLE_REV Таблица ревизии карт разводки и сокета. R
PARAM2_EC_ID_TABLE_REV Таблица ревизии карты расширения. R
PARAM2_JTAG_FLASH_PAGE_SIZE Размер страницы памяти FLASH у target. RW
PARAM2_JTAG_FLASH_SIZE_H Старшее слово размера FLASH. RW
PARAM2_JTAG_FLASH_SIZE_L Младшее слово размера FLASH. RW

11.4 PARAM_VTARGET

Параметр напряжения питания цели (target voltage) указывается в вольтах x10. Например, значение параметра 42 (десятичное) соответствует 4.2V.

Примечание: этот параметр не может быть установлен, когда STK600 находится в режиме программирования.

Максимальное значение target voltage зависит от того, какая смонтирована плата разводки/сокета (routing/socket board). Чтобы узнать максимально допустимое значение target voltage перед установкой нового значения, должен быть предварительно прочитан идентификатор платы (board-id). Максимальное напряжение для платы можно найти в файле "targetboard.xml".

11.5 PARAM_STATUS_TGT_CONN

Этот параметр возвращает то же самое значение статуса, что и CMD_CHECK_TARGET_CONNECTION, см. раздел 3.9.

Отличие между использованием команды и GET_PARAM в том, что биты 4-5 обновляются только после того, как команда запущена.

11.6 PARAM2_SCK_DURATION

Это двухбайтное значение, которое устанавливает рабочую частоту ISP. Когда используется интерфейс программирования ISP, то тактовая частота ISP не должна превышать максимальное значение, которое поддерживает target device (программируемый микроконтроллер). Примечание: максимальное значение частоты тактов ISP зависит от системной частоты программируемого устройства, коэффициента деления внутреннего прескалера и т. п.

STK600 поддерживает частоты ISP от 1953 Гц до 8.0 МГц. Значение PARAM_SCK_DURATION можно найти с помощью следующего алгоритма:

unsigned int CalcSckDur(int freq)
{
   sck_dur = ceil((16e6/(2*freq))-1);
   return __min(4096, sck_dur);  // 4096 является недопустимым значением.
}

11.7 PARAM_CONTROLLER_INIT

Этот параметр внутренне устанавливается в 0, когда сбрасывается управляющий MCU программатора. ПО хоста может записать туда любое значение в этот параметр, и потом прочитать его обратно. Назначение параметра - определить, пропадало ли питание STK600.

Таким образом ПО хоста может узнать, нужно ли выполнять инициализацию программатора заново перед тем, как продолжить работу с ним. К примеру, если возвращенное значение параметра 0, то должна быть выполнена команда CMD_SET_CONTROL_STACK до того, как может быть выдана любая команда высоковольтного программирования.

11.8 PARAM_DISCHARGEDELAY

Имя параметра переводится как "параметр задержки для разряда". Этот параметр устанавливает период времени, в течение которого сигнал сброса имеет высокое сопротивление каждый раз, когда он должен быть переключен. Назначение параметра - уменьшить ток, который происходит из-за разряда/заряда конденсатора, который иногда подключен к сигналу сброса (reset pin).

Когда сброс переключается, то подключается резистор номиналом 510 Ом, который ограничивает пиковый ток до значения, допустимого для внутренних компонентов STK600.

Задержка должна быть установлена в значение t > 510 Ом * C. Если конденсатор не подключен, то этот параметр может быть установлен в 0.

11.9 PARAM2_AREF0

Значение параметра указано в вольтах x100, к примеру значение 449 (десятичное) соответствует 4.49V.

Максимальное значение 5.5V (соответствует значению параметра 550).

11.10 PARAM2_AREF1

То же самое, что и AREF0.

11.11 PARAM2_CLOCK_CONF

Это двухбайтное значение (16 бит), которое конфигурирует генератор чипа.

Биты 15..12 определяют биты OCT3..OCT0 (от них зависит значение OCT), а биты 11..2 определяют биты DAC9..DAC0 (от них зависит значение DAC). Биты 1 и 0 не используются.

Частота вычисляется по формуле:

Формула 11-1. Частота тактового генератора.

AVR079-frequency-equ11-1

Формула 11-2. OCT.

AVR079-OCT-equ11-2

Формула 11-3. DAC.

AVR079-DAC-equ11-3

11.12 PARAM_SOCKETCARD_ID

Возвращает байт, который идентифицирует карту сокета (socket card). Файл "targetboard.xml" содержит список карт и значения их идентификаторов (card id).

11.13 PARAM_ROUTINGCARD_ID

Возвращает байт, который идентифицирует карту разводки (routing card). Файл "targetboard.xml" содержит список карт и значения их идентификаторов (card id).

11.14 PARAM_EXPCARD_ID

Возвращает байт, который идентифицирует карту расширения (expansion card). Файл "targetboard.xml" содержит список карт и значения их идентификаторов (card id).

11.15 PARAM_SW_MAJOR_SLAVE1

Параметры PARAM_SW_MAJOR_SLAVE1 и PARAM_SW_MINOR_SLAVE1 возвращают версию firmware для подчиненного MCU 1 (slave 1 mcu).

11.16 PARAM_SW_MINOR_SLAVE1

См. раздел 11.15.

11.17 PARAM_SW_MAJOR_SLAVE2

Параметры PARAM_SW_MAJOR_SLAVE2 и PARAM_SW_MINOR_SLAVE2 возвращают версию firmware для подчиненного MCU 2 (slave 2 mcu).
The PARAM_SW_MAJOR_SLAVE2 and PARAM_SW_MINOR_SLAVE2 returns the firmware version of the slave 2 mcu.

11.18 PARAM_SW_MINOR_SLAVE2

См. раздел 11.17.

11.19 PARAM2_RC_ID_TABLE_REV

Таблица ревизии идентификатора карты разводки (Routingcard Board ID table revision).

11.20 PARAM2_EC_ID_TABLE_REV

Таблица ревизии идентификатора карты расширения (Expansioncard Board ID table revision).

11.21 PARAM_BOARD_ID_STATUS

0x00 = OK
0x01 = Несоответствие BoardID (VTG будет установлен в 0V).
0x02 = BoardID поменялся в тот момент, когда STK600 запитан (VTG будет установлен в 0V).

11.22 PARAM_RESET

Используется для изменения состояния сигнала сброса в лог. 1 или лог. 0. Будет работать только тогда, когда плата находится в режиме ожидания (idle). Если используется, когда стартеркит STK600 находится в режиме программирования, то параметр будет игнорироваться.

11.23 PARAM_RESET_POLARITY

Для обратной совместимости с STK500 этот параметр устанавливает полярность сигнала сброса.

11.24 PARAM_JTAG_ALLOW_FULL_PAGE_STREAM

Двоичное значение, которое показывает, поддерживает ли target MCU полное потоковое заполнение страницы данными, или каждый байт должен сопровождаться возвратом состояние ожидание (имеется в виду состояние jtag).
XML:AVRPART\ICE_SETTINGS\JTAGICEmkII\ucAllowFullPageBitstream

11.25 PARAM_JTAG_EEPROM_PAGE_SIZE

Используется для установки размера страницы EEPROM (в байтах).

11.26 PARAM2_JTAG_FLASH_PAGE_SIZE

Используется для установки размера страницы FLASH (в байтах).

11.27 PARAM2_JTAG_FLASH_SIZE_H

Используется для установки размера FLASH (в байтах). Так как эта величина может превысить 0xffff (64k), то величина разделена на два отдельных параметра, PARAM2_JTAG_FLASH_SIZE_H и PARAM2_JTAG_FLASH_SIZE_L.

11.28 PARAM2_JTAG_FLASH_SIZE_L

См. PARAM2_JTAG_FLASH_SIZE_H

11.29 PARAM_JTAG_DAISY_BITS_BEFORE

Общеизвестно, что на шине JTAG могут быть несколько управляемых устройств, соединенных друг за другом в цепочку (JTAG daisy chain). Когда target MCU является частью цепочки JTAG, STK600 должен знать, сколько бит нужно пропустить перед и после target. Значения PARAM_JTAG_DAISY_BITS_BEFORE и PARAM_JTAG_DAISY_BITS_AFTER указывают, сколько нужно пропустить бит регистра инструкций.

В фазе данных JTAG (JTAG data phase) у всех прочих устройств, не являющихся целью, выбран регистр SKIP (пропуск данных). Регистр SKIP является однобитным. Параметры PARAM_JTAG_DAISY_UNITS_BEFORE и AFTER указывают количество устройств перед и после target device, и таким образом общую длину регистра SKIP для игнорирования ненужных данных. Например, если target AVR размещен вторым в цепочке из 4 устройств, то длины регистра инструкций составят 2, 2 и 5 соответственно.

Таблица 11.5. Коды параметров определяющих положение target в цепочке JTAG.

Имя Значение
PARAM_JTAG_DAISY_BITS_BEFORE 2
PARAM_JTAG_DAISY_BITS_AFTER 7
PARAM_JTAG_DAISY_UNITS_BEFORE 1
PARAM_JTAG_DAISY_UNITS_AFTER 2

11.30 PARAM_JTAG_DAISY_BITS_AFTER

См. PARAM_JTAG_DAISY_BITS_BEFORE.

11.31 PARAM_JTAG_DAISY_UNITS_BEFORE

См. PARAM_JTAG_DAISY_BITS_BEFORE.

11.32 PARAM_JTAG_DAISY_UNITS_AFTER

См. PARAM_JTAG_DAISY_BITS_BEFORE.

[12 Значения параметров в файлах XML]

Набор параметров является специфичным для определенного устройства AVR, так что наборы установок параметров находятся в файле описания устройства, который имеет формат XML (XML part description file). Здесь описывается, где можно найти значения параметров STK600 в файле XML, специфичном для конкретного устройства. После того, как Вы установили AVR Studio 4, все файлы XML можно найти в папке "%ProgramFiles%\Atmel\AVR Tools\PartDescriptionFiles\.

Прим. переводчика: для Atmel Studio 6.0 файлы XML расположены во многих папках. Файлы описания устройств, относящиеся к STK600, находятся в папке c:\Program Files\Atmel\Atmel Studio 6.0\tools\STK600\xml\. В других папках под папкой tools находятся XML-файлы для другого инструментария (AVRDragon, AVRISPmkII, JTAGICEmkII, STK500 и т. п.).

AVR079-file-in-XML-notepad

Рис. 12-1. Файл XML, открытый в XML notepad.

Откройте файл XML в редакторе или просмотрщике XML (это могут быть к примеру XML Notepad или Internet Explorer). Все значения, привязанные к устройству AVR для STK600, размещены в узле STK600. Для параметров команды CMD_ENTER_PROGMODE_ISP см. /AVRPART/ICE_SETTINGS/STK600/IspEnterProgMode.

[13 Пример последовательности команд]

В этом разделе содержатся примеры - как можно подключиться к STK600 от компьютера PC (фронтэнд) и как прочитать сигнатуру устройства AVR. См. раздел 2.4 Формат команды для описания команд и их параметров.

13.1 Подключение

Вот последовательность команд, которые должен отправить PC к STK600 для подключения:

• CMD_SIGN_ON
• CMD_GET_PARAMETER, PARAM_HW_VER
• CMD_GET_PARAMETER, PARAM_SW_MAJOR
• CMD_GET_PARAMETER, PARAM_SW_MINOR
• CMD_GET_PARAMETER, PARAM_SW_MAJOR_S1
• CMD_GET_PARAMETER, PARAM_SW_MINOR_S1
• CMD_GET_PARAMETER, PARAM_SW_MAJOR_S2
• CMD_GET_PARAMETER, PARAM_SW_MINOR_S2

13.2 Чтение сигнатуры

Здесь приведена последовательность команд, которые должен отправить PC к STK600, чтобы прочитать сигнатуру устройства AVR через интерфейс программирования ISP. Имейте в виду, что для чтения сигнатуры устройства оно должно быть подключено, запитано, и получать правильное тактирование.

• CMD_CHECK_STATUS_TGT_CONN
• CMD_ENTER_PROGMODE_ISP
• CMD_READ_SIGNATURE_ISP
• CMD_READ_SIGNATURE_ISP
• CMD_READ_SIGNATURE_ISP
• CMD_LEAVE_PROGMODE_ISP

13.3 Настройка вывода в лог протокола обмена STK600

Чтобы получить дополнительную подробную информацию от том, как происходит реальный обмен между AVR Studio и STK600, можно настроить вывод информации по обмену в текстовый файл (лог). Это можно осуществить путем добавления ключа в реестр Windows.

1. Запустите редактор реестра (regedit) и перейдите в узел реестра HKEY_CURRENT_USER\Software\Atmel\AVRTools\STK500\.
2. Создайте новое строковое значение (String Value) с именем LogFilePath.
3. Введите для LogFilePath значение, задающее полный путь до файла лога, например c:\STK600com.txt.

Теперь весь обмен между STK600 и AVR Studio будет выводиться в файл c:\STK600com.txt. Ниже показан пример лога при чтении через ISP сигнатуры устройства ATmega2560. Сравните данные команд и ответов с таблицами формата в разделе 4.9.

AVR079-comm-log-example-fig13-3

Рис. 13-3. Лог обмена на примере чтения сигнатуры устройства ATmega2560 через ISP.

[Приложение]

A.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
#define CMD_CHECK_TARGET_CONNECTION 0x0D
#define CMD_LOAD_RC_ID_TABLE 0x0E
#define CMD_LOAD_EC_ID_TABLE 0x0F
#define CMD_CLEAR_RC_ID_TABLE 0x09
// *** Константы команд 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
// *** Константы команд параллельного программирования (PP) ***
#define CMD_ENTER_PROGMODE_PP 0x20
#define CMD_LEAVE_PROGMODE_PP 0x21
#define CMD_CHIP_ERASE_PP 0x22
#define CMD_PROGRAM_FLASH_PP 0x23
#define CMD_READ_FLASH_PP 0x24
#define CMD_PROGRAM_EEPROM_PP 0x25
#define CMD_READ_EEPROM_PP 0x26
#define CMD_PROGRAM_FUSE_PP 0x27
#define CMD_READ_FUSE_PP 0x28
#define CMD_PROGRAM_LOCK_PP 0x29
#define CMD_READ_LOCK_PP 0x2A
#define CMD_READ_SIGNATURE_PP 0x2B
#define CMD_READ_OSCCAL_PP 0x2C
#define CMD_SET_CONTROL_STACK 0x2D
// *** Константы команд STK HVSP (последовательное высоковольтное
// программирование) ***
#define CMD_ENTER_PROGMODE_HVSP 0x3D
#define CMD_LEAVE_PROGMODE_HVSP 0x3E
#define CMD_CHIP_ERASE_HVSP 0x32
#define CMD_PROGRAM_FLASH_HVSP 0x33
#define CMD_READ_FLASH_HVSP 0x34
#define CMD_PROGRAM_EEPROM_HVSP 0x35
#define CMD_READ_EEPROM_HVSP 0x36
#define CMD_PROGRAM_FUSE_HVSP 0x37
#define CMD_READ_FUSE_HVSP 0x38
#define CMD_PROGRAM_LOCK_HVSP 0x39
#define CMD_READ_LOCK_HVSP 0x3A
#define CMD_READ_SIGNATURE_HVSP 0x3B
#define CMD_READ_OSCCAL_HVSP 0x3C
// *** Константы команд протокола XPROG ***
#define CMD_XPROG 0x50
#define CMD_XPROG_SETMODE 0x51
// *** Команды программирования AVR32 JTAG ***
#define CMD_JTAG_AVR32 0x80
#define CMD_ENTER_PROGMODE_JTAG_AVR32 0x81
#define CMD_LEAVE_PROGMODE_JTAG_AVR32 0x82
// *** Команды программирования AVR JTAG ***
#define CMD_JTAG_AVR 0x90
// *** Константы состояния (Status constants) ***
// Константа успеха
#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 STATUS_CMD_ILLEGAL_PARAMETER 0xCA
// Состояние (Status)
#define STATUS_CONN_FAIL_MOSI 0x01
#define STATUS_CONN_FAIL_RST 0x02
#define STATUS_CONN_FAIL_SCK 0x04
#define STATUS_TGT_NOT_DETECTED 0x00
#define STATUS_ISP_READY 0x10
#define STATUS_TGT_REVERSE_INSERTED 0x20
// Состояние аппаратуры (hw_status),
// Биты в переменной статуса
// Bit 0-3: Slave MCU
// Bit 4-7: Master MCU
#define STATUS_AREF_ERROR 0
// Установлено в '1', если AREF имеет КЗ.
#define STATUS_VTG_ERROR 4
// Установлено в '1', если VTG имеет КЗ.
#define STATUS_RC_CARD_ERROR 5
// Установлено в '1', если идентификатор платы (board id)
// изменился, хотя плата была запитана.
#define STATUS_PROGMODE 6
// Установлено в '1', если плата в режиме программирования.
#define STATUS_POWER_SURGE 7
// Установлено в '1', если плата потребляет слишком большой ток.
// *** Константы параметров для величин из 1 байта ***
#define PARAM_HW_VER 0x90
#define PARAM_SW_MAJOR 0x91
#define PARAM_SW_MINOR 0x92
#define PARAM_VTARGET 0x94
#define PARAM_RESET_POLARITY 0x9E
#define PARAM_CONTROLLER_INIT 0x9F
#define PARAM_STATUS_TGT_CONN 0xA1
#define PARAM_DISCHARGEDELAY 0xA4
#define PARAM_SOCKETCARD_ID 0xA5
#define PARAM_ROUTINGCARD_ID 0xA6
#define PARAM_EXPCARD_ID 0xA7
#define PARAM_SW_MAJOR_SLAVE1 0xA8
#define PARAM_SW_MINOR_SLAVE1 0xA9
#define PARAM_SW_MAJOR_SLAVE2 0xAA
#define PARAM_SW_MINOR_SLAVE2 0xAB
#define PARAM_BOARD_ID_STATUS 0xAD
#define PARAM_RESET 0xB4
#define PARAM_JTAG_ALLOW_FULL_PAGE_STREAM 0x50
#define PARAM_JTAG_EEPROM_PAGE_SIZE 0x52
#define PARAM_JTAG_DAISY_BITS_BEFORE 0x53
#define PARAM_JTAG_DAISY_BITS_AFTER 0x54
#define PARAM_JTAG_DAISY_UNITS_BEFORE 0x55
#define PARAM_JTAG_DAISY_UNITS_AFTER 0x56
// *** Константы параметров для величин из 2 байт ***
#define PARAM2_SCK_DURATION 0xC0
#define PARAM2_CLOCK_CONF 0xC1
#define PARAM2_AREF0 0xC2
#define PARAM2_AREF1 0xC3
#define PARAM2_JTAG_FLASH_SIZE_H 0xC5
#define PARAM2_JTAG_FLASH_SIZE_L 0xC6
#define PARAM2_JTAG_FLASH_PAGE_SIZE 0xC7
#define PARAM2_RC_ID_TABLE_REV 0xC8
#define PARAM2_EC_ID_TABLE_REV 0xC9

A.2 Команды и параметры протокола XPROG

// Команды XPROMG
#define XPRG_CMD_ENTER_PROGMODE 0x01
#define XPRG_CMD_LEAVE_PROGMODE 0x02
#define XPRG_CMD_ERASE 0x03
#define XPRG_CMD_WRITE_MEM 0x04
#define XPRG_CMD_READ_MEM 0x05
#define XPRG_CMD_CRC 0x06
#define XPRG_CMD_SET_PARAM 0x07
// Типы памяти
#define XPRG_MEM_TYPE_APPL 1
#define XPRG_MEM_TYPE_BOOT 2
#define XPRG_MEM_TYPE_EEPROM 3
#define XPRG_MEM_TYPE_FUSE 4
#define XPRG_MEM_TYPE_LOCKBITS 5
#define XPRG_MEM_TYPE_USERSIG 6
#define XPRG_MEM_TYPE_FACTORY_CALIBRATION 7
// Типы очистки
#define XPRG_ERASE_CHIP 1
#define XPRG_ERASE_APP 2
#define XPRG_ERASE_BOOT 3
#define XPRG_ERASE_EEPROM 4
#define XPRG_ERASE_APP_PAGE 5
#define XPRG_ERASE_BOOT_PAGE 6
#define XPRG_ERASE_EEPROM_PAGE 7
#define XPRG_ERASE_USERSIG 8
// Флаги режима записи
#define XPRG_MEM_WRITE_ERASE 0
#define XPRG_MEM_WRITE_WRITE 1
// Типы CRC
#define XPRG_CRC_APP 1
#define XPRG_CRC_BOOT 2
#define XPRG_CRC_FLASH 3
// Коды ошибки
#define XPRG_ERR_OK 0
#define XPRG_ERR_FAILED 1
#define XPRG_ERR_COLLISION 2
#define XPRG_ERR_TIMEOUT 3
// Параметры XPROG разного размера
// 4-байтные адреса
#define XPRG_PARAM_NVMBASE 0x01
// 2-байтный размер страницы
#define XPRG_PARAM_EEPPAGESIZE 0x02

A.3 Дескрипторы USB (USB Descriptors)

Таблица 13-1. Дескриптор устройства (Device descriptor)

Имя Значение HEX
bLength Valid 0x12
bDescriptorType DEVICE 0x01
bcdUSB 2.0 0x0200
bDeviceClass Vendor-specific 0xFF
bDeviceSubClass Vendor-specific 0x00
bDeviceProtocol None 0x00
bMaxPacketSize0 64 0x40
idVendor Atmel Corporation 0x03EB
idProduct 0x2106 0x2106
bcdDevice 2.0 0x0200
iManufacturer 1 0x01
iProduct 2 "STK600" 0x02
iSerialNumber 3 0x03
bNumConfigurations 1 0x01

Таблица 13-2. Дескриптор конфигурации (Configuration descriptor)

Имя Значение HEX
bLength Valid 0x09
bDescriptorType CONFIGURATION 0x02
wTotalLength 32 байта 0x0020
bNumInterface 1 0x01
bConfigurationValue 1 0x01
iConfiguration 0 0x00
bmAttributes 0x80 0x80
bMaxPower 500 mA 0xFA

Таблица 13-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

Таблица 13-4. Дескриптор конечной точки (Endpoint descriptor) IN

Имя Значение HEX
bLength Valid 0x07
bDescriptorType ENDPOINT 0x05
bEndpointAddress 3 IN 0x83
bmAttributes Types - Pkt Size Adjust: No 0x02
wMaxPacketSize 64 байта 0x0040
bInterval Игнорируется для конечных точек Bulk 0x0A

Таблица 13-5. Дескриптор конечной точки (Endpoint descriptor) OUT

Имя Значение HEX
bLength Valid 0x07
bDescriptorType ENDPOINT 0x05
bEndpointAddress 2 OUT 0x02
bmAttributes Types - Pkt Size Adjust: No 0x02
wMaxPacketSize 64 байта 0x0040
bInterval Игнорируется для конечных точек Bulk 0x00

[Ссылки]

1. AVR079: STK600 Communication Protocol site:atmel.com.
2. AVR061: старая версия протокола обмена STK500.
3. AVR068: протокол обмена STK500 ver. 2.0.
4. 131028avr061-avr068.zip.
5. AVR067: протокол JTAGICE mkII.

 

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


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

Top of Page