Программирование AVR AVR911: Open Source программатор для микроконтроллеров AVR Thu, November 21 2024  

Поделиться

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

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


AVR911: Open Source программатор для микроконтроллеров AVR Печать
Добавил(а) microsin   

Здесь приведен перевод апноута Atmel "AVR911: AVR Open Source Programmer 8-bit Atmel Microcontrollers" [1], описывающего программу для компьютера с открытым исходным кодом. Утилита из коробки может служить программой для управления стандартными программаторами, поддерживающими протокол STK200, и может быть расширена для поддержки других протоколов и программаторов. Утилита Atmel AVR Open Source Programmer обладает следующими особенностями:

• Открытый исходный код на C++ (Open source)
• Модульный дизайн
• Может читать информацию устройств из файлов XML Atmel® AVR Studio®
• Поддерживает бутлоадер в Atmel AVR® 109
• Поддерживает ISP-программатор Atmel AVR910
• Является эквивалентом утилит командной строки AVR Studio
• Может расширяться для поддержки других программаторов
• Может расширяться до других каналов обмена с компьютером, например до USB

[Введение]

Atmel AVR Open Source Programmer (AVROSP) является программой - оболочкой для программатора устройств AVR (микроконтроллеров компании Atmel), которая является эквивалентом утилиты AVRProg, поставляемой совместно с AVR Studio. Это утилита командной строки, использующая тот же самый синтаксис, как и другие утилиты командной строки в AVR Studio.

Открытый исходный код и модульный дизайн AVROSP делают возможным простое портирование этого приложения на другие платформы (не Windows) и добавление поддержки программаторов других типов, а также других каналов обмена с компьютером (не COM-порт). В настоящее время AVROSP поддерживает программаторы, описанные в апноутах Atmel AVR109 и AVR910 [3, 4], подключающиеся через стандартный PC serial port (RS-232, COM-порт). В этой статье говорится от том, как расширять возможности утилиты AVROSP.

AVROSP может читать и записывать файлы в формате Intel® HEX [2], и может использовать существующую инсталляцию AVR Studio для получения требуемых параметров программируемых микроконтроллеров. Это означает, что AVROSP автоматически поддерживает все устройства, поддерживаемые AVR Studio. Таким образом, не требуется обновление AVROSP для поддержки новых устройств, если будет обновлена инсталляция AVR Studio.

[1. Общее теоретическое описание]

С точки зрения пользователя, программирование устройств Atmel AVR обычно состоит из следующих шагов: написание программы для микроконтроллера, подготовка двоичных файлов, которые должны быть запрограммированы в микроконтроллер, и наконец запуск утилиты программатора, чтобы записать эти файлы в память микросхемы микроконтроллера. Все эти шаги всегда те же самые, они не зависят от типа программатора. Приложение AVROSP пытается обобщить эту процедуру в одно применение, таким образом избавляя от необходимости использовать различные приложения с разным синтаксисом и использованием для каждого типа программатора. Независимо от того, используете ли Вы бутлоадер, или программатор ISP, или программатор другого производителя, процедура обычно та же самая. AVROSP дает непротиворечивый интерфейс для операции программирования.

Апноуты Atmel AVR109 [3] и AVR910 [4] описывают Bootloader (бутлоадер) и In-System Programmer (ISP, программатор чипов прямо в системе). И тот и другой поддерживают одну и ту же операцию - Bootloader прошивает память программ, получая данные из собственного встроенного UART, и ISP через программатор, построенный на микроконтроллере AT90S1200. Bootloader отдельно компилируется специально для каждого микроконтроллера, и поддерживает программирование только его. ISP не обновлялся для прямой поддержки устройств, появившихся позже Atmel ATmega163, но имеет "универсальную команду" (Universal Command), которая может использоваться для программирования всех устройств (микроконтроллеров), которые поддерживают внутрисхемное программирование (in-system programming, ISP). Утилита AVROSP поддерживает оба типа программаторов. Она читает сигнатуру программатора и принимает решение, какие команды нужно использовать для обмена данными с программатором. Таким образом, пользователю не нужно указывать тип программатора, если программатор корректно отвечает на команду чтения идентификатора программатора (правильно отвечает на команду "Read programmer ID"). Для получения дополнительной информации по протоколу обратитесь к [3, 4].

Для программирования микроконтроллера требуется минимальный набор информации - объемы памяти FLASH и EEPROM, биты защиты (lock bits) и фьюзы (fuse bits) и т. п. Эта информация доступна в XML-файлах описания (XML Part Description Files), находящихся в инсталляции Atmel AVR Studio.

