AVR060: протокол JTAG ICE |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь приведен перевод апноута Atmel "AVR060: JTAG ICE Communication Protocol" [1]. Описывается протокол обмена между средой разработки AVR Studio® (фронтэнд) и аппаратным отладчиком (эмулятором) JTAG ICE. Затрагиваются следующие темы: • Команды, которые посылает AVR Studio в JTAG ICE и их детальное описание Назначение этого документа - разрешить сторонним фирмам разрабатывать свое собственное программное обеспечение (фронтэнд, интерфейс пользователя), которое может использовать эмулятор JTAG ICE. Прим. переводчика: эмулятор JTAG ICE в настоящее время является устаревшим, он подключается к компьютеру через интерфейс RS-232 (COM-порт). К отлаживаемому микроконтроллеру подключение осуществляется через JTAG (10-контактный разъем JTAG10 [3]), причем JTAG имеют не все микроконтроллеры AVR. Сейчас вместо JTAG ICE используются отладчики AVR Dragon и JTAGICE mkII [2], подключаемые к компьютеру через USB. Эти отладчики могут работать также и как ISP-программаторы. Подключаются AVR Dragon и JTAGICE mkII к отлаживаемому микроконтроллеру либо через JTAG10, либо через специальный однопроводный интерфейс debugWIRE. [Команды фронтэнда] Эта секция содержит описание команд, отправляемых от AVR Studio (это и есть фронтэнд) для управления эмулятором JTAG ICE. Все команды независимые, так что последовательность, с которой выдаются команды, не имеет значения. Все команды сопровождаются 2-байтным словом синхронизации Sync_CRC/EOP. Если было детектировано Sync_CRC/EOP, JTAG ICE подтверждает его ответом Resp_OK. Если не было Sync_CRC/EOP, когда ожидалось, то JTAG ICE ответит Resp_SYNC_ERROR. Это правило применяется ко всем командам. Внимание! На все неизвестные команды JTAG ICE должен выдать ответ Resp_SYNC_ERROR. Поле формата [BYTE] показывает одиночный символ из 8 бит. Поле формата [WORD] показывает целое 16-битное число без знака (unsigned 16-bit integer). Cmnd_GET_SIGN_ON - проверка наличия эмулятора. Служит для чтения сообщения подписи (sign-on) из эмулятора, чтобы определить - подключен в настоящее время эмулятор, или нет. Формат команды: Cmnd_GET_SIGN_ON, Sync_CRC/EOP Таблица 1. Параметр ответа на команду Cmnd_GET_SIGN_ON.
Cmnd_SET_PARAMETER - записать параметр эмулятора. Записывает новую установку в ключевые параметры JTAG ICE. При включении питания эмулятор всегда возвращает все параметры в значения по умолчанию. Формат команды: Cmnd_SET_PARAMETER, parameter, setting, Sync_CRC/EOP Примечание: когда записываются параметры скорости обмена, то подтверждение передается перед тем, как скорость обмена будет изменена на новое значение. Таблица 2. Параметры команды Cmnd_SET_PARAMETER.
См. раздел "Параметры" и таблицу 23 для описания параметров, которые могут быть записаны. Cmnd_GET_PARAMETER - прочитать параметр из эмулятора. Читает ключевую установку в JTAG ICE. Формат команды: Cmnd_GET_PARAMETER, parameter, Sync_CRC/EOP Таблица 3. Параметры команды Cmnd_GET_PARAMETER.
См. раздел "Параметры" и таблицу 23 для описания параметров, которые могут быть прочитаны. Cmnd_WRITE_MEMORY - записать память. Позволяет записывать регистры, область ввода/вывода (I/O), ячейки памяти SRAM, EEPROM и памяти программ (FLASH). Имейте в виду, что память не может быть записана, когда эмулятор находится в режиме Run. Команда Cmnd_WRITE_MEMORY работает совместно с командой Cmnd_DATA, которая содержит блок актуальных данных. Формат команды: Cmnd_WRITE_MEMORY, memory type, word count, start address, Sync_CRC/EOP, Cmnd_DATA, word0, word1 (....) wordn. AVR Studio должна детектировать поступление Resp_OK перед тем, как блок данных записывается в эмулятор. Эмулятор не ожидает никакие данные, следующие за сообщением Resp_SYNC_ERROR, если Sync_CRC/EOP не был успешно прочитан. В этом случае запись блока данных (командой Cmnd_DATA) может привести к неожиданному поведению эмулятора. Таблица 4. Параметры команды Cmnd_WRITE_MEMORY.
Примечание(1): см. "Типы памяти" и таблицу 25 для описания типов памяти. Cmnd_READ_MEMORY - чтение памяти. Позволяет читать регистры, SRAM, область I/O, EEPROM, память программ (FLASH) и регистр останова (Break Register). Имейте в виду, что память не может быть прочитана, когда эмулятор находится в режиме Run. Формат команды: Cmnd_READ_MEMORY, memory type, word count, start address, Sync_CRC/EOP Примечание: если по какой-то причине эмулятор не смог прочитать данные, то все равно будет возвращено корректное количество слов, так что вся система останется в режиме синхронизации (обмена). AVR Studio должен определить ошибку по ответу Resp_FAILED. Таблица 5. Параметры команды Cmnd_READ_MEMORY.
Примечание(1): память программ (Program Memory): одно слово состоит из 2 байт, в которых старший байт (MSB) идет первым. Все другие типы памяти: 1 байт. См. "Типы памяти" и таблицу 25 для описания типов памяти. Cmnd_WRITE_PC - запись значения счетчика команд. Команда записывает новое значение в AVR Program Counter. Имейте в виду, что Program Counter нельзя записать, когда эмулятор находится в режиме Run. Формат команды: Cmnd_WRITE_PC, program counter, Sync_CRC/EOP Таблица 6: параметры команды Cmnd_WRITE_PC.
Примечание(1): имейте в виду, что Program Counter в JTAG ICE всегда 16-битный, так что старший байт будет игнорирован. Но он все равно должен быть передан. Cmnd_READ_PC - чтение счетчика команд. Команда читает текущее значение Program Counter. Имейте в виду, что Program Counter нельзя прочитать, пока эмулятор находится в режиме Run. Формат команды: Cmnd_READ_PC, Sync_CRC/EOP Таблица 7. Параметры команды Cmnd_READ_PC.
Примечание(1): имейте в виду, что Program Counter в JTAG ICE всегда 16-битный, так что старший байт будет прочитан как 0x00. Он все равно должен быть передан. Cmnd_GO - запуск программы. Приводит к выполнению программы начиная с текущего адреса в Program Counter. Формат команды: Cmnd_GO, Sync_CRC/EOP Cmnd_SINGLE_STEP - один шаг. Запускает выполнение одной инструкции по текущему адресу Program Counter. Формат команды: Cmnd_SINGLE_STEP, Sync_CRC/EOP Cmnd_FORCED_STOP - останов выполнения программы. Формат команды: Cmnd_FORCED_STOP, Sync_CRC/EOP Таблица 10. Параметры ответа на команду Cmnd_FORCED_STOP.
Cmnd_RESET - сброс программы пользователя. Эмулятор выполняет все действия, которые необходимы для перезапуска выполнения программы. При этом все регистры и порты ввода/вывода микроконтроллера возвращаются в состояние по умолчанию (эмулируется аппаратный сброс, аналогичный включению питания). Формат команды: Cmnd_RESET, Sync_CRC/EOP Cmnd_GET_SYNC - получить синхронизацию. Эта команда отправляется AVR Studio для того чтобы добиться синхронизации обмена с JTAG ICE, если она была потеряна. Формат команды: Cmnd_GET_SYNC Cmnd_GET_DEBUG_INFO - прочитать информацию отладки. Возвращает 0x00. Эта команда функционально не реализована, и является заглушкой для будущего использования. Формат команды: Cmnd_GET_DEBUG_INFO, Sync_CRC/EOP Таблица 13. Параметры ответа на команду Cmnd_GET_DEBUG_INFO.
Cmnd_Set_Device_Descriptor - установить описатель устройства (Device Descriptor). AVR Studio отправляет через устройство AVR специальную информацию. Формат команды: Cmnd_Set_Device_Descriptor, Structure, Sync_CRC/EOP Таблица 14. Параметры команды Cmnd_Set_Device_Descriptor.
Примечание: см. таблицу 30 "Описание устройства", описывающую действительное содержимое структуры. Cmnd_ERASEPAGE_SPM - Erase Page SPM. Очищает целиком страницу памяти FLASH с использованием инструкции SPM. Эта команда совместно с командами чтения памяти Cmnd_READ_MEMORY и записи памяти Cmnd_WRITE_MEMORY. Формат команды: Cmnd_ERASEPAGE_SPM, PageAddress, Sync_CRC/EOP Таблица 15. Параметры команды Cmnd_ERASEPAGE_SPM.
CmndFirmwareUpgrade - обновление программного обеспечения (Firmware Upgrade). Принуждает JTAG ICE перейти в режим обновления встроенного программного обеспечения (Upgrade mode). В этом режиме AVR Prog может подключиться к эмулятору и обновить firmware JTAG ICE. Формат команды: CmndFirmwareUpgrade, string, Sync_CRC/EOP Таблица 16. Параметры команды CmndFirmwareUpgrade.
[Ответы JTAG ICE] В этой секции описываются ответы, которые посылает JTAG ICE к AVR Studio. Большинство ответов отправляются как результат принятых команд. Ответы Resp_BREAK, Resp_INFO и Resp_SLEEP отправляются из режима Run. Значения ответов перечислены в таблице 27. Resp_OK - OK. Положительное подтверждение для AVR Studio. Resp_OK будет отправлен после детектирования Sync_CRC/EOP, и после корректного выполнения допустимой команды. Resp_FAILED - ошибка. Этот ответ отправляется, если выполнение команды потерпело неудачу. Resp_SYNC_ERROR - ошибка синхронизации. Отправляется в сторону AVR Studio, когда в обмене потеряна синхронизация. Resp_SYNC_ERROR отправляется, когда ожидался, но не был детектирован Sync_CRC/EOP. AVR Studio пытается заново восстановить синхронизацию путем постоянных отправок команды Cmd_GET_SYNC. Если JTAG ICE детектировал команду Cmd_GET_SYNC, то он должен подтвердить её ответом Resp_OK. Resp_BREAK - останов, Break. Отправляется, если программа останавливается по точке останова. Формат ответа: Resp_BREAK, status Таблица 20. Параметры ответа Resp_BREAK.
Resp_INFO - информация. Если IDR не чист, то IDR будет прочитан и значение передано в AVR Studio. Формат ответа: Resp_INFO, IDR, Resp_OK Таблица 21. Параметры ответа Resp_INFO.
Resp_SLEEP - сон (Sleep). Если отлаживаемое ядро AVR (AVR MCU) выполняет инструкцию SLEEP (вход в режим сна, или режим пониженного энергопотребления), или возобновляет выполнение после сна, то JTAG ICE детектирует это событие и отправляет соответствующий ответ Resp_SLEEP. Формат ответа: Resp_SLEEP, status, Resp_OK Таблица 22. Параметры ответа Resp_SLEEP.
[Параметры] Командами Cmd_GET_PARAMETER и Cmd_SET_PARAMETER могут быть прочитаны/записаны следующие параметры, значение которых перечислены в таблице 23. Таблица 23. Ключевые параметры JTAG ICE.
Примечание(1): значение этого параметра в AVR Studio можно прочитать в подсказке Help -> About AVR Studio -> Info. Таблица 24. Значения параметра скорости обмена (Baud Rate), бит/сек.
[Типы областей памяти (Memory Types)] Следующие типы памяти поддерживаются JTAG ICE для использования совместно с командами Cmnd_WRITE_MEMORY и Cmnd_READ_MEMORY. Таблица 25. Константы типов памяти [MEM_TYPE].
Примечания: (1) Доступ к памяти этих типов будет происходить через интерфейс программирования JTAG (JTAG Programming Interface). Устройство (target device, микроконтроллер, подключенный к JTAG ICE) должно находиться в режиме программирования (Programming mode) перед использованием этих команд. FLASH_JTAG является типом памяти, когда программа выгружается в целевое устройство (target device). Если AVR Studio выдает команды прочитать память (Read Memory) или записать память (Write Memory) с типом памяти SRAM, то можно выполнить 3 различные действия в зависимости от диапазона адреса. Если адрес в диапазоне 0x0000 .. 0x001F, то JTAG ICE должен захватить данные из файла рабочих регистров общего назначения (General Purpose Working Register file). Если адрес в диапазоне 0x0020 .. 0x005F, то данные должны быть захвачены из файла регистров ввода/вывода (IO Register file). Если AVR поддерживает расширенные регистры ввода/вывода (Extended IO Registers), и то тогда диапазон адреса 0x0060 .. 0x00FF, данные должны быть захвачены из файла расширенных регистров ввода/вывода (External IO Register file). Если адрес вне диапазона 0x005F и не используется файл расширенных регистров ввода/вывода (External IO Register file), то данные будут захватываться из Internal/External SRAM. Если файл расширенных регистров ввода/вывода (External IO Register file) используется, то адрес должен вне диапазона 0x0FF, чтобы данные захватывались из Internal/External SRAM. Тип памяти EEPROM_JTAG использует страничную запись (page write) или запись байта (byte write) и чтение байта (byte read). Типы памяти FUSE_JTAG, LOCK_JTAG, SIGN_JTAG и OSCAL_JTAG используют чтение байта (и запись). Адреса, отправленные в JTAG ICE являются адресом слова для памяти программ (Program Memory) и адресом байта для всех других типов памяти. Должны быть предоставлены только начальный адрес и количество байт для чтения/записи. Программа эмулятора сообщает об ошибках чтения памяти как Resp_FAILED. Чтение и запись неизвестных типов памяти игнорируется. [Синхронизация] Sync_CRC/EOP - это специальная порция из 2 байт, которая помещается в конец всех пакетов, которые передаются от компьютера PC в JTAG ICE. Проверка CRC не реализована в JTAG ICE, так что эти 2 байта всегда будут прочитаны как 0x20 0x20. Когда JTAG ICE их продетектировал, то он должен на них ответить Resp_OK. Внимание! От PC не будет выполняться никакая отправка команд, пока не будет подтвержден Sync_CRC/EOP. JTAG ICE будет искать эти 2 байта в конце каждой отправленной от PC команды. Если по какой-то причине JTAG ICE примет некие символы, отличающиеся от ожидаемого Sync_CRC/EOP, то JTAG ICE ответит отправкой Resp_SYNC_ERROR. Восстановление синхронизации (Synchronization Recovery). Если JTAG ICE не прочитал Sync_CRC/EOP когда ожидалось, то он автоматически принимает, что произошла рассинхронизация с PC. В этом случае JTAG ICE прервет выполнение команды и возвратит к PC сообщение Resp_SYNC_ERROR. Когда JTAG ICE детектирует допустимую команду Cmnd_GET_SYNC, то ответит на неё Resp_OK. Если PC не принял Resp_OK от JTAG ICE, то PC должен постоянно посылать команды Cmnd_GET_SYNC, пока не получит подтверждение. [Точки останова (Break Points)] Система 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) 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 в нужное значение. Когда JTAG ICE останавливается, то все Break Point-ы очищаются, так что перед каждым запуском должны быть установлены все Break Point-ы. Так что команда очистки точек останова не нужна (Clear Break Points). [Общий обзор протокола JTAG ICE] Здесь для ясности подводится итог описания JTAG ICE Communication Protocol. Жирным шрифтом показаны данные, которые отправляет JTAG ICE. Таблица 26. Команды протокола JTAG ICE.
Таблица 27. Расшифровка кодов ответа.
Таблица 28. Имена параметров.
Таблица 29. Типы памяти.
Таблица 30. Описание устройства (Device Description).
[Ссылки] 1. AVR060: JTAG ICE Communication Protocol site:atmel.com. |