Программирование AVR AVR068: протокол обмена STK500 ver. 2.0 Thu, March 28 2024  

Поделиться

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

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

AVR068: протокол обмена STK500 ver. 2.0 Печать
Добавил(а) microsin   

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

Протокол STK500 ver. 2.0 предназначен для обмена между стартеркитом Atmel STK500 [2, 3] и компьютером PC, на котором запущена среда разработки AVR Studio. В управляющем MCU стартеркита должна быть прошита STK500 FW 2.XX, которая поставляется в составе AVR Studio 4.11 build 401 или более свежей. Определения всех команд, ответов, параметров и других заданных величин можно найти в файле command.h. Этот файл можно скачать с сайта Atmel, или см. [4], папка AVR068 архива.

Большинство параметров, относящихся к каждому конкретному устройству (микроконтроллеру AVR), можно найти в XML файлах, такой файл есть для каждого поддерживаемого устройства. XML-файлы описания устройств поставляются в составе AvrStudio 4.11 или более поздних версий. Вы можете загрузить последнюю версию AvrStudio 4.11 с сайта Atmel. Формат файлов XML описан в секции 6. Для значений, отсутствующих в файле XML, обратитесь к даташиту на устройство.

Статья в основном касается стартеркита STK500, но также часто относится и к программатору AVRISP. В некоторых случаях, когда поведение STK500 и AVRISP отличается, это будет оговорено специально.

[2 Интерфейс обмена с компьютером (Communication interface)]

Обмен между STK500 и PC происходит через RS232 (PC COM-порт). При этом STK500 использует следующие настройки порта: 115.2kbps, 8 data bits, 1 stop bit, no parity. Для успешного обмена COM-порт в компьютере должен быть настроен с такими же параметрами.

[3 Формат сообщения]

Все команды и ответы имеют одинаковый формат сообщения, как показано на рис. 3-1 и в табл. 3-1.

Рис. 3-1. Общий формат сообщения протокола STK500 ver 2.0.

MESSAGE_START
SEQUENCE_NUMBER
MESSAGE_SIZE
TOKEN
MESSAGE_BODY
CHECKSUM

Таблица 3-1. Общие поля формата сообщения.

Имя параметра Размер/формат Описание
MESSAGE_START 1 байт Здесь всегда 0x1B.
SEQUENCE_NUMBER 1 байт Инкрементируется на 1 с каждым отправляемым сообщением. Обращается в 0xFF по достижении значения 0xFF.
MESSAGE_SIZE 2 байта, старший байт MSB идет первым. Размер тела сообщения(1) (поле MESSAGE_BODY).
TOKEN 1 байт Здесь всегда 0x0E.
MESSAGE_BODY MESSAGE_SIZE байт Тело сообщения, размер 0..65535 байт(1).
CHECKSUM 1 байт Контрольная сумма. Для её подсчета учитываются все байты в сообщении от MESSAGE_START до MESSAGE_BODY включительно. Контрольная сумма вычисляется операцией XOR от всех байт.

Примечание (1): текущая версия firmware STK500 может обработать только те сообщения, у которых тело (message body) максимум 275 байт.

Хост (мастер, компьютер PC) отправляет команды, на которые STK500 отвечает. Обмен всегда происходит по принципу команда - ответ. Здесь имеется важное отличие от старой версии протокола STK500, где имелись сообщения событий STK500. Т. е. в новом протоколе одна команда хоста приведет к одному ответу STK500. Сам STK500 не может отправить сообщение хосту, которое не является ответом на принятую команду. Номер последовательности SEQUENCE_NUMBER в ответе всегда совпадает с номером последовательности в запросе. В этом плане новая версия протокола STK500 проще.

[4 Таблица состояний слоя протокола (Protocol Layer State Table)]

Эта секция описывает машину состояний, реализованную в программном обеспечении компьютера. Эта машина обрабатывает приходящие пакеты от STK500. Когда ожидается поступление пакета, машина состояний инициализируется в начальное состояние Start. Таблица описывает все состояния, события и условия для обработки приходящих данных.

Таблица 4-1. Protocol Layer State Table.

