Если слетает прошивка - лечим склероз у Arduino

Post Reply
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Если слетает прошивка - лечим склероз у Arduino

Post by UR5FFR »

Добрые китайцы продали партию клонов Arduino Nano V3 у которых самопроизвольно слетает прошивка при работе. Ресерч этой проблемы привел меня к мысли что такое возможно при неправильной установке фьюзов отвечающих за контроль питания (BOD - Brown-out detector level). Эти биты задают предельное минимальное напряжение питания. При его дальнейшем снижении контроллер отклчается. Если эти биты не выставлены или выставлены неправильно то при понижении напряжения питания контроллер будет работать в нештатном режиме, т.к. тактовая частота превышает предельно допустимую для пониженного напряжения питания. А это приводит к "слету" прошивки.

Для чтения текущих фьюзов был составлен простенький скетч ReadFuseBits
ReadFuseBits.zip
скетч для чтения фьюзов
(588 Bytes) Downloaded 1265 times
Скетч читает значение фьюзов и выдает его в ком-порт. После заливки его в мониторе com-порта я увидел вот что:

Code: Select all

Low:  0xFF
High: 0xDA
Ext:  0xFF
Для плат Arduino на Atmega328P должны быть такие значения фьюзов:

Code: Select all

Low:  0xFF
High: 0xDA
Ext:  0xF5
Тоесть фьюзы extended установлены в 0xFF - контроль питания отключен.

Code: Select all

Небольшая ремарка по поводу значения фьюза Ext. Это байт в котором реально используются только младшие 3 бита. Значения остальных битов могут варьироваться. Например 0xFD это тоже валидное значение для ардуины. Поэтому надо смотреть на младшие три бита - там должна быть установлены 0й и 2й биты.
Для "лечения" необходимо перепрошить фьюзы. Для этого я использовал программатор USBASP
usbasp interface 01.jpg
usbasp interface 01.jpg (94.07 KiB) Viewed 16427 times
Подключаем его к Arduino соединяя одноименные выводы программатора с выводами платы Arduino (/RES -> Reset/RST). Устанавливаем в системе драйвер для USBASP (google).
Для прошивки фьюзов удобно использовать GUI консоль для AVRDude. В моем случае дело осложнилось тем, что на платах были установлены более новые контроллеры ATMega328PB, которые имеют другую сигнатуру, из-за чего софт скачанный в сети работать не захотел. Пришлось немного подшаманить и подправить конфиги. Заодно добавил режим пониженной тактовой частоты при прошивке, т.к. дефолтное значение не соответствует factory settings, что приводит к отказы/нестабильности при прошивке.

Итак подключаем контроллер к USBASP, запускаем AVRDUDEPROG. Выбираем правильный тип контроллера и программатор USBAspSlow. Фьюзы выбираем "прямые"
prog_fuse_1.png
prog_fuse_1.png (48.44 KiB) Viewed 16425 times
Переходим на страницу Fuses и нажимаем кнопку "Чтение"
prog_fuse_2.png
prog_fuse_2.png (42.71 KiB) Viewed 16425 times
Если все ок то появится надпись
prog_fuse_3.png
prog_fuse_3.png (53.79 KiB) Viewed 16425 times
И отобразаятся текущие прошитые значения фьюзов
prog_fuse_4.png
prog_fuse_4.png (48.88 KiB) Viewed 16425 times
Выставляем extended fuse в значение 0x05
prog_fuse_5.png
prog_fuse_5.png (48.7 KiB) Viewed 16425 times
И нажимаем кнопку "Программирование"
prog_fuse_6.png
prog_fuse_6.png (45.86 KiB) Viewed 16425 times
prog_fuse_7.png
prog_fuse_7.png (57.42 KiB) Viewed 16425 times
Отключаем контроллер от программатора. Все - мы изменили фьюзы отвечающие за контроль питания. Для проверки результата можно еще раз запустить скетч отображающий фьюзы и убедиться что все в порядке.

В атаче версия AVRDUDEPROG с модифицированными конфигами (пониженная частота и поддержка ATMega328PB)
AVRDude_slow_mod.zip
(812.9 KiB) Downloaded 1026 times
Полезные ссылки
1. Arduino / ATmega 328P fuse settings
2. Upgrade to ATMega328pb
Alex 4N
Posts: 15
Joined: 29 Mar 2018, 22:13
Позывной: RN4NU

Re: Если слетает прошивка - лечим склероз у Arduino

Post by Alex 4N »

Андрей,здравствуйте.Не могли бы еще раз залить файл с исправленными конфигами?С уважением.
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Если слетает прошивка - лечим склероз у Arduino

Post by UR5FFR »

Перезалил
Alex 4N
Posts: 15
Joined: 29 Mar 2018, 22:13
Позывной: RN4NU

Re: Если слетает прошивка - лечим склероз у Arduino

Post by Alex 4N »

Благодарю!Андрей,не пробовали ли вы прошить обчный контролер,типа меги 328PU ,чтоб он стал ардуиной,имея только чип и программатор?У меня сейчас такая ситуация.Кварц на 16.Прошил скетч от nanovfo,не запустилось.Думаю,надо мудрить с фьюзами.Шил оптибут батником через avrdude.В ечером скину сюда,если интересно.У ж очень хочется своими руками сделать ардуину :)
UR5FFR
Site Admin
Posts: 2187
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Если слетает прошивка - лечим склероз у Arduino

Post by UR5FFR »

Так это в интернетах поищите - люди както шьют и делают. Я такого не делал - не было необходимости
Alex 4N
Posts: 15
Joined: 29 Mar 2018, 22:13
Позывной: RN4NU

Re: Если слетает прошивка - лечим склероз у Arduino

Post by Alex 4N »

Таки добил.Сделал ардуину из Atmega328PU.Воспользовался вашими советами по отношению фьюзов и питания,Андрей.Спасибо за информацию!Кварц на 16МГц,питание 3.3В,полет нормальный.
Attachments
VFO.jpg
Post Reply