CnCLab
Введение.
Внутрисхемное программирование (ICP) — чтение и запись микросхем памяти и микроконтроллеров непосредственно в устройстве, без установки в панель программатора.
Оно может быть использовано как при разработке и серийном производстве, так и при ремонте.
Преимущества такого способа:
— Нет необходимости в перепайке микросхемы (иногда многократной). Это особенно важно при отладке и ремонте устройств — снижает риск повреждения и укоряет работу.
— Не требуется дорогостоящая панель.
— Работа с микросхемами, хранящими информацию в ОЗУ. При их выпайке и обесточивании данные будут уничтожены.
Однако есть и недостатки:
— скорость программирования может быть ниже
— возможно повреждение устройства, программатора либо прошивки, если устройство не предусматривает такой режим работы или монтажник допустил ошибку при подключении.
Следует отметить, что множество устройств имеет специальный сервисный режим работы, позволяющий работать с микросхемами памяти через какой-либо системный интерфейс без непосредственного подключения к выводам микросхемы. Однако обслуживающий персонал часто не имеет информации и специального программного обеспечения для его использования. В таком случае программатор остается единственным доступным средством для программирования.
Иногда при наладке и ремонте аппаратуры нет необходимости изменять прошивку, достаточно проконтролировать правильность чтения данных микроконтроллером из внешней памяти. В этом случае большую помощь может оказать Логический анализатор с функцией обработки протоколов, например, Omega Logic.
В настройках программатора следует установить значение напряжения питания, соответствующее рабочему напряжению схемы (по умолчанию — 5 Вольт). Необходимо также учитывать, что большая часть выходных цепей программаторов Orange построена по схеме с ОК, напряжение логической 1 формируется с помощью резистора. ISP адаптер имеет симметричные выходы с выходным сопротивлением около 150 Ом.
Рассмотрим стандартные интерфейсы программирования и их использование.
I 2 C
I2C — универсальная последовательная двухпроводная шина, разработанная Philips. Имеет только две линии — линия данных (SDA) и линия синхронизации (SCL). Обе линии — двунаправленные, с открытым стоком (коллектором), соединенные с положительным питающим напряжением через резистор. Когда шина свободна, обе линии находятся в состоянии логической «1». Каждое устройство, соединенное с шиной является программно-адресуемым. Стандартно на адрес отводится 7 бит, при этом на шине может присутствовать до 112 slave устройств (часть адресов зарезервирована). Возможна и 10 бит адресация, но практически она используется весьма редко. Отношения между устройствами могут быть построены по принципу master/slave или multi-master. Последовательная двунаправленная передача данных может проводиться со скоростью до 100 kbit/s в стандартном режиме или до 400 kbit/s в быстром режиме. Slave при необходимости может замедлять скорость обмена.
К сожалению, во многих реальных устройствах реализованы далеко не все полезные возможности шины I2C, такие как multimaster.
Наиболее распространены микросхемы памяти I2C серии 24cXX.
Они имеют объем от 128 байт до 128 КБайт. Стандартный адрес на шине — 0A0H, но он может быть изменен с помощью специальных адресных выводов. Например, 24C02 имеет 3 адресных входа: A0, A1, A2. Реальный адрес может быть определен по формуле:
ADDR = 0A0h + A0*2 + A1*4 + A2*8
24C16 не имеет адресных входов. При обращении по адресам 0A0h, 0A2h, 0A4h, 0A6h, 0A8h, 0AAh, 0ACh, 0AEh читаются разные страницы памяти.
Микросхемы некоторых производителей, например, Xicor X24C01, Siemens SLA24C02, не имеют возможности выбора адреса, он всегда фиксирован.
Определить рабочий адрес при внутрисхемном программировании программатором Orange можно также с помощью специального модуля I2C Type. Функция I2C Map отображает адреса в виде таблицы 16 x 16. Не равные 0 ячейки соответствуют адресам каких-либо присутствующих на шине устройств.
Установить адрес микросхемы можно в меню программатора Orange:
Буфер — Регистры — I2CADR
Адрес всегда должен иметь четное значение, т.е. младший бит равен нулю.
Следует учитывать, что программатор имеет подтягивающие резисторы номиналом 4.7K. Если это нарушает нормальную работу шины, рекомендуется применять дополнительный ISP адаптер.
В тех случаях, когда процессор периодически обращается к памяти и препятствует работе программатора, рекомендуется пользоваться специальными функциями блочного чтения и записи программатора Orange Read Marked и Write Marked.
Рекомендуется также установить флаг Освобождать шину и сбрасывать флаг Управление питанием в настройках, это позволит сохранять высокие уровни на SCL и SDA, в перерывах между операциями с микросхемой.
SPI — четырехпроводный последовательный интерфейс. Имеет сигналы CS, CLC, DI, DO. Для подключения нескольких устройств используется несколько независимых сигналов CS. Интерфейс позволяет получить значительно большую, чем I2C скорость обмена (десятки мегагерц). Микросхемы памяти выпускаются с маркировкой 25Cxx. при внутрисхемном программировании необходимо принимать меры по отключению шин процессора от памяти, например, удержанием сброса процессора в активном состоянии на время программирования, физическим отключением цепей и т.д. .
В программаторах Orange имеется специальная функция Pin Tester, позволяющая определить значения логических уровней, выдаваемых программатором на шину.
Если длина соединительного кабеля и паразитные емкости не позволяют программатору работать на максимальной скорости, скорость можно замедлить, увеличив значение параметра CDelay (задержка обмена) в меню Orange: Настройки — Микросхема.
Microwire
Интерфейсы под названием MicroWire и 4-Wire устроены аналогично SPI. Поэтому справедливы все рекомендации, описанные выше. Кроме основных 4 сигналов микросхемы имеют дополнительные управляющие сигналы (ORG, WP. ). Они не участвуют в обмене данными, однако их состояние влияет на корректность чтения и записи. Сигнал ORG определяет организацию памяти. В схеме обычно подключен напрямую к цепям Vss или Vcc, поэтому его состояние не может быть изменено без отключения. Физически присутствует не во всех микросхемах, так что состояние вывода не может однозначно указать на используемый режим.
TRST (опционально).
Если на плате установлено несколько устройств, они могут быть объединены в общую цепочку.
Источник
Электроника для всех
Блог о электронике
AVR. Учебный курс. Трактат о программаторах
Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.
Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния.
Что же представляет из себя это устройство?
В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя с компа залить файл прошивки в память контроллера. Также нужна прошивающая программа, которая по специальному протоколу загонит данные в микроконтроллер.
Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:
Внутрисхемное программирование (ISP)
Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).
К этим выводам подключается прошивающий шнур программатора и происходит заливка прошивки. После чего шнур отключается и контроллер начинает работу.
У AVR прошивка заливается по интерфейсу SPI и для работы программатора нужно четыре линии и питание (достаточно только земли, чтобы уравнять потенциалы земель программатора и устройства):
- MISO — данные идущие от контроллера (Master-Input/Slave-Output)
- MOSI — данные идущие в контроллер (Master-Output/Slave-Input)
- SCK — тактовые импульсы интерфейса SPI
- RESET — сигналом на RESET программатор вводит контроллер в режим программирования
- GND — земля
Сам же разъем внутрисхемного программирования представляет собой всего лишь несколько штырьков. Лишь бы на него было удобно надеть разъем. Конфигурация его может быть любой, как тебе удобней.
Однако все же есть один популярный стандарт:
Для внутрисхемной прошивки контроллеров AVR существует не один десяток разнообразных программаторов. Отличаются они в первую очередь по скорости работы и типу подключения к компьютеру (COM/LPT/USB). А также бывают безмозглыми или со своим управляющим контроллером.
Безмозглые программаторы, как правило, дешевые, очень простые в изготовлении и наладке. Но при этом обычно работают исключительно через архаичные COM или LPT порты. Которые найти в современном компьютере целая проблема. А еще требуют прямого доступа к портам, что уже в Windows XP может быть проблемой. Плюс бывает зависимость от тактовой частоты процессора компьютера.
Так что твой 3ГГЦ-овый десятиядерный монстр может пролететь, как фанера над Парижем.
Идеальный компьютер для работы с такими программаторами это какой-нибудь PIII-800Mhz с Windows98…XP.
Вот очень краткая подборка проверенных лично безмозглых программаторов:
- Программатор Громова.
Простейшая схема, работает через оболочку UniProf(удобнейшая вещь. ), но имеет ряд проблем. В частности тут COM порт используется нетрадиционно и на некоторых материнках может не заработать. А еще на быстрых компах часто не работает. Да, через адаптер USB-COM эта схема работать не будет. По причине извратности подхода 🙂 - STK200
Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта. - FTBB-PROG.
Очень надежный и быстрый программатор работающий через USB, причем безо всяких извратов. C драйверами под разные операционные системы. И мощной оболочкой avrdude. Недостаток один — содержит редкую и дорогую микросхему FTDI, да в таком мелком корпусе, что запаять ее без меткого глаза, твердой руки и большого опыта пайки весьма сложно. Шаг выводов около 0.3мм. Данный программатор встроен в демоплаты Pinboard
Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через USB. А если собраны на COM порт, то без извращенских методик работы с данными — как честный COM порт. Так что адаптеры COM-USB работают на ура. И детали подобрать можно покрупней, чтобы легче было паять. Но у этих программаторов есть другая проблема — для того чтобы сделать такой программатор нужен другой программатор, чтобы прошить ему управляющий контроллер. Проблема курицы и яйца. Широко получили распространение такие программаторы как:
Внутрисхемное программирование, несмотря на все его удобства, имеет ряд ограничений.
Микроконтроллер должен быть запущен, иначе он не сможет ответить на сигнал программатора. Поэтому если неправильно выставить биты конфигурации (FUSE), например, переключить на внешний кварцевый резонатор, а сам кварц не поставить. То контроллер не сможет запуститься и прошить его внутрисхемно будет уже нельзя. По крайней мере до тех пор пока МК не будет запущен.
Также в битах конфигурации можно отключить режим внутрисхемной прошивки или преваратить вывод RESET в обычный порт ввода-вывода (это справедливо для малых МК, у которых RESET совмещен с портом). Такое действо тоже обрубает программирование по ISP.
Параллельное высоковольтное программирование
Обычно применяется на поточном производстве при массовой (сотни штук) прошивке чипов в программаторе перед запайкой их в устройство.
Параллельное программирование во много раз быстрей последовательного (ISP), но требует подачи на RESET напряжения в 12 вольт. А также для параллельной зашивки требуется уже не 3 линии данных, а восемь + линии управления. Для программирования в этом режиме микроконтроллер вставляется в панельку программатора, а после прошивки переставляется в целевое устройство.
Для радиолюбительской практики он особо не нужен, т.к. ISP программатор решает 99% насущных задач, но тем не менее параллельный программатор может пригодиться. Например, если в результате ошибочных действий были неправильно выставлены FUSE биты и был отрублен режим ISP. Параллельному программатору на настройку FUSE плевать с высокой колокольни. Плюс некоторые старые модели микроконтроллеров могут прошиваться только высоковольтным программатором.
Из параллельных программаторов для AVR на ум приходит только:
- HVProg от ElmChan
- Paraprog
- DerHammer
А также есть универсальные вроде 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 чтобы облегчить и обезопасить первые шаги на пути освоения микроконтроллеров.
Pinboard II
Прошивка AVR с помощью демоплаты Pinboard II (для Pinboard 1.1 все похоже)
Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
89 thoughts on “AVR. Учебный курс. Трактат о программаторах”
А что это делает в учебном курсе? чего не на главной странице?
Здарова, Артем, вот я и зашел, чего то не мог зайти долго…
Я постепенно правлю и переписываю старые статьи, чтобы привести их в более стройный и завершенный вид.
Источник