AVROSP читает необходимую информацию из этих файлов XML. Если AVR Studio не установлена, например если AVROSP используется для программирования в производстве, или портирована на другие платформы (к примеру Linux®), то эти XML Part Description Files все еще могут быть использованы. Программа AVROSP сначала пытается их найти в текущей директории, затем в домашней директории AVROSP, директориях, указанных в переменной окружения PATH, и затем в инсталляции AVR Studio. Таким образом, файлы описания XML Part Description Files могут быть скопированы в директорию, находящуюся в путях PATH, и тогда нет необходимости в инсталляции AVR Studio.

Прим. переводчика: для AVR Studio 4.19 и Atmel Studio 6.0 эти файлы находятся в каталогах c:\Program Files\Atmel\Atmel Studio 6.0\devices, c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRDragon\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRISPmkII\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRONE\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\JTAGICE3\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\JTAGICEmkII\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\STK500\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\STK600\xml, c:\Program Files\Atmel\AVR Tools\Partdescriptionfiles, c:\Program Files\Atmel\Flip 3.4.2\bin\PartDescriptionFiles, c:\Program Files\Atmel\Flip 3.4.7\bin\PartDescriptionFiles.

Оригинальные файлы описаний Part Description Files очень большие, и для их парсинга требуется некоторое время. Поэтому AVROSP создает маленький файл XML, содержащий только интересующие параметры, и сохраняет его в домашней директории AVROSP. Если оригинальные файлы были обновлены, например при обновлении AVR Studio, то кэширующие файлы XML должны быть удалены из домашней директории, что укажет AVROSP пересоздать их заново.

В настоящее время файлы Part Description Files не содержат какую-либо информацию по алгоритму программирования каждого устройства. Так что модуль ISP утилиты AVROSP реализует алгоритм, использующийся в большинстве устройств AVR. Из-за этого не поддерживается ISP программирование некоторых устройств, у которых алгоритм программирования незначительно отличается. Это относится к следующим устройствам Atmel: ATtiny26 и ATtiny2313. Модуль бутлоадепа AVROSP поддерживает все устройства, которые имеют возможность использования бутлоадера.

Примечание: Atmel ATtiny28L не поддерживает программирование ни через ISP, ни через bootloader, и поэтому не поддерживается утилитой AVROSP. Однако пользователь может самостоятельно доработать код AVROSP чтобы добавить поддержку других программаторов, например последовательного высоковольтного программирования (serial high-voltage programmer, HVSP).

[2. Быстрый старт]

Эта секция описывает нужны шаги для быстрого запуска, если Вам не нужно модифицировать или подстраивать код приложения. Для использования утилиты AVROSP требуется только исполняемый файл avrosp.exe. Он находится в архиве avr911.zip [5], который поставляется с этим апноутом. ZIP-файл также содержит весь исходный код и копию файлов описания Part Description Files из инсталляции AVR Studio.

Скопируйте исполняемый файл в новый каталог, и добавьте имя (полный путь) этого каталога в переменную окружения PATH. Если Вы не хотите специально устанавливать Atmel AVR Studio, скопируйте файлы описания XML в поддиректорию (чтобы предотвратить перезапись оригинальных файлов файлами кэширования AVROSP), и также добавьте путь этого подкаталога в PATH. Теперь все готово для использования AVROSP.

Примечание: установки последовательного порта (скорость baud rate, контроль четности parity control и т. д.) должны быть установлены вручную до использования AVROSP. Например, для использования AVROSP совместно с бутлоадером, обменивающимся через COM1 на скорости 115200 bps, no parity control, 8 data bits, запустите для настройки COM-порта следующую команду DOS:

mode com1 baud=115200 parity=n data=8

[3. Синтаксис и параметры командной строки AVROSP]

Все параметры командной строки должны начинаться со знака минус, одного или нескольких символов и опциональных значений. Между минусом, символами или опциональными значениями не должно быть пробелов. Порядок следования параметров не имеет значения. В случае указания конфликтующих друг с другом параметров, например, при выборе для обмена и COM1, и COM2, будет всегда применен последний указанный параметр. Поддерживаемые параметры командной строки перечислены в таблице 3-1.

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

