При работе с микроконтроллерами важнейшим девайсом являетя программатор, именно он может залить в МК нашу программу. Он же часто становится камнем преткновения на пути освоения AVR. Дело в том, что для работы простейшего программатора, не требующего в своем составе микроконтроллера, нужен компьютер с COM или LPT портом, причем желательно с частотой процессора не выше гигагерца-двух. Да операционную систему подревней — WinXP или Win2K. А это ныне редкость. С другой стороны, для USB программаторов нужно предварительно прошить контроллер. А чем его прошить? Вот тут и возникает проблема курицы и яйца — как прошить контроллер программатора не имея программатора. Не так давно появилось решение позволяющее сделать надежный и быстрый USB программатор AVR на базе тупой, непрограммируемой, логики.
Bitbang, что это такое и с чем его едят.
Это не что иное как прямое управление выводами какого либо порта. В COM порт можно отправить байт через какой либо высокоупровневый API и он просто выйдет через линию TX потоком стандартого RS232 сигнала.
А можно достучаться напрямую до регистров отвечающих за состоянием каждого пина порта и дрыгая их как нам угодно сэмулировать через тот же COM порт не только RS232, но и SPI, I2C или Dallas 1-wire, HD44780 протокол, применив простейший тупой обвяз. Это и будет битбанг. В старых программаторах вроде SiProg (PonyProg) или в схеме Громова так и было сделано с COM портом. И работало надежно и стабильно. Но, увы, СОМ порт ушел в небытье, а при попытке сделать то же самое с виртуальным COM портом на конвертере USB-RS232 ничего не получалось. Т.к. заточен он был все же на работу нормального COM порта, а для битбанга приходилось извращаться. В результате такие схемы либо не работали вовсе, либо работали ОЧЕНЬ медленно, прошивая контроллер за час-полтора, что ни в какие ворота не лезет. Все изменилось с появлением микросхемы конвертера USB-UART FT232R у которой стал доступен битбанг режим не через виртуальный COM порт, а напрямую через драйвер FTDI. И вот тут наступила нирвана. В результате, из одной только FTDI получается первоклассный скоростной программатор, прошивающий 16кб прошивки за 10-12 секунд и это вместе с верификацией!!! А из деталей надо ТОЛЬКО микросхему FT232RL, два конденсатора на 0.1uF и гнездо USB. ВСЕ! Ну и проводочки естественно. Схема включения получается следующей:
Но у этого программатора есть один минус — он не отдает линию RESET по завершении программирования. Поэтому чтобы схема стартанула надо выдрать из платы разьем ISP, что очень неудобно. Я взял и добавил к этой схеме буфферную микросхему. 74HC244, ту самую которая использовалась в программаторе STK200. Эта микросхема является буффером и по сигналу ОЕ переводить выходные линии в Z состояние. Подал на ОЕ высоки уровень — считай что отрезал программатор от программируемой схемы. Осталось только тумблерок RUN/PROG поставить и одним движением осуществлять запуск. Но тумблер мне было ставить вломы, поэтому я решил сделать кнопочный переключатель на RS- триггере. Сам триггер собрал на двух 2И-НЕ элементах микросхемы стандартной логики 74HC00 (вроде нашей К155ЛА3 только жрет намного меньше). На это ушло два вентиля. Кнопочки перекидывают его из режима RUN в режим PROG, кондер на одной из кнопок задает начальное положение при включении. Ну а из оставшихся двух вентилей я скреативил генератор прямоугольного сигнала, на случай если по ошибке залочу фузами МК на внешний тактовый сигнал. Резистор и конденсатор для генератора взял первые попавшиеся на столе. Оказался на 22pF и 10кОм. Что дало в результате частоту около 2 с копейками МГЦ. Их также завел через буффер и вывел на штырьки.
Развел платку: Вытравил и спаял: Управляющий софт: Теперь о софте. Шьется все посредством программы avrdude, причем, как я понял, это не простая дудка, а немного переделанная и с дополнительной библиотечкой именно для битбанга. Потому как со старой, то что под USBASP ничего не заработало. А также немного подправленный avrdude.conf, где определен новый программатор.
Добавлена секция: #FTDI_Bitbang programmer id = "ftbb"; desc = "FT232R Synchronous BitBang"; type = ft245r; miso = 3; # CTS(11 PIN FT232R) sck = 5; # DSR(9 PIN FT232R) mosi = 6; # DCD(10 PIN FT232R) reset = 7; # RI (6 PIN FT232R) ;
Где: id — это как мы будем звать наш программатор в командной строке avrdude. desc — описание что за программатор type — дает понять, что мы используем либу для FT245R (впервые было сделано на этой микрухе) miso, sck, mosi, reset — что какой ноге соответствует
Работает в винде (в ХП точно, в остальных не проверял, нету у меня их), в линухе и говорят даже на маке.
Линухом я не пользуюсь, мак для меня бесполезен (а с шалфея еще и прет круче! =) ), поэтому показывать буду в винде: Итак, первым делом дергай у меня архив с похаченной дудкой и конфигом. Также надо тебе поставить драйвера FTDI и воткнуть железку в USB, чтобы в системе появился виртуальный COM порт. Это будет означать что все встало и работает. Дальше распакуй архив с avrdude где нибудь поближе, C:\FTBB\ например. Консольные утилиты, особенно забугорные, очень не любят русские названия, а также длинные имена с пробелами. Теперь разберемся с дудкой. Вообще это очень могучая программа, она поддерживает по моему вообще все возможные программаторы. Но консольная, так что потребуется некоторая сноровка. Для примера накачу бутлоадер на ATmega16 Итак, для прошивки нам потребуется командная строка такого вида: avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a -p тип контроллера. m16 означает что у нас мега16, остальные ключи надо смотреть в хелпе к дудке. -с тип программатора. В avrdude.conf он у нас описан как ftbb вот его и указываем. -P порт на котором сидит программатор. В данном случае в комп воткнута только одна микросхема FT232RL так что ft0 если воткнуто несколько таких конвертеров то этот параметр может быть ft1, ft2 и так далее. Как определить сразу под каким номером у нас сейчас программатор я так и не дотумкал. Впрочем не особо и пытался да и нужды такой не было — определяю перебором, не первый так второй. -U говорим что что то заливаем. Формат такой memtype:r|w|v:filename[:format] вначале указвыаем куда (flash, eeprom или fuse), потом что делаем читаем, пишем, проверяем, затем путь к прошивке. Прошивка у меня валяется в том же каталоге что и avrdude.exe поэтому и путь только лишь имя файла. Если же прошивка лежит где то далеко, то полный путь можно указать в кавычках, например, так: «c:\FTBB\m16boot.hex». А последняя «а» означает, что тип файла с прошивкой определить автоматом.
Включаем на программаторе режим программирования. Запускаем эту бодягу и… получаем облом. А почему? А потому, что изначально мега16 настроена на частоту в 1Мгц, а мы ей битбангом пытаемся загнать данные на максимальной скорости. Для обхода этой проблемы есть ключ снижения скорости -В avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a -В 4800 Шить, конечно, будет медленно, раз так в 10 медленней. Но ведь никто не запрещает вначале переткнуть fuse биты на более скоростную частоту, а потом вернуть обратно? ;) Запустив это, ты должен увидеть на экране разные прогрессбары, вроде таких:
c:\FTBB>avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a -B 4800 avrdude.exe: BitBang OK avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7 avrdude.exe: drain OK
ft245r: bitclk 4800 -> ft baud 2400 avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e9403 avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be perfo rmed To disable this feature, specify the -D option. avrdude.exe: erasing chip ft245r: bitclk 4800 -> ft baud 2400 avrdude.exe: reading input file «m16boot.hex» avrdude.exe: input file m16boot.hex auto detected as Intel Hex avrdude.exe: writing flash (16310 bytes):
Writing | ################################################## | 100% 115.44s
avrdude.exe: 16310 bytes of flash written avrdude.exe: verifying flash memory against m16boot.hex: avrdude.exe: load data flash data from input file m16boot.hex: avrdude.exe: input file m16boot.hex auto detected as Intel Hex avrdude.exe: input file m16boot.hex contains 16310 bytes avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 109.06s
avrdude.exe: verifying … avrdude.exe: 16310 bytes of flash verified avrdude.exe: safemode: Fuses OK avrdude.exe done. Thank you.
О fuse битах Я их шью вот такой строкой (Warning!!! Справедливо ТОЛЬКО ДЛЯ ATmega16, для других AVR значение FUSE байтов другие — надо уточнять по даташиту иначе можно заблокировать кристалл!!!): avrdude.exe -p m16 -c ftbb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m Тут старший, младший и биты защиты задаются просто числом. Если перевести его в двоичное, то получим конкретные биты. Не очень удобный способ, зато ошибиться с нотацией сложней. Скорость сразу же делаю маленькой, т.к. они все равно прошиваются мгновенно на любой скорости. А вообще, чтобы не заморачиваться со всемии этими строками и ключами создал себе командный файл burnboot.cmd в который вписал две строчки: avrdude.exe -p m16 -c ftbb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a
И теперь шью в один тычок. Вначале накатываются фузы, чтобы скорость тактовую поднять и шить на предельной скорости, потом вкатываю прошивку. Также есть GUI оболочка на avrdude, правда у ней fuse биты тоже выставляются числом. Но зато можно пути выбирать через стандартные диалоги. Также, надеюсь YOURDEVICE допилит свою оболочку под USBASP до работы с этим программатором. Процесс уже пошел, но пока там сыровато и многие моменты не пашут. Как юзать 1. Воткнуть ISP кабель в прошиваемую плату. 2. Нажать кнопку PROG — должна загореться зеленая лампочка. Программатор готов к работе. 3. Прошить прошивку, фузы, биты защиты. 4. Нажать кнопку RUN — программатор отпустит линию RESET и контроллер начнет выполнять программу. Файлы и ссылки к статье Модифицированный avrdude + все либы и конфиги для него. Там же GUI и мой батник Схема программатора в формате Spring Layout Страница автора bitbang метода для FTDI
В общем, программатор получился рулезный. Быстрый и удобный. На аппартном USB конвертере, не требует прошивки собственного контроллера как в USBASP и крайне прост, а в качестве бонуса дает еще и USB-UART интерфейс для отладки.
Остается лишь небольшая такая проблема, вытравить плату и припаять вот это:
Но я уверен, у тебя все получится, может не с первого, так с n-ного раза, но наверняка!
|