AVR079: протокол обмена STK600 |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь приведен перевод апноута AVR079: STK600 Communication Protocol [1], посвященного протоколу обмена STK600. Описаны поддерживаемые команды и их опции, форматы команд и ответов на них. Протокол STK600 по командам и структуре очень похож на протокол STK500 версии 2.0 [3]. Основное отличие в том, что STK600 предназначен для работы поверх USB, а не поверх RS232, поэтому из STK600 удалены контрольная сумма, номер последовательности. Кроме того, в STK600 дополнительно заложены команды управления интерфейсом JTAG. Firmware, поддерживающее STK600, распространяется вместе с AVR Studio® 4.14 и более поздними версиями. Определения всех команд, ответов, параметров и других заданных величин можно найти в файле command.h. Этот файл можно скачать с сайта Atmel, или см. [4], папка AVR068 архива. См. также Приложение. Все параметры, относящихся к каждому конкретному устройству (микроконтроллеру AVR), можно найти в XML файлах, такой файл есть для каждого поддерживаемого устройства. XML-файлы описания устройств поставляются в составе AVR Studio. Вы можете загрузить последнюю версию AVR Studio 4 с сайта Atmel. Формат файлов XML описан в секции 12. [Что такое STK600] STK600 - специальная фирменная отладочная плата компании Atmel (стартеркит), являющаяся развитием популярного стартеркита STK500. STK600 теперь подключается к компьютеру через USB, что намного удобнее старого интерфейса RS232. STK600 позволяет писать и отлаживать программы для микроконтроллеров AVR разных серий (для этого используются разные дочерние платы), и позволяет их программировать. Таким образом, STK600 является не только платой разработчика, но и программатором, который может работать вместе с утилитами программирования в составе IDE AVR Studio (и Atmel Studio). Для обмена данными с управляющим MCU платы STK600 используется одноименный протокол. [2. Обзор протокола STK600] 2.1 Обмен через интерфейс USB STK600 производит обмен данными с компьютером PC через интерфейс USB. При этом задействованы 2 конечные точки типа bulk, одна IN (передача от STK600 в PC) и одна OUT (передача от PC к STK600). Дескрипторы USB можно найти в Приложении. 2.2 Формат пакета PC отправляет команды к STK600, на которые получает ответы. Каждая команда приводит к выдаче ответа. И команды, и ответы могут иметь длину, превышающую максимальный размер пакета для конечных точек bulk, так что команда или ответ могут быть разделены на несколько пакетов IN/OUT. Короткий пакет показывает конец команды или ответа. 2.3 Драйвер USB Чтобы осуществить обмен по протоколу STK600, на компьютере хоста, где работает AVR Studio, должен быть установлен драйвер. Драйвер может быть написан заново с помощью пакета разработчика DDK (driver development kit). В составе AVR Studio 4 имеется драйвер USB, лицензированный от Jungo (www.jungo.com). При полученной лицензии от Jungo сторонние разработчики могут создать драйвер, аналогичный драйверу AVR Studio. Пользователь может также использовать и AVR Studio, и другие инструменты без изменения драйверов. Примечания: обновления firmware для STK600 могут осуществляться только с помощью специального программного обеспечения, поставляемого в составе AVR Studio. Это требует наличия установленного драйвера, поставляемого в составе AVR Studio (этот драйвер устанавливается инсталлятором AVR Studio). 2.4 Формат команды Как было уже упомянуто, хост может передавать в STK600 команды, и все возможные ответы на команды могут быть отправлены обратно хосту. На все команды STK600 выдаст ответ с тем же самым идентификатором ID, который был в команде. Первый байт в команде всегда является идентификатором команды (command ID), и первый байт ответа всегда является идентификатором ответа (answer ID). [3 Основные команды] Эти команды не относятся к какому-то конкретному режиму программирования. 3.1 CMD_SIGN_ON Эта команда возвращает уникальную строку подписи (сигнатуру) для STK600, который имеет эту реализацию протокола. Значение сигнатуры будет "STK600". Таблица 3-1. Формат команды CMD_SIGN_ON.
Таблица 3-2. Формат ответа.
3.2 CMD_SET_PARAMETER Хост может установить множество параметров в STK600. См. раздел 11 Параметры для описания каждого параметра. Таблица 3-3. Формат команды CMD_SET_PARAMETER для однобайтных значений параметра.
Таблица 3-4. Формат команды CMD_SET_PARAMETER для двухбайтных значений параметра.
Таблица 3-5. Формат ответа.
3.3 CMD_GET_PARAMETER Хост также может запросить из STK600 значения различных параметров. Таблица 3-6. Формат команды CMD_GET_PARAMETER.
Таблица 3-7. Формат ответа для однобайтного параметра, если CMD_GET_PARAMETER выполнена успешно.
Таблица 3-8. Формат ответа для двухбайтного параметра, если CMD_GET_PARAMETER выполнена успешно.
Таблица 3-9. Формат ответа, если CMD_GET_PARAMETER завершилась с ошибкой.
3.4 CMD_OSCCAL Эта команда производит процедуру калибровки, как описано в апноуте AVR053. Таблица 3-10. Формат команды CMD_OSCCAL.
Таблица 3-11. Формат ответа, если команда завершилась.
3.5 CMD_LOAD_ADDRESS Эта команда загружает адрес в STK600. Далее поступят команды Program Flash, Read Flash, Program EEPROM или Read EEPROM, которые будут работать с адресом, установленным этой командой. Команда CMD_LOAD_ADDRESS используется для режимов программирования high voltage parallel programming (HVPP, высоковольтное параллельное программирование), high voltage serial programming (HVSP, высоковольтное последовательное программирование) и low voltage serial programming (низковольтное последовательное программирование, ISP). Все вышеперечисленные команды, которые читают и записывают память, автоматически инкрементируют внутренний счетчик адреса STK600, так что команду CMD_LOAD_ADDRESS нужно вызвать только один раз. Таблица 3-12. Формат команды CMD_LOAD_ADDRESS.
Для типов памяти, адресуемых по словам (память программ FLASH), параметр Address является адресом слова. Если в таком адресе установлен бит 31, то это означает, что последующая операция чтения/записи будет выполнена на памяти, размер которой больше 64 килобайт. Это показывает STK600, что должна быть выполнена загрузка расширенного адреса (load extended address). См. даташит для устройств, у которых объем памяти больше 64 килобайт. Таблица 3-13. Формат ответа, если команда CMD_LOAD_ADDRESS выполнена успешно.
3.6 CMD_FIRMWARE_UPGRADE Когда хост пытается подключиться к программатору (STK600), то он проверяет версию firmware. Обновление firmware инициализируется, если на компьютере имеется более новая версия. STK600 может "перегрузиться" в режим обновления (upgrade mode) путем использования этой команды. Таблица 3-14. Формат команды CMD_FIRMWARE_UPGRADE.
Таблица 3-15. Формат ответа.
Если возвращенный статус STATUS_CMD_OK, то STK600 отключится и войдет в режим обновления. 3.7 CMD_LOAD_RC_ID_TABLE Эта команда отправляет программе firmware STK600 специальную таблицу Routing Card boardID. Каждая строка в этой таблице содержит в начале RC_id (идентификатор дочерней платы Routing Card, RC), затем SC_id (допустимая для использования с таким RC, Routing Card), и MAX_VTG (максимальное значение питания voltage target, допустимое для этой RC). Первые два байта данных таблицы содержат ревизию таблицы, старший байт MSB идет первым. Таблица 3-16. Формат команды CMD_LOAD_RC_ID_TABLE.
Последние 3 строки будут повторяться для каждого типа RC, пока не будет отправлена вся таблица. Таблица 3-17. Формат ответа.
3.8 CMD_LOAD_EC_ID_TABLE Эта команда отправляет программе firmware STK600 специальную таблицу Expansion Card boardID (таблица плат расширения EC). Каждая строка в этой таблице содержит EC_id (идентификатор EC), а также MAX_VTG (максимальное значение питания voltage target), допустимое для этой EC. Первые два байта данных таблицы содержат ревизию таблицы, старший байт MSB идет первым. Таблица 3-18. Формат команды CMD_LOAD_EC_ID_TABLE.
Последние 2 строки будут повторяться для каждого типа EC, пока не будет отправлена вся таблица. Таблица 3-19. Формат ответа.
3.9 CMD_CHECK_TARGET_CONNECTION Таблица 3-20. Формат команды CMD_CHECK_TARGET_CONNECTION.
Таблица 3-21. Формат ответа.
Эта команда запускает проверку соединения с target (программируемый микроконтроллер, подключенный через один из видов интерфейса программирования HVPP, HVSP, ISP). Значение ответа (Answer value) 6-битное, где биты 0-2 показывают состояние системы защиты от короткого замыкания, и биты 4-5 будут только показывать корректное соединение с target, если на target подано напряжение питания VTG. Бит 3 не используется ("Don’t care"). Таблица 3-22. Описания бит Answer value.
Бит, установленный в лог. 1, показывает соответствующую ошибку. Это может быть, например, если есть короткое замыкание сигнала, если не обнаружен target, или он неправильно установлен в сокет. Если возвращено значение 0x00, то это значит, что соединение с target в порядке. Параметр должен быть проверен перед запуском последовательности программирования, чтобы убедиться в правильности подключения target. Такая проверка должна быть выполнена также после выполнения последовательности программирования, если программирование завершилось неудачно, потому что может быть короткое замыкание в схеме. Короткое замыкание может быть определено только после выдачи команды входа в режим программирования (Enter Progmode), потому что схемы управления STK600 изолированы через ключи, когда STK600 находится в режиме ожидания (idle mode). [4 Команды программирования ISP (ISP Programming Commands)] Эти команды поддерживают программирование FLASH, EEPROM, байт фьюзов (fuse bytes), битов защиты (lock bits), сигнатуры, калибровки генератора (oscillator calibration) в режиме ISP. Прим. переводчика: ISP означает In-System Programming (программирование в системе). При этом способе программирования микроконтроллер (программируемое устройство) запаян прямо в конечное радиоэлектронное изделие, и подключается к программатору (STK500, STK600 или AVRISP) через 4 сигнальных провода MOSI, MISO, SCK, GND (режим последовательного программирования на основе интерфейса SPI). Через эти 4 провода идет обмен данными с программируемым устройством. Также к программатору идут 2 дополнительных провода VCC и ~RST. С помощью сигнала VCC программатор (STK500, STK600 или AVRISP) определяет, имеется ли питание на программируемом устройстве, а с помощью сигнала ~RST переводит устройство в режим программирования. Режим программирования ISP также иногда называют последовательным режимом программирования (Serial Program Mode), так как данные в программируемое устройство передаются бит за битом, последовательно. 4.1 CMD_ENTER_PROGMODE_ISP Эта команда переводит target device (программируемое устройство, микроконтроллер) в режим программирования. Таблица 4-1. Формат команды CMD_ENTER_PROGMODE_ISP.
Примечания: (1) Параметр pollValue показывает, после какого переданного через SPI байта нужно ожидать ответного байта, так как интерфейс SPI реализован двунаправленно (один байт выходит, и вместе с этим приходит другой байт). Таблица 4-2. Формат ответа.
4.2 CMD_LEAVE_PROGMODE_ISP Эта команда выводит STK600 (и программируемое устройство) из режима программирования. Устройство перейдет в нормальный рабочий режим выполнения программы. Таблица 4-3. Формат команды CMD_LEAVE_PROGMODE_ISP.
Таблица 4-4. Формат ответа.
4.3 CMD_CHIP_ERASE_ISP Эта команда выполнит очистку памяти чипа в target device (целевое программируемое устройство, микроконтроллер). Таблица 4-5. Формат команды CMD_CHIP_ERASE_ISP.
Таблица 4-6. Формат ответа.
4.4 CMD_PROGRAM_FLASH_ISP Эта команда будет программировать данные в память FLASH на target device, если завершится успешно. Таблица 4-7. Формат команды CMD_PROGRAM_FLASH_ISP.
Описание байта режима (Mode byte) Параметр mode важен, так как он определяет, как эта команда работает. Назначение битов в байте mode показано в таблице 4-8. Таблица 4-8. Биты в байте режима.
Бит Word/Page Mode выбирает - поддерживает устройство программирование страниц, или нет. Байты команды отличаются от режима программирования по словам (word mode) и программирования по страницам (page mode). В случае word mode используются команды ISP Write Program Memory и Read Program Memory. В случае page mode используются команды Load Page, Write Program Memory Page и Read Program Memory. Инструкция read (чтение) используется, если установлено Value Polling соответствующим битом в байте режима. Бит выбора Low/High byte (3-й бит в командах Load Page, Write Program Memory) обрабатывается STK600, так что оставьте этот бит очищенным. Значения инструкций набора команд SPI Serial Programming Instruction Set можно найти в даташите на программируемый target. В соответствии с mode выбираются различные методы завершения – Timed delay (задержка по времени), Value polling (опрос значения) или RDY/BSY polling (опрос готовности/занятости). Для операций со страницами, бит Write page указывает, должна ли быть выдана команда Write Program Memory Page после того, как данные загружены в буфер страницы. Для устройств, у которых размер страницы больше, чем STK600 можно передать в одной команде, должны быть выданы несколько команд CMD_PROGRAM_FLASH_ISP. В этом случае только последняя команда должна иметь установленным бит Write Page. Примечание: в файле XML установлены только биты 0-6, потому что бит 7 не является константой и должен управляться программным обеспечением компьютера (хоста) PC. Когда value polling используется чтобы определить, когда завершилась операция программирования, должен быть предоставлен poll1. Это значение показывает, что будет прочитано из устройства, когда осуществляется опрос при программировании. Это значение показывает, что программирование закончилось. Значение poll2 используется только для программирования EEPROM. Таблица 4-9. Формат ответа.
4.5 CMD_READ_FLASH_ISP Если выполнится успешно, то эта команда прочитает данные из памяти FLASH target device. Таблица 4-10. Формат команды CMD_READ_FLASH_ISP.
Таблица 4-11. Формат ответа, если CMD_READ_FLASH_ISP выполнилась.
Таблица 4-12. Формат ответа, если CMD_READ_FLASH_ISP не выполнилась.
4.6 CMD_PROGRAM_EEPROM_ISP См. команду CMD_PROGRAM_FLASH_ISP. 4.7 CMD_READ_EEPROM_ISP См. команду CMD_READ_FLASH_ISP command. 4.8 CMD_PROGRAM_FUSE_ISP Эта команда программирует фьюзы в target device. Таблица 4-13. Формат команды CMD_PROGRAM_FUSE_ISP.
Примечание (1): cmd1, cmd2, cmd3 и cmd4 это 4 байта команды низкого уровня ISP (из набора команд SPI Serial Programming Instruction Set, их можно найти в даташите на программируемое устройство), которая программирует фьюзы. Таблица 4-14. Формат ответа.
4.9 CMD_READ_FUSE_ISP Эта команда читает фьюзы в target device. Таблица 4-15. Формат команды CMD_READ_FUSE_ISP.
Примечания: (1) RetAddr показывает, после какого переданного через SPI байта нужно сохранить возвращенный байт, так как интерфейс SPI реализован двунаправленно, как дуплекс (в процессе вывода одного байта одновременно вдвигается на вход другой). Таблица 4-16. Формат ответа.
4.10 CMD_PROGRAM_LOCK_ISP См. CMD_PROGRAM_FUSE. Эта команда в основном делает то же, что и команда программирования фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для программирования байта защиты. 4.11 CMD_READ_LOCK_ISP См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта защиты. 4.12 CMD_READ_SIGNATURE_ISP См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения одного из байт сигнатуры. 4.13 CMD_READ_OSCCAL_ISP См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта OSCCAL. 4.14 CMD_SPI_MULTI Эта обычная команда может использоваться для выполнения любых команд ISP. Команда записывает указанное количество байт в шину SPI, и при этом также возвращает указанное количество байт. Таблица 4-17. Формат команды CMD_SPI_MULTI.
Если количество байт, которое нужно принять, оказалось больше, чем количество передаваемых байт, то firmware дополнит передачу необходимым количеством нулевых (0x00) байт. Это сделано для уменьшения затрат времени на передачу от PC к программатору (STK600). Таблица 4-18. Формат ответа.
[5 Команды параллельного режима программирования (Parallel Programming Mode)] Прим. переводчика: под параллельным режимом программирования понимается особый режим подключения программируемого чипа к программатору, когда количество сигналов для передачи данных программирования увеличивается. Параллельный режим программирования сокращенно называют PP (Parallel Programming). 5.1 CMD_ENTER_PROGMODE_PP Если выполнилась успешно, то эта команда переводит target device в режим программирования. Таблица 5-1. Формат команды CMD_ENTER_PROGMODE_PP.
Таблица 5-2. Формат ответа.
5.2 CMD_LEAVE_PROGMODE_PP Если выполнилась успешно, то эта команда выводит target device из режима программирования. Таблица 5-4. Формат команды CMD_LEAVE_PROGMODE_PP.
Таблица 5-5. Формат ответа.
5.3 CMD_CHIP_ERASE_PP Если выполнилась успешно, то эта команда произведет очистку памяти (chip erase) в target device. Таблица 5-6. Формат команды CMD_CHIP_ERASE_PP.
Таблица 5-7. Формат ответа (одинаковый для всех результатов).
Таблица 5-8. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_CHIP_ERASE_PP.
5.4 CMD_PROGRAM_FLASH_PP Если выполнилась успешно, то эта команда запрограммирует данные в память FLASH target device. Для устройств, у которых FLASH организована странично, то используемые в этой команде адрес данных (data address) размер (size) должны соответствовать устройству. Например, одна команда ProgramFlash используется для программирования одной страницы в target device. Таблица 5-9. Формат команды CMD_PROGRAM_FLASH_PP.
Описание байта режима mode • Bit 0: этот бит показывает, используется байтовое '0' или страничное '1' программирование. Таблица 5-10. Биты конфигурации размера страницы.
• Bit 4-5 не используются. Примечание: в файле XML установлены только биты 0-3, так что биты 6-7 не статические, и их значением должно управлять программное обеспечение фронтэнда (эти функции выполняет среда AVR Studio). Таблица 5-11. Формат ответа (одинаковый для всех результатов).
Таблица 5-12. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_PROGRAM_FLASH_PP.
5.5 CMD_READ_FLASH_PP Если выполнилась успешно, то эта команда прочитает данные памяти FLASH target device. Для устройств, у которых FLASH организована странично, то используемые в этой команде адрес данных (data address) размер (size) должны соответствовать устройству. Например, одна команда ReadFlash используется для чтения одной страницы в target device. Таблица 5-13. Формат команды CMD_READ_FLASH_PP.
Таблица 5-14. Формат ответа, если команда CMD_READ_FLASH_PP была выполнена.
5.6 CMD_PROGRAM_EEPROM_PP Если выполнилась успешно, то эта команда запрограммирует одну страницу памяти EEPROM target device. Формат команды: см. CMD_PROGRAM_FLASH_PP. 5.7 CMD_READ_EEPROM_PP Если выполнилась успешно, то эта команда прочитает данные памяти EEPROM target device. Формат команды: см. CMD_READ_FLASH_PP 5.8 CMD_PROGRAM_FUSE_PP XML путь: /AVRPART/ICE_SETTINGS/STK600/PpProgramFuse/ Таблица 5-15. Формат команды CMD_PROGRAM_FUSE_PP.
Таблица 5-16. Формат ответа.
Таблица 5-17. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_PROGRAM_FUSE_PP.
5.9 CMD_READ_FUSE_PP XML путь: /AVRPART/ICE_SETTINGS/STK600/PpReadFuse/ Таблица 5-18. Формат команды CMD_READ_FUSE_PP.
Таблица 5-19. Формат ответа, если команда была выполнена.
5.10 CMD_PROGRAM_LOCK_PP См. CMD_PROGRAM_FUSE. Примечание: должен быть отправлен адрес, но он будет игнорироваться firmware. 5.11 CMD_READ_LOCK_PP См. CMD_READ_FUSE_PP. Примечание: должен быть отправлен адрес, но он будет игнорироваться firmware. 5.12 CMD_READ_SIGNATURE_PP См. CMD_READ_FUSE. 5.13 CMD_READ_OSCCAL_PP См. CMD_READ_FUSE. 5.14 CMD_SET_CONTROL_STACK Выгружает стек управления (Control stack) в STK. Это используется и для PP, и для HVSP. Примечание: Control stack должен быть всегда выгружен перед выполнением любой команды программирования в высоковольтном режиме, если питание STK600 было выключено. Чтобы проверить, имеет ли контроллер допустимый стек управления, выполните чтение PARAM_CONTROLLER_INIT. См. раздел 11.7: PARAM_CONTROLLER_INIT. Таблица 5-20. Формат команды CMD_SET_CONTROL_STACK.
Таблица 5-21. Формат ответа (одинаковый для всех результатов).
[6 Команды высоковольтного программирования HVSP (High Voltage Serial Programming Commands)] Этот раздел описывает команды последовательного высоковольтного режима программирования (High Voltage Serial Programming, HVSP). Имейте в виду, что для HVSP, как и для параллельного программирования PP, нужна команда SetControlStack. Описание SetControlStack можно найти в секции 5.14 (относится к Parallel Programming, PP). 6.1 CMD_ENTER_PROGMODE_HVSP Если завершилась успешно, эта команда вводит target device в режим программирования HVSP. Таблица 6-1. Формат команды CMD_ENTER_PROGMODE_HVSP.
Таблица 6-2. Формат ответа.
6.2 CMD_LEAVE_PROGMODE_HVSP Если завершилась успешно, эта команда выводит target device из режима программирования HVSP. Таблица 6-3. Формат команды CMD_LEAVE_PROGMODE_HVSP.
Таблица 6-4. Формат ответа.
6.3 CMD_CHIP_ERASE_HVSP Если завершилась успешно, эта команда стирает содержимое памяти (chip erase) на target device. Таблица 6-5. Формат команды CMD_CHIP_ERASE_HVSP.
Таблица 6-6. Формат ответа.
6.4 CMD_PROGRAM_FLASH_HVSP Если завершилась успешно, эта команда запрограммирует память FLASH на target device. Для устройств, у которых FLASH организована на основе страниц, адрес данных и размер, используемые для этой команды, должны соответствовать программируемому устройству. Например, одна команда ProgramFlash используется для программирования одной страницы на target device. Таблица 6-7. Формат команды CMD_PROGRAM_FLASH_HVSP.
Описание байта режима (mode) • Bit 0: этот бит показывает, будет использоваться побайтное '0' или страничное '1' программирование. Таблица 6-8. Конфигурация бит размера страницы (page size).
• Bit 4-5 не используются. Примечание: в файле XML установлены только биты 0-3, так что биты 6-7 не статические, и их значением должно управлять программное обеспечение фронтэнда (эти функции выполняет среда AVR Studio). Таблица 6-9. Формат ответа.
6.5 CMD_READ_FLASH_HVSP Если завершилась успешно, эта команда прочитает память FLASH на target device. Для устройств, у которых FLASH организована на основе страниц, адрес данных и размер, используемые для этой команды, должны соответствовать устройству. Например, одна команда ReadFlash используется для чтения одной страницы на target device. Таблица 6-10. Формат команды CMD_READ_FLASH_HVSP.
Таблица 6-11. Формат ответа, если команда выполнилась.
6.6 CMD_PROGRAM_EEPROM_HVSP См. описание команды CMD_WRITE_FLASH_HVSP. 6.7 CMD_READ_EEPROM_HVSP См. описание команды CMD_READ_FLASH_HVSP. 6.8 CMD_PROGRAM_FUSE_HVSP Эта команда программирует 1 байт фьюзов, указанный байтом адреса фьюзов (Fuse Address). Таблица 6-12. Формат команды CMD_PROGRAM_FUSE_HVSP.
Таблица 6-13. Формат ответа.
6.9 CMD_READ_FUSE_HVSP Эта команда читает 1 байт фьюзов, указанный байтом адреса фьюзов (Fuse Address). Таблица 6-14. Формат команды CMD_READ_FUSE_HVSP.
Таблица 6-15. Формат ответа, если команда выполнилась.
6.10 CMD_PROGRAM_LOCK_HVSP См. CMD_PROGRAM_FUSE_HVSP. 6.11 CMD_READ_LOCK_HVSP См. CMD_READ_FUSE_HVSP. 6.12 CMD_READ_SIGNATURE_HVSP См. CMD_READ_FUSE_HVSP. 6.13 CMD_READ_OSCCAL_HVSP См. CMD_READ_FUSE_HVSP. [7 AVR8 JTAG] Все команды AVR8 jtag начинаются с идентификатора CMD_JTAG_AVR (0x90). В STK600 заложена реализация программирования через JTAG, эквивалентная аппаратному отладчику JTAGICE mkII (см. T0152-0007 JTAGICE mkII Communication Protocol, или [5]), но без структуры сообщений JTAGICE mkII и пакетов fifo. Например, в STK600 используется только тело сообщения MESSAGE_BODY. Таблица 7-1. Общий формат команды CMD_JTAG_AVR.
Таблица 7-2. Общий формат ответа.
Перед выдачей команд AVR8 JTAG должны быть корректно установлены следующие параметры (с помощью команды CMD_SET_PARAMETER): • PARAM_JTAG_ALLOW_FULL_PAGE_STREAM 7.1 Чтение и запись памяти (Memory Read / Write) Для команд CMND_WRITE_MEMORY (запись памяти) и CMND_READ_MEMORY (чтение памяти) определены следующие режимы памяти (значения те же самые, что и для jtagice mkII): Таблица 7-3. Допустимые значения результата (Result Values) для ответа на эту команду.
7.1.1 CMND_READ_MEMORY Эта команда читает указанное количество байт из выбранной памяти цели (target MCU, подключенный отлаживаемый микроконтроллер). Перед использованием этой команды target MCU должен находиться в режиме программирования (вход туда через CMND_ENTER_PROGMODE). Таблица 7-4. Формат команды CMND_READ_MEMORY.
Таблица 7-5. Формат ответа.
7.1.2 CMND_WRITE_MEMORY Эта команда записывает указанное количество байт в выбранную память цели (target MCU, подключенный отлаживаемый микроконтроллер). Перед использованием этой команды target MCU должен находиться в режиме программирования (вход туда через CMND_ENTER_PROGMODE). Таблица 7-6. Формат команды CMND_WRITE_MEMORY.
Таблица 7-7. Формат ответа.
7.1.3 CMND_RESET Эта команда поместит инструкцию RESET (сброс) в регистр инструкций JTAG цели (target MCU). Перед использованием этой команды target MCU должен находиться в режиме программирования (вход туда через CMND_ENTER_PROGMODE). Таблица 7-8. Формат команды CMND_WRITE_MEMORY.
Таблица 7-9. Формат ответа.
7.1.4 CMND_ENTER_PROGMODE Эта команда разрешает обмен данными между аппаратурой STK600 и target MCU, и она должна быть первой командой, перед тем как в STK600 отправлена первая команда JTAG. После приема этой команды MCU удерживается в состоянии сброса (reset state), и при этом разрешены чтение и запись памяти. Таблица 7-10. Формат команды CMND_ENTER_PROGMODE.
Таблица 7-11. Формат ответа.
7.1.5 CMND_LEAVE_PROGMODE Эта команда освобождает target MCU, при этом в нем запускается программа firmware по вектору сброса. Таблица 7-12. Формат команды CMND_LEAVE_PROGMODE.
Таблица 7-13. Формат ответа.
7.1.6 CMND_CHIP_ERASE Эта команда производит очистку (erase) target MCU - вся память сбрасывается в состояние по умолчанию (все значения равны 0xFF), и сбрасывает биты защиты (lock bits переводятся в состояние по умолчанию, память становится незащищенной). [8 AVR32 JTAG] Все команды AVR32 jtag, за исключением команд для входа в режим программирования и выхода из него, начитаются с CMD_JTAG_AVR32 (0x80). В STK600 заложена реализация программирования через JTAG, эквивалентная аппаратному отладчику JTAGICE mkII (см. T0152-0007 JTAGICE mkII Communication Protocol, или [5]), но без структуры сообщений JTAGICE mkII и пакетов fifo. Например, в STK600 используется только тело сообщения MESSAGE_BODY. Перед выдачей любых команд AVR32 JTAG должны быть корректно установлены следующие параметры (с помощью команды CMD_SET_PARAMETER): • PARAM_JTAG_DAISY_BITS_BEFORE 8.1 CMD_ENTER_PROGMODE_JTAG_AVR32 Эта команда разрешает обмен с интерфейсом JTAG на платформе AVR32. Эта команда должна быть выполнена первой из всех команд AVR32 JTAG. Таблица 8-1. Формат команды CMD_ENTER_PROGMODE_JTAG_AVR32.
Таблица 8-2. Формат ответа.
8.2 CMD_LEAVE_PROGMODE_JTAG_AVR32 Эта команда запрещает работу интерфейса JTAG. Таблица 8-3. Формат команды CMD_LEAVE_PROGMODE_JTAG_AVR32.
Таблица 8-4. Формат ответа.
8.3 CMD_RESET_AVR32 Эта команда помещает значение для сброса в регистр сброса JTAG (JTAG reset register) target MCU. Таблица 8-5. Формат команды CMD_RESET_AVR32.
Таблица 8-6. Формат ответа.
8.4 CMD_SAB_WRITE_AVR32 Эта команда записывает слово по указанному адресу SAB в target MCU. Таблица 8-7. Формат команды CMD_SAB_WRITE_AVR32.
Таблица 8-8. Формат ответа.
8.5 CMD_SAB_READ_AVR32 Эта команда читает слово по указанному адресу SAB из target MCU. Таблица 8-9. Формат команды CMD_SAB_READ_AVR32.
Таблица 8-10. Формат ответа.
8.6 CMD_BLOCK_WRITE_AVR32 Эта команда записывает блок данных, начиная с указанного адреса SAB. N должно быть меньше 64, чтобы количество данных удовлетворяло максимальному размеру данных буфера STK600. Таблица 8-11. Формат команды CMD_BLOCK_WRITE_AVR32.
Таблица 8-12. Формат ответа.
8.7 CMD_BLOCK_READ_AVR32 Эта команда читает блок данных, начиная с указанного адреса SAB. N должно быть меньше 64, чтобы количество данных удовлетворяло максимальному размеру данных буфера STK600. Таблица 8-13. Формат команды CMD_BLOCK_READ_AVR32.
Таблица 8-14. Формат ответа.
8.8 CMD_NEXUS_WRITE_AVR32 Эта команда записывает слово в указанный регистр nexus. Это эквивалентно записи по адресу SAB OCD_REGISTER + < register > * 4. Таблица 8-15. Формат команды CMD_NEXUS_WRITE_AVR32.
Таблица 8-16. Формат ответа.
8.9 CMD_NEXUS_READ_AVR32 Эта команда читает слово из указанного регистра nexus. Это эквивалентно чтению по адресу SAB OCD_REGISTER + < register > * 4. Таблица 8-17. Формат команды CMD_NEXUS_READ_AVR32.
Таблица 8-18. Формат ответа.
[9 Протокол XPROG] Протокол программирования XPROG используется для устройств ATxmega, и он может использоваться как для физического интерфейса JTAG, так и для физического интерфейса PDI. Все многобайтные значения (например поля адреса или длины) имеют порядок байт big endian (старший байт MSB идет первым в последовательности). 9.1 CMD_XPROG_SETMODE Перед использованием любой команды XPROG должен быть выбран желаемый интерфейс для протокола XPROG. Это может быть PDI или JTAG. Таблица 9-1. Формат команды CMD_XPROG_SETMODE.
Таблица 9-2. Формат ответа.
9.2 CMD_XPROG Это враппер STK600 для всех специфических команд XPROG. Таблица 9-3. Формат команды CMD_XPROG.
Таблица 9-4. Формат ответа.
Команды XPROG описываются далее. Значение offset показывает смещение части XPROG относительно команды CMD_XPROG. Чтобы найти абсолютное смещение в команде STK600, добавьте 1. 9.2.1 XPRG_ENTER_PROGMODE Эта команда разрешает режим программирования в устройстве путем разрешения аппаратуры интерфейса программирования и отправки ключа программирования. Примечание перед использованием этой инструкции должен быть установлен интерфейс программирования (PDI или JTAG) специальной командой установки режима. Таблица 9-5. Формат команды XPRG_ENTER_PROGMODE.
Таблица 9-6. Формат ответа.
9.2.2 XPRG_LEAVE_PROGMODE Эта команда осуществляет выход из режима программирования устройства путем очистки флагов сброса и запрета аппаратуры интерфейса программирования. Таблица 9-7. Формат команды XPRG_LEAVE_PROGMODE.
Таблица 9-8. Формат ответа.
9.2.3 XPRG_SET_PARAMETER Для корректной работы в программаторе нужно установить некоторые параметры. Используйте для инициализации интерфейса XPROG следующую команду: Таблица 9-9. Формат команды XPRG_SET_PARAMETER.
Таблица 9-10. Формат ответа.
Все параметры, перечисленные в приложении, должны быть установлены для того, чтобы инициализировать интерфейс. Примечание: последние ревизии протокола программирования XPROG могут включать в себя новые параметры. 9.2.4 XPRG_ERASE Области памяти XMega, фьюзы (fuses) и биты защиты (lockbits) могут быть очищены на разных уровнях: chip erase (это очищает полностью как области памяти, так и биты защиты), application erase (очищает только код приложения), boot erase (очистка секции загрузки) и EEPROM erase (очищает данные приложения). Здесь также можно очистить отдельные страницы в flash и EEPROM. Таблица 9-11. Формат команды XPRG_ERASE.
Таблица 9-11a. Уровни очистки памяти XMEGA.
Таблица 9-12. Формат ответа.
9.2.5 XPRG_WRITE_MEM Эта команда осуществляет поддержку программирования различных областей памяти XMega: приложения, загрузки, EEPROM. Этой командой также программируются фьюзы, биты защиты и сигнатура пользователя. Таблица 9-13. Формат команды XPRG_WRITE_MEM.
Таблица 9-14. Формат ответа.
9.2.6 XPRG_READ_MEM Эта команда поддерживает чтение разных областей памяти XMega: приложения, загрузки, EEPROM, сигнатуры, фьюзы, биты защиты, заводские значения калибровки. Таблица 9-15. Формат команды XPRG_READ_MEM.
Таблица 9-16. Формат ответа.
9.2.7 XPRG_READ_CRC Эта команда запускает генератор CRC и возвращает трехбайтную контрольную сумму CRC. Таблица 9-17. Формат команды XPRG_READ_CRC.
Таблица 9-18. Формат ответа.
[10 Возвращаемые значения (Return Values)] В этой секции описаны все возможные возвращаемые значения, и что именно они означают. 10.1 STATUS_CMD_OK успешное завершение (Success), команда выполнилась успешно. 10.2 Предупреждения (Warnings) Все предупреждения имеют MSB установленным в 1 и MSB-1 сброшенным в 0. Таблица 10-2. Значения возврата, коды предупреждений.
10.3 Ошибки (Errors) Все ошибки имеют установленными в 1 и MSB, и MSB-1. Таблица 10-3. Значения возврата, коды ошибок.
11. Параметры Следующие параметры могут быть прочитаны и/или записаны командами CMD_GET_PARAM и CMD_SET_PARAM (поле R/W означает тип доступа R на чтение, W на запись, RW и на чтение и на запись): Таблица 11-1. Однобайтные параметры.
Таблица 11-2. Двухбайтные параметры.
11.4 PARAM_VTARGET Параметр напряжения питания цели (target voltage) указывается в вольтах x10. Например, значение параметра 42 (десятичное) соответствует 4.2V. Примечание: этот параметр не может быть установлен, когда STK600 находится в режиме программирования. Максимальное значение target voltage зависит от того, какая смонтирована плата разводки/сокета (routing/socket board). Чтобы узнать максимально допустимое значение target voltage перед установкой нового значения, должен быть предварительно прочитан идентификатор платы (board-id). Максимальное напряжение для платы можно найти в файле "targetboard.xml". 11.5 PARAM_STATUS_TGT_CONN Этот параметр возвращает то же самое значение статуса, что и CMD_CHECK_TARGET_CONNECTION, см. раздел 3.9. Отличие между использованием команды и GET_PARAM в том, что биты 4-5 обновляются только после того, как команда запущена. 11.6 PARAM2_SCK_DURATION Это двухбайтное значение, которое устанавливает рабочую частоту ISP. Когда используется интерфейс программирования ISP, то тактовая частота ISP не должна превышать максимальное значение, которое поддерживает target device (программируемый микроконтроллер). Примечание: максимальное значение частоты тактов ISP зависит от системной частоты программируемого устройства, коэффициента деления внутреннего прескалера и т. п. STK600 поддерживает частоты ISP от 1953 Гц до 8.0 МГц. Значение PARAM_SCK_DURATION можно найти с помощью следующего алгоритма: unsigned int CalcSckDur(int freq) { sck_dur = ceil((16e6/(2*freq))-1); return __min(4096, sck_dur); // 4096 является недопустимым значением. } 11.7 PARAM_CONTROLLER_INIT Этот параметр внутренне устанавливается в 0, когда сбрасывается управляющий MCU программатора. ПО хоста может записать туда любое значение в этот параметр, и потом прочитать его обратно. Назначение параметра - определить, пропадало ли питание STK600. Таким образом ПО хоста может узнать, нужно ли выполнять инициализацию программатора заново перед тем, как продолжить работу с ним. К примеру, если возвращенное значение параметра 0, то должна быть выполнена команда CMD_SET_CONTROL_STACK до того, как может быть выдана любая команда высоковольтного программирования. 11.8 PARAM_DISCHARGEDELAY Имя параметра переводится как "параметр задержки для разряда". Этот параметр устанавливает период времени, в течение которого сигнал сброса имеет высокое сопротивление каждый раз, когда он должен быть переключен. Назначение параметра - уменьшить ток, который происходит из-за разряда/заряда конденсатора, который иногда подключен к сигналу сброса (reset pin). Когда сброс переключается, то подключается резистор номиналом 510 Ом, который ограничивает пиковый ток до значения, допустимого для внутренних компонентов STK600. Задержка должна быть установлена в значение t > 510 Ом * C. Если конденсатор не подключен, то этот параметр может быть установлен в 0. 11.9 PARAM2_AREF0 Значение параметра указано в вольтах x100, к примеру значение 449 (десятичное) соответствует 4.49V. Максимальное значение 5.5V (соответствует значению параметра 550). 11.10 PARAM2_AREF1 То же самое, что и AREF0. 11.11 PARAM2_CLOCK_CONF Это двухбайтное значение (16 бит), которое конфигурирует генератор чипа. Биты 15..12 определяют биты OCT3..OCT0 (от них зависит значение OCT), а биты 11..2 определяют биты DAC9..DAC0 (от них зависит значение DAC). Биты 1 и 0 не используются. Частота вычисляется по формуле: Формула 11-1. Частота тактового генератора. Формула 11-2. OCT. Формула 11-3. DAC. 11.12 PARAM_SOCKETCARD_ID Возвращает байт, который идентифицирует карту сокета (socket card). Файл "targetboard.xml" содержит список карт и значения их идентификаторов (card id). 11.13 PARAM_ROUTINGCARD_ID Возвращает байт, который идентифицирует карту разводки (routing card). Файл "targetboard.xml" содержит список карт и значения их идентификаторов (card id). 11.14 PARAM_EXPCARD_ID Возвращает байт, который идентифицирует карту расширения (expansion card). Файл "targetboard.xml" содержит список карт и значения их идентификаторов (card id). 11.15 PARAM_SW_MAJOR_SLAVE1 Параметры PARAM_SW_MAJOR_SLAVE1 и PARAM_SW_MINOR_SLAVE1 возвращают версию firmware для подчиненного MCU 1 (slave 1 mcu). 11.16 PARAM_SW_MINOR_SLAVE1 См. раздел 11.15. 11.17 PARAM_SW_MAJOR_SLAVE2 Параметры PARAM_SW_MAJOR_SLAVE2 и PARAM_SW_MINOR_SLAVE2 возвращают версию firmware для подчиненного MCU 2 (slave 2 mcu). 11.18 PARAM_SW_MINOR_SLAVE2 См. раздел 11.17. 11.19 PARAM2_RC_ID_TABLE_REV Таблица ревизии идентификатора карты разводки (Routingcard Board ID table revision). 11.20 PARAM2_EC_ID_TABLE_REV Таблица ревизии идентификатора карты расширения (Expansioncard Board ID table revision). 11.21 PARAM_BOARD_ID_STATUS 0x00 = OK 11.22 PARAM_RESET Используется для изменения состояния сигнала сброса в лог. 1 или лог. 0. Будет работать только тогда, когда плата находится в режиме ожидания (idle). Если используется, когда стартеркит STK600 находится в режиме программирования, то параметр будет игнорироваться. 11.23 PARAM_RESET_POLARITY Для обратной совместимости с STK500 этот параметр устанавливает полярность сигнала сброса. 11.24 PARAM_JTAG_ALLOW_FULL_PAGE_STREAM Двоичное значение, которое показывает, поддерживает ли target MCU полное потоковое заполнение страницы данными, или каждый байт должен сопровождаться возвратом состояние ожидание (имеется в виду состояние jtag). 11.25 PARAM_JTAG_EEPROM_PAGE_SIZE Используется для установки размера страницы EEPROM (в байтах). 11.26 PARAM2_JTAG_FLASH_PAGE_SIZE Используется для установки размера страницы FLASH (в байтах). 11.27 PARAM2_JTAG_FLASH_SIZE_H Используется для установки размера FLASH (в байтах). Так как эта величина может превысить 0xffff (64k), то величина разделена на два отдельных параметра, PARAM2_JTAG_FLASH_SIZE_H и PARAM2_JTAG_FLASH_SIZE_L. 11.28 PARAM2_JTAG_FLASH_SIZE_L См. PARAM2_JTAG_FLASH_SIZE_H 11.29 PARAM_JTAG_DAISY_BITS_BEFORE Общеизвестно, что на шине JTAG могут быть несколько управляемых устройств, соединенных друг за другом в цепочку (JTAG daisy chain). Когда target MCU является частью цепочки JTAG, STK600 должен знать, сколько бит нужно пропустить перед и после target. Значения PARAM_JTAG_DAISY_BITS_BEFORE и PARAM_JTAG_DAISY_BITS_AFTER указывают, сколько нужно пропустить бит регистра инструкций. В фазе данных JTAG (JTAG data phase) у всех прочих устройств, не являющихся целью, выбран регистр SKIP (пропуск данных). Регистр SKIP является однобитным. Параметры PARAM_JTAG_DAISY_UNITS_BEFORE и AFTER указывают количество устройств перед и после target device, и таким образом общую длину регистра SKIP для игнорирования ненужных данных. Например, если target AVR размещен вторым в цепочке из 4 устройств, то длины регистра инструкций составят 2, 2 и 5 соответственно. Таблица 11.5. Коды параметров определяющих положение target в цепочке JTAG.
11.30 PARAM_JTAG_DAISY_BITS_AFTER См. PARAM_JTAG_DAISY_BITS_BEFORE. 11.31 PARAM_JTAG_DAISY_UNITS_BEFORE См. PARAM_JTAG_DAISY_BITS_BEFORE. 11.32 PARAM_JTAG_DAISY_UNITS_AFTER См. PARAM_JTAG_DAISY_BITS_BEFORE. [12 Значения параметров в файлах XML] Набор параметров является специфичным для определенного устройства AVR, так что наборы установок параметров находятся в файле описания устройства, который имеет формат XML (XML part description file). Здесь описывается, где можно найти значения параметров STK600 в файле XML, специфичном для конкретного устройства. После того, как Вы установили AVR Studio 4, все файлы XML можно найти в папке "%ProgramFiles%\Atmel\AVR Tools\PartDescriptionFiles\. Прим. переводчика: для Atmel Studio 6.0 файлы XML расположены во многих папках. Файлы описания устройств, относящиеся к STK600, находятся в папке c:\Program Files\Atmel\Atmel Studio 6.0\tools\STK600\xml\. В других папках под папкой tools находятся XML-файлы для другого инструментария (AVRDragon, AVRISPmkII, JTAGICEmkII, STK500 и т. п.). Рис. 12-1. Файл XML, открытый в XML notepad. Откройте файл XML в редакторе или просмотрщике XML (это могут быть к примеру XML Notepad или Internet Explorer). Все значения, привязанные к устройству AVR для STK600, размещены в узле STK600. Для параметров команды CMD_ENTER_PROGMODE_ISP см. /AVRPART/ICE_SETTINGS/STK600/IspEnterProgMode. [13 Пример последовательности команд] В этом разделе содержатся примеры - как можно подключиться к STK600 от компьютера PC (фронтэнд) и как прочитать сигнатуру устройства AVR. См. раздел 2.4 Формат команды для описания команд и их параметров. 13.1 Подключение Вот последовательность команд, которые должен отправить PC к STK600 для подключения: • CMD_SIGN_ON 13.2 Чтение сигнатуры Здесь приведена последовательность команд, которые должен отправить PC к STK600, чтобы прочитать сигнатуру устройства AVR через интерфейс программирования ISP. Имейте в виду, что для чтения сигнатуры устройства оно должно быть подключено, запитано, и получать правильное тактирование. • CMD_CHECK_STATUS_TGT_CONN 13.3 Настройка вывода в лог протокола обмена STK600 Чтобы получить дополнительную подробную информацию от том, как происходит реальный обмен между AVR Studio и STK600, можно настроить вывод информации по обмену в текстовый файл (лог). Это можно осуществить путем добавления ключа в реестр Windows. 1. Запустите редактор реестра (regedit) и перейдите в узел реестра HKEY_CURRENT_USER\Software\Atmel\AVRTools\STK500\. Теперь весь обмен между STK600 и AVR Studio будет выводиться в файл c:\STK600com.txt. Ниже показан пример лога при чтении через ISP сигнатуры устройства ATmega2560. Сравните данные команд и ответов с таблицами формата в разделе 4.9. Рис. 13-3. Лог обмена на примере чтения сигнатуры устройства ATmega2560 через ISP. [Приложение] A.1 Команды и параметры // *** Константы основных команд *** #define CMD_SIGN_ON 0x01 #define CMD_SET_PARAMETER 0x02 #define CMD_GET_PARAMETER 0x03 #define CMD_OSCCAL 0x05 #define CMD_LOAD_ADDRESS 0x06 #define CMD_FIRMWARE_UPGRADE 0x07 #define CMD_RESET_PROTECTION 0x0A #define CMD_CHECK_TARGET_CONNECTION 0x0D #define CMD_LOAD_RC_ID_TABLE 0x0E #define CMD_LOAD_EC_ID_TABLE 0x0F #define CMD_CLEAR_RC_ID_TABLE 0x09 // *** Константы команд ISP *** #define CMD_ENTER_PROGMODE_ISP 0x10 #define CMD_LEAVE_PROGMODE_ISP 0x11 #define CMD_CHIP_ERASE_ISP 0x12 #define CMD_PROGRAM_FLASH_ISP 0x13 #define CMD_READ_FLASH_ISP 0x14 #define CMD_PROGRAM_EEPROM_ISP 0x15 #define CMD_READ_EEPROM_ISP 0x16 #define CMD_PROGRAM_FUSE_ISP 0x17 #define CMD_READ_FUSE_ISP 0x18 #define CMD_PROGRAM_LOCK_ISP 0x19 #define CMD_READ_LOCK_ISP 0x1A #define CMD_READ_SIGNATURE_ISP 0x1B #define CMD_READ_OSCCAL_ISP 0x1C #define CMD_SPI_MULTI 0x1D // *** Константы команд параллельного программирования (PP) *** #define CMD_ENTER_PROGMODE_PP 0x20 #define CMD_LEAVE_PROGMODE_PP 0x21 #define CMD_CHIP_ERASE_PP 0x22 #define CMD_PROGRAM_FLASH_PP 0x23 #define CMD_READ_FLASH_PP 0x24 #define CMD_PROGRAM_EEPROM_PP 0x25 #define CMD_READ_EEPROM_PP 0x26 #define CMD_PROGRAM_FUSE_PP 0x27 #define CMD_READ_FUSE_PP 0x28 #define CMD_PROGRAM_LOCK_PP 0x29 #define CMD_READ_LOCK_PP 0x2A #define CMD_READ_SIGNATURE_PP 0x2B #define CMD_READ_OSCCAL_PP 0x2C #define CMD_SET_CONTROL_STACK 0x2D // *** Константы команд STK HVSP (последовательное высоковольтное // программирование) *** #define CMD_ENTER_PROGMODE_HVSP 0x3D #define CMD_LEAVE_PROGMODE_HVSP 0x3E #define CMD_CHIP_ERASE_HVSP 0x32 #define CMD_PROGRAM_FLASH_HVSP 0x33 #define CMD_READ_FLASH_HVSP 0x34 #define CMD_PROGRAM_EEPROM_HVSP 0x35 #define CMD_READ_EEPROM_HVSP 0x36 #define CMD_PROGRAM_FUSE_HVSP 0x37 #define CMD_READ_FUSE_HVSP 0x38 #define CMD_PROGRAM_LOCK_HVSP 0x39 #define CMD_READ_LOCK_HVSP 0x3A #define CMD_READ_SIGNATURE_HVSP 0x3B #define CMD_READ_OSCCAL_HVSP 0x3C // *** Константы команд протокола XPROG *** #define CMD_XPROG 0x50 #define CMD_XPROG_SETMODE 0x51 // *** Команды программирования AVR32 JTAG *** #define CMD_JTAG_AVR32 0x80 #define CMD_ENTER_PROGMODE_JTAG_AVR32 0x81 #define CMD_LEAVE_PROGMODE_JTAG_AVR32 0x82 // *** Команды программирования AVR JTAG *** #define CMD_JTAG_AVR 0x90 // *** Константы состояния (Status constants) *** // Константа успеха #define STATUS_CMD_OK 0x00 // Предупреждения (Warnings) #define STATUS_CMD_TOUT 0x80 #define STATUS_RDY_BSY_TOUT 0x81 #define STATUS_SET_PARAM_MISSING 0x82 // Ошибки (Errors) #define STATUS_CMD_FAILED 0xC0 #define STATUS_CMD_UNKNOWN 0xC9 #define STATUS_CMD_ILLEGAL_PARAMETER 0xCA // Состояние (Status) #define STATUS_CONN_FAIL_MOSI 0x01 #define STATUS_CONN_FAIL_RST 0x02 #define STATUS_CONN_FAIL_SCK 0x04 #define STATUS_TGT_NOT_DETECTED 0x00 #define STATUS_ISP_READY 0x10 #define STATUS_TGT_REVERSE_INSERTED 0x20 // Состояние аппаратуры (hw_status), // Биты в переменной статуса // Bit 0-3: Slave MCU // Bit 4-7: Master MCU #define STATUS_AREF_ERROR 0 // Установлено в '1', если AREF имеет КЗ. #define STATUS_VTG_ERROR 4 // Установлено в '1', если VTG имеет КЗ. #define STATUS_RC_CARD_ERROR 5 // Установлено в '1', если идентификатор платы (board id) // изменился, хотя плата была запитана. #define STATUS_PROGMODE 6 // Установлено в '1', если плата в режиме программирования. #define STATUS_POWER_SURGE 7 // Установлено в '1', если плата потребляет слишком большой ток. // *** Константы параметров для величин из 1 байта *** #define PARAM_HW_VER 0x90 #define PARAM_SW_MAJOR 0x91 #define PARAM_SW_MINOR 0x92 #define PARAM_VTARGET 0x94 #define PARAM_RESET_POLARITY 0x9E #define PARAM_CONTROLLER_INIT 0x9F #define PARAM_STATUS_TGT_CONN 0xA1 #define PARAM_DISCHARGEDELAY 0xA4 #define PARAM_SOCKETCARD_ID 0xA5 #define PARAM_ROUTINGCARD_ID 0xA6 #define PARAM_EXPCARD_ID 0xA7 #define PARAM_SW_MAJOR_SLAVE1 0xA8 #define PARAM_SW_MINOR_SLAVE1 0xA9 #define PARAM_SW_MAJOR_SLAVE2 0xAA #define PARAM_SW_MINOR_SLAVE2 0xAB #define PARAM_BOARD_ID_STATUS 0xAD #define PARAM_RESET 0xB4 #define PARAM_JTAG_ALLOW_FULL_PAGE_STREAM 0x50 #define PARAM_JTAG_EEPROM_PAGE_SIZE 0x52 #define PARAM_JTAG_DAISY_BITS_BEFORE 0x53 #define PARAM_JTAG_DAISY_BITS_AFTER 0x54 #define PARAM_JTAG_DAISY_UNITS_BEFORE 0x55 #define PARAM_JTAG_DAISY_UNITS_AFTER 0x56 // *** Константы параметров для величин из 2 байт *** #define PARAM2_SCK_DURATION 0xC0 #define PARAM2_CLOCK_CONF 0xC1 #define PARAM2_AREF0 0xC2 #define PARAM2_AREF1 0xC3 #define PARAM2_JTAG_FLASH_SIZE_H 0xC5 #define PARAM2_JTAG_FLASH_SIZE_L 0xC6 #define PARAM2_JTAG_FLASH_PAGE_SIZE 0xC7 #define PARAM2_RC_ID_TABLE_REV 0xC8 #define PARAM2_EC_ID_TABLE_REV 0xC9 A.2 Команды и параметры протокола XPROG // Команды XPROMG #define XPRG_CMD_ENTER_PROGMODE 0x01 #define XPRG_CMD_LEAVE_PROGMODE 0x02 #define XPRG_CMD_ERASE 0x03 #define XPRG_CMD_WRITE_MEM 0x04 #define XPRG_CMD_READ_MEM 0x05 #define XPRG_CMD_CRC 0x06 #define XPRG_CMD_SET_PARAM 0x07 // Типы памяти #define XPRG_MEM_TYPE_APPL 1 #define XPRG_MEM_TYPE_BOOT 2 #define XPRG_MEM_TYPE_EEPROM 3 #define XPRG_MEM_TYPE_FUSE 4 #define XPRG_MEM_TYPE_LOCKBITS 5 #define XPRG_MEM_TYPE_USERSIG 6 #define XPRG_MEM_TYPE_FACTORY_CALIBRATION 7 // Типы очистки #define XPRG_ERASE_CHIP 1 #define XPRG_ERASE_APP 2 #define XPRG_ERASE_BOOT 3 #define XPRG_ERASE_EEPROM 4 #define XPRG_ERASE_APP_PAGE 5 #define XPRG_ERASE_BOOT_PAGE 6 #define XPRG_ERASE_EEPROM_PAGE 7 #define XPRG_ERASE_USERSIG 8 // Флаги режима записи #define XPRG_MEM_WRITE_ERASE 0 #define XPRG_MEM_WRITE_WRITE 1 // Типы CRC #define XPRG_CRC_APP 1 #define XPRG_CRC_BOOT 2 #define XPRG_CRC_FLASH 3 // Коды ошибки #define XPRG_ERR_OK 0 #define XPRG_ERR_FAILED 1 #define XPRG_ERR_COLLISION 2 #define XPRG_ERR_TIMEOUT 3 // Параметры XPROG разного размера // 4-байтные адреса #define XPRG_PARAM_NVMBASE 0x01 // 2-байтный размер страницы #define XPRG_PARAM_EEPPAGESIZE 0x02 A.3 Дескрипторы USB (USB Descriptors) Таблица 13-1. Дескриптор устройства (Device descriptor)
Таблица 13-2. Дескриптор конфигурации (Configuration descriptor)
Таблица 13-3. Дескриптор интерфейса (Interface descriptor)
Таблица 13-4. Дескриптор конечной точки (Endpoint descriptor) IN
Таблица 13-5. Дескриптор конечной точки (Endpoint descriptor) OUT
[Ссылки] 1. AVR079: STK600 Communication Protocol site:atmel.com. |