Как прошить микросхему без программатора
Перейти к содержимому

Как прошить микросхему без программатора

  • автор:

Как прошить микроконтроллер ATtiny или ATmega без программатора

Схемы устройств на микроконтроллерах (МК) обычно отличаются сочетанием двух трудносовместимых качеств: максимальной простотой и высокой функциональностью. К тому же функциональность может в дальнейшем меняться и расширяться без внесения каких-либо изменений в схему — путём лишь замены программы (перепрошивкой). Эти особенности объясняются тем, что создатели современных МК постарались разместить на одном кристалле всё, что только может потребоваться разработчику электронного устройства — по крайней мере настолько, насколько это возможно. В результате произошло смещение акцента со схемотехнического и монтажного на программный. С использованием МК теперь меньше приходится «нагружать» схему деталями, между компонентами становится меньше соединений. Это, конечно, делает схему более привлекательной для её повторения как опытными, так и начинающими электронщиками. Но, как обычно, за всё приходится платить. Здесь тоже не обошлось без своих сложностей. Если купить новый МК, установить его в правильно собранную из исправных деталей схему и подать питание, то ничего не получится — устройство не будет работать. Микроконтроллеру нужна программа.

Казалось бы с этим тоже всё просто — в интернете можно встретить множество схем с бесплатными прошивками. Но тут возникает одна загвоздка: прошивку необходимо как-то «залить» в микроконтроллер. Для того, кто никогда этим раньше не занимался, такая задача зачастую становится проблемой и главным отталкивающим фактором, нередко заставляющим отказаться от прелестей использования МК и поискать схемы на «рассыпухе» и жесткой логике. А ведь всё не так уж сложно, как может показаться на первый взгляд.

Проанализировав публикации в интернете, можно заметить, что данная проблема решается чаще всего одним из двух путей: покупкой готового программатора или изготовлением самодельного. При этом публикуемые схемы самодельных программаторов очень часто неоправданно сложны — гораздо сложнее, чем это действительно необходимо. Конечно, если предполагается каждый день прошивать МК, лучше иметь «крутой» программатор. Но если надобность в такой процедуре возникает нечасто, от случая к случаю, то можно вообще обойтись без программатора. Нет, конечно, речь идет не о том, чтобы научиться делать это силой мысли. Имеется в виду, что понимая, как происходит взаимодействие программатора с микроконтроллером при записи и считывании информации в режиме его программирования, мы можем обойтись подручными средствами более широкого назначения. Эти средства должны будут заменить как программную, так и аппаратную части программатора. Аппаратная часть должна обеспечить физическое соединение с микросхемой МК, возможность подавать логические уровни на его входы и считывать данные с его выходов. Программная часть должна обеспечить работу алгоритма, управляющего всеми необходимыми процессами. Отметим также, что качество записи информации в МК не зависит от того, насколько «крутой» у вас программатор. Такого понятия, как «лучше записалось» или «хуже» не существует. Есть только два варианта: «записалось» и «не записалось». Это объясняется тем, что непосредственно процессом записи внутри кристалла руководит сам МК. Нужно лишь обеспечить ему качественное питание (отсутствие помех и пульсаций) и правильно организовать интерфейс. Если по результатам контрольного считывания ошибок не выявлено, то все в порядке — можно использовать контроллер по назначению.

Для того, чтобы, не имея программатора, записать в МК программу, нам потребуется преобразователь порта USB-RS232TTL и программа «Перпетуум М» (6 Мб), а также скрипт для «Перпетуум М», реализующий функции программатора (347 Кб). Конвертер USB-RS232TTL позволяет при помощи порта USB создать COM-порт, отличающийся от «настоящего» лишь тем, что на его входах и выходах используются логические уровни TTL, то есть напряжение в интервале от 0 до 5 вольт (подробнее можно почитать в статье «Простые решения для умного дома»). Такой конвертер в любом случае полезно иметь в «хозяйстве», так что если у вас его еще нет, непременно стоит приобрести. Что касается логических уровней, то в нашем случае TTL — это даже преимущество перед обычным COM-портом, потому что входы и выходы такого порта можно напрямую подключать к любому микроконтроллеру, питающемуся от напряжения 5 В, в том числе ATtiny и ATmega. Но не пытайтесь использовать обычный COM-порт — там используются напряжения в интервале от -12 до +12 В (либо -15. +15В). Непосредственное соединение с микроконтроллером в этом случае недопустимо.

Идея создания скрипта для программы «Перпетуум М», реализующего функции программатора, возникла после ознакомления с рядом публикаций в интернете, предлагающих те или иные решения по прошивке МК. В каждом случае обнаруживались серьезные недостатки или чрезмерные сложности. Часто попадались схемы программаторов, содержащие в себе микроконтроллер и при этом вполне серьезно давались советы типа: «. а чтобы запрограммировать микроконтроллер для этого программатора нам потребуется. правильно — другой программатор!». Далее предлагалось сходить к другу, поискать платную услугу и т.п. Качество программного обеспечения, распространяемого в сети для этих целей, также не впечатлило — замечено множество проблем как с функциональностью, так и с «мутностью» пользовательского интерфейса. Зачастую много времени нужно потратить, чтобы понять, как использовать программу — ее необходимо изучать даже ради осуществления простейших действий. Иная программа может долго и усердно что-то делать, но о том, что ничего в МК не записывается, пользователь узнает только после полного завершения всей прошивки и последующего контрольного считывания. Встречается и такая проблема: пользователь пытается выбрать из списка поддерживаемых кристаллов свой МК, а его в списке нет. В этом случае воспользоваться программой не удастся — внесение в список недостающих МК, как правило, не предусмотрено. Кроме того ручной выбор контроллера из списка выглядит странно, если учесть, что программатор во многих случаях может сам определить тип МК. Все это сказано не для того, чтобы облить грязью существующие продукты, а для того, чтобы объяснить причину появления скрипта к программе «Перпетуум М», описываемого в данной статье. Проблема действительно существует, и она касается в первую очередь новичков, которым не всегда удается преодолеть данную «стену», чтобы сделать свой первый шаг в мир микроконтроллеров. В предлагаемом скрипте учтены недостатки, обнаруженные в других программах. Реализована максимальная «прозрачность» работы алгоритма, предельно простой интерфейс пользователя, не требующий изучения и не оставляющий шанса запутаться и «не туда нажать». При отсутствии нужного МК среди поддерживаемых есть возможность самостоятельно добавить его описание, взяв нужные данные из документации, скачанной с сайта разработчика МК. И, самое главное — скрипт открыт для изучения и модификации. Каждый желающий может, открыв в текстовом редакторе, изучать и править его на свое усмотрение, изменяя на свой вкус существующие функции и добавляя недостающие.

Первая версия скрипта была создана в июне 2015 года. В этой версии реализована только поддержка Atmel’овских МК серий ATtiny и ATmega с функциями записи/чтения флэш-памяти, с настройкой конфигурационных бит, с автоматическим определением типа контроллера. Запись и чтение EEPROM не реализованы. Были планы дополнить функциональность скрипта: добавить запись и чтение EEPROM, реализовать поддержку PIC-контроллеров и т.д. По этой причине скрипт до сих пор не был опубликован. Но из-за нехватки времени осуществление задуманного затянулось, и, чтобы лучшее не становилось врагом хорошего, решено опубликовать имеющуюся версию. Если уже реализованных функций окажется недостаточно, прошу не огорчаться. В этом случае вы можете попробовать самостоятельно добавить нужную функцию. Не стану скрывать: идея создания данного скрипта изначально несет в себе еще и образовательный смысл. Разобравшись в алгоритме и добавив к нему что-то свое, вы сможете глубже понять работу МК в режиме программирования, чтобы в будущем не оказаться в положении девушки перед сломавшимся автомоблем, задумчиво разглядывающей его внутренности и не понимающей, почему «не едет».

2. Интерфейс МК в режиме программирования

Существует несколько различных способов перевести контроллер в режим программирования и работать с ним в этом режиме. Самым простым в реализации для контроллеров серий ATtiny и ATmega является, пожалуй, SPI. Им и воспользуемся.

Но, прежде чем приступить к рассмотрению сигналов, необходимых для формирования SPI, сделаем ряд оговорок. Микроконтроллер имеет конфигурационные биты. Это что-то вроде тумблеров, переключение которых позволяет менять некоторые свойства микросхемы в соответствии с нуждами проекта. Физически это ячейки энергонезависимой памяти, вроде тех, в которые записывается программа. Разница в том, что их очень мало (до трех байт для ATmega), и они не входят в адресное пространство какой-либо памяти. Запись и чтение конфигурационных данных выполняется отдельными командами режима программирования МК. Сейчас важно отметить, что некоторые конфигурационные биты влияют на саму возможность использования SPI. При некоторых их значениях может оказаться, что SPI нельзя будет использовать. Если вам попадется такой микроконтроллер, то метод, предлагаемый в данной статье, не поможет. В этом случае придется либо изменить настройки конфигурационных бит в программаторе, который поддерживает иной режим программирования, либо использовать другой микроконтроллер. Но данная проблема касается только бывших в употреблении МК, либо тех, с которыми уже кто-то неудачно «поигрался». Дело в том, что новые МК поставляются с настройками конфигурационных бит, не препятствующими использованию SPI. Это подтверждается и результатами испытаний скрипта-программатора для программы «Перпетуум М», во время которых были успешно прошиты четыре разных МК (ATmega8, ATmega128, ATtiny13, ATtiny44). Все они были новые. Начальная настройка конфигурационных бит соответствовала документации и не мешала использованию SPI.

Учитывая сказанное выше, следует обращать внимание на следующие биты. Бит SPIEN в явном виде разрешает или запрещает использование SPI, следовательно в нашем случае его значение должно быть разрешающим. Бит RSTDISBL способен превратить один из выводов микросхемы (заранее предопределенный) во вход сигнала «сброс», либо не превратить (в зависимости от записанного в этот бит значения). В нашем случае вход «сброс» необходим (при его отсутствии не получится перевести МК в режим программирования через SPI). Есть еще биты группы CKSEL, задающие источник тактового сигнала. Они не препятствуют использованию SPI, но их тоже необходимо иметь в виду, потому что при полном отсутствии тактовых импульсов, либо при их частоте ниже допустимой для заданной скорости SPI, также ничего хорошего не получится. Обычно у новых МК, имеющих внутренний RC-генератор, биты группы CKSEL настроены на его использование. Нас это вполне устраивает — тактирование обеспечено без каких-либо дополнительных усилий с нашей стороны. Ни кварцевый резонатор припаивать, ни внешний генератор подключать не нужно. Если же указанные биты содержат иную настройку, придется позаботится о тактировании в соответствии с настройкой. В этом случае может потребоваться подключение к МК кварцевого резонатора или внешнего тактового генератора. Но в рамках данной статьи мы не будем рассматривать, как это делается. Примеры подключения МК для программирования, содержащиеся в данной статье, рассчитаны на самый простой случай. Рис. 1. Обмен данными по SPI в режиме программирования.

Теперь обратимся к рисунку 1, взятому из документации на МК ATmega128A. На нем показан процесс передачи одного байта в МК и одновременного приема одного байта из МК. Оба эти процесса, как видим, используют одни и те же тактовые импульсы, поступающие от программатора в микроконтроллер на его вход SCK — один из выводов микросхемы, для которого в режиме программирования по SPI отведена такая роль. Еще две сигнальные линии обеспечивают прием и передачу данных по одному биту за такт. Через вход MOSI данные поступают в микроконтроллер, а с выхода MISO снимаются считываемые данные. Обратите внимание на две пунктирные линии, проведенные от SCK к MISO и MOSI. Они показывают, в какой момент микроконтроллер «проглатывает» выставленный на входе MOSI бит данных, и в какой момент сам выставляет на выход MISO свой бит данных. Все достаточно просто. Но чтобы ввести МК в режим программирования нам еще потребуется сигнал RESET. Не забудем также про общий провод GND и питание VCC. В общей сложности выходит, что к микроконтроллеру для его прошивки по SPI нужно подключить всего 6 проводков. Ниже разберем это подробнее, а пока добавим, что обмен данными с МК в режиме программирования по SPI выполняется пакетами по 4 байта. Первый байт каждого пакета в основном полностью отводится под кодирование команды. Второй байт в зависимости от первого может быть продолжением кода команды, либо частью адреса, а может иметь произвольное значение. Третий байт используется в основном для передачи адресов, но во многих командах может иметь произвольное значение. Четвертый байт обычно передает данные, либо имеет произвольное значение. Одновременно с передачей четвертого байта в некоторых командах принимаются данные, поступающие из МК. Подробности по каждой команде можно найти в документации на контроллер в таблице под названием «SPI Serial Programming Instruction Set». Пока отметим лишь, что весь обмен с контроллером построен из последовательности 32-битных пакетов, в каждом из которых передается не более одного байта полезной информации. Это не очень оптимально, но в целом работает неплохо.