Параметр                  Описание
-d< name > Задается имя программируемого устройства (микроконтроллера). Опция должна быть указана при программировании устройства.
-if< infile > Входное имя для программирования памяти программ (FLASH). Требуется для программирования и проверки FLASH. Формат файла Intel Extended Hex.
-ie< infile > Входное имя для программирования энергонезависимой памяти данных (EEPROM). Требуется для программирования и проверки EEPROM. Формат файла Intel Extended Hex.
-of< outfile > Выходное имя для файла памяти FLASH. Требуется для чтения и сохранения в файл содержимого памяти FLASH. Формат файла Intel Extended Hex.
-oe< outfile > Выходное имя для файла памяти EEPROM. Требуется для чтения и сохранения в файл содержимого памяти EEPROM. Формат файла Intel Extended Hex.
-s Прочитать байты сигнатуры.
-O< addr > Прочитать байт калибровки генератора (oscillator calibration byte) устройства. Параметр addr необязателен.
-O#< addr > Заданное пользователем значение калибровки генератора. Используйте его для предоставление своего значения калибровки вместо чтения его из устройства командой -O< addr >.
-Sf< addr > Запись байта калибровки генератора в память FLASH. Параметр addr необязателен.
-Se< addr > Запись байта калибровки генератора в память EEPROM. Параметр addr необязателен.
-e Очистка устройства (erase). Память устройства будет очищена перед тем как произойдет любое программирование.
-p< t > Программирование устройства (program). Установите параметр t в значение f для FLASH, и в значение e для EEPROM, или укажите b для программирования и FLASH, и EEPROM. Для этой операции потребуются соответствующие входные файлы.
-r< t > Прочитать устройство (read). Установите параметр t в значение f для FLASH, и в значение e для EEPROM, или укажите b для чтения и FLASH, и EEPROM. Для этой операции потребуются соответствующие выходные файлы.
-v< t > Проверить устройство (verify). Установите параметр t в значение f для FLASH, и в значение e для EEPROM, или укажите b для проверки и FLASH, и EEPROM. Для этой операции потребуются соответствующие входные файлы.
-l< value > Установка байта защиты (lock byte). Значение value должно быть указано как 8-битное шестнадцатеричное.
-L< value > Проверка байта защиты (lock byte). Значение для проверки value должно быть указано как 8-битное шестнадцатеричное.
-y Прочитать байт защиты из устройства.
-f< value > Установить байты фьюзов (fuse bytes). Значение value должно быть указано как 16-битное шестнадцатеричное, чтобы задать этим значение старшего и младшего байтов фьюзов.
-E< value > Установка расширенного байта фьюзов (extended fuse byte). Значение value должно быть 8-битным шестнадцатеричным.
-F< value > Проверить байты фьюзов (fuse bytes). Значение value должно быть указано как 16-битное шестнадцатеричное.
-G< value > Проверка расширенного байта фьюзов (extended fuse byte). Значение value должно быть 8-битным шестнадцатеричным.
-q Прочитать байты фьюзов из устройства.
-x< value > Заполнить неуказанные места значением (00-FF). По умолчанию не указанные во входных HEX-файлах места памяти не программируются.
-af< start >,< stop > Указывается диапазон адресов FLASH для операций. По умолчанию используется весь диапазон адресов FLASH. Адреса байтовые, и должны быть указаны в шестнадцатеричном формате.
-ae< start >,< stop > Указывается диапазон адресов EEPROM для операций. По умолчанию используется весь диапазон адресов EEPROM. Адреса байтовые, и должны быть указаны в шестнадцатеричном формате.
-c< port > Выбор порта для обмена данными с компьютером, от COM1 до COM8. Если этот параметр опущен, то программа будет сканировать порты для поиска программатора.
-b< t > Получить ревизии подключенного программатора. Установите t в значение h для получения версии аппаратуры или в значение s для получения версии firmware.
-g "Тихая работа". В консоль не будет произведено никакого вывода.
-z Отключить индикатор прогресса. Это полезно, к примеру, если сделано перенаправление вывода консоли в файл с целью лога - в файл не будут выведены символы прогресс-индикации.
-Y< addr > Используется для калибровки внутреннего RC генератора устройств ATtiny4/5/9/10/20/40. См. апноут AVR057.
-h Вывести подсказку (справку) по командной строке. Отменяет все другие опции.
-? То же самое, что и -h.

Вот несколько примеров использования утилиты AVROSP.

avrosp –dATmega128 –pf –vf –ifprogram.hex –e

Вышеуказанный пример сначала очистит все содержимое памяти, затем запрограммирует и проверит данные, содержащиеся в файле program.hex, в подключенное устройство Atmel ATmega128.

avrosp –dATmega32 –re –oedump.hex –ae0,ff –cCOM2

Этот пример прочитает первые 256 байт памяти EEPROM устройства ATmega32 в файл dump.hex. Будет использован только COM2.

avrosp –dATmega64 –O#a0 –Se0 –lc0

