Здесь приведен перевод апноута 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\".
Рис. 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":
Рис. 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.
Рис. 7-2. Окно диалога "Edit String" редактора реестра regedit.
После редактирования реестра запустите AvrStudio, и запустите диалог программирования (STK500 Programming Dialog). Все отправляемы в STK500 команды теперь будут записываться в текстовый файл, который был настроен в реестре. Содержимое файла будет выглядеть примерно так:
Рис. 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. |