3. Подключение МК для программирования

Чтобы обеспечить подачу на входы микроконтроллера всех необходимых сигналов для организации интерфейса SPI и чтение данных с его выхода MISO, не обязательно создавать программатор. Это легко осуществить при помощи самого обыкновенного конвертера USB-RS232TTL.

В интернете часто можно встретить информацию о том, что такие конвертеры неполноценны, что с ними ничего серьезного сделать нельзя. Но в отношении большинства моделей конвертеров такое мнение ошибочно. Да, существуют в продаже конвертеры, у которых доступны не все входы и выходы по сравнению со стандартным COM-портом (например, только TXD и RXD), имеющие при этом неразборную конструкцию (микросхема залита пластмассой — невозможно добраться до ее выводов). Но такие и покупать не стоит. В некоторых случаях получить недостающие входы и выходы порта можно, подпаяв проводки непосредственно к микросхеме. Пример такого «усовершенствованного» конвертера показан на рисунке 2 (микросхема PL-2303 — подробнее о назначении ее выводов в статье «Простые решения для умного дома»). Это одна из самых дешевых моделей, но обладающая своими преимуществами при использовании в самодельных конструкциях. Широко распространены и полнофункциональные шнуры-переходники со стандартным девятиконтактным разъемом на конце, как у COM-порта. От обычного COM-порта они отличаются только уровнями TTL и несовместимостью с устаревшим программным обеспечением и некоторым старым оборудованием. Можно еще отметить, что шнуры на микросхеме CH34x на различных экстремальных тестах показывают себя гораздо более надежными и стабильными по сравнению с преобразователями на PL-2303. Впрочем, при обычном использовании разница не заметна.

При выборе конвертера USB-RS232TTL следует также обращать внимание на совместимость его драйвера с версией используемой операционной системы. Рис. 3. Общая схема соединения микроконтроллеров серий ATtiny и ATmega с конвертером порта USB-RS232TTL для программирования.

Рассмотрим подробнее принцип соединения микроконтроллера и конвертера USB-RS232TTL на примере четырех разных моделей МК: ATtiny13, ATtiny44, ATmega8 и ATmega128. На рисунке 3 показана общая схема такого соединения. Вас может удивить, что сигналы RS232 (RTS, TXD, DTR и CTS) используются не по назначению. Но не стоит об этом беспокоиться: программа «Перпетуум М» способна работать с ними напрямую — устанавливать значения на выходах и читать состояния входа. Во всяком случае широко распространенные конвертеры USB-RS232TTL на микросхемах CH34x и PL-2303 такую возможность обеспечивают — это проверено. С другими популярными конвертерами также проблем быть не должно, так как для доступа к порту используются стандартные функции Windows.

Резисторы, показанные на общей схеме, в принципе можно не устанавливать, но все-таки лучше установить. Каково их назначение? Используя ТТЛ’овские входы и выходы конвертера и пятивольтное питание микроконтроллера, мы тем самым избавляемся от необходимости согласования логических уровней — все и так вполне корректно. Значит, соединения могут быть непосредственными. Но во время экспериментов бывает всякое. Например по закону подлости отвертка может упасть как раз в то место, куда она никак не могла бы упасть, и замкнуть то, что ни в коем случае нельзя замыкать. В роли «отвертки», конечно, может оказаться все, что угодно. Резисторы в этом случае иногда уменьшают последствия. Еще одно их назначение состоит в устранении возможного конфликта выходов. Дело в том, что по окончании программирования микроконтроллер переходит в обычный режим работы, и может так получиться, что его вывод, соединенный с выходом конвертера (RTS, TXD или DTR) тоже становится выходом, согласно только что записанной в МК программе. В этом случае будет очень нехорошо, если два напрямую соединенных выхода будут «бороться» — пытаться установить разные логические уровни. В такой «борьбе» кто-то может и «проиграть», а нам этого не надо.

Номиналы трех резисторов выбраны на уровне 4,3 КОм. Это касается соединений выход конвертера — вход микроконтроллера. Точность резисторов роли не играет: можно уменьшить их сопротивление до 1 КОм или увеличить до 10 КОм (но во втором случае увеличивается риск помех при использовании длинных проводов на пути к МК). Что же касается соединения вход конвертера (CTS) — выход микроконтроллера (MISO), то здесь применен резистор сопротивлением 100 Ом. Это объясняется особенностями входа использованного конвертера. Во время испытаний был использован конвертер на микросхеме PL-2303, входы которой, судя по всему, подтянуты к плюсу питания относительно низким сопротивлением (порядка нескольких сот Ом). Чтобы «перебить подтяжку» пришлось поставить резистор со столь маленьким сопротивлением. Впрочем, можно его вообще не ставить. На конвертере это всегда вход. Выходом он стать не может, а значит, конфликта выходов не будет при любом развитии событий.

Если микросхема имеет отдельный вывод AVCC для питания аналогово-цифрового преобразователя (например, ATmega8 или ATmega128), его следует соединить с выводом общего питания VCC. Некоторые микросхемы имеют более одного вывода питания VCC или более одного GND. Например, ATmega128 имеет 3 вывода GND и 2 вывода VCC. В постоянной конструкции одноименные выводы лучше соединить между собой. В нашем же случае на время программирования можно задействовать по одному выводу VCC и GND.

А вот как выглядит подключение ATtiny13. На рисунке 4 показано назначение выводов, используемых при программировании через SPI. Рядом на фото — как временное подключение выглядит в реальности.

Кто-то может сказать, что это несерьезно — соединения на проводках. Но давайте рассуждать здраво. Наша цель состоит в том, чтобы запрограммировать микроконтроллер, затратив на это минимум времени и прочих ресурсов, а не в том, чтобы перед кем-то покрасоваться. Качество при этом не страдает. Метод «на проводках» в данном случае вполне эффективен и оправдан. Прошивка контроллера — процедура разовая, поэтому нет смысла обвешивать ее «стразиками». Если же предполагается менять прошивку в дальнейшем, не извлекая контроллер из схемы (в готовом изделии), то это учитывается в монтаже при изготовлении устройства. Обычно для этой цели устанавливается разъем (RESET, SCK, MOSI, MISO, GND), а МК может быть прошит даже после установки на плату. Но это уже творческие изыски. Мы же рассматриваем самый простой случай.

Теперь перейдем к МК ATtiny44. Здесь все примерно так же. По рисунку и фото даже новичку не составит труда разобраться с подключением. Подобно ATtiny44 можно подключать МК ATtiny24 и ATtiny84 — назначение выводов у этой троицы совпадает.

Еще один пример временного подключения контроллера для его программирования — ATmega8. Здесь выводов побольше, но принцип тот же — несколько проводков, и вот уже контроллер готов к «заливке» в него информации. Лишний черный провод на фото, идущий от вывода 13, в программировании участия не принимает. Он предназначен для снятия с него звукового сигнала после выхода МК из режима программирования. Это связано с тем, что во время отладки скрипта для «Перпетуум М» в МК закачивалась программа музыкальной шкатулки.

Часто один контроллер выпускается в разных корпусах. При этом назначение выводов для каждого корпуса распределено по-своему. Если корпус вашего контроллера не похож на тот, что изображен на рисунке, уточните назначение выводов по технической документации, скачать которую можно с сайта разработчика МК.

Для полноты картины посмотрим подключение микросхемы МК с большим числом «ножек». Назначение лишнего черного провода на фото, идущего от вывода 15, точно такое же, как в случае с ATmega8.

Вероятно, вы уже убедились, что все достаточно просто. Кто умеет считать выводы у микросхем (от метки по кругу против часовой стрелки), тот разберется. И не забывайте про аккуратность. Микросхемы любят аккуратных и не прощают небрежного к себе отношения.

Прежде чем переходить к программной части, убедитесь, что драйвер конвертера USB-RS232TTL корректно установлен (проверьте диспетчер устройств Windows). Запомните или запишите номер виртуального COM-порта, появляющегося при подключении конвертера. Этот номер нужно будет вписать в текст скрипта, о котором читайте ниже.

4. Скрипт — программатор для «Перпетуум М»

С аппаратной частью «программатора» разобрались. Это уже полдела. Теперь осталось разобраться с программной частью. Ее роль будет выполнять программа «Перпетуум М» под управлением скрипта, в котором и реализованы все необходимые функции по взаимодействию с микроконтроллером.

Архив со скриптом следует распаковать в ту же папку, где находится программа perpetuum.exe. В этом случае при запуске файла perpetuum.exe на экран будет выводиться меню со списком установленных скриптов, среди которых будет строка «Программатор МК AVR» (она может быть единственной). Именно эта строка нам и потребуется.

Скрипт находится в папке PMS в файле «Программатор МК AVR.pms». Этот файл можно просматривать, изучать и править при необходимости в обычном текстовом редакторе вроде «Блокнота» Windows. Перед использованием скрипта скорее всего потребуется внести изменения в текст, связанные с настройкой порта. Для этого уточните в диспетчере устройств Windows имя используемого порта и, при необходимости, внесите соответствующую поправку в строку «ИмяПорта=’COM4′;» — вместо цифры 4 может стоять другая цифра. Также при использовании другой модели конвертера USB-RS232TTL может потребоваться изменение настроек инвертирования сигналов (строки скрипта, начинающиеся со слова «Высокий»). Проверить инвертирование сигналов конвертером USB-RS232TTL можно с помощью одного из примеров, содержащегося в инструкции к программе «Перпетуум М» (раздел функций для работы с портом).

Во вложенной папке MK_AVR находятся файлы с описаниями поддерживаемых контроллеров. Если нужного контроллера среди них не окажется, вы можете добавить нужный самостоятельно, действуя по аналогии. Возьмите за образец один из файлов, и при помощи текстового редактора введите необходимые данные, взяв их из документации на свой микроконтроллер. Главное — будьте внимательны, вводите данные без ошибок, иначе МК не запрограммируется, или запрограммируется неправильно. В исходной версии поддерживаются 6 микроконтроллеров: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 и ATmega128. В скрипте реализовано автоматическое распознавание подключенного контроллера — вручную указывать не нужно. При отсутствии считанного из МК идентификатора среди имеющихся описаний, выдается сообщение, что распознать контроллер не удалось.

В архиве со скриптом содержится также дополнительная информация. В папке «inc-файлы контроллеров AVR» находится очень полезная и обширная коллекция файлов описаний контроллеров. Эти файлы используются при написании собственных программ для МК. Еще четыре папки «MusicBox_. » содержат файлы с программой на Ассемблере и готовой к закачке в МК прошивкой отдельно для ATtiny13, ATtiny44, ATmega8 и ATmega128. Если вы уже подключили один из этих МК для программирования, как это предложено в данной статье, то можете прямо сейчас его прошить — получится музыкальная шкатулка. Об этом ниже. Рис. 8. Главное меню скрипта — программатора.

При выборе в меню скриптов строчки «Программатор МК AVR», скрипт начинает исполняться. При этом он открывает порт, посылает в МК команду перехода в режим программирования, принимает подтверждение от МК об успешном переходе, запрашивает идентификатор МК и отыскивает описание данного МК по его идентификатору среди имеющихся файлов с описаниями. Если не находит нужного описания, выдает соответствеющее сообщение. Если же описание найдено, далее открывается главное меню программатора. Его скриншот вы можете видеть на рисунке 8. Далее разобраться не сложно — меню очень простое.

В первой версии скрипта некоторые функции полноценного программатора не реализованы. Например, нет возможности читать и писать в EEPROM. Но если вы откроете скрипт в текстовом редакторе, то увидите, что он имеет очень небольшой размер при том, что основное в нем уже реализовано. Это говорит о том, что добавить недостающие функции не так уж и сложно — язык очень гибкий, он позволяет в небольшой программе реализовать богатую функциональность. Но для большинства случаев хватит даже имеющихся функций.

Некоторые ограничения функциональности описаны непосредственно в тексте скрипта:
//реализована запись только с нулевого адреса (Extended Segment Address Record игнорируется, LOAD OFFSET — тоже)
//порядок и непрерывность следования записей в HEX-файле не проверяется
//контрольная сумма не проверяется
Это касается работы с HEX-файлом, из которого берется код прошивки для МК. Если этот файл не искажен, проверка контрольной суммы ни на что не повлияет. Если искажен — средствами скрипта это выявить не удастся. Остальные ограничения в большинстве случаев не помешают, но иметь в виду их все-таки нужно.

Рекомендуется сохранять в файле текст, формирующийся в окне стадии процесса при программировании и при контрольном считывании. Если файлы идентичны — запись прошла без ошибок.

5. Музыкальная шкатулка — простая поделка для начинающих

