AVReAl Описание Адаптеры History FAQ

AVReAl - описание программы
Программа компилируется в следующих вариантах Для работы 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-версия.

Подключение LPT к чипу рассмотрено в разделе "адаптеры"

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

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

Принимает 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 имя_файла_данных   (когда код трогать желания нет)

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

-? (-h)
выдать ключи и перечень поддерживаемых кристаллов
+имя
установить тип кристалла, <имя> задается без префикса 'At', например, 90s1200, 90s8515, mega103 (т.е. в том виде, в котором имена выдаются по -h) По умолчанию принимается 90s1200, но если при старте чип распознан, то остальные действия производятся согласно прочитанному ID. Внимание! 90s1200 не имеет процедуры пересинхронизации дополнительными импульсами SCK, поэтому при отсутствии синхронизма с первой попытки и при незаданном явно типе avreal остановится с сообщением "not connected".
-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) Рекомендуется поближе к чипу установить блокировочный конденсатор по питанию [Andy Chernyshenko]
-o<число>
Задать частоту установленного кварца для настройки скорости SPI. <число>=<частота в килогерцах>, по умолчанию 800 (0.8MHz)
-o0 означает необходимость генерации XTAL из программы (несовместимо с
-ab -as -aa)
-n[<число>]
Использовать последние 2 байта кода как счетчик стираний. Если указано <число>, то для записи счетчика используется оно, а не инкрементированное прочитанное значение. При -ewn если последние 2 байта заняты кодом то -n игнорируется
--
сообщить - подключен ли хвост к какому-либо чипу из семейства AVR, к какому именно (или "возможно, защищен") Побочное действие - сброс чипа. Или наоборот - сбросить чип, побочное действие - сообщить о нем.
-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+ (мы же эти ячейки писали).
-v[+]
Верифицировать (только то, что есть в hex) дополнительный '+' вызывает проверку на FF "свободных" с точки зрения HEX-файла позиций
-l#
Установить уровень защиты # = 1 or 2
-f<fuselist>
список буквенных обозначений fuses для тех чипов, в которых они шьются по ISP. Буква означает "прошить" fuse, в непомянутые записывается "стертое" значение (т.е. -f с пустым списком означает стеретое состояние всех fuses). Запятые в списке игнорируются, рекомендуется разделять символы запятыми (в целях совместимости с будущим способом задания FUSES).
       90s2323,90s4434,90s8535      F - FastStart
       90s2343,tiny22               R - RC enable
       mega603,mega103              E - EESAVE
                              0,1,2,3 - Startup Mode
       90s2333,90s4433              B - BODEN
                                    V - BOR Voltage
                                 0..7 - Startup Mode
Например: -fe,2 - запрограммировать EESAVE и SUT=2 для mega103
При наличии "противоречивых" букв (например, -f12 для mega) используется последний из указанных вариант. Если работа с fuses по SPI поддерживается, то их состояние сообщается при любой операции с чипом. В случае наличия -f при -v производится верификация fuses.
-%
Выдавать по ходу дела дополнительную информацию (производимые действия и ответы чипа). Внутри .bat файлов следует писать -%% (пожалуй, это был неудачный выбор - символ, имеющий особый смысл в bat-файлах, но меняться уже не будет).
-!
Делать, что велено, даже если чип не распознан (или распознан "не так", как задано в +<имя чипа>). Если не было команды +<имя чипа>, принимается 90s1200 Попытка стереть нераспознанный (возможно просто залоченный) чип при наличии команды стирания производится и без -! после чего проводится повторное детектирование чипа.
возможны осмысленные комбинации:
/vw     Записать, проверить
-e-wv   Стереть с сохранением EEPROM, записать, верифицировать
-bw     Проверить на чистоту, если грязная - отвалиться, иначе писать

Если дано два имени файла, то первое имя - файл кода, второе - файл данных (EEPROM). Если имя одно и нет ключей -c -d, то это файл кода. После ключа -d идет имя файла данных, после -c имя кода, в этом случае порядок файлов не важен. Пробел между ключами -c -d и именами не обязателен, т.е. допустимо как -cfoo.hex так и -c foo.hex.

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

   -wddata.hex -bv+c prog.hex -ep1
Порядок ключей не важен, выполнение производится в порядке E B W V L. Если проверка (B, V) дала отрицательный результат, то дальнейшая работа не производится. Т.е.
   -ebwvl2
Стереть, если стерлась - писать, если верифицировалась - залочить.

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

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

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

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

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