Текущее состояние Событие (Event) Условие Действие Следующее состояние
Start Чтение символа из входного буфера символ == ASCII 27 Get Sequence Number (получить номер последовательности)
Чтение символа из входного буфера символ != ASCII 27 Обновление статистики Start
Общий таймаут Выход по ошибке
Get Sequence Number Чтение символа из входного буфера Принятый номер последовательности == отправленному Get Message Size 1 (получить размер сообщения, первый байт)
Чтение символа из входного буфера Принятый номер последовательности != отправленному Обновление статистики Start
Общий таймаут Выход по ошибке
Get Message Size 1 Чтение символа из входного буфера Get Message Size 2 (получить размер сообщения, 2 байт)
Общий таймаут Выход по ошибке
Get Message Size 2 Чтение символа из входного буфера Вычислить размер сообщения Get Token (выборка токена)
Общий таймаут Выход по ошибке
Get Token Чтение символа из входного буфера Символ == ASCII 14 Get Data (получить данные)
Чтение символа из входного буфера Символ != ASCII 14 Обновление статистики Start
Общий таймаут Выход по ошибке
Get Data Чтение символа из входного буфера Количество принятых байт == MESSAGE_SIZE Get Checksum (получить контрольную сумму)
Чтение символа из входного буфера Количество принятых байт < MESSAGE_SIZE Get Data (продолжение получения данных)
Общий таймаут Выход по ошибке
Get Checksum Чтение символа из входного буфера Контрольная сумма в порядке Успешный выход, обработка пакета
Чтение символа из входного буфера Ошибка в контрольной сумме Обновление статистики Start
Общий таймаут Выход по ошибке

Машина состояний на стороне STK500 (работающая в firmware управляющего контроллера MCU), которая принимает и обрабатывает пакеты от хоста, реализована подобным образом. Отличие только в том, что на приеме не отслеживается общий таймаут. Общий период таймаута отсчитывается от момента, когда команда была отправлена, до полного поступления ответа. Общий период таймаута составляет 200 мс для команды CMD_SIGN_ON command, 5 секунд для команд CMD_READ/PROGRAM_FLASH/EEPROM, и 1 секунда для всех других команд.

[5 Команды]

Команды STK500 отправляются в части сообщения MESSAGE_BODY (см. раздел 3). Эта секция описывает все команды, которые могут поступить для STK500, и все возможные ответы, которые могут прийти хосту на эту команду. В основном все режимы программирования используют одинаковые команды протокола, но с ними отправляются разные параметры для разных режимов программирования - чтобы избежать излишних накладных расходов в обработке слоя протокола.

Для всех команд STK500 вернет ID ответа (answer ID) такой же, как был ID команды (command ID). Первый байт в команде всегда является идентификатором команды (command ID), а первый байт в ответе всегда идентификатор ответа (answer ID).

5.1 Основные команды (General Commands)

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

5.1.1 CMD_SIGN_ON

Эта команда возвращает уникальную строку подписи (сигнатуру) для STK500 или AVRISP, которые имеют эту реализацию протокола. Сигнатура будет "STK500_2" или "AVRISP_2".

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

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

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

Поле Размер Значения Описание
Answer ID 1 байт CMD_SIGN_ON Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK
Signature length 1 байт 8 Длина строки сигнатуры.
8 байт "STK500_2" Строка сигнатуры (не null-terminated, т. е. не ASCIIZ, без завершающего нулевого байта).

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

Поле Размер Значения Описание
Answer ID 1 байт CMD_SIGN_ON Идентификатор ответа на команду.
Status 1 байт STATUS_CMD_OK
Signature length 1 байт 8 Длина строки сигнатуры.
8 байт "AVRISP_2" Строка сигнатуры (не null-terminated, т. е. не ASCIIZ, без завершающего нулевого байта).

5.1.2 CMD_SET_PARAMETER

Хост может установить множество параметров в STK500. См. раздел 5.7 Параметры для описания каждого параметра. Все параметры являются однобайтными значениями.

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

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

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

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

5.1.3 CMD_GET_PARAMETER

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

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

