Это файлы из комплекта 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.
Применение WIN32 версии фактически имеет смысл только под NT, когда
DOS-программа не имеет доступа к портам. Под W95/W98 нормально работает и
DOS-версия.
Программа AVReAl предназначена для программирования микроконтроллеров серии
AVR фирмы Atmel в режиме ISP (in-cirсuit serial programming, последовательное
программирование в схеме). Т.е. на плату устройства устанавливаются штыри, к
которым впоследствии подключается шлейфик от программатора. По окончании
процесса программирования снимается сигнал сброса и процессор начинает выполнять
зашитую в него программу.
В режиме "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
пытаться переводить выходы LPT в Z-состояние для "отключения"
программатора от схемы ("byte-blaster для ленивых", работает в "FBPRG"
режиме)
-ar
инверсия полярности сброса (например, для подачи его через резистор в
базу присутствующего в схеме транзистора)
-ai#
установить время неактивного Reset после стирания равным
# mS. Необходимо устанавливать большим времени задержки снятия
сброса присутствующим в схеме супервизором.
Использовать последние 2 байта кода как счетчик стираний. Если указано
<число>, то для записи счетчика используется оно, а не
инкрементированное прочитанное значение. При -ewn если последние 2
байта заняты кодом то -n игнорируется
Стереть чип '-' задает сохранение содержимого EEPROM способом
прочесть/стереть/записать. Даже для megaX03 применяется этот способ, если
хочется пользоваться имеющимся fuse EESAVE, следует установить его
(-fe) отдельным запуском avreal.
дополнительный '+' - если чип в этом задании
не стирался и задана запись в EEPROM, то прописать FF в ячейки EEPROM, не
заданные в HEX. Верификация этих ячеек на значение FF будет производится даже
если был задан просто -v, а не -v+ (мы же эти ячейки
писали). Автоматическое стирание чипа не производится по
-w, используйте -ew для нестертого чипа.
список 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 Проверить на чистоту, если грязная - отвалиться, иначе писать
Группа ключей может задаваться как одним аргументом (-wv) так и
раздельно (-v -w). Ключ с параметром (-p -c -d) может стоять
в группе только последним. Т.е. допустимо, скажем, такое:
-wddata.hex -bv+c prog.hex -ep1
Порядок ключей не важен, выполнение производится в порядке E B W V L. Если
проверка (B, V) дала отрицательный результат, то дальнейшая работа не
производится. Т.е.
-ebwvl2
означает: стереть, если стерлась - писать, если
верифицировалась - залочить.
Для 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. При обнаружении неприятностей просьба сообщать версию и очень
желательно копию расширенной выдачи программы по -% (перенаправив выдачу в
файл).