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-версия.
Подключение 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. При обнаружении неприятностей просьба сообщать версию и желательно
копию расширенной выдачи программы по -% (перенаправив выдачу в файл).