Этот пример запишет пользовательское значение калибровки генератора (oscillator calibration value) 0xA0 в EEPROM по адресу 0, и затем защитит память ATmega64 путем записи байта бит защиты в значение 0xC0.

Примечание: когда программируются фьюзы (fuse bits), записываемая битовая маска не проверяется на предмет корректных значений фьюзов для этого устройства. Будьте особенно внимательны, чтобы не запрограммировать неверные значения фьюзов, так как это может привести к полной неработоспособности запрограммированного устройства. Программирование высоким напряжением (High-voltage programming, HVSP) может помочь восстановить микроконтроллер.

[4. Описание программной реализации AVROSP]

Подразумевается, что читающий эту секцию имеет некоторые знания по концепции объектно-ориентированного программирования, в частности по программированию на языке C++.

Исходный код AVROSP [5] является полностью свободным. Это означает, что пользователи могут модифицировать, расширять приложение и распространять его как пожелают. Дополнительную информацию по свободной лицензии можно посмотреть на сайте gnu.org.

Рис. 4-1. Классы AVROSP.

AVROSP-Class-diagram

Почти вся работа приложения AVROSP на верхнем уровне инкапсулирована в классе JobInfo. Этот класс использует объекты классов XMLFile, HEXFile и AVRDevice для чтения и записи файлов XML и HEX, и распаковки информации из файлов описания программируемых устройств XML Part Description Files. Два класса-помощника Utility и ErrorMsg используются для вывода информации из приложения. Часть JobInfo, которая реализует рабочий интерфейс, не нуждается в знании используемого канала обмена с компьютером. Она декодирует командную строку, и создает экземпляры требуемых производных классов, к примеру класса SerialPort. Остальная часть кода просто работает через обобщенный класс родителя CommChannel. В настоящее время для коммуникации реализован только класс PC COM port, но могут быть также добавлены классы для работы через USB или TCP/IP (или через другие каналы обмена), для чего Вы можете сделать производный класс из базового класса CommChannel, и добавить проверку этого типа канала в парсер командной строки.

Такой же метод используется и для типа программатора. Код, который работает с программатором, не должен знать о том, какой тип программатора подключен. класс JobInfo получает от программатора строку идентификатора (programmer ID), и создает подходящий объект для нужного специфического типа программатора. Остальной код работает через обобщенный интерфейс AVRProgrammer. В настоящий момент реализованы только классы для бутлоадера [3] и для ISP-программатора [4]. Однако, Вы можете создать свой собственный производный класс для любого Вашего программатора на базе класса AVRProgrammer, и добавить проверку и декодирование его строки ID в JobInfo.

Такой дизайн AVROSP делает приложение очень гибким. Будущие расширения AVROSP в плане добавления каналом коммуникации и типов программаторов становятся простой задачей.

4.2 Описания классов

Здесь описаны только публичные методы интерфейса (public interface methods), которые доступны для использования в других классах и модулях. Читатель должен обратиться к комментариям в коде для получения подробной информации по внутренней работе различных классов. Каждый класс описан с кратким введением в назначение класса, и каждый из публичных методов описан с типом возврата, параметрами и назначением.

AVRDevice
Этот класс предоставляет контейнер для соответствующих параметров программируемого устройства (микроконтроллера), таких как объемы памяти (FLASH, EEPROM) и байты сигнатур. Класс также содержит функционал для получения информации устройства из инсталляции Atmel AVR Studio.

AVRDevice
Это конструктор для класса. Он получает строковый параметр - имя устройства, для которого запрашивается информация. Параметры не запрашиваются автоматически. Класс предоставляет метод для чтения информации для AVR Studio, но производные классы могут реализовать другой способ получения такой информации.

~AVRDevice
Это деструктор класса. В настоящее время в нем нет никакого функционала, это просто вместилище для дальнейших расширений.

readParametersFromAVRStudio
Этот метод делает поиск по текущей директории, по домашней директории приложения, директориям в переменной окружения PATH и, если это доступно, в инсталляции AVR Studio для требуемого файла XML. Чтобы получить путь до инсталляции AVR Studio, запрашивается база данных реестра Windows® на предмет ключа "HKEY_LOCAL_MACHINE\Software\Atmel\AVRTools\AVRToolsPath". Метод делает парсинг файла XML и получает оттуда нужную информацию. Будет выброшено исключение (exception thrown), если файл не найден или в файле есть ошибки. Метод берет список путей поиска, и ничего не возвращает.

getFlashSize
Это метод доступа к параметру объема памяти FLASH. У метода нет параметров, и он возвращает значение типа long, которое показывает количество байт (размер) FLASH.

