Программирование AVR AVR067: протокол JTAGICE mkII Wed, November 06 2024  

Поделиться

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

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


AVR067: протокол JTAGICE mkII Печать
Добавил(а) microsin   

Здесь приведен перевод апноута Atmel "AVR067: JTAGICE mkII Communication Protocol" [1]. Описывается протокол обмена между средой разработки AVR Studio® (фронтэнд) и аппаратным отладчиком (эмулятором) JTAGICE mkII [2]. Затрагиваются следующие темы:

• Команды, которые отправляются в JTAGICE mkII из среды разработки AVR Studio

• Ответы, которые JTAGICE mkII отправляет обратно в AVR Studio
• Конфигурируемые параметры
• Различные типы памяти
• Специальные символы (Special Characters) и форматы пакета (Packet Formats) для синхронизации пакетов (Packet Synchronization) и для управления ошибками (Error Control)
• Поддержка точек останова (Break Point) в JTAGICE mkII (только для устройств tinyAVR / megaAVR)

Назначение этого документа - разрешить сторонним фирмам разрабатывать свое собственное программное обеспечение (фронтэнд, интерфейс пользователя), которое может использовать эмулятор JTAGICE mkII.

JTAGICE-mkII.JPG JTAGICE-mkII-top-IMG_0438.JPG JTAGICE-mkII-bottom-IMG_0441.JPG

[2 Теория функционирования]

Протокол обмена работает в окружении master – slave, ведущее устройство - ведомое устройство. Среда разработки AVR Studio и компьютер, на котором она работает, является master, и аппаратный отладчик JTAGICE mkII работает как slave.

JTAGICE mkII slave всегда работает в одном из 3 перечисленных состояний:

1. STOPPED (остановлено)
2. RUNNING (выполняется программа на отлаживаемом устройстве AVR)
3. PROGRAMMING (выполняется программирование памяти отлаживаемого устройства AVR)

Некоторые команды могут быть выполнены только когда slave находится в режиме STOPPED, другие могут работать во всех режимах. Подробности описаны для каждой отдельной команды.

События (Events) - это сообщения, отправляемые slave без предварительного поступления команды от master.

Последовательный обмен данными асинхронен по своей природе, также работает и протокол JTAGICE mkII. Все команды и ответы имеют токены и проверки CRC, добавленные для того, чтобы разрешить приемнику проверить на правильность принятое сообщение.

Этот транспортный протокол гарантирует, что каждый пакет будет корректно принят и проверен, но при этом не гарантируется, что будет принят каждый пакет (т. е. пакеты, которые прошли с ошибкой, будут отброшены). Повторная передача и пропуск пакетов поддерживается на уровне приложения (отлаживаемом устройстве AVR), не на уровне передачи (transmission layer). Когда для соединения с JTAGICE mkII используется интерфейс USB, то повторная передача поддерживается автоматически еще на аппаратном уровне (hardware layer) интерфейса. Это неверно для интерфейса соединения RS232.

Протокол основан на порядке байт "Little Endian", т. е. для адресов памяти младший значащий байт (LSB) всегда будет передан первым.

2.1 Соединение через USB и RS-232

2.1.1 RS-232

При включении питания JTAGICE mkII скорость и параметры RS-232 устанавливается в значение 19200 bps, 8N1, no handshake. Однако при использовании команды Set Parameter и параметра Baud rate можно изменить скорость обмена.

Прим. переводчика: при использовании RS-232 к эмулятору нужно подключить внешний источник питания.

2.1.2 USB

JTAGICE mkII имеет порт USB, который может обеспечить соединение USB full-speed (12 Mbps). В дополнение к передаче данных, кабель USB может предоставить и питание для эмулятора, так что не требуется внешний источник питания. После прохождения энумерации в операционной системе (это стандартная процедура распознавания устройств USB при подключении) эмулятор может потреблять до 500mA мощности от хаба USB.

2.1.3 Конфигурация USB (USB Configuration)

JTAGICE mkII имеет 1 конфигурацию с 1 интерфейсом, содержащим две конечные точки трансфера данных типа bulk. Дескрипторы USB можно найти в секции 7. Сообщения JTAGICE mkII передаются через конечные точки bulk. Максимальный размер пакета показан в дескрипторах конечной точки.

В дополнение к механизму фреймов, предоставленных форматом фрейма JTAGICE mkII, эмулятор использует короткие пакеты (на обоих IN и OUT конечных точках) чтобы показать, какой пакет последний в фрейме JTAGEICE mkII. Драйвер хоста должен также поддерживать короткие пакеты.

Прим. переводчика: bulk, конфигурация, интерфейс, конечные точки IN и OUT, дескрипторы, хост - это чисто термины USB.

[3 Формат сообщений (Message Format)]

Все команды, ответы и события используют один и тот же формат сообщения: < MESSAGE_START, SEQUENCE_NUMBER, MESSAGE_SIZE, TOKEN, MESSAGE_BODY, CRC >.

Таблица 3-1 Параметры сообщений.

Имя параметра Назначение Формат
MESSAGE_START Символ с кодом ASCII 27 (управляющий символ ESC) [BYTE]
SEQUENCE_NUMBER Число, которое увеличивается на 1 с каждым отправленным сообщением. После достижения максимального значения 0xFFFE переходит в 0. Значение 0xFFFF зарезервировано для (асинхронных) событий EVENTS. [BYTE]*2, младший байт LSB идет первым
MESSAGE_SIZE Размер тела сообщения в байтах. [BYTE]*4,младший байт LSB идет первым
TOKEN Токен, символ ASCII 14, который делает протокол более удобным для работы. [BYTE]
MESSAGE_BODY Тело сообщения. [BYTE]*MESSAGE_SIZE
CRC Контрольная сумма всего сообщения, включая MESSAGE_START и MESSAGE_BODY [BYTE]*2

Первый байт в теле сообщений всегда MESSAGE_ID (идентификатор сообщения). Размер MESSAGE_BODY как минимум 1 байт.

• Сообщения используют MESSAGE_ID в диапазоне 0x01 .. 0x3F
• Сообщения об успехе используют MESSAGE_ID в диапазоне 0x80 .. 0x9F
• Сообщения о неудаче используют MESSAGE_ID в диапазоне 0xA0 .. 0xBF
• События используют MESSAGE_ID в диапазоне 0xE0 .. 0xFF
• Сообщение начинается с символа ASCII 27 (0x1B), это не может быть изменено.
• Токен является символом ASCII 14 (0x0E), это не может быть изменено.

[4 Парсинг, обработка сообщений (Message parsing)]

Сообщения так или иначе должны быть прочитаны машиной состояний как поток байт. Каждый раз, когда встречается символ MESSAGE_START, машина состояний начинает на декодирование сообщения, и либо завершает обработку сообщения, либо поток байт отбрасывается, если было нарушено правило обработки сообщения.

Сообщения могут поступать в любом порядке, и к их поступлению не предъявляется никаких требований по необходимому периоду времени между командами. В эмуляторе реализована очередь обработки сообщений (message queue), где машина состояний делает парсинг и проверку полного сообщения, которое было последовательно принято и помещено в очередь сообщений. Эмулятор выполняет сообщения в порядке, в каком он их находит в очереди. Ответы на сообщения даются тогда, когда сообщение обработано эмулятором.

Для передач через RS232 и USB используется одна и та же машина состояний. Подпрограмма прерывания на процессоре управления обменом в JTAGICE mkII читает соответствующий UART и помещает приходящие данные в буфер FIFO, находящийся в SRAM. Машина состояний читает данные оттуда и делает их парсинг.

4.2 Общая реализация машины состояний

Рис. 4-1. Диаграмма состояний.

AVR067-message-parsing-state-diagram-fig41

Пояснение к диаграмме состояний. E: означает EVENT, событие. C: означает условие, Condition. A: означает действие, Action. Get Sequence Number означает выборка SEQUENCE_NUMBER. Get Message Size означает выборку MESSAGE_SIZE. Get Token означает выборку TOKEN. Get Data означает выборку данных.

Таблица 4-1. Таблица состояний. Серые поля представляют сообщения с ошибкой (message failed, при этом управление переходит в точку НАЧАЛО), а в белых показаны нормальные сообщения (message valid).

Текущее состояние Событие (E: EVENT) Условие (C) Действие (A) Следующее состояние
НАЧАЛО Чтение символа из входного буфера Символ == ASCII 27 Запуск отсчета таймаута Выборка
SEQUENCE_NUMBER
Чтение символа из входного буфера Символ != ASCII 27 нет действий НАЧАЛО
Выборка
SEQUENCE_NUMBER
Чтение символа из входного буфера Счетчик количества байт == 2 Запуск отсчета таймаута Выборка
MESSAGE_SIZE
Чтение символа из входного буфера Счетчик количества байт < 2 Запуск отсчета таймаута Выборка
SEQUENCE_NUMBER
Таймаут нет действий Обновление статистики сообщения НАЧАЛО
Выборка MESSAGE_SIZE Чтение символа из входного буфера Счетчик количества байт < 4 Запуск отсчета таймаута Выборка MESSAGE_SIZE
Чтение символа из входного буфера Счетчик количества байт == 4 Запуск отсчета таймаута. Вычисление MESSAGE_SIZE Выборка
TOKEN
Таймаут нет действий Обновление статистики сообщения НАЧАЛО
Выборка
TOKEN
Чтение символа из входного буфера Символ == ASCII 14 Запуск отсчета таймаута Выборка
данных
Чтение символа из буфера Символ != ASCII 14 Обновление статистики сообщения. Останов отсчета таймаута НАЧАЛО
Таймаут нет действий Обновление статистики сообщения. НАЧАЛО
Выборка
данных
Чтение символа из входного буфера Количество символов == MESSAGE_SIZE Запуск отсчета таймаута Выборка
CRC
Чтение символа из входного буфера Количество символов < MESSAGE_SIZE Запуск отсчета таймаута Выборка
данных
Таймаут нет действий Обновление статистики сообщения НАЧАЛО
Выборка
CRC
Чтение символа из входного буфера Счетчик количества байт == 2
CRC OK
Вычисление CRC. Обновление статистики сообщения. Выполнение команды. Останов отсчета таймаута. НАЧАЛО
Чтение символа из входного буфера. Счетчик количества байт == 2.
CRC с ошибкой
Вычисление CRC. Обновление статистики сообщения. Останов отсчета таймаута. НАЧАЛО
Чтение символа из входного буфера. Счетчик количества байт < 2 Запуск отсчета таймаута. Выборка
CRC
Таймаут нет действий Обновление статистики сообщения НАЧАЛО

