AVR. Учебный курс. Трактат о программаторахPrint This Post

Автор DI HALT
Опубликовано 13 июля 2008 
Рубрики: AVR. Учебный курс
Метки: ,

Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.

Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния.

Что же представляет из себя это устройство?
В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя. Также нужна прошивающая программа, которая по специальному протоколу загонит данные в микроконтроллер.

Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:

Внутрисхемное программирование (ISP)
Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).


К этим выводам подключается прошивающий шнур программатора и происходит заливка прошивки. После чего шнур отключается и контроллер начинает работу.
У AVR прошивка заливается по интерфейсу SPI и для работы программатора нужно четыре линии и питание (достаточно только земли, чтобы уравнять потенциалы земель программатора и устройства):

Сам же разъем внутрисхемного программирования представляет собой всего лишь несколько штырьков. Лишь бы на него было удобно надеть разъем. Конфигурация его может быть любой, как тебе удобней.
Однако все же есть один популярный стандарт:

Для внутрисхемной прошивки контроллеров AVR существует не один десяток разнообразных программаторов. Отличаются они в первую очередь по скорости работы и типу подключения к компьютеру (COM/LPT/USB). А также бывают безмозглыми или со своим управляющим контроллером.

Безмозглые контроллеры, как правило, дешевые, очень простые в изготовлении и наладке. Но при этом обычно работают исключительно через архаичные COM или LPT порты. Которые найти в современном компьютере целая проблема. А еще требуют прямого доступа к портам, что уже в Windows XP может быть проблемой. Плюс бывает зависимость от тактовой частоты процессора компьютера.

Так что твой 3ГГЦ-овый десятиядерный монстр может пролететь, как фанера над Парижем.

Идеальный компьютер для работы с такими программаторами это какой-нибудь PIII-800Mhz с Windows98…XP.
Вот очень краткая подборка проверенных лично безмозглых программаторов:

Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через USB. А если собраны на COM порт, то без извращенских методик работы с данными — как честный COM порт. Так что адаптеры COM-USB работают на ура. И детали подобрать можно покрупней, чтобы легче было паять. Но у этих программаторов есть другая проблема — для того чтобы сделать такой программатор нужен другой программатор, чтобы прошить ему управляющий контроллер. Проблема курицы и яйца. Широко получили распространение такие программаторы как:

Внутрисхемное программирование, несмотря на все его удобства, имеет ряд ограничений.
Микроконтроллер должен быть запущен, иначе он не сможет ответить на сигнал программатора. Поэтому если неправильно выставить биты конфигурации (FUSE), например, переключить на внешний кварцевый резонатор, а сам кварц не поставить. То контроллер не сможет запуститься и прошить его внутрисхемно будет уже нельзя. По крайней мере до тех пор пока МК не будет запущен.
Также в битах конфигурации можно отключить режим внутрисхемной прошивки или преваратить вывод RESET в обычный порт ввода-вывода (это справедливо для малых МК, у которых RESET совмещен с портом). Такое действо тоже обрубает программирование по ISP.

Параллельное высоковольтное программирование
Обычно применяется на поточном производстве при массовой (сотни штук) прошивке чипов в программаторе перед запайкой их в устройство.
Параллельное программирование во много раз быстрей последовательного (ISP), но требует подачи на RESET напряжения в 12 вольт. А также для параллельной зашивки требуется уже не 3 линии данных, а восемь + линии управления. Для программирования в этом режиме микроконтроллер вставляется в панельку программатора, а после прошивки переставляется в целевое устройство.

Для радиолюбительской практики он особо не нужен, т.к. ISP программатор решает 99% насущных задач, но тем не менее параллельный программатор может пригодиться. Например, если в результате ошибочных действий были неправильно выставлены FUSE биты и был отрублен режим ISP. Параллельному программатору на настройку FUSE плевать с высокой колокольни. Плюс некоторые старые модели микроконтроллеров могут прошиваться только высоковольтным программатором.
Из параллельных программаторов для AVR на ум приходит только:

