Адаптеры, с которыми может работать AVReAl Процессоры серии AVR программируются по последовательному интерфейсу SPI при рабочем напряжении питания. Дополнительно к сигналам SPI (SCK,MOSI,MISO) используется сигнал /RESET для сброса контроллера. В режиме "FBPRG" может использоваться вывод контроллера XTAL1 для тактировки контроллера при отсутствии кварцевого резонатора. Обратите внимание, что для процессора ATmega103 в режиме программирования вместо выводов MOSI, MISO её аппаратного контроллера SPI используются соответственно выводы PDI (RXD, вывод 2) и PDO (TXD, вывод 3). AVReAl использует программную реализацию SPI через линии параллельного порта компьютера и поддерживает три типа адаптеров. FBPRG Это первый вариант, с которого начиналась моя программа (до этого я пользовался программой fbprg.exe). Состоит всего из 5 проводков на LPT, однако... Altera ByteBalsterTM Этот адаптер выпускается фирмой Altera для программирования выпускаемых ею PLD. Адаптер STK200/STK300 поставляется фирмой Atmel вместе с соответствующими отладочными платами. Я не рекомендую пользоваться самым примитивным вариантом "5 проводков" aka "FBPRG". Звоны в кабеле, разброс характеристик микросхем LPT могут присести к разнообразным глюкам, сильно зависящим от конкретного компъютера и фазы луны. Не поленитесь, спаяйте Altera ByteBlaster, пригодится в случае чего и альтеровскую программируемую логику прошивать. Или воспользуйтесь адаптером, совместимым с платами STK200 или STK300 фирмы ATMEL, там такой же шинный формирователь, только другая распайка. Использование шинного формирователя улучшает форму программирующих сигналов и позволяет не снимать колодку с платы при отладке, программа переводит выходы адаптера в Z-состояние после окончания программирования. Оправданием использовния этого "адаптера" может служить только необходимость раз-другой прошить кристалл при повторении чужой разработки. Но как раз в этом случае особо неприятно загнать кристалл в неприличную позу. Кроме того ("аппетит приходит во время еды") - обязательно захочется еще что-нибудь куда-ниюудь зашить, но, поленившись спаять нармальный адаптер в первый раз, Вы будете еще долго ругаться и лениться, лениться и ругаться :-) Переходник программирования "FBPRG" представляет собой просто соединение линий параллельного порта и выводов микроконтроллера согласно таблице вывод LPT Сигнал AVR вывод LPT Сигнал AVR 6 (D4) /RESET 8 (D6) SCK 7 (D5) MOSI 10 (ACK) MISO 5 (D3) XTAL1 18..25 (GND) GND Программирование может осуществляться как в плате при питании схемы от её источника питания, так и при питании контроллера от параллельного порта (ключ -ap), для чего используются все незадействованные выходы данных LPT. Впрочем, этот режим далеко не всегда работает. Можно также программировать контроллер без кварцевого резонатора (ключ -o0), что может оказаться удобным как при использовании -ap, так и в том случае, если необходимо запрограммировать контроллер на работу от внутреннего RC-генератора. Схема переходника программирования "Altera ByteBlaster" Данный переходник разработан фирмой Altera для программирования и конфигурирования микросхем ПЛИС через интерфейсы JTAG и Passive Serial. Я счел достаточно удобным не снимать его с удлиннителя LPT вообще, в результате чего avreal стал поддерживать байт-бластер. Схему бластера я несколько модифицировал - добавил светодиоды для индикации наличия питания и режима программирования, а также вывел дополнительный сигнал на вывод 8 разъема X2 через свободный канал шинного формирователя. Эта линия используется при программной генерации сигнала XTAL1 микроконтроллера (ключ -o0). Рекомендую в неиспользуемый 6-й контакт набитой на шлейф головки забить кусочек спички и не паять соответствующий штырь в плату - защита от неправильной подстыковки разъема еще никому не мешала. Назначение контактов разъема X2 байт-бластера в режиме программирования AVR. X2 pin AVR signal X2 pin AVR signal 1 SCK 2 GND 3 MISO 4 VCC 5 nRESET 6 ключ 7 не используется 8 XTAL1 9 MOSI 10 GND Схема переходника программирования "STK200/300" Адаптер получил свое название от комплектующихся им отладочных плат фирмы Atmel для быстрого начала работы с микроконтроллерами At90s8515 и Atmega103 соответственно. На самом деле приведенная схема соответствует одновременно обеим адаптерам, в ней присутствуют перемычки для определения наличия как адаптера STK200 (выводы 2-12 разъема X1), так и STK300 (выводы 3-11) Как правило этот адаптер используют те, у кого есть в наличии одна из плат фирмы Atmel либо кто уже пользовался программой AVR ISP. При необходимости программной генерации тактового сигнала XTAL1 (ключ -o0) используется линия LED адаптера STK, исходно предназначенная для включения светодиода на отладочной плате. Разводка колодки X2 на приведенной схеме соответствует принятой фирмой Atmel для производимых ею плат, однако никто не мешает использовать и разводку, соответствующую Altera Byte Blaster. Оба описанных выше "буферизованных" адаптера собраны на основе шинного формирователя 74HC244 (аналог 1564АП5). Возможно также использование 555АП5 (74LS244) и 1533АП5 (74ALS244) либо, при соответствующем изменении схемы, любые другие неинвертирующие формирователи с тремя состояниями выходов. Применение буфера с третьим (высокоимпедансным) состоянием позволяет по окончании программирования снять сигнал разрешения выходов и, "отключив" адаптер от схемы, не влиять на её работу (за исключением паразитных емкостей между проводами шлейфа от адаптера до платы устройства). Для этих адаптеров рекомендуется изготовить удлиннитель порта LPT длиной 1.5-1.8м со всеми линиями (земель не жалеть :-), он может пригодится и для других целей, а сам адаптер выполнить на небольшой плате и вывести переходник от него до платы с микроконтроллером длиной 20-25 см. =================================================================== 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). Также возможна генерация 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 из программы (работает со всеми адаптерами, однако Altera ByteBlaster должен быть несколько доработан) -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 список буквенных обозначений 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. При обнаружении неприятностей просьба сообщать версию и очень желательно копию расширенной выдачи программы по -% (перенаправив выдачу в файл). ------------------------------------------------------------------------- Если я не ошибаюсь, эту статью написал : Alexandr Redchuck, Kyiv, Ukraine -------------------------------------------------------------------------