getEEPROMSize
Это метод доступа к параметру объема памяти EEPROM. У метода нет параметров, и он возвращает значение типа long, которое показывает количество байт (размер) EEPROM.

getPageSize
Это метод доступа к параметру размера страницы FLASH. Метод допустим только тех AVR, которые имеют страницы FLASH. Для всех других AVR, у которых нет страниц памяти, возвращаемое значение будет –1. У метода нет параметров, и он возвращает значение типа long, которое показывает количество байт в каждой странице FLASH.

getFuseStatus
Это метод доступа для проверки фьюзов (fuse bits), если устройство их имеет. У метода нет параметров, и он возвращает true если в XML-файле есть секция "FUSE", иначе возвращает false.

getXFuseStatus
Это метод доступа для проверки - есть или нет в устройстве расширенные биты фьюзов (extended fuse bits). У метода нет параметров, и он возвращает true если устройство имеет extended fuses, иначе возвращает false.

getSignature
Это метод доступа для запроса байтов сигнатуры устройства. Имейте в виду, что это не байты сигнатуры, прочитанные из реально подключенного программируемого устройства, а байты сигнатуры, прочитанные из файлов XML. Метод берет в качестве параметров три указателя на long, и ничего не возвращает. Байты сигнатуры копируются в переменные, на которые указывают указатели, переданные в качестве параметров. Если любой из указателей окажется нулевым (null pointer), то будет выброшено исключение (exception thrown).

AVRProgrammer
Это абстрактный класс, предоставляющий фреймворк для реализации интерфейса для специфичного программатора AVR, например bootloader или программатор ISP. Почти все методы являются виртуальными и пустыми, они должны быть перегружены в производных классах. Программатор работает через обобщенный байт-ориентированный канал обмена, который должен быть предоставлен в момент создания экземпляра этого класса.

AVRProgrammer
Это конструктор для класса. Он получает один параметр, указатель на объект CommChannel. Это канал обмена, который будет использоваться для будущего обмена с реальным программатором. Будет выброшено исключение (exception thrown), если для предоставлен нулевой указатель на объект канала коммуникации.

~AVRProgrammer
Это деструктор класса. В настоящее время в нем нет никакого функционала, это просто вместилище для дальнейших расширений.

readProgrammerID
Это статический метод для чтения строки идентификации (ID-string) подключенного программатора. Этот метод отправляет 'S' в программатор через канал обмена, переданный в качестве параметра как указателя на объект CommChannel. Используйте этот метод, чтобы решить - какой нужно создать производный объект программатора. Этот метод возвращает ID-string программатора из 7 символов. Выбрасывается исключение, если в качестве канала обмена дан указатель null, или если произошла ошибка при обмене данными с программатором.

setPagesize
Это метод доступа к информации страницы FLASH программатора. Он должен быть вызван перед любыми операциями с памятью FLASH. Метод принимает один параметр типа long, размер страницы FLASH в байтах, и ничего не возвращает.

enterProgrammingMode
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору войти в режим программирования. Метод не получает параметров, и возвращает true, если эта операция поддерживается программатором, иначе возвращает false. Должно быть сгенерировано исключение (exception thrown), если произошла любая ошибка в обмене данных.

leaveProgrammingMode
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору выйти из режима программирования. Метод не получает параметров, и возвращает true, если эта операция поддерживается программатором, иначе возвращает false. Должно быть сгенерировано исключение (exception thrown), если произошла любая ошибка в обмене данных.

chipErase
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору стереть (erase) содержимое подключенного программируемого устройства (микроконтроллера). Метод не получает параметров, и возвращает true, если эта операция поддерживается программатором, иначе возвращает false. Должно быть сгенерировано исключение (exception thrown), если произошла любая ошибка в обмене данных.

RC_Calibrate
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору калибровать внутренний RC-генератор для устройств Atmel ATtiny4/5/9/10/20/40. Метод не принимает никаких параметров, и возвращает значение калибровки, отправленное программатором, иначе отправляет 0. За подробностями обратитесь к апноуту Atmel AVR057.

readOSCCAL
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать один из байтов калибровки генератора из подключенного программируемого устройства. Этот метод получает два параметра, значение типа long показывающее какое значение OSCCAL нужно прочитать, и указатель на long для переменной, куда должна быть скопирована прочитанная из устройства величина. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена или если в параметре предоставлен нулевой указатель.

readSignature
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать байты сигнатуры из подключенного устройства. Метод получает 3 параметра, 3 long указателя на переменные, куда должны быть скопированы прочитанные значения. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена или если в параметре предоставлен нулевой указатель.

