Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема стирания кристалла
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
krian
Приветствую всех форумчан!

Возможно кто-то сталкивался с такой же проблемой, как у меня. Я пока не смог найти объяснения.
Нужно мне было применить микроконтроллер в очередном устройстве. Сначала я хотел применить atmega16 или 32. Но меня привлекла плата Arduino pro mini с atmega 168 которая уже содержит всю нинимально необходимую обвязку. И я её заказал на aliexpress. Пока она путешествовала по почте, я сделал плату и написал программу. Я думал, что даже, если там что-то записано, я привычными средствами все это сотру и запишу своё ПО. Не тут то было!!!

Обычно я пользуюсь средствами Ponyprog, CVAVR или Algorithm Builder. В зависимости от ситуации. Прошиваю через COM порт.
AB, CVAVR сказали, что кристалл не доступен уже на стадии стирания. Другие ж доступны... значит аппаратная часть программаторов исправна.
В Pony начались приключения. Стираю кристалл. Читаю фьюзы. Lock биты не стерлись.
Убираю lock биты, чтобы открыть доступ. Перезаписываю фьюзы, включаю внутренний генератор, вместо кварцевого. Т.к. mega168V до 10 Мгц, а кварц стоит на 16МГц. Получилось. Сигнал на кварце исчез. Светодиод на плате перестал мигать. Т.е. первоначальная программа уже не работает. Кристалл читается. Но со второй попытки "Retri". Однако, чтение показывает, что полного стирания не произошло (FF только в первых двух строчках, а дальше какая-то информация), после чтения кристалла все lock биты почему-то восстановились. И снова заблокировали чтение памяти. Повторение описанных операций ничего не меняет. По команде стирания должен же стереться и загрузчик и lock биты. Не масочный же он там. По маркировке обычная микросхема. Моя старая проверенная макетка на atmega16, продолжает работать как прежде - все стирается и пишется. Но я же купил не одну такую Ардуину, а пять! Они мне понравились и стоили дешевле, чем один только контроллер в местном магазине. Я не раз покупал микросхемы и платы на Алиэкспрес, но никаких нареканий не было.

Тут я читаю в инете, что в платах Arduino (для упрощения!!!) зашит какой-то загрузчик. Хотите записать туда свой HEX файл? Нет ничего проще! Подключите свою плату через адаптер USB-USART к компьютеру, как показано на картинке и воспользуйтесь программами Xloader или UpLoader. Выбирайте любую и прошивайте на здоровье!
Я их скачал, но они обе не работают. Даже прилагаемые драйверы установил. (адаптер на базе PL2303HX обнаруживается и работает)
Xloader пишет, что загрузка началась, но зависает и не выходит из этого состояния. На TXD редко подмигивает индикатор. Никаких ошибок не выдает. Закрывается этот Икслоадер только с помощью диспетчера.
Uploader открывает командное окно. Ждет секунд 5. Потом пишет: avrdude: нет синхронизации.
Я уже голову сломал с этими упрщениями. На плате уже все работает, кроме контроллера. Как же стереть этот кристалл?!
TSerg
Т.е. почитать про Arduino и его IDE заранее - не судьба была?
V_G
Не скажу за Мегу 168, но меги 128 и младше по COM-порту без специального загрузчика не прошиваются.
А перепрошивка с загрузчиками всегда имеет ограничения по сравнению с штатным программированием через программатор (не СОМ-порт!).
Так что да, читайте ардуиновские мануалы на предмет ограничений в локах и фьюзах.
Либо используте нормальный программатор, который заливает прошивку в контроллер НЕ через СОМ-порт.
Сам программатор, понятно, часто подключается к компу через последовательный порт, но это не означает, что при программировании МК используется тот же интерфейс.
sgs
Стоит попробовать Parallel Programming. Видимо, при ICP программировании были затронуты какие-то не те фьюзы...
krian
Цитата(TSerg @ Nov 21 2016, 21:03) *
Т.е. почитать про Arduino и его IDE заранее - не судьба была?

И что я по Вашему должен был там увидеть? В описании к плате сказано, что она подходит для разных применений, в том числе и для Ардуино.
По-существу можете что-то сказать?

Цитата(V_G @ Nov 22 2016, 05:51) *
Так что да, читайте ардуиновские мануалы на предмет ограничений в локах и фьюзах.
Либо используте нормальный программатор, который заливает прошивку в контроллер НЕ через СОМ-порт.
Сам программатор, понятно, часто подключается к компу через последовательный порт, но это не означает, что при программировании МК используется тот же интерфейс.

Ардуиновские мануалы говорят, что можно делать перепрошивку обычным способом через SPI.
А чем по Вашему отличается "нормальный программатор" от СОМовского? У него сигналы другие? Или команды другие? Команды стандартные, сигналы стандартные. Все это подробненько описано у производителя, т.е. Атмел. Или Вы точно не знаете? СОМовским программатором у меня прошивались все AVR, от Tiny15 до Mega1280.

Цитата(sgs @ Nov 22 2016, 10:26) *
Стоит попробовать Parallel Programming. Видимо, при ICP программировании были затронуты какие-то не те фьюзы...

Спросил уже почти у всех знакомых - параллельного программатора пока не нашел. Было бы интересно попробовать. Вообще пишут, что в Ардуино лок-биты не активны. Зачем засекречивать программу, которая в открытых ресурсах Ардуино?
V_G
Цитата(krian @ Nov 23 2016, 04:13) *
Ардуиновские мануалы говорят, что можно делать перепрошивку обычным способом через SPI.
А чем по Вашему отличается "нормальный программатор" от СОМовского? У него сигналы другие? Или команды другие? Команды стандартные, сигналы стандартные. Все это подробненько описано у производителя, т.е. Атмел. Или Вы точно не знаете? СОМовским программатором у меня прошивались все AVR, от Tiny15 до Mega1280.

Вы в своих постах смешиваете 3 разных и независимых интерфейса: компьютер-программатор, программатор-МК и компьютер-МК.
Интерфейс "компьютер-программатор" может быть любым, который задал разработчик программатора. В большинстве случаев это СОM или USB, он меня абсолютно не интересует, не должен интересовать и Вас, рассуждения о нем лишь затуманивают тему.
Интерфейс "программатор-МК" действительно жестко задается Атмелом для их контроллеров, в Вашем случае возможны только 2 варианта: параллельный и последовательный (SPI). Никакой "прошивки через СОМ-порт" там нет и в помине, не путайте ни себя, ни других.
Интерфейс "компьютер-МК" возможен только при наличии в памяти МК бутлоадера (загрузчика), реализующего функции self-programming из даташита МК, и тут как раз есть множество ограничений. Но только тут можно корректно говорить о "прошивке через СОМ-порт", если бутлоадер поддерживает этот интерфейс.
Скорее всего, в Ардуиновском варианте речь идет о последнем варианте, но тогда я не понимаю насчет декларированной прошивки по SPI без использования внешнего программатора. Точнее сказать, можно в принципе заставить дергаться ножки COM-порта по временной диаграмме SPI, и подать соответствующие сигналы через преобразователь уровня на ножки МК. Но такое решение - потенциально ужасно глючное, зависящее от установленной на компьютере операционки и от аппаратуры.
sgs
Возможно, поможет статья "Восстановление конфигурации Fuse-битов микроконтроллеров семейства ATmega AVR (HVPP)" http://www.rlocman.ru/shem/schematics.html?di=65084
Это - "скорая помощь", а не полноценный параллельный программатор. Но вполне помогает вернуться к заводским установкам.
aiwa
Цитата(krian @ Nov 22 2016, 20:13) *
Спросил уже почти у всех знакомых - параллельного программатора пока не нашел. Было бы интересно попробовать. Вообще пишут, что в Ардуино лок-биты не активны. Зачем засекречивать программу, которая в открытых ресурсах Ардуино?

Параллельный программатор - большая редкость по сравнению с последовательным.
И с большой долей вероятности Вам вполне хватит последовательного.
Но для использования любого из этих программаторов Вам, по видимому, придется припаиваться к соответсвующим ножкам микроконтроллера.
При использовании последовательного программатора на 168-й меге это PB3 (MOSI), PB4 (MISO), PB5 (SLK), PC6 (RESET).
Посмотрите на своей плате как они задействованы: вдруг Вам повезет и разработчики предусмотрели разъем для перепрошивки.
aiwa
Цитата(hsoft @ Nov 23 2016, 07:31) *
Mega168 по умолчанию содержит загрузчик по USB ....