Поле Размер Значения Описание
Command ID 1 байт CMD_GET_PARAMETER Идентификатор команды.
Parameter ID 1 байт См. раздел 5.7 Параметры. Идентификатор запрашиваемого параметра.

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

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

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

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

5.1.4 CMD_OSCCAL

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

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

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

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

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

5.1.5 CMD_LOAD_ADDRESS

Эта команда загружает адрес в STK500. Далее поступят команды Program Flash, Read Flash, Program EEPROM или Read EEPROM, которые будут работать с адресом, установленным этой командой. Команда CMD_LOAD_ADDRESS используется для всех режимов программирования. Все вышеперечисленные команды, которые читают и записывают память, автоматически инкрементируют внутренний счетчик адреса STK500, так что команду CMD_LOAD_ADDRESS нужно вызвать только один раз.

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

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

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

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

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

5.1.6 CMD_FIRMWARE_UPGRADE

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

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

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

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

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

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

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

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

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

5.2.1 CMD_ENTER_PROGMODE_ISP

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

Таблица 5-15. Формат команды 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 байт XML: pollValue Значение задержки опроса:
0x53 для AVR, 0x69 для AT89xx.
pollIndex 1 байт XML: pollIndex Начальный адрес, принятый байт:
0 нет опроса (no polling), 3 AVR, 4 AT89xx.
cmd1 1 байт Передаваемый байт 1 команды.
cmd2 1 байт Передаваемый байт 2 команды.
cmd3 1 байт Передаваемый байт 3 команды.
cmd4 1 байт Передаваемый байт 4 команды.

Примечание: параметр pollValue показывает, после какого переданного через SPI байта нужно ожидать ответного байта, так как интерфейс SPI реализован двунаправленно (один байт выходит, и вместе с этим приходит другой байт).

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

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

5.2.2 CMD_LEAVE_PROGMODE_ISP

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

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

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

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

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

5.2.3 CMD_CHIP_ERASE_ISP

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

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

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

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

5.2.4 CMD_PROGRAM_FLASH_ISP

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

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

Поле Размер Значения Описание
Command ID 1 байт CMD_PROGRAM_FLASH_ISP Идентификатор команды.
NumBytes 2 байта Количество программируемых байт, старший байт MSB идет первым.
mode 1 байт XML: mode Байт режима (разъяснен ниже).
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 байт данных.

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

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

5.2.4.1 Описание байта режима (Mode byte)

Параметр mode важен, так как он определяет, как эта команда работает. Назначение битов в байте mode показано в таблице 5-23.

Таблица 5-23. Биты в байте режима.

№ бита Описание Режим
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
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) обрабатывается STK500, так что оставьте этот бит очищенным.

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

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

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

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

5.2.5 CMD_READ_FLASH_ISP

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

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

Поле Размер Значения Описание
Command ID 1 байт CMD_READ_FLASH_ISP Идентификатор команды.
NumBytes 2 байта XML: blockSize Общее количество байт для чтения, старший байт MSB идет первым.
cmd1 1 байт Первый байт команды чтения памяти программ (Read Program Memory). Бит выбора младший/старший (3-й бит) обрабатывается в firmware.

Таблица 5-25. Формат ответа, если CMD_READ_FLASH_ISP выполнилась.

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

Таблица 5-26. Формат ответа, если CMD_READ_FLASH_ISP не выполнилась.

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

5.2.6 CMD_PROGRAM_EEPROM_ISP

См. описание команды CMD_PROGRAM_FLASH_ISP.

5.2.7 CMD_READ_EEPROM_ISP

См. описание команды CMD_READ_FLASH_ISP.

5.2.8 CMD_PROGRAM_FUSE_ISP

Эта команда программирует фьюзы в target device.

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

Поле Размер Значения Описание
Command ID 1 байт CMD_PROGRAM_FUSE_ISP Идентификатор команды.
cmd1 1 байт Байт 1 команды.
cmd2 1 байт Байт 2 команды.
cmd3 1 байт Байт 3 команды.
cmd4 1 байт Байт 4 команды.