Если у вас есть один из этих микроконтроллеров: ATtiny13, ATtiny44, ATmega8 или ATmega128, вы можете легко превратить его в музыкальную шкатулку или музыкальную открытку. Для этого достаточно записать в МК соответствующую прошивку — одну из тех четырех, которые размещены в папках «MusicBox_. » в одном архиве со скриптом. Коды прошивок хранятся в файлах с расширением «.hex». Использовать ATmega128 для такой поделки, конечно, «жирновато», как и ATmega8. Но это может быть полезно для тестирования или экспериментов, иначе говоря — в учебных целях. Тексты программ на Ассемблере также прилагаются. Программы создавались не с нуля — за основу была взята программа музыкальной шкатулки из книги А.В.Белова «Микроконтроллеры AVR в радиолюбительской практике». Исходная программа претерпела ряд существенных изменений:
1. адаптирована для каждого из четырех МК: ATtiny13, ATtiny44, ATmega8 и ATmega128
2. ликвидированы кнопки — к контроллеру вообще ничего не нужно подключать, кроме питания и звукоизлучателя (мелодии воспроизводятся одна за другой в бесконечном цикле)
3. длительность каждой ноты уменьшена на длительность паузы между нотами для устранения нарушения музыкального ритма
4. подключена восьмая мелодия, незадействованная в книжной версии
5. из субъективного: некоторые «улучшайзинги» для оптимизации и более легкого восприятия алгоритма

В некоторых мелодиях слышится фальшь и даже грубые ошибки, особенно в «Улыбке» — в середине. Коды мелодий взяты из книги (а точнее — скачаны с сайта автора книги вместе с исходным asm-файлом) и не подвергались изменениям. Судя по всему, в кодировке мелодий имеются ошибки. Но это не проблема — кто «дружит» с музыкой, без труда во всем разберется и исправит.

В ATtiny13 из-за отсутствия 16-битного счетчика для воспроизведения нот пришлось использовать 8-битный, что привело к некоторому снижению точности звучания нот. Но на слух это мало заметно.

Насчет конфигурационных бит. Их настройка должна соответствовать состоянию нового микроконтроллера. Если ваш МК ранее где-то использовался, нужно проверить состояние его конфигурационных бит, и, при необходимости, привести их в соответствие настройкам нового микроконтроллера. Узнать состояние конфигурационных бит нового микроконтроллера можно из документации на этот МК (раздел «Fuse Bits»). Исключение составляет ATmega128. У этого МК имеется бит M103C, который включает режим совместимости с более старым ATmega103. Активизация бита M103C сильно урезает возможности ATmega128, причем у нового МК этот бит активен. Нужно сбросить M103C в неактивное состояние. Для манипуляций с конфигурационными битами используйте соответствующий раздел меню скрипта-программатора.

Схему музыкальной шкатулки приводить нет смысла: в ней только микроконтроллер, питание и пьезозвукоизлучатель. Питание подается точно так же, как мы это проделали при программировании МК. Звукоизлучатель подключается между общим проводом (вывод GND контроллера) и одним из выводов МК, номер которого можно посмотреть в файле с ассемблерным кодом программы (*.asm). В начале текста программы для каждого МК в комментариях имеется строчка: «звуковой сигнал формируется на выводе ХХ». При завершении работы скрипта — программатора микроконтроллер выходит из режима программирования и переходит в обычный режим работы. Сразу же начинается воспроизведение мелодий. Подключив звукоизлучатель, можно это проверить. Оставлять звукоизлучатель подключенным во время программирования кристалла можно только в том случае, если звук снимается с вывода, не задействованного в SPI, иначе дополнительная емкость на выводе может помешать программированию.

Успешных вам экспериментов!

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

Кроме PL-2303 существуют и другие микросхемы, на которых создаются конвертеры интерфейса, подобные использованному в данной статье. Читайте описание ещё одного преобразователя USB-UART (на микросхеме CH340G) и о его доработке до USB-RS232TTL.

Как прошить микросхему без программатора

Вообще не знаете, как пользоваться программатором?
Эта подробная инструкция о том, как прошить микросхему памяти программатором для «чайников». Она поможет даже тем, кто абсолютно не разбирается в электронике и видел программатор только на картинках или фото.

Итак, для начала несколько распространенных заблуждений:
1. Перепрошивать микросхемы памяти умеют только профессионалы, потому что программатор — это сложное устройство.
Большинство современных программаторов действительно собраны из множества радиокомпонентов и/или построены на базе микроконтроллеров. Однако вовсе не обязательно собирать программатор самостоятельно — можно купить готовый.
2. Программатор — дорогостоящее устройство. Если вы решили купить профессиональный универсальный программатор, цена его может оказаться не оправданной даже при заказе напрямую из Китая. Хотя в большистве случаев продвинутый универсальный программатор вам не понадобится, достаточно купить простой и дешевый CH341A

Обязательно ли выпаивать микросхему памяти, чтобы её «прошить»? Это зависит от устройства, в котором она расположена. Во многих случаях микросхема памяти не припаяна к плате напрямую, а находятся в специальной панельке.
Таким образом, чтобы запрограммировать микросхему памяти вам понадобиться всего лишь:

1. Посмотреть внимательно на то, где расположен ключ микросхемы памяти — это своего рода метка показывающая, как (какой стороной) установить чип.
Обычно ключ микросхемы памяти — это точка или выемка на её корпусе. По ней и определяется расположение первого вывода.
На печатной плате обычно также есть соответствующая метка — перед тем как доставать/выпаивать микросхему убедитесь, что ключи (метки) совпадают!

2. В большинстве программаторов также есть ключ-метка, показывающая, как правильно вставить микросхему в его панель! Причем для разных типов микросхем этот ключ может быть разным!
Например обратите внимание на ключи метки первого вывода микросхем программатора CH341A.

Итак, если у вас возник вопрос, как правильно вставить микросхему в программатор CH341A, посмотрите прежде всего на то, какой серии она соответствует — что написано на её корпусе!
Ключ метка микросхемы должна соответствовать ключу метки программатора (см. фото).

Обратите внимание, что в зависимости от версии/модификации программатора CH341A расположение микросхемы в панели может отличаться и быть не таким как в софте (программе) для CH341A.
Ориентируйтесь прежде всего по ключам-меткам на корпусе программатора и микросхемы!

3. Важно знать, что CH341A может работать в двух режимах, поэтому обязательно убедитесь, что перемычка (джампер) программатора CH341A стоит в положении (1-2) — режим программатора, а не (2-3)- режим USB-UART конвертера!

4. После фиксации микросхемы в панельке программатора вставить его в USB порт — напрямую или через USB удлинитель.

5. Запустить программу (софт) для CH341A. Проверить правильно ли опознан программатор и «видит» ли его программа. Если да, то в строке вы можете увидеть надпись «Device state: connected», то есть «Состояние устройства: подключено»!

6. Если программа запущена не в режиме администратора, может появится сообщение, что драйвер не найден или установлен некорректно!

Хотя в большинстве случаев программатор работает нормально и так, то есть запускать его софт с правами администратора нет необходимости!
Внимание: файл запущенный от имени администратора может сделать с вашим компьютером всё, что угодно! Никогда не запускайте программы, которым не доверяете, от имени администратора!

7. Выбор микросхемы через интерфейс программатора. Удобнее и быстрее найти её через поиск, нажав на кнопку «Chip Search».

Микросхема найдена в списке(см. рис.).

Проверить, записаны ли в неё данные, или микросхема пустая можно через пункт меню: «Operate» -> «Blank Check».

Сообщение «Chip Main Memory are Blank» буквально «главная память чипа пустая», означает, что никаких полезных данных в микросхеме не содержится!

Работу с программатором микросхем памяти можно разделить на несколько видов:
— так называемый бекап (backup) — это создание и сохранение резервной копии данных. Считать и сохранить содержимое большинсва микросхем памяти программатором элементарно просто.

Для программатора CH341A в меню его программы есть пункт «Read chip» — прочитать чип (микросхему).

После того, как содержимое микросхемы памяти считано, его легко сохранить в файл, выбрав пункт «File» -> «Save» или просто нажав одновременно две клавиши Ctrl+S.

При сохранении выбрать для файла любое осмысленное имя (лучше латиницей)! Расширение дописывать не нужно!

Программа для программатора CH341A добавит его сама!

— очистка (стирание) памяти микросхемы. В меню программы CH341A выбрать пункт «Erase Сhip» — стереть чип!

— запись файла «прошивки» в микросхему памяти состоит из нескольких действий:
1. Выбор файла с «прошивкой» через пункт меню «File» -> «Open» (открыть файл).

Выбрать файл с подходящим расширением, например сохраненный ранее backup файл «прошивки»

2. Запись данных кнопкой «Write Chip».

Проверка правильности записи файла «прошивки» выполняется нажатием кнопки «Verify Chip».

Если «прошивка» загружена правильно — содержимое данных из файла и микросхемы будут одинаковые! После успешной проверки появится сообщение «Chip Main Memory and buffer same», то есть в буквальном переводе «главная память чипа и буффера совпадают»!

Как видите, «прошить» микросхему памяти программатором совсем не сложно. Купить заказать программатор CH341A можно здесь.

Как прошить микросхему без программатора

Вообще не знаете, как пользоваться программатором?
Эта подробная инструкция о том, как прошить микросхему памяти программатором для «чайников». Она поможет даже тем, кто абсолютно не разбирается в электронике и видел программатор только на картинках или фото.

Итак, для начала несколько распространенных заблуждений:
1. Перепрошивать микросхемы памяти умеют только профессионалы, потому что программатор — это сложное устройство.
Большинство современных программаторов действительно собраны из множества радиокомпонентов и/или построены на базе микроконтроллеров. Однако вовсе не обязательно собирать программатор самостоятельно — можно купить готовый.
2. Программатор — дорогостоящее устройство. Если вы решили купить профессиональный универсальный программатор, цена его может оказаться не оправданной даже при заказе напрямую из Китая. Хотя в большистве случаев продвинутый универсальный программатор вам не понадобится, достаточно купить простой и дешевый CH341A

Обязательно ли выпаивать микросхему памяти, чтобы её «прошить»? Это зависит от устройства, в котором она расположена. Во многих случаях микросхема памяти не припаяна к плате напрямую, а находятся в специальной панельке.
Таким образом, чтобы запрограммировать микросхему памяти вам понадобиться всего лишь:

1. Посмотреть внимательно на то, где расположен ключ микросхемы памяти — это своего рода метка показывающая, как (какой стороной) установить чип.
Обычно ключ микросхемы памяти — это точка или выемка на её корпусе. По ней и определяется расположение первого вывода.
На печатной плате обычно также есть соответствующая метка — перед тем как доставать/выпаивать микросхему убедитесь, что ключи (метки) совпадают!

2. В большинстве программаторов также есть ключ-метка, показывающая, как правильно вставить микросхему в его панель! Причем для разных типов микросхем этот ключ может быть разным!
Например обратите внимание на ключи метки первого вывода микросхем программатора CH341A.

Итак, если у вас возник вопрос, как правильно вставить микросхему в программатор CH341A, посмотрите прежде всего на то, какой серии она соответствует — что написано на её корпусе!
Ключ метка микросхемы должна соответствовать ключу метки программатора (см. фото).

Обратите внимание, что в зависимости от версии/модификации программатора CH341A расположение микросхемы в панели может отличаться и быть не таким как в софте (программе) для CH341A.
Ориентируйтесь прежде всего по ключам-меткам на корпусе программатора и микросхемы!

3. Важно знать, что CH341A может работать в двух режимах, поэтому обязательно убедитесь, что перемычка (джампер) программатора CH341A стоит в положении (1-2) — режим программатора, а не (2-3)- режим USB-UART конвертера!

4. После фиксации микросхемы в панельке программатора вставить его в USB порт — напрямую или через USB удлинитель.

5. Запустить программу (софт) для CH341A. Проверить правильно ли опознан программатор и «видит» ли его программа. Если да, то в строке вы можете увидеть надпись «Device state: connected», то есть «Состояние устройства: подключено»!

6. Если программа запущена не в режиме администратора, может появится сообщение, что драйвер не найден или установлен некорректно!

Хотя в большинстве случаев программатор работает нормально и так, то есть запускать его софт с правами администратора нет необходимости!
Внимание: файл запущенный от имени администратора может сделать с вашим компьютером всё, что угодно! Никогда не запускайте программы, которым не доверяете, от имени администратора!

7. Выбор микросхемы через интерфейс программатора. Удобнее и быстрее найти её через поиск, нажав на кнопку «Chip Search».

Микросхема найдена в списке(см. рис.).

Проверить, записаны ли в неё данные, или микросхема пустая можно через пункт меню: «Operate» -> «Blank Check».

Сообщение «Chip Main Memory are Blank» буквально «главная память чипа пустая», означает, что никаких полезных данных в микросхеме не содержится!