[5 Команды и ответы]

5.1 Команды master

5.1.1 Sign off (CMND_SIGN_OFF: 0x00)

Master выдает эту команду, когда он прерывает сессию отладки.
Состояние slave: может быть любым.

Таблица 5-1. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 0x01
TOKEN ASCII 14
MESSAGE_BODY отсутствует
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-2. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x00 (CMND_SIGN_OFF) [BYTE]

Таблица 5-3. Ответ.

Имя параметра Описание
RSP_OK Команда выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.

5.1.2 Check if Emulator is present (CMND_GET_SIGN_ON: 0x01)

Master выдает эту команду, чтобы увидеть - подключен ли, и работает ли эмулятор, или нет.
Состояние slave: может быть любым.

Таблица 5-4. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 0x01
TOKEN ASCII 14
MESSAGE_BODY отсутствует
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-5. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x01 (CMND_GET_SIGN_ON) [BYTE]

Таблица 5-6. Ответ.

Имя параметра Описание
RSP_SIGN_ON Содержит строку подписи для JTAGICE mkII. Должны быть решены проблемы совместимости с другими эмуляторами.
Sign on (RSP_SIGN_ON : 0x86) 
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.
Мусор В случае использования для канала обмена последовательного порта RS232 может быть ошибка аппаратуры или ошибка в конфигурации UART (неправильно установленная скорость обмена, ошибка в установке бита четности и т. д.).
Если используется обмен через USB, то это означает ошибку аппаратуры.

5.1.3 Write Emulator Parameter (CMND_SET_PARAMETER: 0x02)

Эмулятор содержит некоторое количество настроечных параметров. Эта команда используется для записи всех параметров. Идентификатор параметра (parameter ID) указывает, какой параметр будет записан.
Состояние slave: зависит от параметра.

Таблица 5-7. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Равно размеру поля MESSAGE_BODY в байтах.
TOKEN ASCII 14
MESSAGE_BODY см. далее
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PARAMETER_ID, PARAMETER_VALUE >

Таблица 5-8. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x02 (CMND_SET_PARAMETER) [BYTE]
PARAMETER_ID Идентификатор параметра. [BYTE]
PARAMETER_VALUE Значение параметра, может быть любого размера. [BYTE] * N, младший байт идет первым, если это применимо.

Таблица 5-9. Ответ.

Имя параметра Описание
RSP_OK Параметр записан успешно.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_PARAMETER JTAGICE mkII не поддерживает выбранный параметр (например, может быть из-за несовместимости текущей версии AVR Studio и firmware JTAGICE mkII).
RSP_ILLEGAL_VALUE Предоставленное значение ошибочное или выходит за пределы допустимого диапазона.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

Описание параметров можно найти в последней секции этого документа.

5.1.4 Read Emulator Parameter (CMND_GET_PARAMETER: 0x03)

Эта команда позволяет вернуть значение параметра обратно в AVR Studio. Описание параметров можно найти в последней секции этого документа.
Состояние slave: зависит от параметра.

Таблица 5-10. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 0x02
TOKEN ASCII 14
MESSAGE_BODY Определено ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PARAMETER_ID >

Таблица 5-11. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x03 (CMND_GET_PARAMETER) [BYTE]
PARAMETER_ID Идентификатор запрашиваемого параметра. [BYTE]

Таблица 5-12. Ответ.

Имя параметра Описание
RSP_PARAMETER Запрошенный параметр возвращен.
Возврат параметра (RSP_PARAMETER : 0x81). 
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_PARAMETER JTAGICE mkII не поддерживает выбранный параметр (например, может быть из-за несовместимости текущей версии AVR Studio и firmware JTAGICE mkII).
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.5 Write Memory (CMND_WRITE_MEMORY: 0x04)

Записать блок памяти по любому адресу в любую область памяти.
Состояние slave: STOPPED.

Таблица 5-13. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер поля MESSAGE_BODY в байтах.
TOKEN ASCII 14
MESSAGE_BODY Определено ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, MEMORY_TYPE, BYTE_COUNT, START_ADDRESS, DATA >

Таблица 5-14. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x04 (CMND_WRITE_MEMORY) [BYTE]
MEMORY_TYPE Тип памяти (FLASH, SRAM, EEPROM, ...) [BYTE]
BYTE_COUNT Количество байт, которое должно быт записано. [BYTE] * 4, младший байт LSB идет первым
START_ADDRESS Начальный адрес памяти. [BYTE] * 4, младший байт LSB идет первым
DATA Данные. [BYTE] * BYTE_CNT

Определения и значения параметров различных типов памяти можно найти в секции "Типы памяти".

Таблица 5-15. Ответ.