Примечание: cmd1, cmd2, cmd3 и cmd4 это 4 байта команды низкого уровня ISP, которая программирует фьюзы.

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

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

5.2.9 CMD_READ_FUSE_ISP

Эта команда читает фьюзы target device.

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

Поле Размер Значения Описание
Command ID 1 байт CMD_READ_FUSE_ISP Идентификатор команды.
RetAddr 1 байт XML: pollIndex Адрес возврата.
cmd1 1 байт Байт 1 команды.
cmd2 1 байт Байт 2 команды.
cmd3 1 байт Байт 3 команды.
cmd4 1 байт Байт 4 команды.

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

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

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

5.2.10 CMD_PROGRAM_LOCK_ISP

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

5.2.11 CMD_READ_LOCK_ISP

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

5.2.12 CMD_READ_SIGNATURE_ISP

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

5.2.13 CMD_READ_OSCCAL_ISP

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

5.2.14 CMD_SPI_MULTI

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

Таблица 5-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 к программатору.

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

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

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

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

5.3.1 CMD_ENTER_PROGMODE_PP

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

Таблица 5-33. Формат команды 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-34. Формат ответа (одинаковый для всех результатов).

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

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

Значения Описание
STATUS_CMD_OK Операция завершилась успешно.
STATUS_CMD_FAILED Операция завершилась с ошибкой.

5.3.2 CMD_LEAVE_PROGMODE_PP

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

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

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

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

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

5.3.3 CMD_CHIP_ERASE_PP

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

Таблица 5-38. Формат команды 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-39. Формат ответа (одинаковый для всех результатов).

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

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

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

5.3.4 CMD_PROGRAM_FLASH_PP

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

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

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

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

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

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

5.3.4.1 Описание байта режима (Mode byte)

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

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

Размер страницы Значение бит 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 STK500 ограничен), то этот бит может использоваться для применения 2 или большего количества команд для заполнения буфера страницы target device. Флаг переноса данных буфера во FLASH должен быть установлен в последней команде.

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

5.3.5 CMD_READ_FLASH_PP

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

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

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

Таблица 5-46. Формат ответа, если команда 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.3.6 CMD_PROGRAM_EEPROM_PP

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

5.3.7 CMD_READ_EEPROM_PP

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

5.3.8 CMD_PROGRAM_FUSE_PP

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

Таблица 5-47. Формат команды 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-48. Формат ответа.

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

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

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

5.3.9 CMD_READ_FUSE_PP

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

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

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

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

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

5.3.10 CMD_PROGRAM_LOCK_PP

См. CMD_PROGRAM_FUSE.

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

5.3.11 CMD_READ_LOCK_PP

См. CMD_READ_FUSE_PP.

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

5.3.12 CMD_READ_SIGNATURE_PP

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

5.3.13 CMD_READ_OSCCAL_PP

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

5.3.14 CMD_SET_CONTROL_STACK

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

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

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

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

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

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

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

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

5.4.1 CMD_ENTER_PROGMODE_HVSP

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

Таблица 5-54. Формат команды 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 Дополнительная задержка (в миллисекундах) между включением Vtg и переходом сброса в состояние лог. 1.
resetDelay2 1 байт XML: resetDelay2 Дополнительная задержка (в десятках микросекунд) между включением Vtg и переходом сброса в состояние лог. 1. Общая задержка получится RSTDELAY #1 (ms) + RSTDELAY #2 (us x 10).

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

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

5.4.2 CMD_LEAVE_PROGMODE_HVSP

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

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

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

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

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

5.4.3 CMD_CHIP_ERASE_HVSP

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

Таблица 5-58. Формат команды 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, то будет использоваться опрос.

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

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

5.4.4 CMD_PROGRAM_FLASH_HVSP

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

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

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

Таймаут опроса (в миллисекундах).

Data 1 1 байт Data 1 Данные 1
... ... ... ...
Data N 1 байт Data N Данные N

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

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

5.4.4.1 Описание байта режима (Mode byte)

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