Работу с программатором микросхем памяти можно разделить на несколько видов:
— так называемый бекап (backup) — это создание и сохранение резервной копии данных. Считать и сохранить содержимое большинсва микросхем памяти программатором элементарно просто.

Для программатора CH341A в меню его программы есть пункт «Read chip» — прочитать чип (микросхему).

После того, как содержимое микросхемы памяти считано, его легко сохранить в файл, выбрав пункт «File» -> «Save» или просто нажав одновременно две клавиши Ctrl+S.

При сохранении выбрать для файла любое осмысленное имя (лучше латиницей)! Расширение дописывать не нужно!

Программа для программатора CH341A добавит его сама!

— очистка (стирание) памяти микросхемы. В меню программы CH341A выбрать пункт «Erase Сhip» — стереть чип!

— запись файла «прошивки» в микросхему памяти состоит из нескольких действий:
1. Выбор файла с «прошивкой» через пункт меню «File» -> «Open» (открыть файл).

Выбрать файл с подходящим расширением, например сохраненный ранее backup файл «прошивки»

2. Запись данных кнопкой «Write Chip».

Проверка правильности записи файла «прошивки» выполняется нажатием кнопки «Verify Chip».

Если «прошивка» загружена правильно — содержимое данных из файла и микросхемы будут одинаковые! После успешной проверки появится сообщение «Chip Main Memory and buffer same», то есть в буквальном переводе «главная память чипа и буффера совпадают»!

Как видите, «прошить» микросхему памяти программатором совсем не сложно. Купить заказать программатор CH341A можно здесь.

Прошиваем AVR вручную


Картинка для привлечения внимания — xkcd

Представьте себе, что вы попали на необитаемый остров. И вам жизненно необходимо запрограммировать микроконтроллер. Зачем, спросите вы? Ну, допустим, чтобы починить аварийный радиомаяк, без которого шансы на спасение резко падают.

Радуясь, что еще не забыли курс ассемблера, вы кое-как написали программу палочкой на песке. Среди уцелевших вещей каким-то чудом оказалась распечатка документации на контроллер (хорошо, что вы еще не успели пустить её на растопку!), и программу удалось перевести в машинные коды. Осталась самая ерунда — прошить её в контроллер. Но в радиусе 500 километров нет ни одного программатора, не говоря уже о компьютерах. У вас только источник питания (батарея из картошки кокосов) и пара кусков провода.

Как же прошить МК фактически голыми руками?

В качестве подопытного будет выступать МК ATtiny13 фирмы Atmel. Описанная методика работает практически с любым контроллером семейства AVR, разве что коды команд могут незначительно отличаться.

Интерфейс

  • SCK — тактовый сигнал, синхронизирует все операции обмена данными;
  • MOSI (Master Out Slave In) — линия данных от ведущего устройства к ведомому;
  • MISO (Master In Slave Out) — линия данных, наоборот, от ведомого устройства к ведущему;
  • RESET — для разрешения прошивки по SPI нужно подать логический «0» на этот вывод.

Для своего же удобства можно добавить индикацию входных сигналов. Схема усложняется, но не чрезмерно:

Рис. 2. Схема с индикацией сигналов.

Защита от дребезга

К сожалению, просто используя кнопки для формированя сигналов SPI, хорошего результата мы не добьёмся. Причина этого — в неприятном явлении, которое называется дребезг контактов. При замыкании механические контакты соударяются, отскакивают друг от друга, и вместо одного импульса получается несколько. Для подавления дребезга придется собрать простую схему из пары логических элементов:

Рис. 3. RS-триггер для подавления дребезга.

Это RS-триггер, который переключается в состояние «1» в момент замыкания нижнего контакта переключателя и игнорирует остальные импульсы дребезга. Сброс триггера обратно в «0» происходит при замыкании верхнего контакта, то есть при отпускании кнопки.

«Ишь, разбежался!» — скажет читатель, — «Я же на необитаемом острове сижу. Где я тут возьму триггеры?» Хорошо, можно избавиться от дребезга и без электронных схем. Нужно только заменить «сухой» контакт на мокрый жидкостный. Выключателем будут служить два электрода, опускаемые в проводящую жидкость.

Сигналы MOSI и RESET не требуют подавления дребезга, в отличие от SCK: здесь значение имеет только уровень сигнала в момент выборки, а не его фронты.

Как работает SPI


Рис. 4. Временная диаграмма работы SPI.

SPI является синхронным интерфейсом: все операции синхронизированы фронтами тактового сигнала (SCK), который вырабатывается ведущим устройством. Максимальная скорость передачи ограничена величиной 1/4 тактовой частоты контроллера. На минимальную же скорость нет никаких ограничений: без тактового сигнала обмен данными «замораживается», и интерфейс может оставаться в статическом состоянии сколь угодно долго.

Передача по SPI осуществляется в полнодуплексном режиме, по одному биту за такт в каждую сторону. По возрастающему фронту сигнала SCK ведомое устройство считывает очередной бит с линии MOSI, а по спадающему — выдает следующий бит на линию MISO. Все внимание на рисунок 4.

Протокол прошивки

  1. Перевод контроллера в режим программирования;
  2. (опционально) Чтение идентификатора устройства;
  3. Стирание;
  4. Запись во flash;
  5. (опционально) Проверка записанного;

Включение режима программирования

Режим программирования включается подачей «0» на ногу RESET. Но есть некоторые тонкости. Atmel рекомендует сначала выставить на выводах RESET и SCK низкий уровень, а только потом подавать на контроллер питание. Если такой возможности нет, нужно после включения питания подать «0» на SCK, а затем положительный импульс на RESET:


Рис. 5. Перевод МК в режим программирования.

Но и это еще не все. Далее нужно передать команду на собственно включение режима программирования: 10101100 01010011 xxxxxxxx xxxxxxxx


Рис. 6. Команда «Program Enable».

Биты, обозначенные как x, могут быть любыми. Во время передачи третьего байта контроллер должен переслать обратно второй байт (01010011). Если это произошло, значит, все хорошо, команда принята, контроллер ждет дальнейших инструкций. Если ответ отличается, нужно перезагрузить МК и попробовать все сначала.

Проверка идентификатора


Рис. 7. Команда «Read Signature Byte».

Прежде чем что-либо писать в память МК, нужно убедиться, что перед нами именно та модель, которая нужна. Каждая модель контроллера имеет свой трехбайтный идентификатор (Signature). Прочитать его можно командами вида
00110000 000xxxxx xxxxxxbb xxxxxxxx
Вместо bb (третий байт команды) следует подставить 00 для первого байта идентификатора, 01 — для второго и 10 — для третьего. Соответствующий байт идентификатора будет передан контроллером при отправке 4-го байта команды.

Для ATtiny13 значение идентификатора равно 00011110 10010000 00000111 (0x1E 90 07).

Очистка контроллера


Рис. 8. Команда «Chip Erase».

Следующим шагом будет очистка памяти МК, которая осуществляется посылкой команды «Chip Erase»
10101100 100xxxxx xxxxxxxx xxxxxxxx
Этой командой выполняется стирание содержимого Flash и EEPROM (все ячейки будут содержать FF), а также снятие lock-битов, если они установлены.

Запись во flash-память

Память программ (Flash) в ATtiny13 состоит из 512 двухбайтных слов (1К байт). Адрес слова имеет разрядность 9 бит. Flash-память разделена на страницы, каждая страница имеет размер 16 слов (всего получается 32 страницы). Запись во flash осуществляется в два этапа.

Сначала необходимо загрузить данные в буфер страницы, для этого используется команда «Load Program Memory Page»
01000000 000xxxxx xxxxbbbb iiiiiiii — для загрузки младшего байта слова, и 01001000 000xxxxx xxxxbbbb iiiiiiii — для загрузки старшего.
4 младших бита 3-го байта команды bbbb — адрес слова на странице, iiiiiiii — загружаемый байт. Сначала всегда должен загружаться младший байт слова, а затем — старший байт того же слова.


Рис. 9. Команда «Load Program Memory Page».

После того, как буфер страницы загружен, нужно выполнить команду «Write Program Memory Page» 01001100 0000000a bbbbxxxx xxxxxxxx для записи страницы непосредственно в память контроллера.
Младший бит второго байта и старшие 4 бита третьего a:bbbb — пятибитный номер страницы для записи.


Рис. 10. Команда «Write Program Memory Page».

Все это выглядит довольно запутанно, но ничего сложного нет. Адрес любого байта памяти программ состоит из 10 бит: ppppp:bbbb:w, где
ppppp — номер страницы (используется в команде «Write Program Memory Page»);
bbbb — адрес слова на странице (в команде «Load Program Memory Page»);
w — бит, определяющий старший или младший байт в слове (зашифрован в первом байте команды «Load Program Memory Page»).

Чтение flash


Рис. 11. Команда «Read Program Memory».

После записи прошивки в МК неплохо бы проверить записанное, так как никакой проверки целостности данных не выполнялось. Единственный способ проверки состоит в том, чтобы прочитать весь объем flash-памяти и сравнить с оригиналом.

Читать память программ легче, чем писать в нее. Забудьте про страничную организацию, чтение выполняется побайтно. Команда «Read Program Memory» выглядит так:
00100000 0000000a bbbbbbbb xxxxxxxx — для чтения младшего байта слова, и 00101000 0000000a bbbbbbbb xxxxxxxx — для старшего.
Младший бит второго байта и весь третий байт a:bbbbbbbb — адрес слова в памяти. Прочитанный байт возвращается во время передачи 4-го байта команды.

Завершение программирования

Пожалуй, самая простая операция. Чтобы завершить программирование и перевести МК в рабочий режим, достаточно подать на RESET логический уровень «1». Контроллер запустится и будет работать по новой программе.

Практика

Настало время воспользоваться полученными знаниями на практике. Жертва эксперимента — ATtiny13 — воткнут в макетную плату, рядом собран формирователь сигналов, всё готово:

Рис. 12. Экспериментальная схема.

Шить будем программу вида «проще некуда»:

Всё, что она делает — это выдает единицу на ногу PB1 и уходит в бесконечный цикл. В машинных кодах она занимает всего четыре слова:

Для прошивки её в контроллер необходимо набрать следующие команды:

Ключ на старт, поехали!

Всего 425 нажатий, и МК оживает. Теперь вас точно найдут и спасут с этого проклятого острова.

Как прошить микроконтроллер ATtiny или ATmega без программатора

Схемы устройств на микроконтроллерах (МК) обычно отличаются сочетанием двух трудносовместимых качеств: максимальной простотой и высокой функциональностью. К тому же функциональность может в дальнейшем меняться и расширяться без внесения каких-либо изменений в схему — путём лишь замены программы (перепрошивкой). Эти особенности объясняются тем, что создатели современных МК постарались разместить на одном кристалле всё, что только может потребоваться разработчику электронного устройства — по крайней мере настолько, насколько это возможно. В результате произошло смещение акцента со схемотехнического и монтажного на программный. С использованием МК теперь меньше приходится «нагружать» схему деталями, между компонентами становится меньше соединений. Это, конечно, делает схему более привлекательной для её повторения как опытными, так и начинающими электронщиками. Но, как обычно, за всё приходится платить. Здесь тоже не обошлось без своих сложностей. Если купить новый МК, установить его в правильно собранную из исправных деталей схему и подать питание, то ничего не получится — устройство не будет работать. Микроконтроллеру нужна программа.

Казалось бы с этим тоже всё просто — в интернете можно встретить множество схем с бесплатными прошивками. Но тут возникает одна загвоздка: прошивку необходимо как-то «залить» в микроконтроллер. Для того, кто никогда этим раньше не занимался, такая задача зачастую становится проблемой и главным отталкивающим фактором, нередко заставляющим отказаться от прелестей использования МК и поискать схемы на «рассыпухе» и жесткой логике. А ведь всё не так уж сложно, как может показаться на первый взгляд.

Проанализировав публикации в интернете, можно заметить, что данная проблема решается чаще всего одним из двух путей: покупкой готового программатора или изготовлением самодельного. При этом публикуемые схемы самодельных программаторов очень часто неоправданно сложны — гораздо сложнее, чем это действительно необходимо. Конечно, если предполагается каждый день прошивать МК, лучше иметь «крутой» программатор. Но если надобность в такой процедуре возникает нечасто, от случая к случаю, то можно вообще обойтись без программатора. Нет, конечно, речь идет не о том, чтобы научиться делать это силой мысли. Имеется в виду, что понимая, как происходит взаимодействие программатора с микроконтроллером при записи и считывании информации в режиме его программирования, мы можем обойтись подручными средствами более широкого назначения. Эти средства должны будут заменить как программную, так и аппаратную части программатора. Аппаратная часть должна обеспечить физическое соединение с микросхемой МК, возможность подавать логические уровни на его входы и считывать данные с его выходов. Программная часть должна обеспечить работу алгоритма, управляющего всеми необходимыми процессами. Отметим также, что качество записи информации в МК не зависит от того, насколько «крутой» у вас программатор. Такого понятия, как «лучше записалось» или «хуже» не существует. Есть только два варианта: «записалось» и «не записалось». Это объясняется тем, что непосредственно процессом записи внутри кристалла руководит сам МК. Нужно лишь обеспечить ему качественное питание (отсутствие помех и пульсаций) и правильно организовать интерфейс. Если по результатам контрольного считывания ошибок не выявлено, то все в порядке — можно использовать контроллер по назначению.