Имя параметра Описание
RSP_OK Память записана успешно.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_MEMORY_TYPE JTAGICE mkII не поддерживает выбранный тип памяти.
RSP_ILLEGAL_MEMORY_RANGE Запись в память вышла за пределы выбранной области памяти.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена для текущего состояния MCU (отлаживаемого микроконтроллера AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.6 Read Memory (CMND_READ_MEMORY: 0x05)

Чтение блока памяти по любому адресу из любой области памяти.
Состояние slave: STOPPED.

Таблица 5-16. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 10 байт
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MEMORY_TYPE, BYTE_COUNT, START_ADDRESS >

Таблица 5-17. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x05 (CMND_READ_MEMORY) [BYTE]
MEMORY_TYPE Тип памяти (FLASH, SRAM, EEPROM, ...) [BYTE]
BYTE_COUNT Количество байт для чтения. [BYTE] * 4, младший байт LSB идет первым
START_ADDRESS Начальный адрес памяти. [BYTE] * 4, младший байт LSB идет первым

Определения и значения параметров различных типов памяти можно найти в секции "Типы памяти".

Таблица 5-18. Ответ.

Имя параметра Описание
RSP_MEMORY Память прочитана успешно.
Чтение памяти (RSP_MEMORY : 0x82) 
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_MEMORY_TYPE JTAGICE mkII не поддерживает выбранный тип памяти.
RSP_ILLEGAL_MEMORY_RANGE Запись в память вышла за пределы выбранной области памяти.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена для текущего состояния MCU (отлаживаемого микроконтроллера AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.7 Write Program Counter (CMND_WRITE_PC: 0x06)

Записывает счетчик команд AVR.
Состояние slave: STOPPED.

Таблица 5-19. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 5
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PROGRAM_COUNTER >

Таблица 5-20. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x06 (CMND_WRITE_PC) [BYTE]
PROGRAM_COUNTER Значение для счетчика команд. [BYTE]

Таблица 5-21. Ответ.

Имя параметра Описание
RSP_OK Счетчик команд записан успешно.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена для текущего состояния MCU (отлаживаемого микроконтроллера AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.8 Read Program Counter (CMND_READ_PC: 0x07)

Чтение счетчика команд AVR.
Состояние slave: STOPPED.

Таблица 5-22. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-23. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x07 (CMND_READ_PC) [BYTE]

Таблица 5-24. Ответ.

Имя параметра Описание
RSP_PC Возвращено значение счетчика команд.
Чтение счетчика команд (RSP_PC : 0x84) 
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена для текущего состояния MCU (отлаживаемого микроконтроллера AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.9 Start Program Execution (CMND_GO: 0x08)

Запускает выполнение программы начиная с текущего адреса, хранящегося в счетчике команд.
Состояние slave: STOPPED или RUNNING. Когда команда CMND_GO выполняется, то состояние эмулятора либо изменяется на RUNNING, либо остается без изменения.

Таблица 5-25. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-26. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x08 (CMND_GO) [BYTE]

Таблица 5-27. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.10 Single Step (CMND_SINGLE_STEP: 0x09)

Запускает выполнение одного шага (одной инструкции) с текущего адреса, хранящегося в счетчике команд.
Состояние slave: STOPPED. После выполнения slave находится в состоянии RUNNING до следующей точки останова. Затем (slave) выдает событие останова (Break Event), и slave возвращается в состояние STOPPED.

Таблица 5-28. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 3
TOKEN ASCII 14
MESSAGE_BODY Флаг высокого уровня или низкого уровня, см. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, FLAG >

Таблица 5-29. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x09 (CMND_SINGLE_STEP) [BYTE]
FLAG 0x01 : Низкий уровень (шаги по инструкциям ассемблера).
0x02 : Высокий уровень (шаги по операторам языка высокого уровня).
[BYTE]
STEP_MODE 0x00: STEP_OVER (шаг без захода в подпрограмму).
0x01: STEP_INTO (шаг с заходом в тело подпрограммы).
0x02: STEP_OUT (шаг с выходом из подпрограммы).
[BYTE]

Таблица 5-30. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.11 Stop Program Execution (CMND_FORCED_STOP: 0x0A)

Останавливает выполнение программы.
Состояние slave: STOPPED или RUNNING. После выполнения команды slave переходит в состояние STOPPED.

Таблица 5-31. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 2 байта
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, MODE >

Таблица 5-32. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x0A (CMND_TORCED_STOP) [BYTE]
MODE 0x01 : Низкий уровень.
0x02 : Высокий уровень (останавливается на следующем операторе языка высокого уровня).
[BYTE]

Таблица 5-33. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.12 Reset User Program (CMND_RESET: 0x0B)

Эмулятор выполняет все действия по перезапуску выполнения программы.
Состояние slave: любое. Если до выполнения команды slave находился в состоянии RUNNING, то состояние будет изменено на STOPPED перед выполнением этой команды.

Таблица 5-34. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер тела сообщения (MESSAGE_BODY).
TOKEN ASCII 14
MESSAGE_BODY См. ниже. Флаг высокого уровня или низкого уровня. Высокий уровень обычно приводит к установке счетчика команд на начало тела функции main.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, FLAG >

Таблица 5-35. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x0B (CMND_RESET) [BYTE]
FLAG 0x01: Низкий уровень.
0x02: Высокий уровень (сброс, затем вход в main).
0x04: Сброс с запретом debugWire.
[BYTE]

Таблица 5-36. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.13 Set Device Descriptor (CMND_SET_DEVICE_DESCRIPTOR: 0x0C)

Передает все параметры, относящиеся к специфической настройке устройства.
Состояние slave: STOPPED.

Таблица 5-37. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер тела сообщения (MESSAGE_BODY).
TOKEN ASCII 14
MESSAGE_BODY Все параметры для настройки специфичного устройства.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PARAMETERS >

Таблица 5-38. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x0C (CMND_SET_DEVICE_DESCRIPTOR) [BYTE]
PARAMETERS Все параметры, требуемые для настройки устройства в чистом двоичном виде, идентичном дескриптору JTAGICE. [BYTE] * 298

Таблица 5-39. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.14 Erase Page SPM (CMND_ERASEPAGE_SPM: 0x0D)

Очищает страницу памяти FLASH целиком.
Состояние slave: STOPPED.

Таблица 5-40. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 5
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PAGE_ADDRESS >

Таблица 5-41. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x0D (CMND_ERASEPAGE_SPM) [BYTE]
PAGE_ADDRESS Адрес для очищаемой страницы. [BYTE] * 4, младший байт LSB идет первым

Таблица 5-42. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.15 Get Sync (CMND_GET_SYNC 0x0F)

Эта команда отправляется из AVR Studio для восстановления синхронизации с JTAGICE mkII, если синхронизация была потеряна.

Таблица 5-43. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-44. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x0F (CMND_GET_SYNC) [BYTE]

Таблица 5-45. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.16 Self test (CMND_SELFTEST: 0x10)

Заставляет JTAGICE mkII выполнить самотестирование и выдать обратно отчет для master.
Состояние slave: STOPPED.

Таблица 5-46. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер MESSAGE_BODY.
TOKEN ASCII 14
MESSAGE_BODY Параметры для самотестирования (выбор, что тестировать).
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:

Таблица 5-47. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x10 (CMND_SELFTEST) [BYTE]
FLAGS Флаги, идентифицирующие, какие тесты должны быть выполнены.
бит 7: внутренние тесты (SRAM, FIFO, ...)
бит 6: не используется
бит 5: не используется
бит 4: не используется
бит 3: детектор перемычки сброса STK500 (STK500 RESET JUMPER)
бит 2: JTAG PUSH PULL (проверка нагруженности JTAG)
бит 1: емкость на сигнале debugWire
бит 0: debugWire PUSH PULL (проверка нагруженности сигнала debugWire)
[BYTE]

Таблица 5-48. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.17 Set Breakpoint (CMND_SET_BREAK: 0x11)

Устанавливает точку останова (breakpoint). Аппаратные точки останова на устройствах megaAVR только с интерфейсом JTAG, и с программные точки останова (software breakpoints).
Состояние slave: STOPPED.

Таблица 5-49. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер MESSAGE_BODY.
TOKEN ASCII 14
MESSAGE_BODY Параметры для установки breakpoint (точка останова, см. формат ниже).
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, TYPE, NUMBER, ADDRESS, MODE >

Таблица 5-50. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x11 (CMND_SET_BREAK) [BYTE]
TYPE 0x01: точка останова на память программ (program memory breakpoint)
0x02: точка останова по данным (data breakpoint)
0x03: маска для data breakpoint
[BYTE]
NUMBER Номер точки останова, от 0x01 до 0x04. Поддерживается до 4 точек останова. Код 0x00 для программных точек останова (software breakpoint). [BYTE]
ADDRESS Адрес точки останова или значение маски. [BYTE] * 4, младший байт LSB идет первым
MODE 0x00: останов на чтении памяти
0x01: останов на записи в память
0x02: останов на чтении или записи
0x03: останов в программе
[BYTE]

Таблица 5-51. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_BREAKPOINT Точка останова с таким номером не существует, или не поддерживается в этом режиме.
Illegal breakpoint (RSP_ILLEGAL_BREAKPOINT: 0xA8)
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.18 Get Breakpoint (CMND_GET_BREAK: 0x12)

Используется хостом (AVR Studio) для чтения назад текущих установок breakpoint в JTAGICE mkII. Аппаратные точки останова на устройствах megaAVR только с интерфейсом JTAG, и с программные точки останова (software breakpoints).
Состояние slave: STOPPED.

Таблица 5-52. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 2
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, NUMBER >

Таблица 5-53. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x12 (CMND_GET_BREAK) [BYTE]
NUMBER Номер точки останова, от 0x01 до 0x04. Поддерживается до 4 точек останова. [BYTE]

Таблица 5-54. Ответ.

Имя параметра Описание
RSP_GET_BREAK Команда была выполнена, точка останова возвращена.
Чтение breakpoint (RSP_GET_BREAK: 0x83)
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_BREAKPOINT Точка останова не поддерживается в этом режиме.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.19 Chip erase (CMD_CHIP_ERASE: 0x13)

Используется для выполнения полной очистки чипа (chip erase). Только устройства megaAVR с интерфейсом JTAG. Устройства с интерфейсом debugWire автоматически очищают страницы FLASH перед программированием. Устройства XMEGA используют специально выделенную функцию XMEGA Erase, которая описана далее в этом документе.

Таблица 5-55. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-56. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x13 (CMND_CHIP_ERASE) [BYTE]

Таблица 5-57. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.20 Enter programming mode (CMND_ENTER_PROGMODE: 0x14)

Вход в режим программирования.

Таблица 5-58. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-59. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x14 (CMND_ENTER_PROGMODE) [BYTE]

Таблица 5-60. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_JTAG_ID JTAG ID не соответствует целевому отлаживаемому устройству (target device).
Illegal JTAG ID (RSP_ILLEGAL_JTAG_ID: 0xA9)
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.21 Leave programming mode (CMND_LEAVE_PROGMODE: 0x15)

Выход из режима программирования.

Таблица 5-61. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-62. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x15 (CMND_LEAVE_PROGMODE) [BYTE]

Таблица 5-63. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.22 Clear Breakpoint (CMND_CLR_BREAK: 0x1A)

Очистка точки останова. Аппаратные точки останова на устройствах megaAVR только с интерфейсом JTAG, и с программные точки останова (software breakpoints).
Состояние slave: STOPPED.

Таблица 5-64. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер MESSAGE_BODY
TOKEN ASCII 14
MESSAGE_BODY Параметры для конечной точки (см. формат ниже).
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, NUMBER, ADDRESS >

Таблица 5-65. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x1A (CMND_CLR_BREAK) [BYTE]
NUMBER Номер точки останова, от 0x01 до 0x04. Поддерживается до 4 точек останова. [BYTE]
ADDRESS Адрес точки останова (для программной точки останова, software breakpoint). [BYTE] * 4, младший байт LSB идет первым

Таблица 5-66. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_BREAKPOINT Точка останова с таким номером не существует, или не поддерживается в этом режиме.
Illegal breakpoint (RSP_ILLEGAL_BREAKPOINT: 0xA8)
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.23 Run to Address (CMND_RUN_TO_ADDR: 0x1C)

Запускает выполнение программы начиная с текущего адреса в счетчике команд до указанного адреса, который появится в счетчике команд.
Состояние slave: STOPPED. Когда команда выполнена, то состояние меняется на RUNNING.

Таблица 5-67. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 5
TOKEN ASCII 14
MESSAGE_BODY Адрес, значение счетчика команд, на котором произойдет останов.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, P.C. Address >

Таблица 5-68. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x1C (CMND_RUN_TO_ADDR) [BYTE]
Program Counter Адрес, где произойдет останов. [BYTE] * 4, младший байт LSB идет первым

Таблица 5-69. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.24 Universal SPI command (CMND_SPI_CMD: 0x1D)

Запускает универсальную команду SPI.
Состояние slave: STOPPED.

Прим. переводчика: возможно, эта команда используется только для установки фьюза разрешения debugWire, потому что в оригинальном даташите AVR067 явная ошибка: в таблице 5-71 почему-то стояло имя команды CMND_SPI_ENABLE_DW_FUSE.

Таблица 5-70. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 5
TOKEN ASCII 14
MESSAGE_BODY Данные команды SPI.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, COMMAND [4] >

Таблица 5-71. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x1D (CMND_SPI_CMD) [BYTE]
COMMAND 4 байта команды SPI [BYTE] * 4

Таблица 5-72. Ответ.

Имя параметра Описание
RSP_SPI_DATA Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.25 Clear event memory (CMND_CLEAR_EVENTS: 0x22)

Инструктирует JTAGICE mkII очистить память событий (event memory, для SW breakpoints, программных точек останова). Должна быть вызвана ПОСЛЕ установки описателя устройства, чтобы удостовериться в том, что будет очищено только требуемое количество event memory.

Таблица 5-73. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-74. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x22 (CMND_CLEAR_EVENTS) [BYTE]

Таблица 5-75. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии MCU (отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.26 Restore target (CMND_RESTORE_TARGET: 0x23)

Инструктирует JTAGICE mkII восстановить целевое устройство (target device, отлаживаемый микроконтроллер) в состояние, в котором он может свободно выполнять программу. Это должно быть сделано после завершения сессии отладки, перед отключением и перед запретом фьюза OCD (для JTAG). Команда делает следующее:

• Останавливает цель (Stop target)
• Заменяет SW breakpoint-ы оригинальными инструкциями
• Сбрасывает цель (Reset target)
• Запускает цель на выполнение программы (Run target)

Таблица 5-76. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-77. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x23 (CMND_RESTORE_TARGET) [BYTE]

Таблица 5-78. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии MCU (отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.27 Encapsulated ISP command (CMND_ISP_PACKET: 0x2F)

Используется для отправки в JTAGICE mkII любых команд программирования. Пакет ISP, совместимый со стандартным программатором AVRISP mkII [4], инкапсулируется (встраивается) в пакет JTAGICE mkII. Так что JTAGICE mkII работает с пакетом ISP точно так же, как и AVRISP mkII. Таблица 5-170 показывает команды ISP, которые поддерживаются в JTAGICE mkII. Для дополнительной информации по командам ISP см. [5].

Таблица 5-79. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE Размер MESSAGE_BODY
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, ISP_PACKET >

Таблица 5-80. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x2F (CMND_ISP_PACKET) [BYTE]
ISP_PACKET Инкапсулированные данные AVRISP [BYTE] * n

Таблица 5-81. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии MCU (отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

Таблица 5-170. Команды AVRISP mkII, которые поддерживает JTAGICE mkII.

Команда Назначение
CMD_SET_PARAMETER Устанавливает параметр
CMD_GET_PARAMETER Читает обратно значение параметра
CMD_OSCCAL Выполняет последовательность калибровки OSCCAL
CMD_LOAD_ADDRESS Загружает адреса для функций программирования
CMD_ENTER_PROGMODE_ISP Переводит target device (отлаживаемый микроконтроллер) в режим программирования
CMD_LEAVE_PROGMODE_ISP Выводит target из режима программирования
CMD_CHIP_ERASE_ISP Выполняет очистку памяти target device
CMD_PROGRAM_FLASH_ISP Программирует память FLASH на target device
CMD_READ_FLASH_ISP Читает память FLASH на target device
CMD_PROGRAM_EEPROM_ISP Программирует память EEPROM на target device
CMD_READ_EEPROM_ISP Читает память EEPROM на target device
CMD_PROGRAM_FUSE_ISP Программирует фьюзы на target device
CMD_READ_FUSE_ISP Читает фьюзы на target device
CMD_PROGRAM_LOCK_ISP Программирует биты защиты на target device
CMD_READ_LOCK_ISP Читает биты защиты на target device
CMD_READ_SIGNATURE_ISP Читает байты сигнатуры на target device
CMD_READ_OSCCAL_ISP Читает байт OSCCAL на target device
CMD_SPI_MULTI Обычная (generic) команда, используемая для выполнения команд ISP

5.1.28 Write JTAG Instruction (CMND_JTAG_INSTR: 0x24)

Записывает инструкцию JTAG в IR (Instruction Register).

Таблица 5-82. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 2
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, IR_VALUE >

Таблица 5-83. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x24 (CMND_JTAG_INSTR) [BYTE]
IR_VALUE Значение для записи в IR (Instruction Register) [BYTE]

Таблица 5-84. Ответ.

Имя параметра Описание
RSP_SCAN_CHAIN_READ Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.29 Write / read JTAG data (CMND_JTAG_DATA: 0x25)

Записывает и читает данные в / из JTAG DR (Data Register).

Таблица 5-85. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE N
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, BITS, DATA >

Таблица 5-86. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x25 (CMND_JTAG_DATA) [BYTE]
BITS Количество бит для записи / чтения [BYTE]
DATA Данные для записи в DR (Data Register) [BYTE] * 4

Таблица 5-87. Ответ.

Имя параметра Описание
RSP_SCAN_CHAIN_READ Команда была выполнена, данные возвращены.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.30 Write data to SAB (CMND_JTAG_SAB_WRITE: 0x28)

Записывает данные в AVR32 SAB.

Таблица 5-88. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 10
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, ADDRESS, DATA >

Таблица 5-89. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x28 (CMND_JTAG_SAB_WRITE) [BYTE]
ADDRESS SAB адрес для записи [BYTE] * 5
DATA Данные для записи в SAB [BYTE] * 4

Таблица 5-90. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_VALUE Команда предоставлена с неправильным значением величины.
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.31 Read SAB data (CMND_JTAG_SAB_READ: 0x29)

Читает данные из AVR32 SAB.

Таблица 5-91. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 6
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, ADDRESS >

Таблица 5-92. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x25 (CMND_JTAG_DATA) [BYTE]
ADDRESS SAB адрес для чтения [BYTE] * 5

Таблица 5-93. Ответ.

Имя параметра Описание
RSP_SCAN_CHAIN_READ Команда была выполнена, данные возвращены.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.32 JTAG data block read (CMND_JTAG_BLOCK_READ: 0x2C)

Читает блок данных из AVR32 SAB

Таблица 5-94. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 7
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, SIZE, ADDRESS >

Таблица 5-95. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x2C (CMND_JTAG_BLOCK_READ) [BYTE]
SIZE Количество 32-битных слов для чтения [BYTE]
ADDRESS SAB адрес для чтения [BYTE] * 5

Таблица 5-96. Ответ.

Имя параметра Описание
RSP_SCAN_CHAIN_READ Команда была выполнена, данные возвращены.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.33 JTAG data block write (CMND_JTAG_BLOCK_WRITE: 0x2D)

Записывает блок данных в AVR32 SAB

Таблица 5-97. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE N
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, SIZE, ADDRESS, DATA >

Таблица 5-98. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x28 (CMND_JTAG_BLOCK_WRITE) [BYTE]
SIZE Количество 32-битных слов для чтения [BYTE]
ADDRESS SAB адрес для записи (дополненный, padded) [BYTE] * 8
DATA Данные для записи в SAB [BYTE] * 4

Таблица 5-99. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_VALUE Команда предоставлена с неправильным значением величины.
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.1.34 XMEGA Erase (CMND_XMEGA_ERASE : 0x34)

Функции очистки XMEGA.
Состояние slave: PROGRAMMING.

Таблица 5-100. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Инкрементируется с каждым отправленным пакетом.
MESSAGE_SIZE 5
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, ERASE_MODE, ADDRESS >

Таблица 5-101. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x34 (CMND_XMEGA_ERASE) [BYTE]
ERASE_MODE

0x00 XMEGA_ERASE_CHIP
0x01 XMEGA_ERASE_APP
0x02 XMEGA_ERASE_BOOT
0x03 XMEGA_ERASE_EEPROM
0x04 XMEGA_ERASE_APP_PAGE
0x05 XMEGA_ERASE_BOOT_PAGE
0x06 XMEGA_ERASE_EEPROM_PAGE
0x07 XMEGA_ERASE_USERSIG

[BYTE]
ADDRESS Адрес очищаемой области [BYTE] * 4, младший байт LSB идет первым

Таблица 5-102. Ответ.

Имя параметра Описание
RSP_OK Команда была выполнена.
RSP_FAILED JTAGICE mkII подключен, но он не понял команду.
RSP_ILLEGAL_EMULATOR_MODE Операция не может быть выполнена в этом режиме работы эмулятора (JTAG/debugWire).
RSP_ILLEGAL_MCU_STATE Операция не может быть выполнена в текущем состоянии целевого MCU (target, отлаживаемый микроконтроллер AVR).
TIMEOUT Slave не ответил в течение заданного времени. Либо slave отсутствует, либо не включен.

5.2 Ответы slave

5.2.1 OK (RSP_OK : 0x80)

Подтверждение: slave распознал и понял команду, все в порядке.

Таблица 5-103. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-104. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x80 (RSP_OK) [BYTE]

5.2.2 Failed (RSP_FAILED: 0xA0)

Slave не понял команду и ничего не сделал. Тело сообщения (message body) может быть расширено, чтобы получить подробную информацию о том, ЧТО ИМЕННО не так. В этом месте спецификация может быть обновлена.

Таблица 5-105. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-106. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA0 (RSP_FAILED) [BYTE]

5.2.3 Illegal Parameter (RSP_ILLEGAL_PARAMETER: 0xA1)

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

Таблица 5-107. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-108. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA1 (RSP_ILLEGAL_PARAMETER) [BYTE]

5.2.4 Parameter return (RSP_PARAMETER: 0x81)

Эмулятор возвратил запрошенный параметр.

Таблица 5-109. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE См. ниже.
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PARAMETER_VALUE >

Таблица 5-110. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x81 (RSP_PARAMETER) [BYTE]
PARAMETER_VALUE Значение параметра [BYTE] * N

5.2.5 Illegal Memory Access (RSP_ILLEGAL_MEMORY_TYPE: 0xA2)

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

Таблица 5-111. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-112. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA2 (RSP_ILLEGAL_MEMORY_TYPE) [BYTE]

5.2.6 Illegal Memory Access (RSP_ILLEGAL_MEMORY_RANGE: 0xA3)

Master попытался записать или прочитать неподдерживаемый объем памяти.

Таблица 5-113. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-114. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA3 (RSP_ILLEGAL_MEMORY_RANGE) [BYTE]

5.2.7 Memory read (RSP_MEMORY: 0x82)

Эмулятор возвратил запрошенный блок памяти.

Таблица 5-115. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE Размер MESSAGE_BODY в байтах
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, DATA >

Таблица 5-116. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x82 (RSP_MEMORY) [BYTE]
DATA Данные, прочитанные из памяти [BYTE] * N

5.2.8 Breakpoint read (RSP_GET_BREAK: 0x83)

Эмулятор возвратил только запрошенную конечную точку.

Таблица 5-117. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE Размер MESSAGE_BODY в байтах
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, TYPE, ADDRESS, MODE >

Таблица 5-118. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x83 (RSP_GET_BREAK) [BYTE]
TYPE 0x01: точка останова в программе (program breakpoint)
0x02: точка останова по данным (data breakpoint)
[BYTE]
ADDRESS Адрес [BYTE] * 4, младший байт LSB идет первым

5.2.9 Operation cannot be performed (RSP_ILLEGAL_EMULATOR_MODE: 0xA4)

Master запросил операцию, которая не может быть выполнена в текущем режиме эмулятора.

Таблица 5-119. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 2
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, CURRENT_MODE >

Таблица 5-120. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA4 (RSP_ILLEGAL_EMULATOR_MODE) [BYTE]
CURRENT_MODE 0x00: EMULATOR_MODE_DEBUGWIRE
0x01: EMULATOR_MODE_JTAG
0x02: EMULATOR_MODE_UNKNOWN
[BYTE]

5.2.10 Operation cannot be performed (RSP_ILLEGAL_MCU_STATE: 0xA5)

Master запросил операцию, которая не может быть выполнена в текущем режиме отлаживаемого процессора (target MCU).

Таблица 5-121. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 2
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, CURRENT_MODE >

Таблица 5-122. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA5 (RSP_ILLEGAL_MCU_STATE) [BYTE]
CURRENT_MODE 0x00: STOPPED
0x01: RUNNING
0x02: PROGRAMMING
[BYTE]

5.2.11 Program Counter Read (RSP_PC: 0x84)

Возвращает master-у текущее значение счетчика команд (program counter).

Таблица 5-123. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 5
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PROGRAM_COUNTER >

Таблица 5-124. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x84 (RSP_PC) [BYTE]
MESSAGE_BODY Значение счетчика команд [BYTE] * 4, младший байт LSB идет первым

5.2.12 Selftest (RSP_SELFTEST: 0x85)

Возвращает результат самотестирования. Содержимое этого теста описано далее. Самотестирование выполняет 2 задачи:

1. Проверяет целостность самого эмулятора.
2. Проверяет на работоспособность реальные условия отладки (интерфейс с устройством в порядке, нет залипших сигналов и т. д.).

Таблица 5-125. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE Размер MESSAGE_BODY в байтах.
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из 9 частей:
< MESSAGE_ID, SELFTEST_0, ..., SELFTEST_7 >

Таблица 5-126. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x85 (RSP_SELFTEST) [BYTE]
SELFTEST_0 TEST_SPECIFIC_RESULT [BYTE]
- ... - - ... - - ... -
SELFTEST_7 TEST_SPECIFIC_RESULT [BYTE]

До 8 отдельных функций самотестирования может быть выбрано командой CMND_SELFTEST. Каждый тест возвращает 1 байт ответа, независимо от того, был ли тест проведен или нет. Отдельные результаты являются значениями SELFTEST, которые могут быть настроены для каждого конкретного теста.

Таблица 5-127. Ответ.

Мнемоника Значение Что означает self-test
SELFTEST_SKIPPED 0x00 Этот тест не выполнен
SELFTEST_OK 0x01 Тест прошел успешно
SELFTEST_FAILED 0x80 Тест завершился неудачно
ST_USART_FAILURE 0x81 Внутренний тест USART завершился с ошибкой
ST_FIFO_M_FAILURE 0x82 Чтение FIFO со стороны master завершилось с ошибкой
ST_FIFO_S_FAILURE 0x83 Чтение FIFO со стороны slave завершилось с ошибкой
ST_FIFO_M_EMPTY_FAILURE 0x84 Чтение бита EMPTY со стороны master завершилось с ошибкой
ST_FIFO_S_EMPTY_FAILURE 0x85 Чтение бита EMPTY со стороны slave завершилось с ошибкой
ST_FIFO_M_FULL_FAILURE 0x86 Чтение бита FULL со стороны master завершилось с ошибкой
ST_FIFO_S_FULL_FAILURE 0x87 Чтение бита FULL со стороны slave завершилось с ошибкой
ST_FIFO_M_NINE_FAILURE 0x88 Чтение бита NINTH (9-й бит) со стороны master завершилось с ошибкой
ST_FIFO_S_NINE_FAILURE 0x89 Чтение бита NINTH (9-й бит) со стороны slave завершилось с ошибкой
ST_SRAM_FAILURE 0x8A Тест чтения-записи внутреннего SRAM закончился с ошибкой
ST_JTAG_TMS_STUCK_HIGH 0x8B Сигнал JTAG TMS не получается перевести в уровень лог. 0 (он залип на лог. 1)!
ST_JTAG_TCK_STUCK_HIGH 0x8C Сигнал JTAG TCK не получается перевести в уровень лог. 0 (он залип на лог. 1)!
ST_JTAG_TDI_STUCK_HIGH 0x8D Сигнал JTAG TDI не получается перевести в уровень лог. 0 (он залип на лог. 1)!
ST_JTAG_TMS_STUCK_LOW 0x8E Сигнал JTAG TMS не получается перевести в уровень лог. 1 (он залип на лог. 0)!
ST_JTAG_TCK_STUCK_TMS 0x8F

Сигналы JTAG TCK и TMS возможно замкнули друг на друга.

ST_JTAG_TDI_STUCK_TMS 0x90 Сигналы JTAG TDI и TMS возможно замкнули друг на друга.
ST_JTAG_TCK_STUCK_LOW 0x91 Сигнал JTAG TCK не получается перевести в уровень лог. 1 (он залип на лог. 0)!
ST_JTAG_TMS_STUCK_TCK 0x92 Сигналы JTAG TMS и TCK возможно замкнули друг на друга.
ST_JTAG_TDI_STUCK_TCK 0x93 Сигналы JTAG TDI и TCK возможно замкнули друг на друга.
ST_JTAG_TDI_STUCK_LOW 0x94 Сигнал JTAG TDI не получается перевести в уровень лог. 1 (он залип на лог. 0)!
ST_JTAG_TMS_STUCK_TDI 0x95 Сигналы JTAG TMS и TDI возможно замкнули друг на друга.
ST_JTAG_TCK_STUCK_TDI 0x96 Сигналы JTAG TCK и TDI возможно замкнули друг на друга.

• Сообщения самотестирования JTAG должны быть в следующей форме:
"JTAG connection failed: %message. Please check the physical connection between the ICE and the target." Соединение JTAG неисправно: %сообщение_о_неисправности. Пожалуйста проверьте физическое подключение между ICE (это отладчик) и целевым отлаживаемым устройством.

• Если тест емкости интерфейса debugWire (debugWire Capacitance test) завершился неудачей, должно быть прочитано сообщение:
"The JTAGICE mkII has detected a high capacitance on the RESET line, which may be affecting the debugWire communication. Please remove any capacitors from the reset line in your target circuit." JTAGICE mkII определил, что на сигнале сброса RESET подключена большая емкость, это может повлиять на обмен данными по проводу debugWire. Пожалуйста отключите все конденсаторы от сигнала сброса в схеме целевого отлаживаемого устройства.

Прим. переводчика: шина отладки debugWire, в отличие от обычного JTAG, использует для обмена данными только 2 провода - земля GND и ножку сброса микроконтроллера RESET. Через сигнал сброса осуществляется не только сброс микроконтроллера, но и происходит обмен данными, так что любые подключенные на сигнале сброса емкости могут помешать работе эмулятора. Не все микроконтроллеры AVR имеют шину debugWire (за информацией обратитесь к даташиту на микроконтроллер).

• Если тест debugWire PUSH PULL завершился с ошибкой, должно быть прочитано сообщение:
"The JTAGICE mkII is unable to pull the reset line low in your target application. Using a too strong pull-up resistor (to low resistance) can cause this. The recommended value is in the order of 10k." JTAGICE mkII не смог перевести сигнал сброса в состояние низкого логического уровня в Вашем отлаживаемом целевом устройстве. Это может произойти, если применен слишком маленький верхний нагрузочный резистор на сигнале сброса. Рекомендуемое значение для нагрузочного резистора - номинал около 10 кОм.

5.2.13 SPI data returned (RSP_SPI_DATA: 0x88)

Возвращает данные, которые выводятся по команде SPI.

Таблица 5-128. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE Размер MESSAGE_BODY в байтах.
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-129. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x88 (RSP_SPI_DATA) [BYTE]
DATA Данные, которые выведены командой SPI [BYTE]

5.2.14 Illegal Command (RSP_ILLEGAL_COMMAND: 0xAA)

Master попытался использовать неправильную команду эмулятора.

Таблица 5-130. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-131. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xAA (RSP_ILLEGAL_COMMAND) [BYTE]

5.2.15 Illegal Value (RSP_ILLEGAL_VALUE: 0xA6)

Master попытался записать неправильное значение параметра эмулятора.

Таблица 5-132. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-133. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA6 (RSP_ILLEGAL_VALUE) [BYTE]

5.2.16 Sign on (RSP_SIGN_ON: 0x86)

Ответ на команду sign on (подпись) от Master. Назначение ответа - сказать AVR Studio, какой эмулятор подключен и какие версии железа (HW, hardware) и программного обеспечения (FW, firmware) в нем используются.

Таблица 5-134. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE Размер MESSAGE_BODY в байтах.
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, COMM_ID, M_MCU_BLDR, M_MCU_FW_MIN, M_MCU_FW_MAJ, M_MCU_HW, S_MCU_BLDR, S_MCU_FW_MIN, S_MCU_FW_MAJ, S_MCU_HW, SERIAL_NUMBER, DEVICE_ID_STR >

Таблица 5-135. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x86 (RSP_SIGNON) [BYTE]
COMM_ID Версия протокола обмена [BYTE]
M_MCU_BLDR Версия firmware M_MCU boot-loader [BYTE]
M_MCU_FW_MIN Версия firmware M_MCU (минор) [BYTE]
M_MCU_FW_MAJ Версия firmware M_MCU (мажор) [BYTE]
M_MCU_HW Версия аппаратуры M_MCU [BYTE]
S_MCU_BLDR Версия firmware S_MCU boot-loader [BYTE]
S_MCU_FW_MIN Версия firmware S_MCU (минор) [BYTE]
S_MCU_FW_MAJ Версия firmware S_MCU (мажор) [BYTE]
S_MCU_HW Версия аппаратуры S_MCU [BYTE]
SERIAL_NUMBER (USB) сохраненный в EEPROM серийный номер [BYTE] * 6, младший LSB байт идет первым
DEVICE_ID_STR ASCII строка, завершенная нулем "JTAGICE mkII\0", идентифицирующая устройство эмулятора [BYTE] * N

5.2.17 Illegal breakpoint (RSP_ILLEGAL_BREAKPOINT: 0xA8)

Master сделал попытку установить или получить точку останова, которая не существует.

Таблица 5-136. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-137. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA8 (RSP_ILLEGAL_BREAKPOINT) [BYTE]

5.2.18 Illegal JTAG ID (RSP_ILLEGAL_JTAG_ID: 0xA9)

Master сделал попытку войти в режим программирования, но JTAG ID не соответствует целевому устройству (target device).

Таблица 5-138. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-139. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xA9 (RSP_ILLEGAL_JTAG_ID) [BYTE]

5.2.19 Illegal Command (RSP_ILLEGAL_COMMAND: 0xAA)

Master попытался выполнить неизвестную команду.

Таблица 5-140. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-141. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xAA (RSP_ILLEGAL_COMMAND) [BYTE]

5.2.20 Illegal Target Power State (RSP_NO_TARGET_POWER: 0xAB)

Master сделал попытку выполнить команду, но целевое устройство (target device) выключено (у него отсутствует питание) или не подключено.

Таблица 5-142. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-143. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xAA (RSP_NO_TARGET_POWER) [BYTE]

5.2.21 DebugWire sync failed (RSP_DEBUGWIRE_SYNC_FAILED: 0xAC)

Master попытался войти в режим debugWire, но target не ответил на импульс сброса. Синхронизация DebugWire не достигнута. Такой ответ может прийти на set_parameter переключения эмулятора в режим debugWire, или может быть ответом на другие команды режима debugWire.

Таблица 5-144. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-145. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xAC (RSP_DEBUGWIRE_SYNC_FAILED) [BYTE]

5.2.22 JTAGICE mkII has not enough power to run (RSP_ILLEGAL_POWER_STATE: 0xAD)

Не хватает мощности питания для работы. Этот ответ будет выдан на любую команду, когда JTAGICE mkII получает питание от USB, но прошел энумерацию только для работы от 100 mA. В этом случае JTAGICE mkII находится в режиме пониженного энергопотребления (power save mode) и не будет нормально выполнять никакие команды.

Таблица 5-146. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 5-147. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xAD (RSP_ILLEGAL_POWER_STATE) [BYTE]

5.2.23 Scan chain read (RSP_SCAN_CHAIN_READ: 0x87)

Возвращает данные в результате успешного прямого чтения по цепочке сканирования JTAG (JTAG scan chain).

Таблица 5-148. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER Значение идентично соответствующему запросу от master.
MESSAGE_SIZE N+1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, DATA >

Таблица 5-149. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0x87 (RSP_SCAN_CHAIN_READ) [BYTE]
DATA Данные, прочитанные из цепочки сканирования JTAG (JTAG scan chain) [BYTE] * N, младший LSB байт идет первым

[6 События (Events)]

6.1 Что такое события

События являются сообщениями, которые посылает slave (JTAGICE mkII) к master-у (AVR Studio), когда перед этим не была выдана какая-то команда от master. Т. е. эмулятор передает данные в AVR Studio по собственной инициативе. Типичный пример - событие BREAK, когда эмулятор может работать в режиме RUNNING (выполнение программы микроконтроллером) довольно долго, но как только выполнилось условие срабатывания точки останова (break condition), то эмулятор останавливает (переходит в состояние STOPPED) выполнение программы микроконтроллера на соответствующей точке останова. При этом эмулятор должен сообщить о событии останова в AVR Studio. Для этого эмулятор выдает BREAK event для master, который будет выполнять в ответ на это событие соответствующие действия (обновится листинг программы в IDE AVR Studio, и будет показано место в программе, где произошел останов). В этой секции перечислены все события.

6.2.1 Event Break (EVT_BREAK: 0xE0)

Сработало условие точки останова break condition; эмулятор переходит из состояния RUNNING в состояние STOPPED.

Таблица 6-1. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 6
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID, PROGRAM_COUNTER, BREAK_CAUSE >

Таблица 6-2. Параметры (устройства tinyAVR / megaAVR).

Имя параметра Назначение Формат
MESSAGE_ID 0xE0 (EVT_BREAK) [BYTE]
PROGRAM_COUNTER Значение счетчика команд [BYTE] * 4, младший LSB байт идет первым
BREAK_CAUSE 0x00 = unspecified
0x01 = program break
0x02 = data break PDSB
0x03 = data break PDMSB
[BYTE]

6.2.2 Event Target Power On (EVT_TARGET_POWER_ON: 0xE4)

Эмулятор отправляет это событие, если питание target было выключено, и затем включилось. AVR Studio должно выполнить соответствующие действия.

Таблица 6-3. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-4. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xE4 (EVT_TARGET_POWER_ON) [BYTE]

6.2.3 Event Target Power Off (EVT_TARGET_POWER_OFF: 0xE5)

Эмулятор отправляет это событие, когда питание target было включено, и затем выключилось. AVR Studio должно выполнить соответствующие действия.

Таблица 6-5. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-6. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xE5 (EVT_TARGET_POWER_OFF) [BYTE]

6.2.4 Event Target External Reset (EVT_EXT_RESET: 0xE7)

Пришел внешний сброс target (все еще состояние запуска).

Таблица 6-7. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-8. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xE7 (EVT_EXT_RESET) [BYTE]

6.2.5 Event Target Enter Sleep (EVT_TARGET_SLEEP: 0xE8)

Процессор target работает, но перешел в режим сна (sleep mode, пониженное энергопотребление).

Таблица 6-9. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-10. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xE8 (EVT_TARGET_SLEEP) [BYTE]

6.2.6 Event Target Wakeup (EVT_TARGET_WAKEUP: 0xE9)

Процессор target проснулся и вышел из режима пониженного энергопотребления (sleep).

Таблица 6-11. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-12. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xE9 (EVT_TARGET_WAKEUP) [BYTE]

6.2.7 Event illegal power state (EVT_POWER_ERROR_STATE: 0xEA)

JTAGICE mkII вошел в недопустимое состояние питания (например, пытается получить питание от незапитанного хаба USB) и не может продолжить отладку.

Таблица 6-13. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-14. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xEA (EVT_ICE_POWER_ERROR_STATE) [BYTE]

6.2.8 Event power OK (EVT_POWER_OK: 0xEB)

Источник питания JTAGICE mkII в порядке, и может использоваться для работы без ограничений.

Таблица 6-15. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-16. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xEB (EVT_ICE_POWER_OK) [BYTE]

6.2.9 Event IDR dirty (EVT_IDR_DIRTY: 0xEC)

Устройство целевого отлаживаемого процессора (target device) записало регистр IDR.

Таблица 6-17. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-18. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID 0xEC (EVT_IDR_DIRTY) [BYTE]
IDR Значение, записанное в IDR приложением target [BYTE]

6.2.10 DebugWire Error Events (EVT_ERROR_PHY_X)

Таблица 6-19. События ошибки.

Имя события Значение
EVT_ERROR_PHY_FORCE_BREAK_TIMEOUT 0xE2
EVT_ERROR_PHY_RELEASE_BREAK_TIMEOUT 0xE3
EVT_ERROR_PHY_MAX_BIT_LENGTH_DIFF 0xED
EVT_ERROR_PHY_SYNC_TIMEOUT 0xF0
EVT_ERROR_PHY_SYNC_TIMEOUT_BAUD 0xF4
EVT_ERROR_PHY_SYNC_OUT_OF_RANGE 0xF5
EVT_ERROR_PHY_SYNC_WAIT_TIMEOUT 0xF6
EVT_ERROR_PHY_RECEIVE_TIMEOUT 0xF7
EVT_ERROR_PHY_RECEIVED_BREAK 0xF8
EVT_ERROR_PHY_OPT_RECEIVE_TIMEOUT 0xF9
EVT_ERROR_PHY_OPT_RECEIVED_BREAK 0xFA
EVT_RESULT_PHY_NO_ACTIVITY 0xFB

Таблица 6-20. Формат сообщения.

Имя параметра Описание
MESSAGE_START ASCII 27 (символ ESC)
SEQUENCE_NUMBER 0xFFFF (зарезервировано для событий)
MESSAGE_SIZE 1
TOKEN ASCII 14
MESSAGE_BODY См. ниже.
CRC 2 байта контрольной суммы

Тело сообщения (MESSAGE_BODY) состоит из:
< MESSAGE_ID >

Таблица 6-21. Параметры.

Имя параметра Назначение Формат
MESSAGE_ID (EVT_ERROR_PHY_X) [BYTE]

[7 Дескрипторы USB]

В этой секции перечислены дескрипторы, используемые для обмена данными с устройством USB JTAGICE mkII.

7.1 DEVICE Descriptor

Таблица 7-1. Дескриптор устройства.

Смещение Поле Значение Описание
0 bLength 0x12 Размер этого дескриптора 18 байт
1 bDescriptorType 0x01 Тип дескриптора - DEVICE Descriptor
2 bcdUSB 0x0110 Устройство совместимо со стандартом USB версии 1.10
4 bDeviceClass 0xFF Класс устройства специфичен для вендора
5 bDeviceSubClass 0x00 Каждый интерфейс указывает свою собственную информацию подкласса
6 bDeviceProtocol 0x00 Нет протокола на базе устройства
7 bMaxPacketSize0 0x10 Максимальный размер пакета для конечной точки 0 равен 16 байт
8 idVendor 0x03EB VID, Vendor ID, идентификатор вендора Atmel
10 idProduct 0x2103 PID, Product ID, идентификатор продукта
12 bcdDevice 0x0200 Номер релиза устройства 2.00
14 iManufacturer 0x01 Индекс строкового дескриптора, описывающего производителя, равен 1
15 iProduct 0x02 Индекс строкового дескриптора, описывающего продукт, равен 2
16 iSerialNumber 0x03 Индекс строкового дескриптора, описывающего серийный номер, равен 3
17 bNumConfigurations 0x01 Устройство имеет 1 возможный вариант конфигурации

7.2 CONFIGURATION Descriptor

Таблица 7-2. Дескриптор конфигурации.

Смещение Поле Значение Описание
0 bLength 0x09 Размер этого дескриптора 9 байт
1 bDescriptorType 0x02 Тип дескриптора - CONFIGURATION Descriptor
2 wTotalLength 0x0020 Общее количество данных для этой конфигурации 32 байта. Это включает комбинированную длину всех возвращаемых дескрипторов.
4 bNumInterfaces 0x01 Эта конфигурация поддерживает 1 интерфейс
5 bConfigurationValue 0x01 Для выбора этой конфигурации должна использоваться величина 1
6 iConfiguration 0x00 У устройства нет строкового дескриптора, описывающего эту конфигурацию
7 bmAttributes 0x80 Характеристики конфигурации: бит 7 зарезервирован
8 MaxPower 0xFA Максимальное энергопотребление устройством в этой конфигурации 500 мА

7.3 INTERFACE Descriptor

Таблица 7-3. Дескриптор интерфейса.

Смещение Поле Значение Описание
0 bLength 0x09 Размер этого дескриптора 9 байт
1 bDescriptorType 0x04 Тип дескриптора - INTERFACE Descriptor
2 bInterfaceNumber 0x00 Этот интерфейс имеет номер 0
3 bAlternateSetting 0x00 Значение, используемое для выбора альтернативной установки для этого интерфейса, равно 0
4 bNumEndpoints 0x02 Для этого интерфейса используется 2 конечные точки
5 bInterfaceClass 0xFF Класс интерфейса специфичен для вендора
6 bInterfaceSubClass 0x00 Код подкласса 0x00
7 bInterfaceProtocol 0x00 Интерфейс не имеет никаких протоколов, специфичных для класса
8 iInterface 0x00 Устройство не имеет строкового описателя, который описывает этот интерфейс

7.4 IN ENDPOINT Descriptor

Конечная точка IN используется для обмена данными в направлении от JTAGICE mkII к компьютеру (хост USB).

Таблица 7-4. Дескриптор конечной точки IN.

Смещение Поле Значение Описание
0 bLength 0x07 Размер этого дескриптора 7 байт
1 bDescriptorType 0x05 Тип дескриптора - ENDPOINT Descriptor
2 bEndpointAddress 0x82 Это конечная точка IN с адресом (номером конечной точки) 2
3 bmAttributes 0x02 Типы:
Transfer (тип передачи): BULK
Sync (синхронизация): No Sync (нет синхронизации)
Usage (назначение): Data EP (конечная точка данных)
4 wMaxPacketSize 0x0040 Максимальный размер пакета для этой конечной точки 64 байта (биты 12 и 11: дополнительные транзакции/фрейм)
6 bInterval 0x0A Интервал опроса 10. Значение интервала опроса равно bInterval или 2**(bInterval-1)

7.5 OUT ENDPOINT Descriptor

Конечная точка OUT используется для обмена данными в направлении от компьютера (хост USB) к JTAGICE mkII.

Таблица 7-5. Дескриптор конечной точки OUT.

Смещение Поле Значение Описание
0 bLength 0x07 Размер этого дескриптора 7 байт
1 bDescriptorType 0x05 Тип дескриптора - ENDPOINT Descriptor
2 bEndpointAddress 0x02 Это конечная точка OUT с адресом (номером конечной точки) 2
3 bmAttributes 0x02 Типы:
Transfer (тип передачи): BULK
Sync (синхронизация): No Sync (нет синхронизации)
Usage (назначение): Data EP (конечная точка данных)
4 wMaxPacketSize 0x0040 Максимальный размер пакета для этой конечной точки 64 байта (биты 12 и 11: дополнительные транзакции/фрейм)
6 bInterval 0x0A Интервал опроса 10. Значение интервала опроса равно bInterval или 2**(bInterval-1)

[8 Параметры]

В таблице 8-1 описаны параметры JTAGICE mkII, которыми можно управлять командами Set и Get.

Таблица 8-1. Описание параметров.

ID Описание Формат Доступ Значение
0x01 Версия аппаратуры [BYTE] M_MCU ver
[BYTE] S_MCU ver
R Строка версии аппаратуры
0x02 Версия firmware [BYTE] M_MCU_min
[BYTE] M_MCU_maj
[BYTE] S_MCU_min
[BYTE] S_MCU_maj
R Строка версии firmware
0x03 Режим эмулятора (debugWire или JTAG) [BYTE] R/W 0x00: debugWire
0x01: JTAG для megaAVR
0x02: неизвестно / отсутствует (по умолчанию)
0x03: SPI
0x04: JTAG для AVR32
0x05: JTAG для XMEGA
0x06: PDI для XMEGA
0x04 (не используется)     (не используется)
0x05 Скорость обмена RS232 (значение по умолчанию 4, что соответствует 19200). Настройка RS232 соответствует выбранной скорости, нет четности, 8 бит данных, 1 стоп-бит [BYTE] R/W 0x01: 2400
0x02: 4800
0x03: 9600
0x04: 19200 по умолчанию
0x05: 38400
0x06: 57600
0x07: 115200
0x08: 14400
0x06 OCD Vtarget [BYTE] * 2, младший байт LSB идет первым R Прочитано из устройства
0x07 OCD JTAG Clock [BYTE] R/W Задержка между установкой и очисткой тактов JTAG
0x08 OCD Break Cause (случай останова) [BYTE] R Прочитано из устройства при срабатывании точки останова
0x09 Таймеры, работающие в target device, находятся в режиме останова [BYTE] R/W 0x00: таймеры остановлены (по умолчанию)
0x01: таймеры запущены
0x0A Break on Change of Flow [BYTE] R/W 0x00
0x0B Break Addr1 [BYTE] * 2, младший байт LSB идет первым R/W (не используется)
0x0C Break Addr2 [BYTE] * 2, младший байт LSB идет первым R/W (не используется)
0x0D CombBreakCtrl [BYTE] R/W (не используется)
0x0E Строка JTAGID [BYTE] * 4 R Специфично для устройства
0x0F .. 0x12 (не используется)     (не используется)
0x13 Внешний сброс [BYTE] R/W 0x00: нет
0x01: да (по умолчанию)
0x14 Размер страницы FLASH [BYTE] * 2, младший байт LSB идет первым R/W Зависит от отлаживаемого устройства
0x15 Размер страницы EEPROM [BYTE] R/W Зависит от отлаживаемого устройства
0x16 (не используется)     (не используется)
0x17 PSB0 [BYTE] * 2, младший байт LSB идет первым R/W (не используется)
0x18 PSB1 [BYTE] * 2, младший байт LSB идет первым R/W (не используется)
0x19 (не используется)     (не используется)
0x1A Target MCU STATE [BYTE] R 0x00: STOPPED
0x01: RUNNING
0x02: PROGRAMMING
0x1B Информация цепочки JTAG [BYTE] юнитов перед
[BYTE] юнитов после
[BYTE] битов перед
[BYTE] битов после
R/W  
0x1C Адрес загрузки [BYTE] * 4, младший байт LSB идет первым R/W  
0x1D Сигнатура target [BYTE] * 2, младший байт LSB идет первым R Читается из target
0x1E (не используется)     (не используется)
0x1F Точка входа в программу [BYTE] * 4, младший байт LSB идет первым W  
0x22 Чтение mailbox CAN [BYTE] R/W 0x00: не читать CAN-mailbox
0x01: читать CAN-mailbox
0x23 Разрешить события IDR [BYTE] W 0x00: доступ к OSCCAL
0x01: доступ к IDR
0x24 Разрешить программирование страницы в цепочке сканирования JTAG [BYTE] W 0x00: не разрешено
0x01: разрешено
0x2D Soft reset (после отписки) [BYTE] W 0x00: жесткий сброс
0x01: нет сброса
0x31 Смещение PDI контроллера NVM [BYTE] * 4, младший байт LSB идет первым W Зависит от устройства
0x32 Смещение PDI секции FLASH приложения [BYTE] * 4, младший байт LSB идет первым W Зависит от устройства
0x33 Смещение PDI секции загрузки приложения [BYTE] * 4, младший байт LSB идет первым W Зависит от устройства
0x37 Последовательность разрешения JTAG AVR32 [BYTE] W 0x00: JTAG не разрешен
0x01: использовать последовательность разрешения JTAG
0x38 Запуск после программирования [BYTE] W 0x00: удерживать target остановленным
0x01: разрешить target запуститься
0x40 Ошибки парсинга пакета [BYTE] * 4, младший байт LSB идет первым R  
0x41 Принято допустимых пакетов [BYTE] * 4, младший байт LSB идет первым R  
0x42 Ошибки обмена TX [BYTE] * 4, младший байт LSB идет первым R  
0x43 Ошибки обмена RX [BYTE] * 4, младший байт LSB идет первым R  
0x44 Ошибки CRC [BYTE] * 4, младший байт LSB идет первым R  
0x45 Источник питания [BYTE] R 0x00: внешний
0x01: USB

[9 Поля дескриптора устройства (Device Descriptor)]

Заданные параметры, используемые командой "Set Device Descriptor" (установить дескриптор устройства).

unsigned char ucReadIO[8];             //LSB = IOloc 0, MSB = IOloc63
unsigned char ucReadIOShadow[8];       //LSB = IOloc 0, MSB = IOloc63
unsigned char ucWriteIO[8];            //LSB = IOloc 0, MSB = IOloc63
unsigned char ucWriteIOShadow[8];      //LSB = IOloc 0, MSB = IOloc63
unsigned char ucReadExtIO[52];         //LSB = IOloc 96, MSB = IOloc511
unsigned char ucReadIOExtShadow[52];   //LSB = IOloc 96, MSB = IOloc511
unsigned char ucWriteExtIO[52];        //LSB = IOloc 96, MSB = IOloc511
unsigned char ucWriteIOExtShadow[52];  //LSB = IOloc 96, MSB = IOloc511
unsigned char ucIDRAddress;            //адрес IDR
unsigned char ucSPMCRAddress;          //адрес регистра SPMCR и dW BasePC
unsigned long ulBootAddress;           //адрес запуска загрузчика устройства
                                       // (Device Boot Loader Start Address)
unsigned char ucRAMPZAddress;          //адрес регистра RAMPZ в пространстве
                                       // SRAM I/O
unsigned int uiFlashPageSize;          //размер страницы FLASH устройства
                                       // (Device Flash Page Size),
                                       // Size = 2 exp ucFlashPageSize
unsigned char ucEepromPageSize;        //Размер страницы EEPROM устройства
                                       // (Device Eeprom Page Size) в байтах
unsigned int uiUpperExtIOLoc;          //Верхнее (последнее) размещение
                                       // extended I/O, 0 если нет external I/O
unsigned long ulFlashSize;             //размер памяти FLASH устройства
unsigned char ucEepromInst[20];        //инструкции для записи/чтения EEPROM
unsigned char ucFlashInst[3];          //инструкции для записи/чтения FLASH
unsigned char ucSPHaddr;               //старший байт значения указателя стека
unsigned char ucSPLaddr;               //младший байт значения указателя стека
unsigned int uiFlashpages;             //количество страниц в памяти FLASH
unsigned char ucDWDRAddress;           //адрес регистра DWDR
unsigned char ucDWBasePC;              //значение базы/маски для PC
unsigned char ucAllowFullPageBitstream;//FALSE на ВСЕХ новых типах устройств
unsigned int uiStartSmallestBootLoaderSection;
unsigned char EnablePageProgramming;   //Только для устройств с JTAG,
                                       // по умолчанию TRUE
unsigned char ucCacheType;             //CacheType_Normal 0x00,
                                       //CacheType_CAN 0x01
unsigned int uiSramStartAddr           //Начало SRAM
unsigned char ucResetType;             //Выбирает тип сброса. 0x00
unsigned char ucPCMaskExtended;        //Для устройств с расширенным PC
unsigned char ucPCMaskHigh;            //Старшая маска PC
unsigned char ucEindAddress;           //адрес EIND IO
unsigned int EECRAddress;              //адрес EECR IO

[10 Типы памяти]

Таблицы 10-1. Типы памяти.

Область памяти Значение MEM_TYPE
IO_SHADOW 0x30
SRAM 0x20
EEPROM 0x22
EVENT 0x60
SPM 0xA0
FLASH_PAGE 0xB0
EEPROM_PAGE 0xB1
FUSE_BITS 0xB2
LOCK_BITS 0xB3
SIGN_JTAG 0xB4
OSCCAL_BYTE 0xB5
CAN 0xB6
XMEGA_APPLICATION_FLASH 0xC0
XMEGA_BOOT_FLASH 0xC1
XMEGA_USER_SIGNATURE 0xC5
XMEGA_CALIBRATION_SIGNATURE 0xC6

Когда происходит чтение SRAM, могут предприняты 3 различные действия в зависимости от диапазона адреса. Если адрес в диапазоне 0x0000 .. 0x001F, то JTAGICE mkII будет захватывать данные их файла рабочих регистров общего назначения (general purpose working register file). Если адрес в диапазоне 0x0020 .. 0x005F, то данные будут захватываться из файла регистров ввода/вывода (IO register file). Если AVR поддерживает расширенные регистры ввода/вывода (Extended IO registers) и адрес в диапазоне до 0x00FF, то данные будут захватываться из файла расширенных регистров ввода/вывода (External IO register file).

Если адрес вне диапазона 0x005F, то данные захватываются из внутреннего/внешнего ОЗУ (internal/external SRAM), когда не используется файл внешних регистров ввода/вывода (external IO register file). Если файл внешних регистров ввода/вывода (external IO register) используется, то адрес должен быть в пределах 0x0FF, чтобы данные захватывались из internal/external SRAM.

Чтение памяти через инструкцию SPM (Read memory type SPM) читает одно слово памяти программ (2 байта), тогда как FLASH_PAGE читает страницу целиком. Запись памяти использует FLASH_PAGE для программирования всей памяти FLASH. SPM используется для программирования только одной страницы.

Тип памяти EEPROM_PAGE использует запись страницы и чтение байта. Типы памяти FUSE_BITS, LOCK_BITS и OSCCAL_BYTE используют чтение (и запись) байта.

Адрес, который отправляется в JTAGICE mkII, является байтовым для всех типов памяти. Нужно предоставить только начальный адрес.

Программа эмулятора сообщает об ошибках чтения памяти (Read Memory) как Resp_FAILED. Неизвестные типы для Read Memory и Write Memory игнорируются. Тип памяти CAN поддерживается путем чтения 300 байт всякий раз, когда осуществляется доступ к этому типу памяти. Доступ к памяти CAN управляется параметром Read CAN mailbox. Если параметр Read CAN mailbox = TRUE, то произойдет чтение всех 300 байт, если FALSE, то чтение не осуществляется.

Запись в CAN-mailbox также происходит с помощью использования MemType_CAN. Для каждого редактируемого/записываемого байта здесь должен произойти вызов Cmnd_Write_Memory для этого типа памяти вместе с адресом для байта.

[11 Точки останова, Breakpoints (устройства megaAVR с интерфейсом JTAG)]

Система OCD (расшифровывается On Chip Debug, встроенная в чип система отладки) использует компараторы точки останова (Break Point Comparators) для установки Break Point. Узел управления Break Point содержит две одиночные точки останова на памяти программ (single Program Memory Break Point), и две комбинированные точки останова (combined Break Point). Совместно могут быть сконфигурированы до 4 точек останова следующими способами (при этом для пошагового выполнения всегда задействована одна Break Point):

• 4 одиночные точки останова на программе (Program Memory Break Point)
• 3 одиночные точки останова на программе + 1 одиночная точка останова на памяти данных (Data Memory Break Point)
• 2 одиночные точки останова на программе + 2 одиночные точки останова на памяти данных
• 2 одиночные точки останова на программе + 1 точка останова на программе с маской (Program Memory Break Point with mask, так называемая точка останова с диапазоном, "range Break Point")
• 2 одиночные точки останова на программе + 1 точки останова на памяти данных с маской (Data Memory Break Point with mask, "range Break Point")

Data Memory Break Point может быть установлена в один из трех режимов; Data Memory Read, Data Memory Write или Data Memory Read or Write. Data Memory break устанавливает AVR CPU в режим останова (Stopped mode) после завершения инструкции, которая привела к выполнению условия точки останова. Условие останова по содержимому данных не поддерживается.

Система OCD содержит разные регистры в узле управления точками останова (Break Point control unit).

PSBO и PSB1 – Program Break на одиночный адрес, это 16-bit регистры сравнения для счетчика программ (Program Counter) CPU.

PDMSB – Program/Data Mask or Single Break, это регистр, используемый для установки одиночной точки останова в программе либо на адрес памяти программ, либо на адрес памяти данных. Альтернативно PDMSB может действовать как маска на адресе для компаратора PDSB, что реализует точку останова на диапазоне (range-break).

PDSB – Program/Data Single Break, используется для установки одиночной точки останова либо на адрес памяти программ, либо на адрес памяти данных. Альтернативно PDSB может замаскировать адрес для компаратора PDSB, что реализует точку останова на диапазоне (range-break).

BCR – Break Control Register, кроме всего прочего этот регистр используется для управления установками четырех различных вышеупомянутых регистра останова.

Для установки Break Point-ов в JTAG ICE AVR Studio использует команду Cmnd_setParameter и параметры PSB0 H/L и PSB1 H/L для установки регистров PSB0 или PSB1. В этом случае адрес в команде установки параметра является адресом, на котором будет размещена Break Point, и значение показывает должен ли быть установлен PSB0 или PSB1 Break Point на этом месте (0 = PSB0, 1 = PSB1). Необходимая модификация BCR выполняется автоматически.

CmndSetParameter и Parameter BreakAddr устанавливают регистры PDMSB и PDSB. В этом случае BCR автоматически не модифицируется. Чтобы активизировать PDMSB и PDSB Break Point-ы, должна использоваться команда CmndSetParameter и параметр CombBreakCtrl для установки BCR в нужное значение.

Когда JTAGICE mkII останавливается, то все Break Point-ы очищаются, так что перед каждым запуском должны быть установлены все Break Point-ы. Так что команда очистки точек останова не нужна (Clear Break Points).

[12 Алгоритм вычисления CRC16]

Следующий исходный од выполняет расчет контрольной суммы CRC16, которая используется для верификации протокола обмена JTAGICE mkII. Используйте функцию VerifyChecksum для проверки контрольной суммы, чтобы удостовериться в целостности принятой команды. Возвращаемый результат TRUE, если целостность сообщения не нарушена, иначе (если данные сообщения испорчены) будет возвращено FALSE.

Используйте функцию AppendChecksum для добавления 2 байт CRC16 к сообщению перед отправлением сообщения.

/////////////////////////////////////////////////////////////////////////
// Файл crc16.h.
#ifndef CRC16_H
#define CRC16_H
class Crc16
{
public:
   //Вычисление контрольной суммы сообщения.
   static unsigned short Checksum ( const unsigned char* message,
                                    unsigned long length,
                                    unsigned short crc = 0xffff);
   //Проверяет последние 2 байта (младший байт LSB первый)
   // на правильность CRC сообщения.
   static bool VerifyChecksum ( const unsigned char* message,
                                unsigned long length);
   //Добавляет 2 байта CRC (младший байт LSB первый) к сообщению.
   // length является размером сообщения без учета crc.
   // Место для байт CRC должно быть предварительно выделено!
   static void AppendChecksum ( unsigned char* message,
                                unsigned long length);
};
#endif
 
/////////////////////////////////////////////////////////////////////////
// Файл crc16.cpp.
#include "Crc16.h"
// Код, взятый из DataTransportLayer crc16.h
// Определения CRC16
const unsigned short crc_table[256] =
{ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
  0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
  0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
  0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
  0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
  0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
  0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
  0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
  0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
  0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
  0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
  0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
  0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
  0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
  0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
  0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
  0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
  0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
  0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
  0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
  0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
  0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
  0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
  0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
  0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
  0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
  0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
  0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
  0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
  0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
  0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
  0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};
 
// Макрос вычисления CRC
#define CRC_INIT 0xFFFF
#define CRC(crcval,newchar) crcval = (crcval >> 8) ^
                            crc_table[(crcval ^ newchar) & 0x00ff]
 
unsigned short Crc16::Checksum ( const unsigned char* message,
                                 unsigned long length,
                                 unsigned short crc)
{
   for(unsigned long i = 0; i < length; i++)
   {
      CRC(crc, message[i]);
   }
   return crc;
}
 
// Возвращает true, если последние 2 байта в сообщении корректная crc
// от предыдущих байт.
bool Crc16::VerifyChecksum( const unsigned char* message,
                            unsigned long length)
{
   unsigned short expected = Checksum(message, length - 2);
   return (expected & 0xff) == message[length - 2] &&
           ((expected >> 8) & 0xff) == message[length - 1];
}
 
void Crc16::AppendChecksum ( unsigned char* message, 
                             unsigned long length)
{
   unsigned long crc = Checksum(message, length);
   message[length]   = (unsigned char)(crc & 0xff);
   message[length+1] = (unsigned char)((crc >> 8) & 0xff);
}

[Ссылки]

1. AVR067: JTAGICE mkII Communication Protocol site:atmel.com.
2. Atmel AVR JTAGICE mkII.
3. Цоколевка интерфейсов JTAG.
4. AVR-USB162MU: макетирование и изготовление программатора AVRISP-MKII в домашних условиях.
5. AVR069: AVRISP mkII Communication Protocol.
6HappyJTAG: простой интерфейс JTAG для AVR.
7HappyJTAG2: JTAG и ISP для AVR.

 

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


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

Top of Page