Таблица 5-62. Конфигурация бит размера страницы (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 в STK500 ограничено), то эта возможность может использоваться для применения 2 или большего количества команд для заполнения буфера страницы target device. Флаг переноса данных во FLASH тогда должен быть установлен только в последней команде.

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

5.4.5 CMD_READ_FLASH_HVSP

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

XML путь: /AVRPART/ICE_SETTINGS/STK500_2/HvspReadFlash/

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

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

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

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

5.4.6 CMD_PROGRAM_EEPROM_HVSP

См. описание команды CMD_WRITE_FLASH_HVSP.

5.4.7 CMD_READ_EEPROM_HVSP

См. описание команды CMD_READ_FLASH_HVSP.

5.4.8 CMD_PROGRAM_FUSE_HVSP

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

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

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

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

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

5.4.9 CMD_READ_FUSE_HVSP

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

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

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

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

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

5.4.10 CMD_PROGRAM_LOCK_HVSP

См. описание команды CMD_PROGRAM_FUSE_HVSP.

Примечание: адрес нужен, но он игнорируется.

5.4.11 CMD_READ_LOCK_HVSP

См. описание команды CMD_READ_FUSE_HVSP.

Примечание: адрес нужен, но он игнорируется.

5.4.12 CMD_READ_SIGNATURE_HVSP

См. описание команды CMD_READ_FUSE_HVSP.

5.4.13 CMD_READ_OSCCAL_HVSP

См. описание команды CMD_READ_FUSE_HVSP.

5.5 Специальные ответы

Эти ответы не относятся к какой-то конкретной команде.

5.5.1 ANSWER_CKSUM_ERROR

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

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

Поле Размер Значения Описание
Command ID 1 байт ANSWER_CKSUM_ERROR Идентификатор ответа.
Status 1 байт ANSWER_CKSUM_ERROR Значение статуса, сигнализирующее об ошибке контрольной суммы.

5.6 Возвращаемые значения

Этот раздел подробно описывает все возможные возвращаемые значения, и что они означают.

5.6.1 Success (успех)

Таблица 5-70. Возвращаемое значение, сигнализирующее об успехе.

Значение Что означает
STATUS_CMD_OK Команда выполнилась успешно.

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

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

Таблица 5-71. Возвращаемые предупреждающие значения.

Значение Что означает
STATUS_CMD_TOUT Таймаут команды.
STATUS_RDY_BSY_TOUT Таймаут анализирования вывода готовности RDY/BSY. 
STATUS_SET_PARAM_MISSING Установка параметров устройства (Set Device Parameters) не была выполнена в процессе выполнения команды. 

5.6.3 Errors (ошибки)

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

Таблица 5-72. Возвращаемые значения ошибок.

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

5.7 Параметры

В таблице 5-73 показаны параметры, которые могут быть прочитаны и/или записаны командами CMD_GET_PARAM и CMD_SET_PARAM. В столбце R/W показано, к чему относится параметр (Read/Write, к чтению или к записи).

Таблица 5-73. Имеющиеся параметры.

Значение Что означает R/W
PARAM_BUILD_NUMBER_LOW Номер сборки (билд) firmware, младший байт. R
PARAM_BUILD_NUMBER_HIGH Номер сборки (билд) firmware, старший байт. R
PARAM_HW_VER Версия аппаратуры. R
PARAM_SW_MAJOR Номер версии firmware, байт мажор. R
PARAM_SW_MINOR Номер версии firmware, байт минор. R
PARAM_VTARGET Напряжение питания устройства, Target Voltage (Vtg). RW
PARAM_VADJUST Подстраиваемое опорное (AREF) напряжение. RW
PARAM_OSC_PSCALE Значение прескалера (предделитель) таймера генератора. RW
PARAM_OSC_CMATCH Значение регистра сравнения таймера генератора. RW
PARAM_SCK_DURATION Длительность тактового сигнала SCK интерфейса программирования ISP. RW
PARAM_TOPCARD_DETECT Детектирование установленной карты верхнего уровня. R
PARAM_STATUS Возвращает регистр статуса. R
PARAM_DATA Значение выводов данных (DATA pins), используемых в режиме программирования HVPP. R
PARAM_RESET_POLARITY Полярность сигнала сброса RESET. Определяет активный уровень сигнала сброса (сбрасывает лог. 0 или лог. 1). W
PARAM_CONTROLLER_INIT Инициализация контроллера. RW

