Информационный портал MSEVM



Главная > Программаторы > AVReAL
AVReAl Описание Адаптеры History FAQ English Russian

AVReAl - описание программы
Программа компилируется в следующих вариантах
  • 16-битном DOS, для работы на процессорах начиная с 286.
  • 32-битном WIN32
  • Также существует вариант для LINUX, но он еще недостаточно оттестирован.
Для работы WIN32 версии необходимы
W95/W98 DLportIO.DLL
NT4,W2000 DLportIO.DLL и DLportIO.sys

Это файлы из комплекта DriverLINX от Scientific Software Tools, Inc. (http://www.sstnet.com) Его поставка достаточно громоздкая, с примерами работы на C и VisualBASIC, автоматической инсталляцией DLportIO.SYS для WindowsNT и т.д. - итого файл port95nt.exe имеет размер 1.6Mb. С некоторых пор этот драйвер перестал поддерживаться фирмой, исчез с основной страницы фирмы и находится по адресу http://www.sstnet.com/ftp/unsupported/port95nt.exe. В переупакованном виде p95nt.zip это добро лежит у меня p95nt.zip (1.55Mb)
Применение WIN32 версии фактически имеет смысл только под NT, когда DOS-программа не имеет доступа к портам. Под W95/W98 нормально работает и DOS-версия.

Программа AVReAl предназначена для программирования микроконтроллеров серии AVR фирмы Atmel в режиме ISP (in-cirсuit serial programming, последовательное программирование в схеме). Т.е. на плату устройства устанавливаются штыри, к которым впоследствии подключается шлейфик от программатора (подключение LPT к чипу рассмотрено в разделе "адаптеры"). По окончании процесса программирования снимается сигнал сброса и процессор начинает выполнять зашитую в него программу.

В режиме "fbprg" незадействованные выходы данных LPT могут быть использованы как питание чипа (ключ -ap).

При использовании буферированных адаптеров (Altera ByteBlaster, Atmel STK*00) программа рассчитана на шитье в плате с "родными" питанием и кварцем.

Также возможна генерация XTAL программой (ключ -o0), данный режим может оказаться полезен и при наличии кварца в плате (LPT-порт легко его пересилит) для "обхода" ошибок кристалов "не читается содержимое EEPROM данных при частотах кварца, близких к максимальной".

Принимает INTEL HEX (avrasm -i). Загружает HEX в память не в массив, а в список. Т.е. различается ситуация "байт 0xFF в .hex" и "неупомянутый байт" В результате есть возможность шить только то, что надо, остальное только проверять при необходимости (см. ключ -v+).

Для любителей патчить прямо по HEX-файлу: если не совпадает контрольная сумма строки, то задается вопрос - "игнорировать?". При ответе 'Y' (или 'y') эта и все остальные ошибки CSUM игнорируются (но сами символы контрольной суммы должны присутствовать, иначе программа отвалится еще раньше по недопустимому символу в строке).
Для облегчения таких патчей (особенно "форматных" записей в EEPROM) реализована фича, подсмотренная у программы от VMK@real.kiev.ua для программирования PIC через Tait-совместимое железо: перед анализом строки из нее убираются пробелы и табуляции. В итоге можно дать:

:08 0001 00   00 01 0203 0405 0 6 0 7    DB
Также игнорируются пустые строки и строки, начинающиеся с символа '#', последнее предназначено для помещения комментариев о версии непосредственно в HEX-файлы.

Проверяется верхний адрес в HEX-файле, если не влазит в опознанный чип, то никаких действий (кроме ругани) не осуществляется.
Проверяется перекрытие адресов записей в HEX файле. При нахождении первого перекрытия производится выход из программы с указанием диапазона адресов перекрывающихся данных.

Для mega103 необходим расширенный формат HEX-файла (обычный не поддерживает объем больше 64Kb). Запись прочитанных данных в файл всегда производится с дополнительными записями тип '04' - Extended Linear Address Record, как не имеющим разночтений. Чтение из HEX-файла записей типа '02' Extended Segment Address Record производится в соответствии с формированием их в AVRASM by Atmel (без предусмотренного документацией Intel сворачивания адреса смещения по модулю 64Kb).

ВЫЗОВ

avreal [ключи] [[-c] имя_файла_кода [[-d] имя_файла_данных]]
 или
avreal [ключи] -d имя_файла_данных   (когда код трогать желания нет)

Если есть только имена файлов, то выполняется чтение. Подробнее про работу с файлами и про ключи -c, -d рассказано после описания остальных ключей.
Ключи (признак ключа - символ '-' или '/', регистр букв не важен).

-? (-h)
выдать ключи и перечень поддерживаемых кристаллов. Команда
 avreal +name -? 
(+name должен быть задан раньше ключа -?) выдает список fuses, поддерживаемых в режиме ISP для чипа name

+имя
установить тип кристалла, <имя> задается без префикса 'At', например, 90s1200, 90s8515, mega103 (т.е. в том виде, в котором имена выдаются по -h, регистр букв не важен) Обязательный ключ, никаких действий по умолчанию не производится. Если задан только чип (больше нет ни ключей, ни имен файлов), то чип будет сброшен и выдана информация о нем (наличие, если есть доступные по ISP fuses - их состояние).

-p<число1>[,<число2>]
"число1", шестнадцатеричное
установить порт 1,2,3 - номер LPT порта, >0x100 - базовый адрес порта если задан номер - адрес из BIOS MEMORY (не работает для win32 и linux версий, там принято, что LPT1/2/3 это 278/378/3BC). Адрес и в виде -p3BC, и в виде -p0x3BC воспринимается как HEX число. если задан адрес - "сами попросили" по умолчанию -p2 (LPT2)
"число2", с плавающей точкой, необязательный параметр
если указан, то не производится настройку на скорость порта, время обращения принимается равным <число2> микросекунд. В win32 версии настройка не производится никогда, если не указано - считается, что обращение к порту не быстрее 1мкс


-a<буква>
группа ключей "адаптер"
-ab
работа через Altera ByteBlaster
-as
работа через адаптер Atmel STK*00
-aa
автоматический выбор ByteBlaster/STK
-az
пытаться переводить выходы LPT в Z-состояние для "отключения" программатора от схемы ("byte-blaster для ленивых", работает в "FBPRG" режиме)
-ar
инверсия полярности сброса (например, для подачи его через резистор в базу присутствующего в схеме транзистора)
-ai#
установить время неактивного Reset после стирания равным # mS. Необходимо устанавливать большим времени задержки снятия сброса присутствующим в схеме супервизором.
-ap
подавать питание чипа через свободные выходы данных LPT (несовместимо с -ab,-as) Рекомендуется поближе к чипу установить блокировочный конденсатор по питанию [Andy Chernyshenko]


-o<число>
Задать частоту установленного кварца для настройки скорости SPI. <число>=<частота в килогерцах>, по умолчанию 800 (0.8MHz)
-o0 означает необходимость генерации XTAL из программы
(работает со всеми адаптерами, однако Altera ByteBlaster должен быть несколько доработан)

-n[<число>]
Использовать последние 2 байта кода как счетчик стираний. Если указано <число>, то для записи счетчика используется оно, а не инкрементированное прочитанное значение. При -ewn если последние 2 байта заняты кодом то -n игнорируется

-e[-]
Стереть чип
'-' задает сохранение содержимого EEPROM способом прочесть/стереть/записать. Даже для megaX03 применяется этот способ, если хочется пользоваться имеющимся fuse EESAVE, следует установить его (-fe) отдельным запуском avreal.

-1,-2,-3,-4,-5
Увеличить задержки на программирование в 1.5, 2, 3, 4, 5 раз соответственно (для программирования при пониженном напряжении)

-b
Проверить на чистоту

-r
Прочитать из чипа в файл[ы]

-w[+]
Записать в чип
дополнительный '+' - если чип в этом задании не стирался и задана запись в EEPROM, то прописать FF в ячейки EEPROM, не заданные в HEX. Верификация этих ячеек на значение FF будет производится даже если был задан просто -v, а не -v+ (мы же эти ячейки писали). Автоматическое стирание чипа не производится по -w, используйте -ew для нестертого чипа.

-v[+]
Верифицировать (только то, что есть в hex) дополнительный '+' вызывает проверку на FF "свободных" с точки зрения HEX-файла позиций

-l#
Установить уровень защиты # = 1 or 2

-f<fuselist>
список fuses для тех чипов, в которых они шьются по ISP. <fuselist> выглядит как fusename=value,fusename=value,alias,alias... value - шестнадцатеричное значение без префиксов и суффиксов. Для однобитовых fuse добавлены мнемонические значения ON и OFF (прошить и стереть, 0 и 1 соответственно). alias'ы - это однобуквенные сокращения для fusename=value, соответствующие буквенным обозначениям в версиях avreal до 1.22. При наличии "противоречивых" fusename=val и/или alias выдается сообщение об ошибке. В целях совместимости с предыдущими версиями оставлена возможность перечисления alias-ов без разделения запятыми. Перечень fusename с диапазоном value и комментарием, а также допустимые alias'ы для конкретного чипа можно получить при помощи
   avreal +chipname -?
Если работа с fuses по SPI поддерживается, то их состояние сообщается при любой операции с чипом, задание ключа -F необязательно. OSCCAL (Tiny12, Tiny15, Mega163) рассматривается как Read-Only fuse ;-) Fuses программируются или верифицируются указанием ключа -w или -v совместно с ключом -f (в том числе в одном сеансе с программированием/верификацией кода или данных).
Неупомянутые fuse остаются неизменными (кроме BLB для mega161, mega163, так как они могут быть стерты по -E независимо от ключа -F). Группа BLB относится скорее к lock-битам, записать 1 поверх уже запрограммированной в 0 fuse невозможно. Если запрошена такая операция и чип не стирался, то программа завершает работу с соответствующим предупреждением.
AVReAl обеспечивает также расширенную поддержку osccal
Для tiny12, tiny15 поддерживается программирование SPIEN и RSTDSBL. Будьте осторожны, SPIEN по умолчанию запрограмировано, ключ -fspien=1 (-fspien=off) сотрет SPIEN и запретит дальнейшее низковольтное программирование. То же произойдет и при программировании RSTDSBL (-frstdsbl=0 или -frstdsbl=on).