Для того, чтобы, не имея программатора, записать в МК программу, нам потребуется преобразователь порта USB-RS232TTL и программа «Перпетуум М» (6 Мб), а также скрипт для «Перпетуум М», реализующий функции программатора (347 Кб). Конвертер USB-RS232TTL позволяет при помощи порта USB создать COM-порт, отличающийся от «настоящего» лишь тем, что на его входах и выходах используются логические уровни TTL, то есть напряжение в интервале от 0 до 5 вольт (подробнее можно почитать в статье «Простые решения для умного дома»). Такой конвертер в любом случае полезно иметь в «хозяйстве», так что если у вас его еще нет, непременно стоит приобрести. Что касается логических уровней, то в нашем случае TTL — это даже преимущество перед обычным COM-портом, потому что входы и выходы такого порта можно напрямую подключать к любому микроконтроллеру, питающемуся от напряжения 5 В, в том числе ATtiny и ATmega. Но не пытайтесь использовать обычный COM-порт — там используются напряжения в интервале от -12 до +12 В (либо -15. +15В). Непосредственное соединение с микроконтроллером в этом случае недопустимо.

Идея создания скрипта для программы «Перпетуум М», реализующего функции программатора, возникла после ознакомления с рядом публикаций в интернете, предлагающих те или иные решения по прошивке МК. В каждом случае обнаруживались серьезные недостатки или чрезмерные сложности. Часто попадались схемы программаторов, содержащие в себе микроконтроллер и при этом вполне серьезно давались советы типа: «. а чтобы запрограммировать микроконтроллер для этого программатора нам потребуется. правильно — другой программатор!». Далее предлагалось сходить к другу, поискать платную услугу и т.п. Качество программного обеспечения, распространяемого в сети для этих целей, также не впечатлило — замечено множество проблем как с функциональностью, так и с «мутностью» пользовательского интерфейса. Зачастую много времени нужно потратить, чтобы понять, как использовать программу — ее необходимо изучать даже ради осуществления простейших действий. Иная программа может долго и усердно что-то делать, но о том, что ничего в МК не записывается, пользователь узнает только после полного завершения всей прошивки и последующего контрольного считывания. Встречается и такая проблема: пользователь пытается выбрать из списка поддерживаемых кристаллов свой МК, а его в списке нет. В этом случае воспользоваться программой не удастся — внесение в список недостающих МК, как правило, не предусмотрено. Кроме того ручной выбор контроллера из списка выглядит странно, если учесть, что программатор во многих случаях может сам определить тип МК. Все это сказано не для того, чтобы облить грязью существующие продукты, а для того, чтобы объяснить причину появления скрипта к программе «Перпетуум М», описываемого в данной статье. Проблема действительно существует, и она касается в первую очередь новичков, которым не всегда удается преодолеть данную «стену», чтобы сделать свой первый шаг в мир микроконтроллеров. В предлагаемом скрипте учтены недостатки, обнаруженные в других программах. Реализована максимальная «прозрачность» работы алгоритма, предельно простой интерфейс пользователя, не требующий изучения и не оставляющий шанса запутаться и «не туда нажать». При отсутствии нужного МК среди поддерживаемых есть возможность самостоятельно добавить его описание, взяв нужные данные из документации, скачанной с сайта разработчика МК. И, самое главное — скрипт открыт для изучения и модификации. Каждый желающий может, открыв в текстовом редакторе, изучать и править его на свое усмотрение, изменяя на свой вкус существующие функции и добавляя недостающие.

Первая версия скрипта была создана в июне 2015 года. В этой версии реализована только поддержка Atmel’овских МК серий ATtiny и ATmega с функциями записи/чтения флэш-памяти, с настройкой конфигурационных бит, с автоматическим определением типа контроллера. Запись и чтение EEPROM не реализованы. Были планы дополнить функциональность скрипта: добавить запись и чтение EEPROM, реализовать поддержку PIC-контроллеров и т.д. По этой причине скрипт до сих пор не был опубликован. Но из-за нехватки времени осуществление задуманного затянулось, и, чтобы лучшее не становилось врагом хорошего, решено опубликовать имеющуюся версию. Если уже реализованных функций окажется недостаточно, прошу не огорчаться. В этом случае вы можете попробовать самостоятельно добавить нужную функцию. Не стану скрывать: идея создания данного скрипта изначально несет в себе еще и образовательный смысл. Разобравшись в алгоритме и добавив к нему что-то свое, вы сможете глубже понять работу МК в режиме программирования, чтобы в будущем не оказаться в положении девушки перед сломавшимся автомоблем, задумчиво разглядывающей его внутренности и не понимающей, почему «не едет».

2. Интерфейс МК в режиме программирования

Существует несколько различных способов перевести контроллер в режим программирования и работать с ним в этом режиме. Самым простым в реализации для контроллеров серий ATtiny и ATmega является, пожалуй, SPI. Им и воспользуемся.

Но, прежде чем приступить к рассмотрению сигналов, необходимых для формирования SPI, сделаем ряд оговорок. Микроконтроллер имеет конфигурационные биты. Это что-то вроде тумблеров, переключение которых позволяет менять некоторые свойства микросхемы в соответствии с нуждами проекта. Физически это ячейки энергонезависимой памяти, вроде тех, в которые записывается программа. Разница в том, что их очень мало (до трех байт для ATmega), и они не входят в адресное пространство какой-либо памяти. Запись и чтение конфигурационных данных выполняется отдельными командами режима программирования МК. Сейчас важно отметить, что некоторые конфигурационные биты влияют на саму возможность использования SPI. При некоторых их значениях может оказаться, что SPI нельзя будет использовать. Если вам попадется такой микроконтроллер, то метод, предлагаемый в данной статье, не поможет. В этом случае придется либо изменить настройки конфигурационных бит в программаторе, который поддерживает иной режим программирования, либо использовать другой микроконтроллер. Но данная проблема касается только бывших в употреблении МК, либо тех, с которыми уже кто-то неудачно «поигрался». Дело в том, что новые МК поставляются с настройками конфигурационных бит, не препятствующими использованию SPI. Это подтверждается и результатами испытаний скрипта-программатора для программы «Перпетуум М», во время которых были успешно прошиты четыре разных МК (ATmega8, ATmega128, ATtiny13, ATtiny44). Все они были новые. Начальная настройка конфигурационных бит соответствовала документации и не мешала использованию SPI.

Учитывая сказанное выше, следует обращать внимание на следующие биты. Бит SPIEN в явном виде разрешает или запрещает использование SPI, следовательно в нашем случае его значение должно быть разрешающим. Бит RSTDISBL способен превратить один из выводов микросхемы (заранее предопределенный) во вход сигнала «сброс», либо не превратить (в зависимости от записанного в этот бит значения). В нашем случае вход «сброс» необходим (при его отсутствии не получится перевести МК в режим программирования через SPI). Есть еще биты группы CKSEL, задающие источник тактового сигнала. Они не препятствуют использованию SPI, но их тоже необходимо иметь в виду, потому что при полном отсутствии тактовых импульсов, либо при их частоте ниже допустимой для заданной скорости SPI, также ничего хорошего не получится. Обычно у новых МК, имеющих внутренний RC-генератор, биты группы CKSEL настроены на его использование. Нас это вполне устраивает — тактирование обеспечено без каких-либо дополнительных усилий с нашей стороны. Ни кварцевый резонатор припаивать, ни внешний генератор подключать не нужно. Если же указанные биты содержат иную настройку, придется позаботится о тактировании в соответствии с настройкой. В этом случае может потребоваться подключение к МК кварцевого резонатора или внешнего тактового генератора. Но в рамках данной статьи мы не будем рассматривать, как это делается. Примеры подключения МК для программирования, содержащиеся в данной статье, рассчитаны на самый простой случай. Рис. 1. Обмен данными по SPI в режиме программирования.

Теперь обратимся к рисунку 1, взятому из документации на МК ATmega128A. На нем показан процесс передачи одного байта в МК и одновременного приема одного байта из МК. Оба эти процесса, как видим, используют одни и те же тактовые импульсы, поступающие от программатора в микроконтроллер на его вход SCK — один из выводов микросхемы, для которого в режиме программирования по SPI отведена такая роль. Еще две сигнальные линии обеспечивают прием и передачу данных по одному биту за такт. Через вход MOSI данные поступают в микроконтроллер, а с выхода MISO снимаются считываемые данные. Обратите внимание на две пунктирные линии, проведенные от SCK к MISO и MOSI. Они показывают, в какой момент микроконтроллер «проглатывает» выставленный на входе MOSI бит данных, и в какой момент сам выставляет на выход MISO свой бит данных. Все достаточно просто. Но чтобы ввести МК в режим программирования нам еще потребуется сигнал RESET. Не забудем также про общий провод GND и питание VCC. В общей сложности выходит, что к микроконтроллеру для его прошивки по SPI нужно подключить всего 6 проводков. Ниже разберем это подробнее, а пока добавим, что обмен данными с МК в режиме программирования по SPI выполняется пакетами по 4 байта. Первый байт каждого пакета в основном полностью отводится под кодирование команды. Второй байт в зависимости от первого может быть продолжением кода команды, либо частью адреса, а может иметь произвольное значение. Третий байт используется в основном для передачи адресов, но во многих командах может иметь произвольное значение. Четвертый байт обычно передает данные, либо имеет произвольное значение. Одновременно с передачей четвертого байта в некоторых командах принимаются данные, поступающие из МК. Подробности по каждой команде можно найти в документации на контроллер в таблице под названием «SPI Serial Programming Instruction Set». Пока отметим лишь, что весь обмен с контроллером построен из последовательности 32-битных пакетов, в каждом из которых передается не более одного байта полезной информации. Это не очень оптимально, но в целом работает неплохо.

3. Подключение МК для программирования

Чтобы обеспечить подачу на входы микроконтроллера всех необходимых сигналов для организации интерфейса SPI и чтение данных с его выхода MISO, не обязательно создавать программатор. Это легко осуществить при помощи самого обыкновенного конвертера USB-RS232TTL.

В интернете часто можно встретить информацию о том, что такие конвертеры неполноценны, что с ними ничего серьезного сделать нельзя. Но в отношении большинства моделей конвертеров такое мнение ошибочно. Да, существуют в продаже конвертеры, у которых доступны не все входы и выходы по сравнению со стандартным COM-портом (например, только TXD и RXD), имеющие при этом неразборную конструкцию (микросхема залита пластмассой — невозможно добраться до ее выводов). Но такие и покупать не стоит. В некоторых случаях получить недостающие входы и выходы порта можно, подпаяв проводки непосредственно к микросхеме. Пример такого «усовершенствованного» конвертера показан на рисунке 2 (микросхема PL-2303 — подробнее о назначении ее выводов в статье «Простые решения для умного дома»). Это одна из самых дешевых моделей, но обладающая своими преимуществами при использовании в самодельных конструкциях. Широко распространены и полнофункциональные шнуры-переходники со стандартным девятиконтактным разъемом на конце, как у COM-порта. От обычного COM-порта они отличаются только уровнями TTL и несовместимостью с устаревшим программным обеспечением и некоторым старым оборудованием. Можно еще отметить, что шнуры на микросхеме CH34x на различных экстремальных тестах показывают себя гораздо более надежными и стабильными по сравнению с преобразователями на PL-2303. Впрочем, при обычном использовании разница не заметна.

При выборе конвертера USB-RS232TTL следует также обращать внимание на совместимость его драйвера с версией используемой операционной системы. Рис. 3. Общая схема соединения микроконтроллеров серий ATtiny и ATmega с конвертером порта USB-RS232TTL для программирования.

Рассмотрим подробнее принцип соединения микроконтроллера и конвертера USB-RS232TTL на примере четырех разных моделей МК: ATtiny13, ATtiny44, ATmega8 и ATmega128. На рисунке 3 показана общая схема такого соединения. Вас может удивить, что сигналы RS232 (RTS, TXD, DTR и CTS) используются не по назначению. Но не стоит об этом беспокоиться: программа «Перпетуум М» способна работать с ними напрямую — устанавливать значения на выходах и читать состояния входа. Во всяком случае широко распространенные конвертеры USB-RS232TTL на микросхемах CH34x и PL-2303 такую возможность обеспечивают — это проверено. С другими популярными конвертерами также проблем быть не должно, так как для доступа к порту используются стандартные функции Windows.