5.7.1 PARAM_BUILD_NUMBER_LOW

Совместно параметры PARAM_BUILD_NUMBER_LOW и PARAM_BUILD_NUMBER_HIGH возвращают число, которое инкрементируется для каждой версии сборки (билда) firmware. Главным образом используется внутри ATMEL.

5.7.2 PARAM_BUILD_NUMBER_HIGH

См. PARAM_BUILD_NUMBER_LOW.

5.7.3 PARAM_HW_VER

Возвращает номер ревизии аппаратуры.

5.7.4 PARAM_SW_MAJOR

PARAM_SW_MAJOR и PARAM_SW_MINOR возвращают версию firmware.

5.7.5 PARAM_SW_MINOR

См. PARAM_SW_MAJOR.

5.7.6 PARAM_VTARGET

Этот параметр относится только к STK500, и не касается AVRISP. В STK500 есть управляемый источник питания (supply voltage) для target, который можно установить и мониторить через этот параметр. Значение параметра указано в вольтах умноженных на 10, так что, например, десятичное число 42 соответствует напряжению 4.2V. Напряжение VTARGET может быть настроено в диапазоне 0 .. 6V.

5.7.7 PARAM_VADJUST

Этот параметр относится только к STK500, и не касается AVRISP. В STK500 есть управляемый источник опорного напряжения (analog reference, AREF) который настраивается так же, как и управляемый источник питания supply voltage. AREF может быть установлено и может мониториться через параметр PARAM_ADJUST. Значение параметра Значение параметра указано в вольтах умноженных на 10, так что, например, десятичное число 42 соответствует напряжению 4.2V. Напряжение VADJUST может быть настроено в диапазоне 0 .. 6V.

5.7.8 PARAM_OSC_PSCALE

Этот параметр относится только к STK500, и не касается AVRISP. В STK500 есть программируемый генератор тактовой частоты (clock generator), используемый для подачи тактового сигнала на target device. Генератор реализован на TIMER2 управляющего MCU AT90S8535. Таймер работает в режиме переключения сигнала OC2 (Toggle OC2 line mode), при этом значение таймера очищается при совпадении значения таймера с заданным значением в регистре сравнения (событие compare match). Генерируемая частота зависит от значения параметров PARAM_OSC_PSCALE и PARAM_OSC_CMATCH. Следующий пример кода показывает, как firmware обрабатывает изменения в PARAM_OSC_PSCALE или PARAM_OSC_CMATCH:

// Останов Timer2
TCCR2 = 0x18;
// Инициализация значения счетчика
TCNT2 = 0xFF;
// Установка значения для сравнения (compare match value)
OCR2 = osc_cmatch;
// Установка прескалера и режима работы таймера
TCCR2 = (0x18 | (0x07 & osc_pscale));

Тактовая частота управляющего MCU (STK500 system clock) fsys = 7.37 МГц, что дает следующее выражение для получающейся генерируемой частоты, связывающее значения прескалера (prescaled clock, задается PARAM_OSC_PSCALE по таблице 5-74) и значение сравнения (compare value, PARAM_OSC_CMATCH):

f = prescaled clock / (compare value + 1) / 2

Таблица 5-74. Значение коэффициента деления прескалера.

Значение прескалера Тактовая частота на выходе прескалера
0 0
1 fsys
2 fsys/8
3 fsys/32
4 fsys/64
5 fsys/128
6 fsys/256
7 fsys/1024

Таким способом нельзя точно получить любое значение тактовой частоты. Программное обеспечение хоста (сейчас это AVR Studio или Atmel Studio) может вычислить значения прескалера (PARAM_OSC_PSCALE) и сравнения (PARAM_OSC_CMATCH) методом простого подбора, сканируя все возможные значения прескалера и сравнения для наилучшего совпадения с требуемой тактовой частотой.

5.7.9 PARAM_OSC_CMATCH

