Я получил неправильно подписанный ATmega328-PU. Как я могу это исправить?

Когда-то в прошлом я прожигал загрузчики на новую партию из четырех ATmega328-PU с помощью Arduino IDE (обратите внимание, что после 328 нет P — это немного более дешевая не-picopower версия MCU, не путать с ATmega328P-PU с P), и был удивлен следующим сообщением от avrdude:

avrdude: Подпись устройства = 0x1e950F
avrdude: Ожидаемая подпись для ATMEGA328: 1E 95 14
Перепроверьте чип или используйте -F, чтобы переопределить эту проверку.

Это означает, что avrdude думал, что чип не соответствует заявленному на этикетке. Затем я изменил тип микросхемы в своей Arduino IDE на ATmega328P-PU, и avrdude без проблем сжег загрузчик. Это означает, что чип был помечен как один MCU, а внутренне он реагировал как другой, немного отличающийся.

Я хотел бы знать следующее:

  • Насколько редко это событие? У кого-нибудь был подобный опыт? (Исходный вопрос, не по теме)

  • Можно ли это исправить? Как исправить подпись, чтобы avrdude правильно распознавал чип?

Это кросс-пост от EE.SE. Я разместил этот вопрос там, но он не привлек особого внимания, поэтому я хотел узнать, есть ли у кого-нибудь из нашего сообщества подобный опыт.

, 👍13

Обсуждение

Похоже, что ваш поставщик просто ошибочно обозначил некоторые 328P (что и представляет эта подпись) как 328., @microtherion


3 ответа


4

Просматривая сайт sparkfun, я нашел несколько новостных сообщений, в которых рассказывается об их борьбе с чипами с неправильной маркировкой. Вот некоторые из них:

  • https://www.sparkfun.com/news/350
  • https://www.sparkfun.com/news/384
  • https://www.sparkfun.com/news/364

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

В другой статье они вскрыли несколько подозрительных ИС от Atmel и обнаружили внутри полупроводниковую кремниевую пластину ON. Чипы не были функциональными ATmega, но в них был кремний, в отличие от других.

,

Можете ли вы немного конкретизировать этот ответ? Обобщение статей, на которые вы ссылались, было бы хорошим началом — прямо сейчас, если sparkfun по какой-либо причине выйдет из строя, ваш ответ будет бесполезен., @Shog9

@ Shog9 Почему? Вопрос далеко не в основе. Этот ответ представляет собой сводку случаев, когда люди получали чипы с неправильной маркировкой (*по сути, люди делятся опытом*). Кому это поможет?, @asheeshr

Я мог бы спросить вас о том же, @AsheeshR - зачем беспокоиться об ответе, когда проблема заключается в вопросе? В любом случае, спасибо за подробности, TheDoctor., @Shog9


3

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

В любом случае способ установки байтов подписи контроллера следующий (не проверено, у меня нет запасного AVR):

avrdude -p atmega328 -c arduino -P /dev/ttyUSB003 -b 19200 -v -U signature:w:0x1E,0x95,0x14:m
,

Я знаю, что это очень поздно, но я не думаю, что это хорошая идея оставить этот принятый ответ без возражений: подпись на atmega328 недоступна для записи, и, насколько мне известно, подпись недоступна для записи на ЛЮБОЙ atmega или аттини., @microtherion

Ради интереса я попробовал описанный выше подход, который avrdude в некотором смысле принял: avrdude: запись подписи (3 байта) - однако не получилось: avrdude: ошибка проверки, первое несоответствие в байте 0x0002: 0x14 != 0x0f, @Nick Gammon


1

Существует несколько различных вариантов ATMega328. Наиболее часто встречающийся в Ардуино Uno (и др.) — это ATMega328P, который представляет собой «пикомощность» Atmel. версия; у этого есть сигнатура 0x1E950F, которую AVRDude ожидает, когда ему поручено программировать Arduino Uno. Вот и пойми.

Реже встречаются базовая модель ATMega328 (без суффикса) и ATMega328PU, обе из которых дают сигнатуру 0x1e9514 вместо ожидаемой 0x1E950F.

Что касается общности... это зависит от толпы, с которой вы бежите. Если вы насквозь используете Arduino, никогда не используйте платы, которые не окрашены в бирюзовый цвет, тогда вам крайне редко удастся найти не-ATMega328P. Если, с другой стороны, вы работаете в моей банде и строите всевозможные крутые вещи на платах забавных цветов, которые не имеют разнесенного расстояния между контактами заголовка в одном месте ... тогда очень часто можно получить не-p '328. .

Есть обходные пути. Некоторое время существовал вариант ArduinoISP_Multi, который преобразовывал подпись 0x1e9514 в подпись 0x1E950F, позволяя вам радостно программировать ваши макетные или иным образом не бирюзовые платы 328 точно так, как если бы они были подлинными Arduino Unos. По какой-то причине этот "набросок" больше не может быть найден.

Вы также можете отредактировать avrdude.conf (с резервной копией, пожалуйста!) таким образом, чтобы он (AVRDude) ожидал подписи, которую выкашливает ваш '328. Резервное копирование особенно важно, потому что когда-нибудь вы захотите запрограммировать «настоящий бирюзовый». Файл avrdude.conf можно найти в папке установки Arduino в ...\hardware\tools\avr\etc.

ИЛИ... подождите! Есть больше! Все за одни деньги! Вы также можете написать свой собственный аппаратный профиль для плат, отличных от P 328, и поместить его в каталог аппаратного обеспечения «альбома для скетчей» Arduino, а затем использовать его в качестве пользовательского определения платы. Ой, черт... это не так уж и сложно! Действительно! Я написал несколько из них для собственного дизайна платы.

,