Резисторы, показанные на общей схеме, в принципе можно не устанавливать, но все-таки лучше установить. Каково их назначение? Используя ТТЛ’овские входы и выходы конвертера и пятивольтное питание микроконтроллера, мы тем самым избавляемся от необходимости согласования логических уровней — все и так вполне корректно. Значит, соединения могут быть непосредственными. Но во время экспериментов бывает всякое. Например по закону подлости отвертка может упасть как раз в то место, куда она никак не могла бы упасть, и замкнуть то, что ни в коем случае нельзя замыкать. В роли «отвертки», конечно, может оказаться все, что угодно. Резисторы в этом случае иногда уменьшают последствия. Еще одно их назначение состоит в устранении возможного конфликта выходов. Дело в том, что по окончании программирования микроконтроллер переходит в обычный режим работы, и может так получиться, что его вывод, соединенный с выходом конвертера (RTS, TXD или DTR) тоже становится выходом, согласно только что записанной в МК программе. В этом случае будет очень нехорошо, если два напрямую соединенных выхода будут «бороться» — пытаться установить разные логические уровни. В такой «борьбе» кто-то может и «проиграть», а нам этого не надо.

Номиналы трех резисторов выбраны на уровне 4,3 КОм. Это касается соединений выход конвертера — вход микроконтроллера. Точность резисторов роли не играет: можно уменьшить их сопротивление до 1 КОм или увеличить до 10 КОм (но во втором случае увеличивается риск помех при использовании длинных проводов на пути к МК). Что же касается соединения вход конвертера (CTS) — выход микроконтроллера (MISO), то здесь применен резистор сопротивлением 100 Ом. Это объясняется особенностями входа использованного конвертера. Во время испытаний был использован конвертер на микросхеме PL-2303, входы которой, судя по всему, подтянуты к плюсу питания относительно низким сопротивлением (порядка нескольких сот Ом). Чтобы «перебить подтяжку» пришлось поставить резистор со столь маленьким сопротивлением. Впрочем, можно его вообще не ставить. На конвертере это всегда вход. Выходом он стать не может, а значит, конфликта выходов не будет при любом развитии событий.

Если микросхема имеет отдельный вывод AVCC для питания аналогово-цифрового преобразователя (например, ATmega8 или ATmega128), его следует соединить с выводом общего питания VCC. Некоторые микросхемы имеют более одного вывода питания VCC или более одного GND. Например, ATmega128 имеет 3 вывода GND и 2 вывода VCC. В постоянной конструкции одноименные выводы лучше соединить между собой. В нашем же случае на время программирования можно задействовать по одному выводу VCC и GND.

А вот как выглядит подключение ATtiny13. На рисунке 4 показано назначение выводов, используемых при программировании через SPI. Рядом на фото — как временное подключение выглядит в реальности.

Кто-то может сказать, что это несерьезно — соединения на проводках. Но давайте рассуждать здраво. Наша цель состоит в том, чтобы запрограммировать микроконтроллер, затратив на это минимум времени и прочих ресурсов, а не в том, чтобы перед кем-то покрасоваться. Качество при этом не страдает. Метод «на проводках» в данном случае вполне эффективен и оправдан. Прошивка контроллера — процедура разовая, поэтому нет смысла обвешивать ее «стразиками». Если же предполагается менять прошивку в дальнейшем, не извлекая контроллер из схемы (в готовом изделии), то это учитывается в монтаже при изготовлении устройства. Обычно для этой цели устанавливается разъем (RESET, SCK, MOSI, MISO, GND), а МК может быть прошит даже после установки на плату. Но это уже творческие изыски. Мы же рассматриваем самый простой случай.

Теперь перейдем к МК ATtiny44. Здесь все примерно так же. По рисунку и фото даже новичку не составит труда разобраться с подключением. Подобно ATtiny44 можно подключать МК ATtiny24 и ATtiny84 — назначение выводов у этой троицы совпадает.

Еще один пример временного подключения контроллера для его программирования — ATmega8. Здесь выводов побольше, но принцип тот же — несколько проводков, и вот уже контроллер готов к «заливке» в него информации. Лишний черный провод на фото, идущий от вывода 13, в программировании участия не принимает. Он предназначен для снятия с него звукового сигнала после выхода МК из режима программирования. Это связано с тем, что во время отладки скрипта для «Перпетуум М» в МК закачивалась программа музыкальной шкатулки.

Часто один контроллер выпускается в разных корпусах. При этом назначение выводов для каждого корпуса распределено по-своему. Если корпус вашего контроллера не похож на тот, что изображен на рисунке, уточните назначение выводов по технической документации, скачать которую можно с сайта разработчика МК.

Для полноты картины посмотрим подключение микросхемы МК с большим числом «ножек». Назначение лишнего черного провода на фото, идущего от вывода 15, точно такое же, как в случае с ATmega8.

Вероятно, вы уже убедились, что все достаточно просто. Кто умеет считать выводы у микросхем (от метки по кругу против часовой стрелки), тот разберется. И не забывайте про аккуратность. Микросхемы любят аккуратных и не прощают небрежного к себе отношения.

Прежде чем переходить к программной части, убедитесь, что драйвер конвертера USB-RS232TTL корректно установлен (проверьте диспетчер устройств Windows). Запомните или запишите номер виртуального COM-порта, появляющегося при подключении конвертера. Этот номер нужно будет вписать в текст скрипта, о котором читайте ниже.

4. Скрипт — программатор для «Перпетуум М»

С аппаратной частью «программатора» разобрались. Это уже полдела. Теперь осталось разобраться с программной частью. Ее роль будет выполнять программа «Перпетуум М» под управлением скрипта, в котором и реализованы все необходимые функции по взаимодействию с микроконтроллером.

Архив со скриптом следует распаковать в ту же папку, где находится программа perpetuum.exe. В этом случае при запуске файла perpetuum.exe на экран будет выводиться меню со списком установленных скриптов, среди которых будет строка «Программатор МК AVR» (она может быть единственной). Именно эта строка нам и потребуется.

Скрипт находится в папке PMS в файле «Программатор МК AVR.pms». Этот файл можно просматривать, изучать и править при необходимости в обычном текстовом редакторе вроде «Блокнота» Windows. Перед использованием скрипта скорее всего потребуется внести изменения в текст, связанные с настройкой порта. Для этого уточните в диспетчере устройств Windows имя используемого порта и, при необходимости, внесите соответствующую поправку в строку «ИмяПорта=’COM4′;» — вместо цифры 4 может стоять другая цифра. Также при использовании другой модели конвертера USB-RS232TTL может потребоваться изменение настроек инвертирования сигналов (строки скрипта, начинающиеся со слова «Высокий»). Проверить инвертирование сигналов конвертером USB-RS232TTL можно с помощью одного из примеров, содержащегося в инструкции к программе «Перпетуум М» (раздел функций для работы с портом).

Во вложенной папке MK_AVR находятся файлы с описаниями поддерживаемых контроллеров. Если нужного контроллера среди них не окажется, вы можете добавить нужный самостоятельно, действуя по аналогии. Возьмите за образец один из файлов, и при помощи текстового редактора введите необходимые данные, взяв их из документации на свой микроконтроллер. Главное — будьте внимательны, вводите данные без ошибок, иначе МК не запрограммируется, или запрограммируется неправильно. В исходной версии поддерживаются 6 микроконтроллеров: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 и ATmega128. В скрипте реализовано автоматическое распознавание подключенного контроллера — вручную указывать не нужно. При отсутствии считанного из МК идентификатора среди имеющихся описаний, выдается сообщение, что распознать контроллер не удалось.

В архиве со скриптом содержится также дополнительная информация. В папке «inc-файлы контроллеров AVR» находится очень полезная и обширная коллекция файлов описаний контроллеров. Эти файлы используются при написании собственных программ для МК. Еще четыре папки «MusicBox_. » содержат файлы с программой на Ассемблере и готовой к закачке в МК прошивкой отдельно для ATtiny13, ATtiny44, ATmega8 и ATmega128. Если вы уже подключили один из этих МК для программирования, как это предложено в данной статье, то можете прямо сейчас его прошить — получится музыкальная шкатулка. Об этом ниже. Рис. 8. Главное меню скрипта — программатора.

При выборе в меню скриптов строчки «Программатор МК AVR», скрипт начинает исполняться. При этом он открывает порт, посылает в МК команду перехода в режим программирования, принимает подтверждение от МК об успешном переходе, запрашивает идентификатор МК и отыскивает описание данного МК по его идентификатору среди имеющихся файлов с описаниями. Если не находит нужного описания, выдает соответствеющее сообщение. Если же описание найдено, далее открывается главное меню программатора. Его скриншот вы можете видеть на рисунке 8. Далее разобраться не сложно — меню очень простое.

В первой версии скрипта некоторые функции полноценного программатора не реализованы. Например, нет возможности читать и писать в EEPROM. Но если вы откроете скрипт в текстовом редакторе, то увидите, что он имеет очень небольшой размер при том, что основное в нем уже реализовано. Это говорит о том, что добавить недостающие функции не так уж и сложно — язык очень гибкий, он позволяет в небольшой программе реализовать богатую функциональность. Но для большинства случаев хватит даже имеющихся функций.

Некоторые ограничения функциональности описаны непосредственно в тексте скрипта:
//реализована запись только с нулевого адреса (Extended Segment Address Record игнорируется, LOAD OFFSET — тоже)
//порядок и непрерывность следования записей в HEX-файле не проверяется
//контрольная сумма не проверяется
Это касается работы с HEX-файлом, из которого берется код прошивки для МК. Если этот файл не искажен, проверка контрольной суммы ни на что не повлияет. Если искажен — средствами скрипта это выявить не удастся. Остальные ограничения в большинстве случаев не помешают, но иметь в виду их все-таки нужно.

Рекомендуется сохранять в файле текст, формирующийся в окне стадии процесса при программировании и при контрольном считывании. Если файлы идентичны — запись прошла без ошибок.

5. Музыкальная шкатулка — простая поделка для начинающих

Если у вас есть один из этих микроконтроллеров: ATtiny13, ATtiny44, ATmega8 или ATmega128, вы можете легко превратить его в музыкальную шкатулку или музыкальную открытку. Для этого достаточно записать в МК соответствующую прошивку — одну из тех четырех, которые размещены в папках «MusicBox_. » в одном архиве со скриптом. Коды прошивок хранятся в файлах с расширением «.hex». Использовать ATmega128 для такой поделки, конечно, «жирновато», как и ATmega8. Но это может быть полезно для тестирования или экспериментов, иначе говоря — в учебных целях. Тексты программ на Ассемблере также прилагаются. Программы создавались не с нуля — за основу была взята программа музыкальной шкатулки из книги А.В.Белова «Микроконтроллеры AVR в радиолюбительской практике». Исходная программа претерпела ряд существенных изменений:
1. адаптирована для каждого из четырех МК: ATtiny13, ATtiny44, ATmega8 и ATmega128
2. ликвидированы кнопки — к контроллеру вообще ничего не нужно подключать, кроме питания и звукоизлучателя (мелодии воспроизводятся одна за другой в бесконечном цикле)
3. длительность каждой ноты уменьшена на длительность паузы между нотами для устранения нарушения музыкального ритма
4. подключена восьмая мелодия, незадействованная в книжной версии
5. из субъективного: некоторые «улучшайзинги» для оптимизации и более легкого восприятия алгоритма

В некоторых мелодиях слышится фальшь и даже грубые ошибки, особенно в «Улыбке» — в середине. Коды мелодий взяты из книги (а точнее — скачаны с сайта автора книги вместе с исходным asm-файлом) и не подвергались изменениям. Судя по всему, в кодировке мелодий имеются ошибки. Но это не проблема — кто «дружит» с музыкой, без труда во всем разберется и исправит.

В ATtiny13 из-за отсутствия 16-битного счетчика для воспроизведения нот пришлось использовать 8-битный, что привело к некоторому снижению точности звучания нот. Но на слух это мало заметно.

Насчет конфигурационных бит. Их настройка должна соответствовать состоянию нового микроконтроллера. Если ваш МК ранее где-то использовался, нужно проверить состояние его конфигурационных бит, и, при необходимости, привести их в соответствие настройкам нового микроконтроллера. Узнать состояние конфигурационных бит нового микроконтроллера можно из документации на этот МК (раздел «Fuse Bits»). Исключение составляет ATmega128. У этого МК имеется бит M103C, который включает режим совместимости с более старым ATmega103. Активизация бита M103C сильно урезает возможности ATmega128, причем у нового МК этот бит активен. Нужно сбросить M103C в неактивное состояние. Для манипуляций с конфигурационными битами используйте соответствующий раздел меню скрипта-программатора.