?

Вы что-то путаете.
По даташиту (http://www.atmel.com/Images/Atmel-2545-8-bit-AVR-Microcontroller-ATmega48-88-168_Datasheet.pdf) есть две возможности полноценной перепрошивки:

1-й. С помощью параллельного программатора (32.6. Parallel Programming Parameters, Pin Mapping, and Commands)
2-й. С помощью последовательного программатора (32.8. Serial Downloading)

3-й способ - (30. Self-Programming the Flash) - это написание собственного загрузчика и прошивка его одним из двух вышеуказанных.
Вот этот загрузчик у аурдины и "прошивает" программы "через COM".

А по жизни вполне хватает и последовательного программатора. Параллельный программатор - он как сурок: его никто не видел, но он есть.
sgs
Цитата(aiwa @ Nov 23 2016, 10:00) *
А по жизни вполне хватает и последовательного программатора. Параллельный программатор - он как сурок: его никто не видел, но он есть.


Да нет, это Вы путаете. Достаточно установить бит SPIEN, как последовательный программатор становится бесполезным. Кстати, сброс бита SELFPRGEN аналогично запрещает самопрограммирование...
Сергей Борщ
QUOTE (sgs @ Nov 23 2016, 10:21) *
Достаточно установить бит SPIEN, как последовательный программатор становится бесполезным.
Да нет, это вы путаете - этот бит последовательным программатором сбросить(! иначе бы он назывался не xxxEN, а xxxDSBL. "Сбросить", "распрограммировать" в контексте fuses означает установка бита в единицу) невозможно. А вот если установить (прописать 0) в RSTDSBL - то да, только параллельный программатор спасет.
sgs
Цитата(Сергей Борщ @ Nov 23 2016, 11:29) *
Да нет, это вы путаете - этот бит последовательным программатором сбросить ... невозможно. А вот если установить (прописать 0) в RSTDSBL - то да, только параллельный программатор спасет.

Я и не утверждал, что это можно сделать SPI программированием. Но в целом - что в лоб, что по лбу - без нормального программатора или хотя бы STK500 привести контроллер в чувство затруднительно...
aiwa
Цитата(hsoft @ Nov 23 2016, 09:39) *
Сколько имел дело с AVRками, пришел к одному выводу, если собираешься с ними иметь дело больше чем на один проект безусловно надо купить за любые
деньги честный параллельный программатор.

Я бы, наоборот, посоветовал бы сэкономить деньги на дорогом программаторе.
Во-первых, из-за успешной конкуренции со стороны развивающихся АРМ-ок по сравнению с притормозившем экс-Атмеле.
Во-вторых, из-за преувеличенной необходимости иметь такой программатор. За десять лет наша фирма, сидящая на AVR, так и не сподобилась приобрести или спаять последовательный программатор.
Сергей Борщ
QUOTE (hsoft @ Nov 23 2016, 10:39) *
если собираешься с ними иметь дело больше чем на один проект безусловно надо купить за любые
деньги честный параллельный программатор.
Работаю с ними уже лет 16, параллельный программатор использовал один раз в самом начале. Во-первых потому, что достаточно один раз наступить на грабли. Во-вторых - потому что все микросхемы использую только для поверхностного монтажа и мне проще сдуть и выкинуть микросхему, чем припаивать к ней двадцать соплей. Все 16 лет мне с головой хватало 6-контактного разъема для внутрисхемного последовательного программирования.
krian
Цитата(aiwa @ Nov 23 2016, 08:45) *
Но для использования любого из этих программаторов Вам, по видимому, придется припаиваться к соответсвующим ножкам микроконтроллера.
При использовании последовательного программатора на 168-й меге это PB3 (MOSI), PB4 (MISO), PB5 (SLK), PC6 (RESET).
Посмотрите на своей плате как они задействованы: вдруг Вам повезет и разработчики предусмотрели разъем для перепрошивки.


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

Цитата(V_G @ Nov 23 2016, 05:08) *
Никакой "прошивки через СОМ-порт" там нет и в помине, не путайте ни себя, ни других.


Я и не собирался никого "путать". Все, что вы пишете, мне известно. А меня вы не правильно поняли. Ну не буду же я расписывать все подробности. Если бы мы все имели возможность покупать дорогие программаторы.... Но я уже больше 10 лет использую СОМовский и до настоящего момента никаких проблем не возникало. Через последовательный программатор покруче моего я уже пробовал. Безрезультатно. Все программы одинаково прошиваются и СОМовским и тем, который со своим процессором. Разница во времени загрузки.
Я, кстати, попробовал перепрошить эту плату через загрузчик при помощи ардуиновской программы. Получилось. Однако же, не нужен мне ардуиновский загрузчик!
И я не понимаю, почему у меня не стирается весь кристалл. Ведь по каманде ЭРАЙС должно все полностью очищаться. Какие бы фьюзы и локи там не стояли. Если, конечно, SPIEN=0.

Цитата(sgs @ Nov 23 2016, 08:32) *
Возможно, поможет статья "Восстановление конфигурации Fuse-битов микроконтроллеров семейства ATmega AVR (HVPP)" http://www.rlocman.ru/shem/schematics.html?di=65084
Это - "скорая помощь", а не полноценный параллельный программатор. Но вполне помогает вернуться к заводским установкам.


Спасибо. Я уже нашел такое устройство, но на другом сайте. Называется AVR fuse doctor. Попытаюсь собрать его на макетке. Правда Мега8 у меня сейчас нет. Но я хочу попробовать зашить НЕХ файл для меги8 в мегу16, которая у меня на макетке стоит. У них адреса регистров и портов совпадают, поэтому надеюсь, что заработает. Атмел же пишет, что у него совместимость от младших к старшим. Вот и попробую.
Сергей Борщ
QUOTE (krian @ Nov 23 2016, 21:41) *
У них адреса регистров и портов совпадают
Обратите внимание на адреса обработчиков прерываний.
aiwa
Цитата(krian @ Nov 23 2016, 20:41) *
Там все эти ноги выведены на внешние выводы. Так что в этом "повезло". Проблема как раз в том, что через них ничего не программируется и даже не стирается полностью. Иначе, я бы и на форум с вопросами не выходил.

И я не понимаю, почему у меня не стирается весь кристалл.

Так у Вас он вообще не стирается, так как, похоже, что отсутствует полноценный процесс обмена между PonyProg-ом и мегой.
Критерием этого является процесс чтения, результатом которого были установленные лок-биты и содержимое "FF только в первых двух строчках, а дальше какая-то информация". При корректном чтении этого не может быть в принципе: либо установленные лок-биты и содержимое "1, 2, 3, 4, 5, 6, ...." - номер считываемого байта,
либо сброшенный лок-бит, позволяющий считывать содержимое отличное от счетчика.
А так как, Вы успешно перепрошиваете 16-ю, то корень зла скорее всего находится или на самой плате (к примеру некачественный пропой или кз дорожек) или в самой меге в виде подгоревшего порта или дефектного кристалла.
ucMike
Может светодиод D3, подключенный к SCK, мешает общению программатору.

Схема - www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf
pavel-pervomaysk
Жесть!, 10 лет и работать только в паралельном режиме.
Скорее всего там только сборкой занимаются.
Не представляю себе такую отладку на Mega в QFP32-100 с плотным обвесом.

Программатор через COM + стабилитроны (конипрог) на удачу.
У меня STK500 USB By Petka иногда чудеса творит на длинном шлейфе biggrin.gif

В плане протекта мое мнение.
Кто-то может сказать, что в паралельном режиме они ставят максимум защиты, RSTDSBL; SPIEN; но хочу Вас успокоить, все это бесполезно и никак на защиту не влияет.
В итоге + 1 нога RST (очень хорошо только для ATtiny13) и куча головняка для ATmega.
aiwa
Цитата(pavel-pervomaysk @ Nov 24 2016, 11:03) *
Жесть!, 10 лет и работать только в паралельном режиме.

Жесть! Из контекста понятно, что там простая опечятка.
krian
Цитата(ucMike @ Nov 24 2016, 09:45) *
Может светодиод D3, подключенный к SCK, мешает общению программатору.

Схема - www.arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf

Светодиод я отключал. Не помогало.

Цитата(Сергей Борщ @ Nov 24 2016, 01:42) *
Обратите внимание на адреса обработчиков прерываний.


Да, про вектора я не подумал. Они разные. Поэтому на меге 16 может и не работать.
zltigo
QUOTE (aiwa @ Nov 23 2016, 08:00) *
А по жизни вполне хватает и последовательного программатора. Параллельный программатор - он как сурок: его никто не видел, но он есть.

С "не видел" могу помочь - в приложении параллельный программатор и макроме из проводов для подключения. Делалось с проклятиями лет 15 назад для стирания залоченной прошивки одного промышленного изделия.
Проклятия были столь сильны, что это изделие все эти годы хранится sm.gif
krian
Цитата(aiwa @ Nov 24 2016, 04:03) *
Так у Вас он вообще не стирается, так как, похоже, что отсутствует полноценный процесс обмена между PonyProg-ом и мегой.
Критерием этого является процесс чтения, результатом которого были установленные лок-биты и содержимое "FF только в первых двух строчках, а дальше какая-то информация". При корректном чтении этого не может быть в принципе: либо установленные лок-биты и содержимое "1, 2, 3, 4, 5, 6, ...." - номер считываемого байта,
либо сброшенный лок-бит, позволяющий считывать содержимое отличное от счетчика.
А так как, Вы успешно перепрошиваете 16-ю, то корень зла скорее всего находится или на самой плате (к примеру некачественный пропой или кз дорожек) или в самой меге в виде подгоревшего порта или дефектного кристалла.

Вы правы. Я сразу заметил, что обмен какой-то странный. С первого раза операции, как правило, не выполняются, только со второго или с третьего. Дефектный кристалл или плата - маловероятно. У меня несколько таких плат. Они же не могут быть с одинаковыми дефектами у разных производителей. Пони Прог их хотя бы видит. Алгоритм Билдер и CVAVR пишут сразу, что кристалл не доступен. Т.к. раньше в моей практике такого не было, я тоже сразу подумал, что кристалл дефектный. Взял другую плату, она другого производителя. С ней произошло то же самое. В общем обе испортились.
Интересно то, что те платы, которые я не обрабатывал ПониПрогом, удалось запрограммировать средствами Ардуино через его загрузчик. Те, которые я пытался стирать ПониПогом теперь не обрабатываются и с помощью Ардуино. Если бы я раньше знал.... Тогда и прошивал бы через Ардуино. Но там же было написано, что можно и через SPI. Ардуино еще надо было найти и подготовить, а SPI всегда под рукой, поэтому я воспользовался им.
aiwa
Цитата(krian @ Nov 24 2016, 18:42) *
Дефектный кристалл или плата - маловероятно.

Цепочка прошивки состоит из 4 звеньев:
1). управляющей прошивкой программы - PonyProg или другая, сидящая на СОМ-порту, например 1С-бухгалтерия.
2). кабеля "serial hardware interface" или, в просторечьи, последовательного программатора СОМ - разъем на плате.
3). дрожки от разъема на плате к кристаллу.
4). сам кристалл.

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

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

Цитата(krian @ Nov 24 2016, 18:42) *
Взял другую плату, она другого производителя. С ней произошло то же самое. В общем обе испортились.

Не факт что испортились.
Возникает вопрос как в этом случае успешно прошивается мега16.

Цитата(krian @ Nov 24 2016, 18:42) *
Но там же было написано, что можно и через SPI.

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

ucMike
Отвлекаясь от темы:
Если разглядывать установленный IDE Arduino, то можно найти загрузчик в <путь к ардуино>/hardware/arduino/bootloadres/Atmega/ ATmegaBOOT_168.c Там же варианты готовых HEX-файлов .
Загрузчик сидит в функции main.c и скорее всего каждый раз переписывается при программирования камня.


P.S В <ардуино>/hardware/cores/arduino исходники для USB
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.