checkSignature
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен проверить предоставленные байты сигнатуры на соответствие байтам из подключенного устройства. Метод получает 3 параметра типа long, содержащие проверяемую сигнатуру. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена или если в устройстве имеются несовпадающие байты сигнатуры.

writeFlashByte
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать байт в память FLASH подключенного устройства. Метод принимает два параметра типа long - один это адрес байта во FLASH, а другой значение записываемого байта. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.

writeEEPROMByte
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать байт в память EEPROM подключенного программируемого устройства. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.

writeFlash
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать содержимое предоставленного HEX-файла в память FLASH подключенного программируемого устройства. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

readFlash
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать данные из памяти FLASH подключенного программируемого устройства, и записать их в предоставленные объект файла HEX. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

writeEEPROM
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать содержимое предоставленного HEX-файла в память EEPROM подключенного программируемого устройства. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

readEEPROM
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать данные из памяти EEPROM подключенного программируемого устройства, и записать их в предоставленные объект файла HEX. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

writeLockBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен установить биты защиты (lock bits) подключенного программируемого устройства в предоставленное значение. Метод принимает 1 параметр типа long, содержащий нужное значение для lock bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.

readLockBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать значения битов защиты (lock bits) из подключенного программируемого устройства. Метод принимает 1 параметр - указатель на long, куда должны быть скопированы прочитанные значения lock bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

writeFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен установить фьюзы (fuse bits, сразу и младший, и старший байты) подключенного программируемого устройства в предоставленное значение. Метод принимает 1 параметр типа long, содержащий нужное значение для fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.

readFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать значения фьюзов (fuse bits, сразу и младший и старший байт) из подключенного программируемого устройства. Метод принимает 1 параметр - указатель на long, куда должны быть скопированы прочитанные значения fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

writeExtendedFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен установить расширенные фьюзы (extended fuse bits) подключенного программируемого устройства в предоставленное значение. Метод принимает 1 параметр типа long, содержащий нужное значение для extended fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.

readExtendedFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать значения расширенных фьюзов (extended fuse bits) из подключенного программируемого устройства. Метод принимает 1 параметр - указатель на long, куда должны быть скопированы прочитанные значения extended fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

programmerSoftwareVersion
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать версию firmware подключенного программатора. Метод принимает 2 параметра - 2 long указателя на переменные, куда должны быть скопированы номера версий major и minor. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

programmerHardwareVersion
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать версию аппаратуры подключенного программатора. Метод принимает 2 параметра - 2 long указателя на переменные, куда должны быть скопированы номера версий major и minor. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.

AVRBootloader
Это класс, который является производным от базового класса AVRProgrammer. Он предоставляет обычный интерфейс для приложения бутлоадера [3]. Класс AVRBootloader переназначает все виртуальные методы базового класса, и предоставляет конструктор с эквивалентными параметрами.

AVRInSystemProg
Это класс, который является производным от базового класса AVRProgrammer. Он предоставляет обычный интерфейс для приложения ISP программатора [4].
Класс AVRInSystemProg переназначает все виртуальные методы базового класса, и предоставляет конструктор с эквивалентными параметрами.

CommChannel
Этот класс является абстрактным, предоставляющим фреймворк для реализации байт-ориентированного канала обмена. Все методы класса CommChannel являются виртуальными и пустыми, они должны быть перезагружены в производных классах.

~CommChannel
Это деструктор класса. В настоящее время в нем нет никакого функционала, это просто вместилище для дальнейших расширений.

openChannel
Этот метод должен выполнять необходимые операции для открытия канала коммуникации. Он всегда должен быть вызван перед началом любого обмена. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка.

closeChannel
Этот метод должен выполнять необходимые операции для закрытия канала коммуникации. Он всегда должен быть вызван, когда обмен данными полностью завершен. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка.

sendByte
Этот метод должен послать байт через канал обмена. Метод принимает 1 параметр - значение типа long, содержащее отправляемый байт. Метод не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.

getByte
Этот метод должен ожидать и принимать байт из канала обмена. Метод не принимает параметров, и возвращает long, содержащий принятый байт. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.

flushTX
Этот метод должен сбрасывать (flush) буфер передачи. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.

flushRX
Этот метод должен сбрасывать (flush) буфер приема. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.

sendMultiple
Этот метод должен отправить массив байт через канал обмена. Метод принимает 2 параметра - указатель на первый байт в массиве unsigned char, и long содержащее количество байт. Метод не возвращает значения. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.

SerialPort
Это класс, производный из базового класса CommChannel. Он предоставляет обычный интерфейс обмена по каналу для стандартного COM-порта PC (RS-232 или виртуальный USB COM-порт). Класс SerialPort перезагружает все виртуальные методы базового класса, и имеет свой специфический конструктор.