Схему музыкальной шкатулки приводить нет смысла: в ней только микроконтроллер, питание и пьезозвукоизлучатель. Питание подается точно так же, как мы это проделали при программировании МК. Звукоизлучатель подключается между общим проводом (вывод GND контроллера) и одним из выводов МК, номер которого можно посмотреть в файле с ассемблерным кодом программы (*.asm). В начале текста программы для каждого МК в комментариях имеется строчка: «звуковой сигнал формируется на выводе ХХ». При завершении работы скрипта — программатора микроконтроллер выходит из режима программирования и переходит в обычный режим работы. Сразу же начинается воспроизведение мелодий. Подключив звукоизлучатель, можно это проверить. Оставлять звукоизлучатель подключенным во время программирования кристалла можно только в том случае, если звук снимается с вывода, не задействованного в SPI, иначе дополнительная емкость на выводе может помешать программированию.

Успешных вам экспериментов!

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

Кроме PL-2303 существуют и другие микросхемы, на которых создаются конвертеры интерфейса, подобные использованному в данной статье. Читайте описание ещё одного преобразователя USB-UART (на микросхеме CH340G) и о его доработке до USB-RS232TTL.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Любая современная цифровая техника, как компьютерная, так и бытовая, работает по специально написанному алгоритму действий. Этот алгоритм, в виде программного кода, записан в специальной программе, иначе называемой прошивкой устройства. Иногда, например в случае, когда техника была включена без сетевого фильтра в грозу, эта прошивка слетает.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Программный код, который был записан во Flash память микросхемы, начинает работать со сбоями, и устройство больше не может нормально функционировать. Как быть в таком случае? Читайте инструкцию сайта Электрические схемы и узнаете. А здесь нам необходимо найти прошивку, иначе говоря ту самую программу, в нужном для прошивания формате, очистить память микросхемы, и затем заново перезаписать новую программу. Для того, чтобы залить прошивку в память микросхемы, нам необходим программатор. Иногда, если устройство было выпущено с “сырой” прошивкой, перепрошивка на более свежую, позволит добавить новые функции устройству, или избавиться от неприятых багов, которые отравляли вам жизнь, при использовании этой техники. Приведу простой пример: на материнских платах, производитель предусмотрел возможность обновления прошивки, просто считав ее с флешки, зайдя в BIOS и выбрав нужную опцию.

Обновление BIOS с флешки

Обновление BIOS с флешки

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

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Здесь сначала нужно сделать отступление, и рассказать о том, что такое POST карта, и для чего она здесь нужна. Это специальная плата, для PCI разъема, которая втыкается в него, и имеет индикацию POST кодов, или иначе говоря, индикацию в виде буквенно цифрового кода, происходящих программных процессов, включения в работу материнской платы, на двух семисегментных индикаторах. Эти POST коды разумеется имеют каждый свою расшифровку, по которым мы определяем, в случае поломки, на каком из этапов, у нас произошел сбой. И вот если мы видим, что на каком-то из POST кодов, у нас зависает тестирование, мы можем с определенной долей вероятности предположить, что виновен в неисправности слетевший BIOS. Конечно-же, перед прошиванием, нужно сперва выполнить все стандартные процедуры, на случай плохого контакта в разъемах памяти или процессора.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Вставить процессор в сокет, поднять и опустить 20 раз рычаг, при этом окислы, если они были на контактах разъема, сотрутся. Пройтись мягким белым ластиком, по контактам оперативной памяти, с обоих сторон, с этой же целью. Взять зубную щетку, и провести 5 раз, по каждому из слотов памяти, по разъему, вдоль него. Как показывает практика, иногда этого бывает достаточно, для того чтобы компьютер заработал.

Кстати если вы меняли батарейку на материнской плате, не забудьте очистить CMOS, замкнув на 10 секунд, 2 контакта Clear CMOS, на материнской плате джампером.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Как сбросить CMOS

Если материнская плата была модели Asrock, типа широко распространенных серий N68 или G31, и подобных, то нужно будет вынуть модули ОЗУ, и вставить из заново, после замены батарейки, почитайте про теневое ОЗУ, кому интересно, для чего это делается.

Если всё-таки надо перепрошивать

Итак вернемся к нашим баранам). Вы проделали все эти процедуры, но материнская плата как и прежде, не хочет работать должным образом, и вы принимаете решение прошить BIOS. Здесь нужно знать о том, какие типы микросхем и в каких корпусах вам могут встретиться на материнских платах. Типы микросхем памяти, которые встречались на устаревших материнских платах, времен Pentium 4, в корпусе PLCC32, мы особо рассматривать не будем. Для них нужен программатор другого типа, намного более сложный в изготовлении, и дорогой по стоимости, если покупать готовый.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Программатор TL 866A

Если кому-то очень нужно будет прошить такую микросхему памяти, вам потребуется программатор TL 866A, который можно заказать с Али экспресс, это только сам программатор, без адаптеров и переходников, и обойдется он по цене порядка 2.5 тысяч рублей. Полный комплект, естественно будет дороже. Но как оказалось, есть еще более дешевое решение этой проблемы, хотя и менее универсальное. Это программатор NANO USB Programmer, с E-bay, на Али экспресс, я его почему то не нашел.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Программатор NANO USB

Решение о его приобретении, в связи с меньшей универсальностью, по сравнению с TL866A, наверное весьма спорное, но и стоит он, примерно в два раза дешевле, около тысячи рублей. Нас же сейчас интересуют микросхемы памяти с SPI интерфейсом, для которых требуются намного более дешевые и простые программаторы.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Ddip-8 Биос микросхема

Дело в том, что начиная примерно с 2007 года, на материнских платах платформ AMD и Intel, начался постепенных переход от микросхем BIOS, в корпусе PLCC32, на микросхемы с SPI интерфейсом, имеющие 8 ног, и выпускаемые в корпусах Dip-8 и So-8.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Последние, как вы уже думаю поняли, выпущены в SMD варианте. Так вот, эти самые микросхемы, на современных материнских платах, очень часто выпускаются в Dip-8 корпусе, и устанавливаются в специальную панельку.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Программатор CH 341A

В таком случае нам остается только извлечь микросхему из панельки, установить ее в ZIF адаптер программатора, прошить, а затем установить обратно в материнскую плату. Кстати перед тем, как стирать микросхему, и прошивать новой прошивкой, обязательно сохраните текущую прошивку на жестком диске. Это позволит вам без проблем залить ее обратно, в случае, если новая прошивка будет работать не стабильно, или вообще окажется не подходящей к этому устройству.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Но где же взять прошивку для программатора, ведь она должна быть в формате *.bin или *.hex, именно такие форматы прошивок понимает программатор, а на официальном сайте производителя для обновления прошивки через флешку, можно скачать только какой-то вообще левый непонятный формат. Как показала практика, это чаще всего тот же самый двоичный формат *.bin, только с другим расширением, и чтобы его прошить нам нужно просто изменить расширение файла на *.bin. Как же все оказывается просто)…

Выбираем формат прошивки

Выбираем формат прошивки

Но не тут то было, рано обрадовались)… Например на мониторы и другую технику производители прошивки в открытый доступ не выкладывают, и доступ к ним имеется только в сервисных центрах, либо можно попросить кого то снять дамп с рабочего монитора. Но к счастью мир не без добрых людей, и прошивки эти, если очень хорошо поискать, можно все же найти на специализированных сайтах по ремонту техники. Как же быть если микросхема BIOS у нас в корпусе SO-8? Обязательно ли ее выпаивать перед прошиванием? Нет, по крайней мере не всегда… Китайская промышленность выпускает специальный адаптер, клипсу, прицепившись которой сверху к контактам микросхемы, мы можем прошить ее без выпаивания. Но оговорюсь, этот вариант не всегда срабатывает.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

В таком случае потребуется выпаять микросхему памяти, и прошить ее, припаяв к площадке адаптера, либо воспользоваться клипсой, зажав в нее микросхему, либо вот такими адаптерами, имеющими разную ширину, устанавливаемой микросхемы, 150 и 200 mil.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOSПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Адаптеры 200 и 150 Мил

Как можно выпаять микросхему SO-8, без помощи паяльного фена? Можно воспользоваться сплавами Розе или Вуда, на крайний случай, можно взять более низкотемпературный, чем припой для безсвинцовой пайки, ПОС-61, нанести его на контакты микросхемы, взять медицинскую иглу из нержавейки, и поддев ее под один из контактов микросхемы, прогревая жалом паяльника, приподнять его.

ПРОШИВКА И ПЕРЕПРОШИВКА BIOS

Затем эту процедуру нужно проделать поочередно со всеми контактами. После чего нужно удалить старый припой с контактных площадок на плате, нанеся флюс, с помощью демонтажной оплетки. Свой программатор и клипсу я давно отбил, перепрошив BIOS всего лишь на одной материнской плате. И теперь он мне часто помогает, когда возникают сомнения, в чем проблема, в BIOS или нет. Если же по каким то причинам нет возможности приобрести SPI программатор, можно самому спаять простую схемку, для прошивания микросхем в корпусе Dip-8, скорее всего для разовых работ, вам ее будет достаточно.

Схема электрическая

Схема самодельного программатора SPI Flash 25 серии

Схема самодельного программатора SPI Flash 25 серии

Стабилизатор на 3.3 вольта, в данном случае, если будет крайняя необходимость, можно заменить на литиевую батарейку таблетку, 2016-2032, она, свежая разумеется, выдает порядка 3 вольт, и такого питания будет достаточно, для разовых прошивок.

Вместо вывода

Данный условно – софтовый ремонт материнских плат, является одним из самых простых видов ремонта, и не требует ни опыта в пайке, ни наличия паяльного фена, и других дорогих инструментов и приборов. Я рекомендую программатор SPI с Али экспресс, и клипсу для него, как недорогое решение, для прошивания BIOS материнских плат, всем начинающим мастерам, которые пока не могут позволить себе приобрести, по различным причинам программатор TL866A. Всем удачных ремонтов, с вами был AKV.

Программатор CH341A + прошивка микросхем памяти

Программатор CH341A: как прошить микросхему памяти без пайки

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

Программатор микросхем памяти еепром/флеш — CH341A

Небольшой по размерам электронный прибор для прошивки подключается к порту USB компьютера. Прошивальщик позволяет быстро программировать микросхемы памяти 24хх, 25хх серий и аналогичных. Рассмотрим электронику для лучшего представления, понимания, применения на практике.

Микросхемы памяти серий 24хх (eeprom), 25хх (serial flash) используются в схемах электронной техники повсеместно.

Такого рода чипы присутствуют в составе практически любой конструкции современной бытовой / промышленной аппаратуры, управляемой через микроконтроллеры.

Для электронщиков, работающих с такой аппаратурой нужным инструментом является программатор, в частности, модель CH341A, позволяющая выполнять программирование чипов памяти без выпаивания из состава печатной платы.

Полное представления на программатор CH341A даёт описание (datasheet), дополненное стандартными техническими характеристиками. Тем не менее, рассмотрим девайс электронщика глазами обывателя, что часто воспринимается потенциальным пользователем проще и легче официальных документов.

Универсальный программатор ch341a

Универсальный программатор CH341A для работы с широко распространёнными микросхемами памяти типа EEPROM и FLASH. Обзавестись таким девайсом обязан каждый уважающий себя электронщик

Сборка устройства выполнена на базе микроконтроллера «USB Bus Convert Chip» серии CH341A. Программатор рассчитан на физическое подключение к порту USB компьютеров, работающих под управлением современных ОС Windows. Модуль программирования микросхем памяти собран на печатной плате размерами 45х25 мм (см. картинку ниже).

Программатор ch341a для микросхем памяти

Внешний вид монтажной платы программатора с нижней стороны. На площади размерами 45х25 мм расположился сам микропроцессор и сопутствующая обвязка электронными микроэлементами

На одной стороне печатной платы размещены электронные компоненты программатора CH341A. На второй стороне электронной платы установлена механическая панель (ZIF) под временное крепление программируемых микросхем.

Механическая ZIF-панель прошивальщика поддерживает чипы в корпусах DIP. Обеспечивает удобство работы пользователя, когда выполняется считывание или «прошивка» чипов памяти.

Универсальный программатор CH341A — применение в работе

Подключение микросхем флэш-памяти 25хх серии с корпусным исполнением SOP8/SOP16 на программаторе осуществляется через соответствующие контактные площадки. Две таких площадки располагаются непосредственно на монтажной плате программатора CH341A рядом с ZIF-панелью.

ch341a программатор в комплекте

Программатор универсальный CH431A и комплект дополнительных элементов. Миниатюрная плата с отверстиями для штырьков, на обратной стороне имеет площадки под чипы SOP