А также есть универсальные вроде TurboProg 6, BeeProg, ChipProg++, Fiton которые могут прошивать огромное количество разных микроконтроллеров, но и стоят неслабо. Тысяч по 10-15. Нужны в основном только ремонтникам, т.к. когда не знаешь что тебе завтра притащат на ремонт надо быть готовым ко всему.

Прошивка через JTAG
Вообще JTAG это отладочный интерфейс. Он позволяет пошагово выполнять твою программу прям в кристалле. Но с его помощью можно и программу прошить, или FUSE биты вставить. К сожалению JTAG доступен далеко не во всех микроконтроллерах, только в старших моделях в 40ногих микроконтроллерах. Начиная с Atmega16.
Компания AVR продает фирменный комплект JTAG ICEII для работы с микроконтроллерами по JTAG, но стоит он (как и любой профессиональный инструмент) недешево. Около 10-15тыр. Также есть первая модель JTAG ICE. Ее можно легко изготовить самому, а еще она встроена в мою демоплату Pinboard

Прошивка через Bootloader
Многие микроконтроллеры AVR имеют режим самопрошивки. Т.е. в микроконтроллер изначально, любым указанным выше способом, зашивается спец программка — bootloader. Дальше для перешивки программатор не нужен. Достаточно выполнить сброс микроконтроллера и подать ему специальный сигнал. После чего он входит в режим программирования и через обычный последовательный интерфейс в него заливается прошивка. Подробней описано в статье посвященной бутлоадеру.
Достоинство этого метода еще и в том, что работая через бутлоадер очень сложно закосячить микроконтроллер настолько, что он не будет отвечать вообще. Т.к. настройки FUSE для бутлоадера недоступны.
Бутлоадер также прошит по умолчанию в главный контроллер демоплаты Pinboard чтобы облегчить и обезопасить первые шаги на пути освоения микроконтроллеров.

Комментарии