-%
Выдавать по ходу дела дополнительную информацию (производимые действия и ответы чипа). Внутри .bat файлов следует писать -%% (пожалуй, это был неудачный выбор - символ, имеющий особый смысл в bat-файлах, но меняться уже не будет).

-!
Делать, что велено, даже если чип не распознан (или распознан "не так", как задано в +<имя чипа>) а также если не обнаружен указанный в командной строке адаптер. Попытка стереть нераспознанный (возможно просто залоченный) чип при наличии команды стирания производится и без -! после чего проводится повторное детектирование чипа.

возможны осмысленные комбинации:

/vw     Записать, проверить
-e-wv   Стереть с сохранением EEPROM, записать, верифицировать
-bw     Проверить на чистоту, если грязная - отвалиться, иначе писать

После ключа -d идет имя файла данных, после -c имя кода, в этом случае порядок файлов не важен. Пробел между ключами -c/-d и именами не обязателен, т.е. допустимо как -cfoo.hex так и -c foo.hex. Если дано два имени файла без ключей -c и -d, то первое имя - файл кода, второе - файл данных (EEPROM).
Если имя одно и нет ключей -c/-d, то этот файл содержит данные для кода и, если он содержит информацию после верхнего адреса FLASH для заданного кристалла, то эта информация используется для программирования EEPROM данных. Т.е. если, например, для 90s2313 hex-файл содержал данные в адресах от 0x800 до 0x87F, то эти данные будут записаны в EEPROM по адресам 0x00-0x7F.

Для Mega163 и Tiny12 поддерживаются особые формы ключей -c и -d для записи значения OSCCAL по адресу offset (шестнадцатеричное значение без префиксов и суффиксов). Байт (слово для '?') по offset должен существовать в исходном HEX-файле. Используется адрес байта, а не слова, в том числе и при обращении ко flash кода.

-d*osccal=offset
занести osccal как байт в EEPROM данных
-c*osccal=offset
занести osccal как байт (для flash кода это выходит под команду LPM)
-с?osccal=offset
врезать OSCCAL как часть команды LDI по offset,offset+1.
Например:
   public osccal_ldi
   ...
osccal_ldi:
   ldi R16,0xFF
   out OSCCAL,R16
   ...
Далее смотрим по MAP-файлу значение osccal_ldi, например оно вышло 0x120 (при адресации в байтах, или 0x90 в словном) и пишем:
avreal +tiny12 -ewv -c foo.hex -c?osccal=120

Группа ключей может задаваться как одним аргументом (-wv) так и раздельно (-v -w). Ключ с параметром (-p -c -d) может стоять в группе только последним. Т.е. допустимо, скажем, такое:

   -wddata.hex -bv+c prog.hex -ep1
Порядок ключей не важен, выполнение производится в порядке E B W V L. Если проверка (B, V) дала отрицательный результат, то дальнейшая работа не производится. Т.е.
   -ebwvl2
означает: стереть, если стерлась - писать, если верифицировалась - залочить.
   +tiny12 -w -c foo.hex -c*osccal=1f3 -fcks=3,boden=0
Для tiny12 записать во флеш кода файл foo.hex, по адресу байта 0x1F3 занести прочитанное из чипа значение OSCCAL, запрограммировать fuse boden и установить fuse CKSEL в бинарное значение 0011

Возвращаемый ERRORLEVEL

0
все заказанное сделалось
10
not blank при -b, несравнение при -v[+]
20
Невозможность осуществить запрошенную операцию HEX кода или данных слишком большой для распознанного чипа. Запрошенное для записи состояние BLB нельзя записать, не стерев чип (а команды стирания не было).
30
не распознан конкретный чип (бывает при защищенном чипе, поэтому при -e все равно делается попытка стереть и если после этого тоже не распознан - отвал)
40
шнурок не подключен (не удалось войти в программирование по алгортиму для At90s)
50
ошибка при чтении (не найден, "не те" символы, не совпала контрольная сумма, ошибка чтения, ...) или записи (есть защищенный от перезаписи с таким же именем, ...) HEX-файла.
60
недостаточно памяти для списков кода/данных
70
недопустимая командная строка (в т.ч. задан номер отсутствующего LPT)

СВЕТЛОЕ БУДУЩЕЕ (список унылостей в настоящем :-)

Cо временем добавится (может не все из перечисленного, зато очень может быть, что еще при жизни этого поколения :-):
Поддержка 89s8252, 89s53

P.S. При обнаружении неприятностей просьба сообщать версию и очень желательно копию расширенной выдачи программы по -% (перенаправив выдачу в файл).









e-mail рассылки
Радиолюбитель
Подписаться письмом


















Яндекс цитирования Rambler's Top100
radionet