SerialPort
Это конструктор для класса. Он инициализирует порт, но не открывает канал для обмена. Конструктор принимает 2 параметра - long содержащий номер COM-порта (от 1 до 8) и long содержащий лимит таймаута для обмена в секундах. Будет выброшено исключение, если указан недопустимый номер порта, или недопустимое значение таймаута.

HEXFile
Это класс, предоставляющий базовый функционал для чтения и записи файлов в формате Intel Extended HEX [2]. В классе есть также методы ждя задание диапазона используемой памяти. Это полезно для того, чтобы читать или записывать только определенные части областей памяти AVR.

HEXFile
Это конструктор для класса. Он получает 2 параметра - long указывающий на максимальный требуемый размер буфера и long содержащий значение байта по умолчанию, используемое для инициализации содержимого буфера. Будет выброшено исключение, если нет достаточного объема памяти для буфера.

~HEXFile
Это деструктор для класса. Он освобождает всю предварительно выделенную память.

readFile
Этот метод читает данные из HEX-файла. Метод принимает один параметр, имя HEX-файла, и не возвращает никаких значений. Будет выброшено исключение, если произошла любая ошибка с доступом к файлу, или если файл имеет ошибочный формат.

writeFile
Этот метод записывает данные в HEX-файл. Метод принимает один параметр, имя HEX-файла, и не возвращает никаких значений. Будет выброшено исключение, если произошла любая ошибка с доступом к файлу.

setUsedRange
Этот метод переназначает индикаторы диапазона памяти. Это может использоваться для пределов диапазона для операций чтения и записи. Метод принимает 2 параметра long, содержащие новые лимиты start и end соответственно. Метод не возвращает значения. Будет выброшено исключение, если предоставленный диапазон является недопустимым.

clearAll
Этот метод устанавливает весь буфер данных в нужное значение байта. Метод принимает 1 параметр long, содержащий нужное значение байта, которое будет записано во все ячейки буфера, и не возвращает значение.

getRangeStart
Это метод доступа к начальному адресу текущего диапазона. Метод не принимает параметров, и возвращает начальный адрес.

getRangeEnd
Это метод доступа к конечному адресу текущего диапазона. Метод не принимает параметров, и возвращает начальный адрес.

getData
Это метод доступа к данным буфера. Принимает 1 параметр long, содержащий адрес байта, и возвращает long, содержащее значение байта буфера. Будет выброшено исключение, если адрес вышел за пределы допустимого диапазона.

setData
Это метод доступа для установки данных в буфере. Принимает 2 параметра - long содержащий адрес байта, и long содержащий значение байта. Будет выброшено исключение, если адрес вышел за пределы допустимого диапазона.

getSize
Это метод доступа для запроса размера буфера. Метод не принимает параметров и возвращает long, содержащее размер буфера в байтах.

XMLFile
Это класс, предоставляющий простой парсер XML для чтения файлов описания AVR (Part description files), которые поставляются совместно с Atmel AVR Studio (их можно также скачать в архиве [5]). Класс можно также использовать в других проектах для общего парсинга XML. Имейте в виду, что класс не поддерживает атрибуты внутри тегов, так что не будет сгенерировано ошибок если такие произойдут с тегами. Атрибуты просто игнорируются. Класс читает весь файл XML и строит в памяти резидентное дерево из его содержимого.

XMLFile
Это конструктор для класса. Принимает 1 строковый параметр, имя файла XML для парсинга. Конструктор немедленно прочитает файл, так что если не будет выброшено исключений, то будет построено готовое дерево XML, когда конструктор завершит работу.

~XMLFile
Это деструктор для класса. Он освобождает всю память, выделенную ранее для резидентного дерева XML.

exists
Этот метод проверяет, есть ли указанный узел (node) по данному пути дерева XML. Метод принимает 1 строковый параметр, полный путь включающий имя узла, и возвращает true если node существует, иначе false.

getValue
Этот метод получает значение из узла (node value) дерева XML. Метод принимает 1 строковый параметр, полный путь включающий имя узла (node name), и возвращает строку значения из узла. Выбрасывается исключение, если узел не найден. Используйте метод exists, чтобы убедиться, что нужный узел существует.

print
Этот метод печатает все содержимое дерева в коротком формате. Этот метод был изначально реализован для целей отладки. Метод не принимает параметров, и ничего не возвращает.

JobInfo
Это класс, содержащий все информацию, распакованную из параметров командной строки. Класс также содержит функционал для выполнения всех нужных операций.

