AVR068: протокол обмена STK500 ver. 2.0 |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь приведен перевод апноута AVR068: STK500 Communication Protocol [1], посвященного версии 2.0 протокола обмена STK500. Это усовершенствованная, новая версия протокола STK500 [2, 3], содержащая некоторые дополнения к оригинальной старой версии (в частности, новая версия поддерживает одновременно STK500 и AVRISP, введены номер последовательности пакета и контрольная сумма). Протокол STK500 ver. 2.0 предназначен для обмена между стартеркитом Atmel STK500 [2, 3] и компьютером PC, на котором запущена среда разработки AVR Studio. В управляющем MCU стартеркита должна быть прошита STK500 FW 2.XX, которая поставляется в составе AVR Studio 4.11 build 401 или более свежей. Определения всех команд, ответов, параметров и других заданных величин можно найти в файле command.h. Этот файл можно скачать с сайта Atmel, или см. [4], папка AVR068 архива. Большинство параметров, относящихся к каждому конкретному устройству (микроконтроллеру AVR), можно найти в XML файлах, такой файл есть для каждого поддерживаемого устройства. XML-файлы описания устройств поставляются в составе AvrStudio 4.11 или более поздних версий. Вы можете загрузить последнюю версию AvrStudio 4.11 с сайта Atmel. Формат файлов XML описан в секции 6. Для значений, отсутствующих в файле XML, обратитесь к даташиту на устройство. Статья в основном касается стартеркита STK500, но также часто относится и к программатору AVRISP. В некоторых случаях, когда поведение STK500 и AVRISP отличается, это будет оговорено специально. [2 Интерфейс обмена с компьютером (Communication interface)] Обмен между STK500 и PC происходит через RS232 (PC COM-порт). При этом STK500 использует следующие настройки порта: 115.2kbps, 8 data bits, 1 stop bit, no parity. Для успешного обмена COM-порт в компьютере должен быть настроен с такими же параметрами. [3 Формат сообщения] Все команды и ответы имеют одинаковый формат сообщения, как показано на рис. 3-1 и в табл. 3-1. Рис. 3-1. Общий формат сообщения протокола STK500 ver 2.0.
Таблица 3-1. Общие поля формата сообщения.
Примечание (1): текущая версия firmware STK500 может обработать только те сообщения, у которых тело (message body) максимум 275 байт. Хост (мастер, компьютер PC) отправляет команды, на которые STK500 отвечает. Обмен всегда происходит по принципу команда - ответ. Здесь имеется важное отличие от старой версии протокола STK500, где имелись сообщения событий STK500. Т. е. в новом протоколе одна команда хоста приведет к одному ответу STK500. Сам STK500 не может отправить сообщение хосту, которое не является ответом на принятую команду. Номер последовательности SEQUENCE_NUMBER в ответе всегда совпадает с номером последовательности в запросе. В этом плане новая версия протокола STK500 проще. [4 Таблица состояний слоя протокола (Protocol Layer State Table)] Эта секция описывает машину состояний, реализованную в программном обеспечении компьютера. Эта машина обрабатывает приходящие пакеты от STK500. Когда ожидается поступление пакета, машина состояний инициализируется в начальное состояние Start. Таблица описывает все состояния, события и условия для обработки приходящих данных. Таблица 4-1. Protocol Layer State Table.
Машина состояний на стороне STK500 (работающая в firmware управляющего контроллера MCU), которая принимает и обрабатывает пакеты от хоста, реализована подобным образом. Отличие только в том, что на приеме не отслеживается общий таймаут. Общий период таймаута отсчитывается от момента, когда команда была отправлена, до полного поступления ответа. Общий период таймаута составляет 200 мс для команды CMD_SIGN_ON command, 5 секунд для команд CMD_READ/PROGRAM_FLASH/EEPROM, и 1 секунда для всех других команд. [5 Команды] Команды STK500 отправляются в части сообщения MESSAGE_BODY (см. раздел 3). Эта секция описывает все команды, которые могут поступить для STK500, и все возможные ответы, которые могут прийти хосту на эту команду. В основном все режимы программирования используют одинаковые команды протокола, но с ними отправляются разные параметры для разных режимов программирования - чтобы избежать излишних накладных расходов в обработке слоя протокола. Для всех команд STK500 вернет ID ответа (answer ID) такой же, как был ID команды (command ID). Первый байт в команде всегда является идентификатором команды (command ID), а первый байт в ответе всегда идентификатор ответа (answer ID). 5.1 Основные команды (General Commands) Эти команды общие, они не относятся к какому-то отдельному режиму программирования. 5.1.1 CMD_SIGN_ON Эта команда возвращает уникальную строку подписи (сигнатуру) для STK500 или AVRISP, которые имеют эту реализацию протокола. Сигнатура будет "STK500_2" или "AVRISP_2". Таблица 5-1. Формат команды CMD_SIGN_ON.
Таблица 5-2. Формат ответа STK500.
Таблица 5-3. Формат ответа AVRISP.
5.1.2 CMD_SET_PARAMETER Хост может установить множество параметров в STK500. См. раздел 5.7 Параметры для описания каждого параметра. Все параметры являются однобайтными значениями. Таблица 5-4. Формат команды CMD_SET_PARAMETER.
Таблица 5-5. Формат ответа.
5.1.3 CMD_GET_PARAMETER Хост также может запросить из STK500 значения различных параметров. Таблица 5-6. Формат команды CMD_GET_PARAMETER.
Таблица 5-7. Формат ответа, если CMD_GET_PARAMETER выполнена успешно.
Таблица 5-8. Формат ответа, если CMD_GET_PARAMETER завершилась с ошибкой.
5.1.4 CMD_OSCCAL Эта команда производит процедуру калибровки, как описано в апноуте AVR053. Таблица 5-9. Формат команды CMD_OSCCAL.
Таблица 5-10. Формат ответа.
5.1.5 CMD_LOAD_ADDRESS Эта команда загружает адрес в STK500. Далее поступят команды Program Flash, Read Flash, Program EEPROM или Read EEPROM, которые будут работать с адресом, установленным этой командой. Команда CMD_LOAD_ADDRESS используется для всех режимов программирования. Все вышеперечисленные команды, которые читают и записывают память, автоматически инкрементируют внутренний счетчик адреса STK500, так что команду CMD_LOAD_ADDRESS нужно вызвать только один раз. Таблица 5-11. Формат команды CMD_LOAD_ADDRESS.
Для типов памяти, адресуемых по словам (память программ FLASH), параметр Address является адресом слова. Если в таком адресе установлен бит 31, то это означает, что последующая операция чтения/записи будет выполнена на памяти, размер которой больше 64 килобайт. Это показывает STK500, что должна быть выполнена загрузка расширенного адреса (load extended address). См. даташит для устройств, у которых объем памяти больше 64 килобайт. Таблица 5-12. Формат ответа, если команда CMD_LOAD_ADDRESS выполнена успешно.
5.1.6 CMD_FIRMWARE_UPGRADE Когда хост пытается подключиться к программатору (STK500 или AVRISP), то он проверяет версию firmware. Обновление firmware инициализируется, если на компьютере имеется более новая версия. STK500 может "перегрузиться" в режим обновления (upgrade mode) путем использования этой команды. Если при включении питания STK500 на нем была нажата кнопка PROGRAM, то все равно произойдет вход в режим обновления. Таблица 5-13. Формат команды CMD_FIRMWARE_UPGRADE.
Таблица 5-14. Формат ответа.
Если возвращенный статус STATUS_CMD_OK, то STK500 отключится и войдет в режим обновления. 5.2 Команды программирования ISP (ISP Programming Commands) Эти команды поддерживают программирование FLASH, EEPROM, байт фьюзов (fuse bytes), битов защиты (lock bits), сигнатуры, калибровки генератора (oscillator calibration) в режиме ISP. Прим. переводчика: ISP означает In-System Programming (программирование в системе). При этом способе программирования микроконтроллер (программируемое устройство) запаян прямо в конечное радиоэлектронное изделие, и подключается к программатору (STK500 или AVRISP) через 4 сигнальных провода MOSI, MISO, SCK, GND (режим последовательного программирования на основе интерфейса SPI). Через эти 4 провода идет обмен данными с программируемым устройством. Также к программатору идут 2 дополнительных провода VCC и ~RST. С помощью сигнала VCC программатор (STK500 или AVRISP) определяет, имеется ли питание на программируемом устройстве, а с помощью сигнала ~RST переводит устройство в режим программирования. Режим программирования ISP также иногда называют последовательным режимом программирования (Serial Program Mode), так как данные в программируемое устройство передаются бит за битом, последовательно. 5.2.1 CMD_ENTER_PROGMODE_ISP Эта команда переводит target device (программируемое устройство, микроконтроллер) в режим программирования. Таблица 5-15. Формат команды CMD_ENTER_PROGMODE_ISP.
Примечание: параметр pollValue показывает, после какого переданного через SPI байта нужно ожидать ответного байта, так как интерфейс SPI реализован двунаправленно (один байт выходит, и вместе с этим приходит другой байт). Таблица 5-16. Формат ответа.
5.2.2 CMD_LEAVE_PROGMODE_ISP Эта команда выводит STK500 (и программируемое устройство) из режима программирования. Устройство перейдет в нормальный рабочий режим выполнения программы. Таблица 5-17. Формат команды CMD_LEAVE_PROGMODE_ISP.
Таблица 5-18. Формат ответа.
5.2.3 CMD_CHIP_ERASE_ISP Эта команда выполнит очистку памяти чипа в target device (целевое программируемое устройство, микроконтроллер). Таблица 5-19. Формат команды CMD_CHIP_ERASE_ISP.
Таблица 5-20. Формат ответа.
5.2.4 CMD_PROGRAM_FLASH_ISP Эта команда будет программировать данные в память FLASH на target device, если завершится успешно. Таблица 5-21. Формат команды CMD_PROGRAM_FLASH_ISP.
Таблица 5-22. Формат ответа.
5.2.4.1 Описание байта режима (Mode byte) Параметр mode важен, так как он определяет, как эта команда работает. Назначение битов в байте mode показано в таблице 5-23. Таблица 5-23. Биты в байте режима.
Бит Word/Page Mode выбирает - поддерживает устройство программирование страниц, или нет. Байты команды отличаются от режима программирования по словам (word mode) и программирования по страницам (page mode). В случае word mode используются команды ISP Write Program Memory и Read Program Memory. В случае page mode используются команды Load Page, Write Program Memory Page и Read Program Memory. Инструкция read (чтение) используется, если установлено Value Polling. Бит выбора Low/High byte (3-й бит в командах Load Page, Write Program Memory) обрабатывается STK500, так что оставьте этот бит очищенным. В соответствии с mode выбираются различные методы завершения – Timed delay (задержка по времени), Value polling (опрос значения) или RDY/BSY polling (опрос готовности/занятости). Для операций со страницами, бит Write page указывает, должна ли быть выдана команда Write Program Memory Page после того, как данные загружены в буфер страницы. Для устройств, у которых размер страницы больше, чем STK500 можно передать в одной команде, должны быть выданы несколько команд CMD_PROGRAM_FLASH_ISP. В этом случае только последняя команда должна иметь установленным бит Write Page. Примечание: в файле XML установлены только биты 0-6, потому что бит 7 не является константой и должен управляться программным обеспечением компьютера PC. Когда value polling используется чтобы определить, когда завершилась операция программирования, должен быть предоставлен poll1. Это значение показывает, что будет прочитано из устройства, когда осуществляется опрос при программировании. Это значение показывает, что программирование закончилось. Значение poll2 используется только для программирования EEPROM. 5.2.5 CMD_READ_FLASH_ISP Если выполнится успешно, то эта команда прочитает данные из памяти FLASH target device. Таблица 5-24. Формат команды CMD_READ_FLASH_ISP.
Таблица 5-25. Формат ответа, если CMD_READ_FLASH_ISP выполнилась.
Таблица 5-26. Формат ответа, если CMD_READ_FLASH_ISP не выполнилась.
5.2.6 CMD_PROGRAM_EEPROM_ISP См. описание команды CMD_PROGRAM_FLASH_ISP. 5.2.7 CMD_READ_EEPROM_ISP См. описание команды CMD_READ_FLASH_ISP. 5.2.8 CMD_PROGRAM_FUSE_ISP Эта команда программирует фьюзы в target device. Таблица 5-27. Формат команды CMD_PROGRAM_FUSE_ISP.
Примечание: cmd1, cmd2, cmd3 и cmd4 это 4 байта команды низкого уровня ISP, которая программирует фьюзы. Таблица 5-28. Формат ответа.
5.2.9 CMD_READ_FUSE_ISP Эта команда читает фьюзы target device. Таблица 5-29. Формат команды CMD_READ_FUSE_ISP.
Примечание: RetAddr показывает, после какого переданного через SPI байта нужно сохранить возвращенный байт, так как интерфейс SPI реализован двунаправленно, как дуплекс (в процессе вывода одного байта одновременно вдвигается на вход другой). Таблица 5-30. Формат ответа.
5.2.10 CMD_PROGRAM_LOCK_ISP См. CMD_PROGRAM_FUSE. Эта команда в основном делает то же, что и команда программирования фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для программирования байта защиты. 5.2.11 CMD_READ_LOCK_ISP См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта защиты. 5.2.12 CMD_READ_SIGNATURE_ISP См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения одного из байт сигнатуры. 5.2.13 CMD_READ_OSCCAL_ISP См. CMD_READ_FUSE. Эта команда в основном делает то же, что и команда чтения фьюзов, только в ней должны быть предоставлены низкоуровневые команды ISP для чтения байта OSCCAL. 5.2.14 CMD_SPI_MULTI Эта обычная команда может использоваться для выполнения любых команд ISP. Команда записывает указанное количество байт в шину SPI, и при этом также возвращает указанное количество байт. Таблица 5-31. Формат команды CMD_SPI_MULTI.
Если количество байт, которое нужно принять, оказалось больше, чем количество передаваемых байт, то firmware дополнит передачу необходимым количеством нулевых (0x00) байт. Это сделано для уменьшения затрат времени на передачу от PC к программатору. Таблица 5-32. Формат ответа.
5.3 Команды параллельного режима программирования (Parallel Programming Mode) Прим. переводчика: под параллельным режимом программирования понимается особый режим подключения программируемого чипа к программатору, когда количество сигналов для передачи данных программирования увеличивается. Параллельный режим программирования сокращенно называют PP (Parallel Programming). 5.3.1 CMD_ENTER_PROGMODE_PP Если выполнилась успешно, то эта команда переводит target device в режим программирования. Таблица 5-33. Формат команды CMD_ENTER_PROGMODE_PP.
Таблица 5-34. Формат ответа (одинаковый для всех результатов).
Таблица 5-35. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_ENTER_PROGMODE_PP.
5.3.2 CMD_LEAVE_PROGMODE_PP Если выполнилась успешно, то эта команда выводит target device из режима программирования. Таблица 5-36. Формат команды CMD_LEAVE_PROGMODE_PP.
Таблица 5-37. Формат ответа.
5.3.3 CMD_CHIP_ERASE_PP Если выполнилась успешно, то эта команда произведет очистку памяти (chip erase) в target device. Таблица 5-38. Формат команды CMD_CHIP_ERASE_PP.
Таблица 5-39. Формат ответа (одинаковый для всех результатов).
Таблица 5-40. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_CHIP_ERASE_PP.
5.3.4 CMD_PROGRAM_FLASH_PP Если выполнилась успешно, то эта команда запрограммирует данные в память FLASH target device. Для устройств, у которых FLASH организована странично, то используемые в этой команде адрес данных (data address) размер (size) должны соответствовать устройству. Например, одна команда ProgramFlash используется для программирования одной страницы в target device. Таблица 5-41. Формат команды CMD_PROGRAM_FLASH_PP.
Таблица 5-42. Формат ответа (одинаковый для всех результатов).
Таблица 5-43. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_PROGRAM_FLASH_PP.
5.3.4.1 Описание байта режима (Mode byte) • Bit 0: этот бит показывает, используется байтовое '0' или страничное '1' программирование. Таблица 5-44. Биты конфигурации размера страницы.
• Bit 4-5 не используются. Примечание: в файле XML установлены только биты 0-3, так что биты 6-7 не статические, и их значением должно управлять программное обеспечение фронтэнда (эти функции выполняет среда AVR Studio). 5.3.5 CMD_READ_FLASH_PP Если выполнилась успешно, то эта команда прочитает данные памяти FLASH target device. Для устройств, у которых FLASH организована странично, то используемые в этой команде адрес данных (data address) размер (size) должны соответствовать устройству. Например, одна команда ReadFlash используется для чтения одной страницы в target device. Таблица 5-45. Формат команды CMD_READ_FLASH_PP.
Таблица 5-46. Формат ответа, если команда CMD_READ_FLASH_PP была выполнена.
5.3.6 CMD_PROGRAM_EEPROM_PP Если выполнилась успешно, то эта команда запрограммирует одну страницу памяти EEPROM target device. 5.3.7 CMD_READ_EEPROM_PP Если выполнилась успешно, то эта команда прочитает данные памяти EEPROM target device. 5.3.8 CMD_PROGRAM_FUSE_PP XML путь: /AVRPART/ICE_SETTINGS/STK500_2/PpProgramFuse/ Таблица 5-47. Формат команды CMD_PROGRAM_FUSE_PP.
Таблица 5-48. Формат ответа.
Таблица 5-49. Допустимые значения результата (Valid Result Values) для ответа на команду CMD_PROGRAM_FUSE_PP.
5.3.9 CMD_READ_FUSE_PP XML путь: /AVRPART/ICE_SETTINGS/STK500_2/PpReadFuse/ Таблица 5-50. Формат команды CMD_READ_FUSE_PP.
Таблица 5-51. Формат ответа, если команда была выполнена.
5.3.10 CMD_PROGRAM_LOCK_PP См. CMD_PROGRAM_FUSE. Примечание: должен быть отправлен адрес, но он будет игнорироваться firmware. 5.3.11 CMD_READ_LOCK_PP См. CMD_READ_FUSE_PP. Примечание: должен быть отправлен адрес, но он будет игнорироваться firmware. 5.3.12 CMD_READ_SIGNATURE_PP См. CMD_READ_FUSE. 5.3.13 CMD_READ_OSCCAL_PP См. CMD_READ_FUSE. 5.3.14 CMD_SET_CONTROL_STACK Выгружает стек управления (Control stack) в STK. Это используется и для PP, и для HVSP. Примечание: Control stack должен быть всегда выгружен перед выполнением любой команды программирования в высоковольтном режиме, если питание STK500 было выключено. Чтобы проверить, имеет ли контроллер допустимый стек управления, выполните чтение PARAM_CONTROLLER_INIT. См. раздел 5.7.14: PARAM_CONTROLLER_INIT. Таблица 5-52. Формат команды CMD_SET_CONTROL_STACK.
Таблица 5-53. Формат ответа (одинаковый для всех результатов).
5.4 Команды высоковольтного программирования HVSP (High Voltage Serial Programming Commands) Этот раздел описывает команды последовательного высоковольтного режима программирования (High Voltage Serial Programming, HVSP). Имейте в виду, что для HVSP, как и для параллельного программирования PP, нужна команда SetControlStack. Описание SetControlStack можно найти в секции 5.3.14 (относится к Parallel Programming, PP). 5.4.1 CMD_ENTER_PROGMODE_HVSP Если завершилась успешно, эта команда вводит target device в режим программирования HVSP. Таблица 5-54. Формат команды CMD_ENTER_PROGMODE_HVSP.
Таблица 5-55. Формат ответа.
5.4.2 CMD_LEAVE_PROGMODE_HVSP Если завершилась успешно, эта команда выводит target device из режима программирования HVSP. Таблица 5-56. Формат команды CMD_LEAVE_PROGMODE_HVSP.
Таблица 5-57. Формат ответа.
5.4.3 CMD_CHIP_ERASE_HVSP Если завершилась успешно, эта команда стирает содержимое памяти (chip erase) на target device. Таблица 5-58. Формат команды CMD_CHIP_ERASE_HVSP.
Таблица 5-59. Формат ответа.
5.4.4 CMD_PROGRAM_FLASH_HVSP Если завершилась успешно, эта команда запрограммирует память FLASH на target device. Для устройств, у которых FLASH организована на основе страниц, адрес данных и размер, используемые для этой команды, должны соответствовать программируемому устройству. Например, одна команда ProgramFlash используется для программирования одной страницы на target device. Таблица 5-60. Формат команды CMD_PROGRAM_FLASH_HVSP.
Таблица 5-61. Формат ответа.
5.4.4.1 Описание байта режима (Mode byte) • Bit 0: этот бит показывает, будет использоваться побайтное '0' или страничное '1' программирование. Таблица 5-62. Конфигурация бит размера страницы (page size).
• Bit 4-5 не используются. Примечание: в файле XML установлены только биты 0-3, так что биты 6-7 не статические, и их значением должно управлять программное обеспечение фронтэнда (эти функции выполняет среда AVR Studio). 5.4.5 CMD_READ_FLASH_HVSP Если завершилась успешно, эта команда прочитает память FLASH на target device. Для устройств, у которых FLASH организована на основе страниц, адрес данных и размер, используемые для этой команды, должны соответствовать устройству. Например, одна команда ReadFlash используется для чтения одной страницы на target device. XML путь: /AVRPART/ICE_SETTINGS/STK500_2/HvspReadFlash/ Таблица 5-63. Формат команды CMD_READ_FLASH_HVSP.
Таблица 5-64. Формат ответа, если команда выполнилась.
5.4.6 CMD_PROGRAM_EEPROM_HVSP См. описание команды CMD_WRITE_FLASH_HVSP. 5.4.7 CMD_READ_EEPROM_HVSP См. описание команды CMD_READ_FLASH_HVSP. 5.4.8 CMD_PROGRAM_FUSE_HVSP Эта команда программирует 1 байт фьюзов, указанный байтом адреса фьюзов (Fuse Address). Таблица 5-65. Формат команды CMD_PROGRAM_FUSE_HVSP.
Таблица 5-66. Формат ответа.
5.4.9 CMD_READ_FUSE_HVSP Эта команда читает 1 байт фьюзов, указанный байтом адреса фьюзов (Fuse Address). Таблица 5-67. Формат команды CMD_READ_FUSE_HVSP.
Таблица 5-68. Формат ответа, если команда выполнилась.
5.4.10 CMD_PROGRAM_LOCK_HVSP См. описание команды CMD_PROGRAM_FUSE_HVSP. Примечание: адрес нужен, но он игнорируется. 5.4.11 CMD_READ_LOCK_HVSP См. описание команды CMD_READ_FUSE_HVSP. Примечание: адрес нужен, но он игнорируется. 5.4.12 CMD_READ_SIGNATURE_HVSP См. описание команды CMD_READ_FUSE_HVSP. 5.4.13 CMD_READ_OSCCAL_HVSP См. описание команды CMD_READ_FUSE_HVSP. 5.5 Специальные ответы Эти ответы не относятся к какой-то конкретной команде. 5.5.1 ANSWER_CKSUM_ERROR Этот ответ генерируется слоем транспорта, чем показывается, что принято сообщение с некорректной контрольной суммой. Таблица 5-69. Формат ответа.
5.6 Возвращаемые значения Этот раздел подробно описывает все возможные возвращаемые значения, и что они означают. 5.6.1 Success (успех) Таблица 5-70. Возвращаемое значение, сигнализирующее об успехе.
5.6.2 Warnings (предупреждения) Все предупреждения имеют MSB установленный в 1, и MSB-1 установленный в 0. Таблица 5-71. Возвращаемые предупреждающие значения.
5.6.3 Errors (ошибки) Все коды ошибки имеют MSB и MSB-1 установленные в 1. Таблица 5-72. Возвращаемые значения ошибок.
5.7 Параметры В таблице 5-73 показаны параметры, которые могут быть прочитаны и/или записаны командами CMD_GET_PARAM и CMD_SET_PARAM. В столбце R/W показано, к чему относится параметр (Read/Write, к чтению или к записи). Таблица 5-73. Имеющиеся параметры.
5.7.1 PARAM_BUILD_NUMBER_LOW Совместно параметры PARAM_BUILD_NUMBER_LOW и PARAM_BUILD_NUMBER_HIGH возвращают число, которое инкрементируется для каждой версии сборки (билда) firmware. Главным образом используется внутри ATMEL. 5.7.2 PARAM_BUILD_NUMBER_HIGH См. PARAM_BUILD_NUMBER_LOW. 5.7.3 PARAM_HW_VER Возвращает номер ревизии аппаратуры. 5.7.4 PARAM_SW_MAJOR PARAM_SW_MAJOR и PARAM_SW_MINOR возвращают версию firmware. 5.7.5 PARAM_SW_MINOR См. PARAM_SW_MAJOR. 5.7.6 PARAM_VTARGET Этот параметр относится только к STK500, и не касается AVRISP. В STK500 есть управляемый источник питания (supply voltage) для target, который можно установить и мониторить через этот параметр. Значение параметра указано в вольтах умноженных на 10, так что, например, десятичное число 42 соответствует напряжению 4.2V. Напряжение VTARGET может быть настроено в диапазоне 0 .. 6V. 5.7.7 PARAM_VADJUST Этот параметр относится только к STK500, и не касается AVRISP. В STK500 есть управляемый источник опорного напряжения (analog reference, AREF) который настраивается так же, как и управляемый источник питания supply voltage. AREF может быть установлено и может мониториться через параметр PARAM_ADJUST. Значение параметра Значение параметра указано в вольтах умноженных на 10, так что, например, десятичное число 42 соответствует напряжению 4.2V. Напряжение VADJUST может быть настроено в диапазоне 0 .. 6V. 5.7.8 PARAM_OSC_PSCALE Этот параметр относится только к STK500, и не касается AVRISP. В STK500 есть программируемый генератор тактовой частоты (clock generator), используемый для подачи тактового сигнала на target device. Генератор реализован на TIMER2 управляющего MCU AT90S8535. Таймер работает в режиме переключения сигнала OC2 (Toggle OC2 line mode), при этом значение таймера очищается при совпадении значения таймера с заданным значением в регистре сравнения (событие compare match). Генерируемая частота зависит от значения параметров PARAM_OSC_PSCALE и PARAM_OSC_CMATCH. Следующий пример кода показывает, как firmware обрабатывает изменения в PARAM_OSC_PSCALE или PARAM_OSC_CMATCH: // Останов Timer2 TCCR2 = 0x18; // Инициализация значения счетчика TCNT2 = 0xFF; // Установка значения для сравнения (compare match value) OCR2 = osc_cmatch; // Установка прескалера и режима работы таймера TCCR2 = (0x18 | (0x07 & osc_pscale)); Тактовая частота управляющего MCU (STK500 system clock) fsys = 7.37 МГц, что дает следующее выражение для получающейся генерируемой частоты, связывающее значения прескалера (prescaled clock, задается PARAM_OSC_PSCALE по таблице 5-74) и значение сравнения (compare value, PARAM_OSC_CMATCH): f = prescaled clock / (compare value + 1) / 2 Таблица 5-74. Значение коэффициента деления прескалера.
Таким способом нельзя точно получить любое значение тактовой частоты. Программное обеспечение хоста (сейчас это AVR Studio или Atmel Studio) может вычислить значения прескалера (PARAM_OSC_PSCALE) и сравнения (PARAM_OSC_CMATCH) методом простого подбора, сканируя все возможные значения прескалера и сравнения для наилучшего совпадения с требуемой тактовой частотой. 5.7.9 PARAM_OSC_CMATCH Этот параметр относится только к STK500, и не касается AVRISP. См. PARAM_OSC_PSCALE. 5.7.10 PARAM_SCK_DURATION Когда используется интерфейс программирования ISP, то тактовая частота ISP (частота сигнала SCK шины SPI) не должна превышать частоты, которую поддерживает target device. Максимальная тактовая частота ISP зависит от тактовой частоты программируемого устройства, настроенного внутреннего делителя тактовой частоты и т. п. STK500 и AVRISP поддерживают тактовые частоты ISP от 4 кГц до 1.8 МГц. Значение для PARAM_SCK_DURATION может быть найдено по следующему алгоритму: #define T_STK500 135.63e-9 #define T_AVRISP 271.27e-9 #define B 12.0 unsigned char CalcSckDur(int freq) { if (STK500) { if (freq >= 1843200) sck_dur = 0; else if (freq >= 460800) sck_dur = 1; else if (freq >= 115200) sck_dur = 2; else if (freq >= 57600) sck_dur = 3; else sck_dur = ceil(1/(2 * B * freq * T_STK500) - 10/B); } else // if (AVRISP) { if (freq >= 921600) sck_dur = 0; else if (freq >= 230400) sck_dur = 1; else if (freq >= 57600) sck_dur = 2; else if (freq >= 28800) sck_dur = 3; else sck_dur = ceil(1/(2 * B * freq * T_AVRISP) - 10/B); } return __min(254, sck_dur); // 255 является недопустимым значением } 5.7.11 PARAM_TOPCARD_DETECT Этот параметр относится только к STK500, и не касается AVRISP. К STK500 могут быть подключены карты расширения (expansion cards, карта верхнего уровня, topcards, дочерняя плата). Каждый тип карты имеет идентификатор схемы (id circuitry), так что STK500 может определить, какой тип карты был установлен. Используются следующие идентификаторы (ID): Таблица 5-75. Значения идентификаторов плат расширения.
5.7.12 PARAM_DATA Этот параметр относится только к STK500, и не касается AVRISP. Параметр возвращает значение коннектора PROG DATA, используемого для высоковольтного параллельного программирования (High-Volt Parallel Programming). 5.7.13 PARAM_RESET_POLARITY И STK500, и AVRISP оба могут программировать семейства микроконтроллеров AT90 (AVR) и AT89 (8051). Эти семейства имеют разные полярности сигнала сброса RESET (ножка сброса микроконтроллера). Для AVR активный уровень лог. 0, тогда как для AT89 активный уровень лог. 1. Этот параметр устанавливает полярность сигнала сброса. Установите параметр в 1, когда программируются микроконтроллеры AVR, и в 0, когда программируются AT89. Примечание: STK500 и AVRISP сохраняют этот параметр в EEPROM, так что он будет доступен при следующем включении питания программатора. Для STK500 полярность сигнала сброса от кнопки RESET также меняется этим параметром. 5.7.14 PARAM_CONTROLLER_INIT Этот параметр устанавливается внутренне в 0, когда сбрасывается управляющий MCU программатора. Программное обеспечение хоста может записать любое значение в этот параметр, и может его позже прочитать обратно. Этот параметр предназначен для использования как метод определить, отключалось ли питание (и потом было включено обратно) STK500/AVRISP. Так что программа хоста может определить, нужно ли инициализировать заново программатор перед тем, как продолжить работу с ним. [6 Значения параметров из файлов XML] Одно из главных улучшений версии 2.0 протокола STK500 - возможность описать все детали алгоритмов программирования. Набор параметров относится к определенному устройству AVR, и эти параметры находятся в XML-файле описания чипа (XML part description file). Ниже показано описание параметров STK500, которые можно найти в файле XML, специфичном для устройства. После установки AvrStudio 4 все файлы *.xml можно найти в папке "\Program Files\Atmel\AVR Tools\PartDescriptionFiles\". Рис. 6-1. Пример файла XML: ATmega2561.xml. Откройте файл XML специальной программой редактирования/просмотра (xml editor/viewer, например XML Notepad или Internet Explorer). Все специфичные параметров устройства для STK500 и AVRISP размещены в узле STK500_2. Параметры команды CMD_ENTER_PROGMODE_ISP ищите в [7 Пример последовательности команд] Этот раздел содержит примеры - как подключиться к STK500 со стороны компьютера (PC Frontend), и как прочитать сигнатуру из устройства. См. раздел 5 Команды для описания команд и параметров. 7.1 Подключение (Connect) Последовательность команд и параметров, отправляемая из AvrStudio в STK500 для подключения перечислена ниже. • CMD_SIGN_ON 7.2 Чтение сигнатуры (Read Signature) 7.2.1 Режим программирования в системе ISP (In System Programming) Ниже приведена последовательность команд и параметров, отправляемая от AvrStudio к STK500, чтобы прочитать сигнатуру устройства через ISP. Обратите внимание, что для выполнения этого нужно подключить к STK500 программируемое устройство (target device). • CMD_GET_PARAMETER, PARAM_TOPCARD_DETECT 7.2.2 Высоковольтное программирование (High Voltage Programming) Ниже приведена последовательность команд и параметров, отправляемая от AvrStudio к STK500, чтобы прочитать сигнатуру устройства через High Voltage Programming. Имейте в виду - программируемое устройство должно быть подключено. Эта последовательность выполняется как для High Voltage Parallel Programming, так и для High Voltage Serial Programming. • CMD_GET_PARAMETER, PARAM_TOPCARD_DETECT 7.3 Лог обмена данными с STK500 (Communication Logging) Чтобы подробнее рассмотреть работу протокола и получить примеры, можно настроить вывод протокола обмена (между AvrStudio и STK500) в текстовый файл лога. Это делается через добавление ключа реестра (register key) в реестр Windows. Процедура по шагам: 1. Откройте реестр, введя команду "regedit": Рис. 7-1. Запуск редактора реестра с помощью диалогового окна "Run" (кнопка Пуск -> Выполнить...). 2. Перейдите к узлу реестра HKEY_CURRENT_USER\Software\Atmel\AVRTools\STK500\ Рис. 7-2. Окно диалога "Edit String" редактора реестра regedit. После редактирования реестра запустите AvrStudio, и запустите диалог программирования (STK500 Programming Dialog). Все отправляемы в STK500 команды теперь будут записываться в текстовый файл, который был настроен в реестре. Содержимое файла будет выглядеть примерно так: Рис. 7-3. Пример содержимого файла лога. Примечания: [Ссылки] 1. AVR068: STK500 Communication Protocol site:atmel.com. |