Представим: купили вы новый камень для своего проекта, а он - зараза - не шьется! Все собрано правильно, программатор правильный - всё равно ошибка. Знакомо? Мне да. Поэтому я решил написать про это статью.
Немного предыстории
Понадобилась мне значит Atmega32, купил, впаял, пытаюсь прошить - ошибка!
Лезем в гугл, где вам предложат:
Проверить соединение
Проверить пайку
Выкинуть микроконтроллер
Другая история - попалась мне Atmega328p, друг попросил накатить загрузчик. Ошибка такая же. Похоже на случай описанный ранее? На первый взгляд да. А вот когда начнем разбираться...
Прошиваем Atmega32
Я, как и многие другие, использую дешевой китайский программатор USBasp.
Некоторые программаторы приходят со сбитыми элементами, непропаями и соплями. Даже если вы купите USBasp в нашем магазине, то скорее всего он будет собран в том же китайском подвале, что и его собратья купленные в китайских интернет-магазинах.
На программаторе мы видим 3 джампера: прошивка программатора - JP1, напряжение питания - JP2, и незапаяный джампер JP3 - прошивка на пониженной скорости.
Что такое "низкая скорость прошивки" и почему важна частота?
Пока перенесёмся из мира электроники, мир наш. Представим что на работе раз в час приходит начальник, чтобы проверить, как вы работаете. Время появления начальника вам известно, соответственно, вы начинаете работать и не получаете пинков от него. Но в один прекрасный момент, начальник начинает приходить раз в 45 минут, но вы этого не знаете. Так же и с МК, если он настроен на 16 MHz, но будет кварц на 8 MHz, чип не будет работать. Настройки частоты задаются фьюзами. За источник тактирования отвечают CKSEL. В зависимости от частоты, меняется скорость прошивки. Обычно на новых камнях стоят одни из этих источников тактирования:
External 16 MHz
External 8 MHz
Internal 8 MHz
Internal 1 MHz
Internal 128 KHz
Для работы с чипом имеющим частоту меньше 1 МГц, нужно снизить скорость прошивки. Это можно сделать перемычкой JP3 на программаторе, или в настройках используемой вами программы. После этого Atmega32 прошилась!
Прошиваем Atmega328p
В этом случае колдовать со скоростью прошивки не пришлось. Но пришлось поиграть с кварцами. Просто глядя на камень его настройки установить невозможно. А если МК не запускается, определить фьюзы даже с программатором это бесполезная затея. Не буду томить - в моем случае какой-то китаец настроил Atmega328p на External 8 MHz. Подключаем чип к программатору, жмем "Записать загрузчик" и...
Далее не забываем подкинуть кварц на выбранную вами частоту. В Arduino IDE частота меняется здесь (в большинстве кастомных ядер):
Если все равно не работает
Первый вариант: вы перебрали не все кварцы. По-хорошему, у вас должно быть достаточно разных кварцев - на 16, 8, 4 MHz. В последнее время появились микроконтроллеры с частотой 20 MHz, но их достаточно мало. Однако и такой вариант следует предусмотреть. Вот полный список частот Atmega32, на свой чип гуглите:
Второй вариант: вы выбрали не тот чип. Например, вот модификации atmega328:
Третий вариант: МК в мусорку. Попался с брачком, ну или сгорел.
Заключение
Описанные в статье проблемы выявить и устранить не всегда бывает легко, но возможно. Надеюсь статья была вам полезна, и вы узнали что-то новое или справились с проблемой. Если есть вопросы, пишите в комментарии, а на этом я с вами прощаюсь, всем удачи и всем, пока!
Комментарии (27)
deema35
16.11.2021 05:50+1
juramehanik
16.11.2021 07:36+3новый камень
AVR
Спасибо, что напомнили о принципиальных проблемах "нового камня" с которыми сталкивался и я и большинство тех кто работал с avr еще 10 лет назад, а потом со вздохом забыли про это (ну кроме тех у кого есть куча легаси).
Это я к чему, не проблема использовать и писать статьи про морально устаревшее железо, проблема об этом не сообщать. Тут же дети есть!11
А если серьезно, в сети щас не мало вакансий на программистов электронщиков (естественно за копейки) на горе-стартапы, где как раз ардуину на атмеге надо заменить на что-то, что работает шустрее и купить проще. Спасибо инженерам которые не занимаются саморазвитием и сидят всю жизнь на одном инструменте, который выучили в молодости.
Так что саморазвивайтес!redsh0927
16.11.2021 07:52+2а потом со вздохом забыли про это
И схватились за голову при виде ерраты на стм32.
Если NEGEDGE=0, то половина сд-карточек отваливаются, пока не сбросишь скорость в 2 раза. А если NEGEDGE=1 — то вообще ничего не работает. Ну спасибо…
Верните мне мои фьюз биты, я их настрою РУКАМИ и всё будет идеально работать. Практически ни одной ошибки не было в AVR! В отличие от «современных» кривых поделок, при чтении ерраты на которые иногда кажется что над тобой просто издеваются.juramehanik
16.11.2021 08:06Ну кто то схватился за стм32, кто то за еще что, главное что на месте не стоял, я именно про это говорил.
Ну сравнение не очень корректное, в более простом камне и ошибок будет меньше.
тем более если камень популярный, ошибки будут находится, это нормально.
В любом случае хоть в камнях некоторых и было дикое количество ошибок, лидерами рынка (на какой-то момент) они как то стали, значит ошибок было не слишком много =)
Судя по поиску "errata atmega328" , ее составляли пользователи форумов а не сам производитель. Нет спасибо, такого не надо))redsh0927
16.11.2021 08:17Ну или вот, разве не милая история?
blog.frankvh.com/2012/01/13/stm32f2xx-stm32f4xx-dma-maximum-transactionsI don’t know how ST measures time – they say their errata will be updated “soon”, but as I write this it’s 5 months since they stated that, and their STM32 errata, at revision 2.0, does not contain this information, let alone any more detail about it. If anyone knows anything more, please post a comment.
Вот так, сдевелопил девайс в расчёте на заявленную функциональность, а она раз, и не то что не работает, а рандомно отваливается через X часов/дней. И как понять что дело в чипе, если про это даже в еррате нет, потому что производитель не удосужился внести. И что делать? Всю многомесячную работу с нуля?Судя по поиску «errata atmega328», ее составляли пользователи форумов а не сам производитель.
Примеры ошибок по м328 будут?juramehanik
16.11.2021 08:25Вот так, сдевелопил девайс в расчёте на заявленную функциональность, а она раз, и не то что не работает, а рандомно отваливается через X часов/дней. И как понять что дело в чипе, если про это даже в еррате нет, потому что производитель не удосужился внести. И что делать? Всю многомесячную работу с нуля?
Да, и такое бывает и со мной было, приходилось решать проблемы,shit happens.
К чему вы это все пишете? Не устраивают данные камни, используйте другие, мир не на stm одном стоит, проблемы могут быть и будут везде. Это определенный риск, который надо закладывать в бюджет разработки.
10 лет назад кроме avr и pic выбора для относительно малой по бюджету разработки электроники практически не было, сейчас есть (ну это если не считать кризис ахаха)redsh0927
16.11.2021 08:47+4Камень ставится в зависимости от задачи. Для некоторых вещей стм32 подходит хорошо и тогда можно смириться с неудобствами, глюками, десятикратным объёмом телодвижений на каждое действие с периферией. Уходить однако с авр просто ради ухода с авр — ну уж нет, хрен вам. Если есть возможность, то ставлю авр.
Кое где и стм32 не вывозит, даже самый жырный. Сейчас буду ставить спартан-6, хотя альтера и больше по душе. Но тут что удалось купить.AxGxP
17.11.2021 12:02Ну я тоже AVR иногда ставлю, например Attiny13, дешево и места не много занимает. Но использовать всякие Atmega, зачем??? На stm быстрее и проще сделать что угодно. То, что в меге нужно с лог. анализатором часами отлаживать на STM можно сделать просто правильно настроив периферию... По цене разницы особо нет, зато отлаживать удобнее.
RTFM13
16.11.2021 12:01+310 лет назад кроме avr и pic выбора для относительно малой по бюджету разработки электроники практически не было
Даже 20 лет назад было навалом. Тех же 8051 на любой вкус.
VT100
16.11.2021 20:38+1принципиальных проблемах
И не забудьте в STM разрешить тактирование периферии. ;-)
znsoft
16.11.2021 08:31+1блин и ниодной статьи про atxmega вот там то камней можно схватить . из примера: я их купил горсть (испробовал все). у них свой протокол прошивки PDI . скачал все что нужно перешил usbasp перепаял его , avrdude (переделанный под PDI ) определяет микросхему , пытаешься писать .... фиг , неделя борьбы ... валяется незавершенный проект в коробке
jogick
20.11.2021 00:55-1Может у Вас что-то с программатором? Сегодня специально подключил atxmega32a4 по pdi к дракону, нормально читается, шьётся, в отладку заходит. Всё программами из репозитория Debian, ни каких самостоятельных сборок. Вообще с этой серией никогда не работал, камень случайно попал в руки.
Не могу на нём включить внутренний генератор 32МГц, всё застряёт на ожидании флага запуска генератора.
belav
16.11.2021 09:29+3Вместо подбора кварцев проще подать тактовый сигнал на ножку oscin и прошить на пониженной скорости.
RTFM13
16.11.2021 11:42Когда я последний раз шил AVR, это всё было реализовано в программаторе (тактирование, ресет, SPI). Но я исторически пички предпочитаю.
belav
17.11.2021 01:04+1Когда я шил, у меня был com порт, несколько резисторов и стабилитронов. Давно это было.
Пики мне нравились, что сторожевой таймер запускается аппаратно, в мегах нужно было программно включать - это был косяк.
Потом msp430 - сторожевой всегда включён по умолчанию. И тактирование ядра при запуске от внутреннего rc - это было удобно.
RTFM13
18.11.2021 12:59Программаторы на резисторах имели кучу недостатков, я сразу отказался. У пичков один и тот же программатор работает от pic10 до pic32 с некоторыми функциями дебагера.
Я мониторил в течение нескольких лет работу нескольких десятков устройств на пичках. Они при перезагрузке отчитывались о причине на центральный сервер - ни разу вотчдог не был причиной.
По моему? был один случай зависания наглухо (с частичным выгоранием) пичка так, что даже MCLR не работал, на макетной плате из-за высоковольтного импульса. Не помню был ли там включен вотчдог, но все равно МК пошел под замену.
Включенный BOR там полностью решал проблему зависаний при просадке питания. А влияния космической радиации я так и не дождался. По этому вотчдог фактически работал на софтварные ошибки, которых за всё время ни одной не нашлось такой чтобы вотчдог помог зафиксировать.
За то у новых пичков еррата заставляет плакать. Какие-нибудь 32MZ-EC после заглядывания в еррату долго пытаешься понять что там вообще работает как положено. Первое время не работали даже некоторые примеры от микрочипа, там правда проблема была в библиотеках.
mkvmaks
16.11.2021 11:39Хорошо есть несколько arduino, в одну из них подкинул голый 328p-pu и залил bootloader )))
redsh0927
16.11.2021 12:22+2Можно и без всяких ардуин!
Программа эмулирует нажания клавиш CAPS LOCK Num lock и Scroll lock, это приводит к переключению светодиодов на клавиатуре. Таким образом можно доставить прошивку в МК.
alexzeed
16.11.2021 16:04+1Шикарно. А ещё более шикарная идея в комментах. Программирование через звуковуху. Программатор может состоять из 4 резисторов (делитель формирует середину между уровнями лог. 0 и 1, с него 2 резистора на sck и mosi, с звуковой карты выходы на них же, развязывающие конденсаторы там уже есть, reset кнопкой), загрузчик лежит в инете в виде wav файла. Скачал, открыл в плеере, жмакнул ресет и плей, дослушал до конца, бутлоадер зашит. Профит :)
belav
17.11.2021 00:59А лучше на кнопках и тумблерах.
alexzeed
17.11.2021 09:57Можно. Но это сложно и неинтересно. Смысл "программаторов из ничего" именно в простоте, программатор из клавы - минимум деталей (ни одной, одни провода), программатор из звуковухи - возможность прошивать без софта, а то и вообще с плеера :). Я только не помню насчёт начальной синхронизации, можно ли там так прямо вслепую начать дергать ногами при ручном ресете. Там в протоколе вроде есть фаза синхронизации, когда мы шлем клоки или по одной штуке, или по 33, и чего-то ждём в ответ, чтобы 32-битная команда попала в регистр правильно.
smoluks4096
HV программирование у AVR придумали специально, чтобы прошить при любом состоянии
Ivanii
И с новыми камнями никогда не видел, а вот с Али камешки как-то пришлось шить параллельным программатором.
red_crocodile
Ардунщики в основном у китайцев закупаются, а там hv я чёт не наблюдал)
Ivanii
У меня MiniPro TL866A, переходники под TQFP самодельные.