JobInfo
Это конструктор для класса. Он инициализирует всю его информацию в значения по умолчанию.

parseCommandline
Этот метод делает парсинг параметров командной строки. Принимает 2 параметра, стандартные int argc и char *argv[] от функции main(). Метод ничего не возвращает. Будет выброшено исключение, если встретился любой неправильный параметр.

doJob
Этот метод делает всю работу, необходимую для выполнения всех задач, полученных из параметров командной строки. Он также заботится о создании требуемых объектов канала обмена и программатора. Метод не принимает параметров, и ничего не возвращает. Будет выброшено исключение, если произойдет любая ошибка.

Utility
Этот класс является контейнером и пространством имен для часто используемых функций. Он реализован в исходном файле, external ссылка на объект Util object предоставлена в файле хедера. Класс специально используется для вывода сообщений лога и прогресса, и для разрешения фоновых операций.

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

~Utility
Это деструктор для класса. В нестоящее время в нем нет никаких действий, это просто место для будущих расширений.

muteLog
Этот метод предотвращает вывод всех дальнейших сообщений лога на экран. Он не принимает параметров, и ничего не возвращает.

muteProgress
Этот метод предотвращает вывод всех дальнейших сообщений лога на экран. Он не принимает параметров, и ничего не возвращает.

log
Этот метод печатает сообщения лога на экран, если это не заглушено методом muteLog. Метод принимает 1 параметр - строку сообщения. Метод ничего не возвращает.

Progress
Этот метод печатает сообщения прогресса на экран, если это не заглушено методом muteProgress. Метод получает 1 параметр - строку сообщения. Метод ничего не возвращает.

convertHex
Этот метод конвертирует шестнадцатеричную строку в число. Метод получает 1 параметр - строку, и возвращает long, содержащее преобразованную величину. Будет выброшено исключение, если при преобразовании произошла ошибка.

convertLong
Этот метод преобразует число в строку, используя указанное основание системы счисления. Метод принимает 2 параметра - long содержащий число для преобразования, и long содержащий нужное используемое основание.

getRegistryValue
Этот метод запрашивает значение из базы данных реестра Windows. Метод принимает 2 параметра - строку содержащую путь до ключа реестра, и строку содержащую имя ключа. Метод возвращает строку, содержащую значение ключа из реестра. Будет выброшено исключение, если произошла любая ошибка при доступе к базе данных реестра.

ErrorMsg
Это класс, содержащий контейнер для сообщений об ошибках и для выбрасывания их как исключений.

ErrorMsg
Это конструктор для класса. Принимает 1 параметр, строку сообщения об ошибке.

~ErrorMsg
Это деструктор для класса. Сейчас тут нет никакого функционала, это просто контейнер для дальнейшего расширения.

What
Это метод доступа к строке сообщения об ошибке. Метод не принимает параметров, и возвращает копию сообщения об ошибке.

[5. История ревизий]

Ревизия Дата Комментарий
2568B 10/2012 Новый шаблон (template) и некоторые незначительные исправления. Устаревшее в ревизии A удалено.
2568A 07/2004 Первый документированный релиз.

[Ссылки]

1. AVR911: AVR Open Source Programmer 8-bit Atmel Microcontrollers site:atmel.com.
2. Intel HEX: описание формата файла.
3. AVR109 site:site:atmel.com.
4. AVR910 site:atmel.com.
5. avr911.zip - исходный код и скомпилированный исполняемый файл (Windows) утилиты программатора AVROSP, XML-файлы описания устройств (XML part description files).
6. Макетирование и изготовление программатора AVRISP-MKII в домашних условиях.

 

Комментарии  

 
0 #1 Oleg 10.09.2020 14:12
А может кто рассказать, в чём и как собирать исходники?

microsin: обычно в пояснительном файле к исходникам - часто это файл README.txt, иногда указания есть в makefile (что явно подразумевает использование либо avr-gcc, либо Atmel Studio) на чистом и понятном всякому русскому программисту английском языке описывается, какой лучше использовать тулчейн, и даже бывает описан по шагам сам процесс сборки. Впрочем, сборка именно этого проекта ничем не отличается от какого-либо другого, и при желании можно использовать любой тулчейн, который Вам больше по душе. Таким образом, вопрос сводится с совсем другому вопросу: "На чем программировать ?" или "Как научиться компилировать код C?", что не входит в рамки рассмотрения этого даташита. Теме программировани я под AVR посвящено множество ресурсов в Интернете, и подразумевается , что у читателя даташита AVR911 уже есть достаточный опыт.
Цитировать
 

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


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

Top of Page