16 комментариев на «AVR. Учебный курс. Трактат о программаторах»


  1. Stalker46 03 марта 2010 16:38

    А что это делает в учебном курсе? чего не на главной странице?
    Здарова, Артем, вот я и зашел, чего то не мог зайти долго…

    DI HALT

    Я постепенно правлю и переписываю старые статьи, чтобы привести их в более стройный и завершенный вид.


  2. Stalker46 03 марта 2010 19:42

    А эта статья про что была?

    DI HALT

    Эта ни про что. Она новая. Но ее явно тут не хватало. Если ты не заметил, я выбросил из учебного курса “шаг первый - программатор” Переименовав ее в “Программатор Громова” и вынес ее в Готовые устройства.


  3. Stalker46 03 марта 2010 21:22

    Да, заметил. Люблю изменения на этом сайте)))
    Кстати, как сделать, чтобы мне на другое мыло пароль высылался, да и сообщение от сайта об оповещении, что, мол, “сообщение пришло, тебе ответили”)))?

    DI HALT

    Напиши на почту какое тебе надо новое мыло и какой нужен пароль. я вручную поправлю.


  4. TheZotant 15 марта 2010 4:15

    Привет всем, есть вопрос по всем этим программаторским делам.
    Есть к примеру рабочий программатор AVR910 Protoss (он указан в статье).
    Есть header плата с контроллером AT90CAN128 от фирмы OLIMEX. Так вот на ней кроме JTAG
    разьема есть еще и резьем, который называется ICSP(In-Circut Serial Programming). Как
    оказалось у этого рзьема немного другое подключение, а именно вместо стандартного ISP
    подключения
    Программатор Контроллер
    VCC—————–VCC
    RES—————–RESET
    MISO—————-MISO
    MOSI—————-MOSI
    SCK—————–SCK
    GND—————–GND
    У него вот такое(ICSP подключение):
    Программатор Контроллер
    VCC—————–VCC
    RES—————–RESET
    MISO—————-TXDO
    MOSI—————-RXDO
    SCK—————–SCK
    GND—————–GND
    В инете не так много и нашел по ICSP,кроме того что это доработанная ISP. Так вот вопрос сможет ли программатор AVR910 Protoss или любой другой ISP программатор запрограммировать контроллер через разьем ICSP?
    Буду благодарен за любые мысли по этому поводу. Спасибо.

    DI HALT

    Все правильно. У Мега128 разьем программирования отличается по подключению от классического тем, что ноги идут не на выводы моси мисо на тхдо рхдо.

    Прошить сможешь.


  5. evgen 22 Апр 2010 2:38

    всем привет. есть вопрос такой. работаю щас с 90S2313. пробовал на нем несколько программаторов: Громова, “пять проводков” и USB на FT232RL. USB-программатор никак не хочет с ним работать, при том, что с программатором Громова и “пятью проводками” работает на ура - и пишет и читает.

    avrdude.exe -p 2313 -c ftbb -P ft0 -U flash:w:2313.hex:a - это команда для avrdude.

    получаю:

    avrdude.exe: BitBang OK
    avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
    avrdude.exe: drain OK

    ft245r: bitclk 230400 -> ft baud 115200
    avrdude.exe: ft245r_program_enable: failed
    avrdude.exe: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.

    avrdude.exe done. Thank you.

    Даю команду с -F:
    avrdude.exe -p 2313 -c ftbb -P ft0 -F -U flash:w:2313.hex:a

    Получаю

    avrdude.exe: BitBang OK
    avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
    avrdude.exe: drain OK

    ft245r: bitclk 230400 -> ft baud 115200
    avrdude.exe: ft245r_program_enable: failed
    avrdude.exe: initialization failed, rc=-1
    avrdude.exe: AVR device initialized and ready to accept instructions

    Reading |#######################################################| 100%
    avrdude.exe: Device signature =0×000000
    avrdude.exe: Invalid device signature
    avrdude.exe: Expected signature for AT90S2313 is 1E 91 01
    avrdude.exe: safemode: Verify error - unable to read fuse properly. Programmer may not be reliable.

    И Это при том, что я установил ключ -F, который должен отключать верификацию сигнатуры. И другие программаторы прекрасно работают с этим микроконтроллером. Добавлю, что он уже несколько раз был перепрограммирован, то есть не “с завода”.

    У кого были такие проблемы и что с этим делать?

    DI HALT

    Хм. А другие типы контроллеров шьет?

    Судя по логу у тебя дудка нашла программатор, но не смогла подключиться к контроллеру.

    evgen

    Удалось проверить седня еще один 2313. Такие же проблемы. А мегу16 вчера шил без проблем и читал тоже.
    Но самое интересное, что другие то программаторы работают с этими 2313.

    evgen

    И интересно, почему ключ -F не отключает верификацию

    evgen

    мегу8 тоже шьет.
    Видел в теме про USB-программатор у Antoniy тоже были проблемы с 2313. потом он купил новый 2313 и сразу же подключил его к USB-программатору и, судя по логу, он у него заработал, только он видимо при чтении формат выходного файла не указал. Так может быть дело в том, что мои 2313 уже залочены? и тогда вопрос: как их “разлочить”? ISP наверное не поможет.


  6. lpayy 19 мая 2010 0:56

    Такой вопрос:

    “STK200
    Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта.”

    Прямой доступ к порту это какой режим LPT потра Normal, EEP или ECP?


  7. ZPower 30 июля 2010 16:24

    не могу вкурить как правильно сделать,
    ресет программатора напрямую запаивать на ресет контроллера:

    +———+
    |tn2313 |
    ISP_reset]———-[|reset |
    +---------+

    или на резистор 10к, который подключен к ресету мк?
    +---------+
    R 10k |tn2313 |
    ISP_reset]———-[==]- [|reset |
    +———+

    DI HALT

    Напрямую, без резистора. А через резистор в 10к ресет подключается к +питания

Оставьте свой отзыв

Вы должны войти, чтобы оставлять комментарии.


Материалы сайта являются авторскими. Копирование и публикация материалов без активной ссылки на первоисточник запрещено.

Реклама: