UR5FFR

Радиолюбительские конструкции и программы
It is currently 20 Oct 2018, 11:36

All times are UTC + 2 hours




Post new topic Reply to topic  [ 1 post ] 
Author Message
PostPosted: 12 Aug 2018, 19:14 
Offline
Site Admin

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

Для чтения текущих фьюзов был составлен простенький скетч ReadFuseBits
Attachment:
File comment: скетч для чтения фьюзов
ReadFuseBits.zip [588 Bytes]
Downloaded 54 times

Скетч читает значение фьюзов и выдает его в ком-порт. После заливки его в мониторе com-порта я увидел вот что:

Code:
Low:  0xFF
High: 0xDA
Ext:  0xFF


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

Code:
Low:  0xFF
High: 0xDA
Ext:  0xF5


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

Для "лечения" необходимо перепрошить фьюзы. Для этого я использовал программатор USBASP

Attachment:
usbasp interface 01.jpg
usbasp interface 01.jpg [ 94.07 KiB | Viewed 565 times ]


Подключаем его к Arduino соединяя одноименные выводы программатора с выводами платы Arduino (/RES -> Reset/RST). Устанавливаем в системе драйвер для USBASP (google).
Для прошивки фьюзов удобно использовать GUI консоль для AVRDude. В моем случае дело осложнилось тем, что на платах были установлены более новые контроллеры ATMega328PB, которые имеют другую сигнатуру, из-за чего софт скачанный в сети работать не захотел. Пришлось немного подшаманить и подправить конфиги. Заодно добавил режим пониженной тактовой частоты при прошивке, т.к. дефолтное значение не соответствует factory settings, что приводит к отказы/нестабильности при прошивке.

Итак подключаем контроллер к USBASP, запускаем AVRDUDEPROG. Выбираем правильный тип контроллера и программатор USBAspSlow. Фьюзы выбираем "прямые"

Attachment:
prog_fuse_1.png
prog_fuse_1.png [ 48.44 KiB | Viewed 563 times ]


Переходим на страницу Fuses и нажимаем кнопку "Чтение"

Attachment:
prog_fuse_2.png
prog_fuse_2.png [ 42.71 KiB | Viewed 563 times ]


Если все ок то появится надпись

Attachment:
prog_fuse_3.png
prog_fuse_3.png [ 53.79 KiB | Viewed 563 times ]


И отобразаятся текущие прошитые значения фьюзов

Attachment:
prog_fuse_4.png
prog_fuse_4.png [ 48.88 KiB | Viewed 563 times ]


Выставляем extended fuse в значение 0x05

Attachment:
prog_fuse_5.png
prog_fuse_5.png [ 48.7 KiB | Viewed 563 times ]


И нажимаем кнопку "Программирование"

Attachment:
prog_fuse_6.png
prog_fuse_6.png [ 45.86 KiB | Viewed 563 times ]


Attachment:
prog_fuse_7.png
prog_fuse_7.png [ 57.42 KiB | Viewed 563 times ]


Отключаем контроллер от программатора. Все - мы изменили фьюзы отвечающие за контроль питания. Для проверки результата можно еще раз запустить скетч отображающий фьюзы и убедиться что все в порядке.

В атаче версия AVRDUDEPROG с модифицированными конфигами (пониженная частота и поддержка ATMega328PB)
Attachment:
avrdudeprog33_slow_mod.zip [813.26 KiB]
Downloaded 55 times


Полезные ссылки
1. Arduino / ATmega 328P fuse settings
2. Upgrade to ATMega328pb


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC + 2 hours


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group