Также в комплекте с программатором CH341A поставляется дополнительная монтажная печатная плата. Этот аксессуар применяется на случай программирования микросхем памяти с архитектурным исполнением корпусов SOP8/SOP16. Под внутрисхемное программирование на печатной плате программатора CH341A выведены контакт питания под напряжение 3.3 вольта и соответствующие контакты ISP интерфейса:

  • MOSI;
  • MISO;
  • CLK;
  • CS;
  • GND.

Вместе с тем есть возможность работать с периферией по интерфейсу RS232 (выводы на плате RX, TX, GND). Схема программатора CH341A рассчитана под питание постоянным напряжением 5 вольт от внешнего источника. Это напряжение, при подключении программатора к персональному компьютеру, поступает по шине USB.

Связь ch341a с компьютером через usb

Подключенный к USB порту компьютера программатор CH341A для микросхем памяти . Свечение красного индикатора свидетельствует о наличии питания в схеме устройства

На печатной плате программатора встроен индикатор наличия питания – светодиод красного цвета. Режим внешнего или внутреннего программирования включается съёмом или установкой перемычки на контактах P/S (parallel/serial), также внедрённых в схему программатора CH341A. По умолчанию перемычка установлена.

Положению установленной перемычки на контактах P/S (parallel/serial) программатора CH341A соответствует режим внутреннего программирования. В этом случае:

  • чтение,
  • верификация,
  • запись чипов памяти,

осуществляются непосредственно через ZIF-панель программатора CH341A. Между тем на плате программатора универсального CH341A перемычка может быть снята с контактов P/S (parallel/serial). Программирование в таком режиме допускает непосредственное подключение к программируемой микросхеме памяти без выпаивания из платы.

Программатор CH341A — программное обеспечение прошивки/считывания

Действие универсального физического модуля CH341A на программном уровне поддерживается «родительским» программным обеспечением — «CH341A Programmer» (здесь версия 1.4).

Используемые драйверы для операционных систем и интерфейсов:

    и ранее на IIC / I2C, SPI и другие; и ранние на последовательный интерфейс;
  • под Linux;
  • под Mac;

бесплатно распространяется по сети Интернет.

Интерфейс рабочего программного окна ПО версии 1.30 прост для восприятия и понимания как начинающим электронщикам, так и профессионалам. Все основные обозначения программного интерфейса версии 1.30 переведены на русский язык. В целом программой поддерживается несколько региональных языков интерфейса. Однако выше представлена также версия 1.4 (английский интерфейс).

Окно программного обеспечения под ch341a

Таким выглядит окно программного обеспечения для программатора CH341A. Удобный лёгкий для восприятия и понимания интерфейс, поддерживающий обозначения на русском языке

Конечно же, чтобы программное обеспечение удачно состыковать с устройством, корректно и эффективно программировать, требуется установка системных драйверов. Это компоненты, дополняющие ПО, как правило, включены в установочный пакет программного софта.

При подключении программатора на порт USB, система автоматически выдаёт (только старые версии Windows) сообщение о необходимости установки драйверов устройства. Нужно просто указать путь к папке, где находятся требуемые файлы. Последние версии (например, Windows 10) требуют файлы с цифровой подписью. Здесь выше можно скачать официальные драйверы, наделённые цифровой подписью.

Тонкости программирования микросхем памяти через интерфейс CH341A

Логичный вопрос начинающих электронщиков: как прошить микросхему памяти eeprom в корпусе DIP с помощью этого устройства? Так вот, работа с чипами памяти EEPROM (24хх, 25хх) в корпусном исполнении DIP, осуществляется, примерно, следующим образом (при условии предварительно установленных драйверов):

    1. На ZIF-панели рукоятку установить перпендикулярно корпусу.
    2. Вставить микросхему в ячейку согласно обозначению на плате 24хх или 25хх (1 ножка ближе к рукоятке).
    3. Опустить рукоятку в положение параллельно корпусу панели.
    4. Подключить программатор CH341A на USB порт.
    5. Подключить устройство в диспетчере Windows.
    6. Запустить Programmer и выполнить требуемые действия (считывание, прошивка, сравнение контрольных сумм и т.д.).

    Видеоролик выше показывает последовательность работы с микросхемами памяти через программную среду сопровождения. В частности, показаны примеры работы с ПО «Programmer CH341A» двух версий (1.30 и 1.4, соответственно).После завершения работы с ПО, устройство в списке диспетчера Windows рекомендуется отключать (не удалять, но деактивировать).

    Программирование чипов из серии флэш-памяти 25хх с корпусным исполнением SOP делается несколько иначе. Контактная ZIF-панель в этом случае может также использоваться, но при условии, если микросхема монтируется на дополнительной печатной плате.

    Дополнительную печатную плату необходимо оснастить контактными электродами, впаяв электроды в соответствующие отверстия платы. Операционную (программируемую) микросхему также придётся подпаивать на контактные площадки.

    Между тем существует упрощённый способ коммуникации. На основной плате программатора CH341A имеются площадки под конфигурацию SOP. На такую площадку аккуратно накладывают программируемый чип с тем расчётом, чтобы ножки микросхемы точно попадали на контактные дорожки.

    Площадки под размещение чипов SOP

    Контактные площадки под размещение микросхем памяти в корпусном исполнении типа SOP. Две площадки под серию 25хх и одна под серию 24хх

    Следует проконтролировать соответствие расположения микросхемы по ключу на корпусе и на плате. Там есть указатель контакта первой ножки чипа. Затем чип аккуратно прижимают миниатюрной прищепкой. Дальше всё делается стандартным образом – подключение к порту компьютера и программирование микросхемы.

    Программатор CH341A: где купить и какая цена

    Купить устройство выгоднее на известном портале Aliexpress. Цена, заявленная китайскими продавцами, чисто символическая (не более 200 руб. вместе с пересылкой). Быстрее и проще покупка производится через федеральный Маркет Яндекса. Предложения ниже:

    Единственное неудобство для покупателя в случае запроса через китайский shop-портал AliExpress – приходится ожидать прибытия посылки в Россию примерно месяц-полтора. Но если учитывать открывающиеся возможности с приобретением этого товара, можно подождать и 3 месяца. Однако немного доплатив, проще купить в России.

    Программатор на aliexpress

    Страница одного из продавцов Aliexpress, предлагающего программатор CH341A купить за 112 руб. Это предложение проверено — можно смело покупать, к примеру, за яндекс-деньги

    Читать и «шить» программатором CH341A доступно чипы памяти следующих производителей:

    • Atmel;
    • Amic;
    • EON;
    • ST;
    • Excel Semiconductor Inc;
    • NexFlash;
    • MXIC;
    • Chingis Technology Corporation;
    • WINBOND;
    • Saifun Semiconductors.

    Таблица поддерживаемых микросхем программатором CH341A

    ATMEL AT25DF041A, AT25DF321, AT25F004, AT25F512A, AT25F2048, AT25F4096, AT25F1024A, AT25FS010, AT25FS040, AT26DF081A,AT26DF161A, AT26DF321, AT26F004
    AMIC A25L05P, A25L10P, A25L20P, A25L40P, A25L80P, A25L16P
    EON EN25B05, EN25P05, EN25B10, EN25P10, EN25BF20, EN25P20, EN25F20, EN25B40, EN25P40, EN25F40, EN25B80, EN25P80, EN25F80, EN25T80, EN25B16, EN25P16, EN25B32, EN25P32, EN25B64, EN25P64
    ST M25P05A, M25P10A, M25P20, M25P40, M25P80, M25P16, M25P32, M25P64, M25PE10, M25PE20, M25PE40, M25PE80, M25PE16, M25PE32, M45PE10, M45PE20, M45PE40, M45PE80, M45PE16, M45PE32
    EXCEL SEMICONDUCTOR INC ES25P10, ES25P20, ES25P40, ES25P80, ES25P16, ES25P32
    NEXFLASH NX25P80, NX25P16, NX25P32
    MXIC MX25L512, MX25L1005, MX25L2005, MX25L4005, MX25L8005, MX25L1605, MX25L3205, MX25L6405, MX25L6445, MX25L6405
    CHINGIS TECHNOLOGY CORPORATION Pm25LV512, Pm25LV010, Pm25LV020, Pm25LV040, Pm25LV080, Pm25LV016, Pm25LV032, Pm25LV064
    WINBOND W25P10, W25X10, W25Q10, W25P20, W25X20, W25Q20, W25P40, W25X40, W25Q40, W25P80, W25X80, W25Q80, W25P16, W25X16, W25Q16, W25P32, W25X32, W25Q32, W25P64, W25X64, W25Q64
    SAIFUN SA25F005, SA25F010, SA25F020, SA25F040, SA25F080, SA25F160, SA25F320

    Таблица выше представляет далеко не полный список фирм, микросхемы памяти которых доступны для чтения и записи кода программатором CH341A.

    После чтения содержимого чипа устройством, программа сохраняет файлы в указанную папку с присвоением расширения *.bin (бинарный). Этот момент процесса программирования нужно учитывать.

    Например, когда для новой прошивки микросхемы используются файлы дампов, полученные из других источников, наделённые другими типами расширения. Перед загрузкой программатором таким файлам нужно заменить расширение на используемое по умолчанию (*.bin).

    Как прошить микросхему памяти без выпаивания

    Программатор микросхем памяти проверялся на чтении дампа eeprom-памяти контроллера Pixel (2 шт. ATMLH132). Работа на чтение информации, которую не удавалось сделать с помощью других конструкций программаторов, потребовала не более 3-4 секунд времени. При этом читаемые микросхемы памяти из платы контроллера не выпаивались.

    На интерфейс программатора CH341A подключался непосредственно модуль памяти контроллера Pixel, состоящий из двух чипов памяти 24 серии. Подключение производилось через стандартный 4-контактный разъём. Опыт — как читать дамп с микросхемы серии 24С04 без выпаивания чипа из платы, описан далее.

    Чтение дампа микросхем памяти программатором CH341A

    Чтобы иметь возможность подключаться к микросхемам в DIP корпусах непосредственно на плате, нужно обзавестись контактной «прищепкой». Этот инструмент также можно купить недорого на упомянутом ранее сайте.

    Прищепка для микросхем dip

    Набор аксессуаров для программатора, куда входит прищепка-контактор под микросхемы в корпусе DIP и переходная плата, с помощью которой осуществляется контакт с ZIF-панелью

    Прищепка устанавливается на корпус микросхемы с таким расчётом, чтобы все контакты точно «сели» на ножки программируемого чипа. Первая контактная ножка рабочей микросхемы должна соответствовать контакту «прищепки» с подведённым красным проводом.

    Плата с рабочим чипом, на который пишется или с которого снимается дамп, должна отключаться от любых источников питания,

    включая литий-ионные батареи (актуально для компьютерных материнских плат). На программаторе CH341A перемычка на контактах «P/S» снимается.

    Подключение прищепкой к чипу памяти

    Пример подсоединения кабеля с прищепкой к программируемой микросхеме памяти. Проводник, помеченный красным цветом, соответствует контакту с первой ножкой чипа

    Ответный конец кабеля с «прищепкой» подключается на переходник (мини-плата) через штыревое соединение, и далее к ZIF-панели программатора CH341A. В зависимости от типа программируемой микросхемы, плата-переходник устанавливается в контактные гнёзда для чипов серии 24хх или 25хх.

    Дальше останется только включить программатор CH341A в USB порт, запустить сопровождающую программу на компьютере и можно начинать работать с дампом микросхем памяти. К примеру, для указанной серии микросхем 24С04 потребовалось времени на считывание дампа не более 3 секунд:

    Дамп микросхемы памяти 24c04

    Результат работы с микросхемой памяти в условиях её полного контакта с платой устройства. Съём дампа осуществлялся без выпаивания микросхемы из платы устройства

    Некоторые микросхемы памяти, рассчитанные под напряжение питания 5 вольт, иногда не реагируют на действия программатора CH341A. Выражается это результатом, когда дамп не считывается и не пишется.

    Причина отсутствия чтения/записи на программаторе CH341A

    Объясняется причина отсутствия рабочего эффекта просто: по умолчанию схемой программатора CH341A используется рабочее напряжение (стабилизированное от USB) равное 3.3 вольтам. При таком малом уровне напряжения и токе не превышающем 500 мА, некоторые серии чипов попросту «не входят» в режим программирования.

    Принципиальная схема программатора ch341a для микросхем памяти

    Принципиальная схема программатора CH341A, предназначенного для программирования микросхем памяти серий 24хх (eeprom) и 25хх (флеш память)

    К тому же следует учитывать потери тока через ёмкости электронной платы, где установлен операционный чип. Для подобных случаев необходим достаточный рабочий уровень напряжения программирования, а также достаточно высокий токовый потенциал.

    Соответственно, устранение причины – подача напряжения программирования непосредственно от более мощного внешнего источника питания. Для этого используется 7-контактный разъём, присутствующий на плате программатора CH341A. Обозначение контактов разъёма есть на принципиальной схеме (см. выше).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *