субота, 25 серпня 2018 р.

Слетает прошивка arduino при выключении/включении питания. Прошивка бутлоадера в arduino nano при помощи еще одного arduino nano.


Столкнулся с проблемой, которая заключается в том что на китайских arduino nano на контроллере MEGA328P слетает прошивка. Час то это обнаруживается при подаче питания на контроллер. Нашел способ бороться с этим. Заодно решил вопрос как залить новый bootloader в arduino nano.



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

01#include <avr/boot.h>
02#define SIGRD 5
03void setup(){
04Serial.begin(9600); 
05 Serial.print("Signatura= ");
06Serial.print(boot_signature_byte_get(0),HEX);
07Serial.print(boot_signature_byte_get(2),HEX);
08Serial.println(boot_signature_byte_get(4),HEX);
09Serial.print("Fuses(l/h/ext)= ");
10Serial.print(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS),HEX);
11Serial.print(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS),HEX);
12Serial.println(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS),HEX);
13}
14
15
16void loop(){}

Запустить Serial monitor, и получим результат:
Signatura= 1E9516
Fuses(l/h/ext)= FFDAFF

Ext байт отвечает за BOD (Brown-out detection). Значение FF означает что эта функция отключена. Что приводит к потенциальной возможности слета прошивки.

Чтобы изменить эти фюз биты, в самом простом случае, необходимо сменить бутлоадер.
Для смены бутлоадера необходим программатор. Сделаем программатор из ардуино.

Для превращения ардуино в программатор, в среде ардуино необходимо выбрать скетч Arduino ISP, и залить в ардуино. Эта ардуинка будет программатором.

Подключить этот программатор к неправильной ардуинке по схеме:
Если не прошивается, тогда добавляем конденсатор 10-100мкф между ногой rst и gnd программатора



В среде ардуино изменить программатор на Arduino as ISP: 
programmer

И прошить бутлоадер через меню при помощи команды "Записать загрузчик" или "Burn bootloader": Tools -> Burn Bootloader

ТАк же, в китайских ардуино стоит более дешевый чип, и его уникальный код (Signature) отличается от оригинального ардуино. В таком случае внизу окна мы увидим ошибку о невозможности загрузки. Для успешной заливки бутлоадера необходимо изменить файл конйигурации AVRDude, через который непосредственно и происходит программирование.
Заходим в папку с Arduino, и следуем по пути: ..\hardware\tools\avr\etc
  1. Делаем копию файла: avrdude.conf
  2. Открываем файл avrdude.conf в текстовом редакторе.
  3. Ищем: “0x1e 0x95 0x0F” (это уникальный код ATmega328P который используется в оригинальном ардуино)
  4. Изменяем на тот который получили с помощью скетча в начале статьи: “0x1e 0x95 0x16” (это уникальный код ATmega328PB)
  5. Сохраняем файл.
  6. Перезапускаем среду Arduino IDE
  7. Прошиваем бутлоадер как описано высше. 
  8. Восстанавливаем файл avrdude.conf из резервной копии, которую сделали в п.1.

Немає коментарів:

Дописати коментар