Этот параметр относится только к STK500, и не касается AVRISP. См. PARAM_OSC_PSCALE.

5.7.10 PARAM_SCK_DURATION

Когда используется интерфейс программирования ISP, то тактовая частота ISP (частота сигнала SCK шины SPI) не должна превышать частоты, которую поддерживает target device. Максимальная тактовая частота ISP зависит от тактовой частоты программируемого устройства, настроенного внутреннего делителя тактовой частоты и т. п.

STK500 и AVRISP поддерживают тактовые частоты ISP от 4 кГц до 1.8 МГц. Значение для PARAM_SCK_DURATION может быть найдено по следующему алгоритму:

#define T_STK500 135.63e-9
#define T_AVRISP 271.27e-9
#define B 12.0
unsigned char CalcSckDur(int freq)
{
   if (STK500)
   {
      if (freq >= 1843200)
         sck_dur = 0;
      else if (freq >= 460800)
         sck_dur = 1;
      else if (freq >= 115200)
         sck_dur = 2;
      else if (freq >= 57600)
         sck_dur = 3;
      else
         sck_dur = ceil(1/(2 * B * freq * T_STK500) - 10/B);
   }
   else // if (AVRISP)
   {
      if (freq >= 921600)
         sck_dur = 0;
      else if (freq >= 230400)
         sck_dur = 1;
      else if (freq >= 57600)
         sck_dur = 2;
      else if (freq >= 28800)
         sck_dur = 3;
      else
         sck_dur = ceil(1/(2 * B * freq * T_AVRISP) - 10/B);
   }
   return __min(254, sck_dur); // 255 является недопустимым значением
}

5.7.11 PARAM_TOPCARD_DETECT

Этот параметр относится только к STK500, и не касается AVRISP. К STK500 могут быть подключены карты расширения (expansion cards, карта верхнего уровня, topcards, дочерняя плата). Каждый тип карты имеет идентификатор схемы (id circuitry), так что STK500 может определить, какой тип карты был установлен. Используются следующие идентификаторы (ID):

Таблица 5-75. Значения идентификаторов плат расширения.

Карта ID
STK501 0xAA
STK502 0x55
STK503 0xFA
STK504 0xEE
STK505 0xE4
STK520 0xDD

5.7.12 PARAM_DATA

Этот параметр относится только к STK500, и не касается AVRISP. Параметр возвращает значение коннектора PROG DATA, используемого для высоковольтного параллельного программирования (High-Volt Parallel Programming).

5.7.13 PARAM_RESET_POLARITY

И STK500, и AVRISP оба могут программировать семейства микроконтроллеров AT90 (AVR) и AT89 (8051). Эти семейства имеют разные полярности сигнала сброса RESET (ножка сброса микроконтроллера). Для AVR активный уровень лог. 0, тогда как для AT89 активный уровень лог. 1. Этот параметр устанавливает полярность сигнала сброса. Установите параметр в 1, когда программируются микроконтроллеры AVR, и в 0, когда программируются AT89.

Примечание: STK500 и AVRISP сохраняют этот параметр в EEPROM, так что он будет доступен при следующем включении питания программатора. Для STK500 полярность сигнала сброса от кнопки RESET также меняется этим параметром.

5.7.14 PARAM_CONTROLLER_INIT

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

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

Одно из главных улучшений версии 2.0 протокола STK500 - возможность описать все детали алгоритмов программирования. Набор параметров относится к определенному устройству AVR, и эти параметры находятся в XML-файле описания чипа (XML part description file). Ниже показано описание параметров STK500, которые можно найти в файле XML, специфичном для устройства. После установки AvrStudio 4 все файлы *.xml можно найти в папке "\Program Files\Atmel\AVR Tools\PartDescriptionFiles\".

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.

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

Этот раздел содержит примеры - как подключиться к STK500 со стороны компьютера (PC Frontend), и как прочитать сигнатуру из устройства. См. раздел 5 Команды для описания команд и параметров.

7.1 Подключение (Connect)

Последовательность команд и параметров, отправляемая из AvrStudio в STK500 для подключения перечислена ниже.

• CMD_SIGN_ON
• CMD_GET_PARAMETER, PARAM_TOPCARD_DETECT
• CMD_GET_PARAMETER, PARAM_HW_VER
• CMD_GET_PARAMETER, PARAM_SW_MAJOR
• CMD_GET_PARAMETER, PARAM_SW_MINOR

7.2 Чтение сигнатуры (Read Signature)

7.2.1 Режим программирования в системе ISP (In System Programming)

Ниже приведена последовательность команд и параметров, отправляемая от AvrStudio к STK500, чтобы прочитать сигнатуру устройства через ISP. Обратите внимание, что для выполнения этого нужно подключить к STK500 программируемое устройство (target device).

• CMD_GET_PARAMETER, PARAM_TOPCARD_DETECT
• CMD_GET_PARAMETER, PARAM_CONTROLLER_INIT
• CMD_SET_PARAMETER, PARAM_CONTROLLER_INIT
• CMD_SET_PARAMETER, PARAM_RESET_POLARITY
• CMD_ENTER_PROGMODE_ISP
• CMD_READ_SIGNATURE_ISP
• CMD_READ_SIGNATURE_ISP
• CMD_READ_SIGNATURE_ISP
• CMD_LEAVE_PROGMODE_ISP

7.2.2 Высоковольтное программирование (High Voltage Programming)

Ниже приведена последовательность команд и параметров, отправляемая от AvrStudio к STK500, чтобы прочитать сигнатуру устройства через High Voltage Programming. Имейте в виду - программируемое устройство должно быть подключено. Эта последовательность выполняется как для High Voltage Parallel Programming, так и для High Voltage Serial Programming.

• CMD_GET_PARAMETER, PARAM_TOPCARD_DETECT
• CMD_GET_PARAMETER, PARAM_CONTROLLER_INIT
• CMD_SET_CONTROL_STACK
• CMD_GET_PARAMETER, PARAM_CONTROLLER_INIT
• CMD_ENTER_PROGMODE_PP (_HVSP)
• CMD_READ_SIGNATURE_PP (_HVSP)
• CMD_READ_SIGNATURE_PP (_HVSP)
• CMD_READ_SIGNATURE_PP (_HVSP)
• CMD_LEAVE_PROGMODE_PP (_HVSP)

7.3 Лог обмена данными с STK500 (Communication Logging)

Чтобы подробнее рассмотреть работу протокола и получить примеры, можно настроить вывод протокола обмена (между AvrStudio и STK500) в текстовый файл лога. Это делается через добавление ключа реестра (register key) в реестр Windows. Процедура по шагам:

1. Откройте реестр, введя команду "regedit":

AVR068-run-regedit-dialog-box-fig71

Рис. 7-1. Запуск редактора реестра с помощью диалогового окна "Run" (кнопка Пуск -> Выполнить...).

2. Перейдите к узлу реестра HKEY_CURRENT_USER\Software\Atmel\AVRTools\STK500\
3. Создайте новое строковое значение String Value (правый клик -> New -> String Value) с именем "LogFilePath".
4. Введите данные для полного пути файла лога, например "c:\STK500Com.txt" (правый клик на LogFilePath -> Modify -> введите путь до файла лога). Эта процедура показана на рис. 7-2.

AVR068-regedit-edit-string-dialog-box-fig72

Рис. 7-2. Окно диалога "Edit String" редактора реестра regedit.

После редактирования реестра запустите AvrStudio, и запустите диалог программирования (STK500 Programming Dialog). Все отправляемы в STK500 команды теперь будут записываться в текстовый файл, который был настроен в реестре. Содержимое файла будет выглядеть примерно так:

AVR068-example-log-file-fig73

Рис. 7-3. Пример содержимого файла лога.

Примечания:
(1). Это идентификатор команды (Command ID), здесь 0x03, что означает CMD_GET_PARAMETER.
(2). Это идентификатор параметра (Parameter ID), здесь 0x9A, что означает PARAM_TOPCARD_DETECT.

[Ссылки]

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

 

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


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

Top of Page