#1 2023-09-25 03:35:07

Kotofeev
Учасник
Зареєстрований: 2023-09-25
Повідомлень: 5

Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

Маю Ардуіно Нано Викоритовую VSCode і PlatformIO. Прошиваю я його за допомогою USBasp, тобто бутлоадер мені не потрібен, а от ватчдог мені дуже потрібен! Я хочу якось компілити і прошивати свою Нано через USBasp без бутлоадера. Намагався підставити пустий бутлоадер через platformio.ini строкою:
board_bootloader.file = C:UsersEugeneAppDataLocalArduino15packagesMiniCorehardwareavr2.2.2bootloadersemptyempty.hex

В цілому platformio.ini:
[env:nanoatmega328p]
platform = atmelavr
board = nanoatmega328p
framework = arduino
board_bootloader.file = C:/Users/Eugene/AppData/Local/Arduino15/packages/MiniCore/hardware/avr2.2.2/bootloaders/empty/empty.hex
board_build.f_cpu = 16000000L
upload_protocol = usbasp
upload_flags = -Pusb

Але це не допомагає. Дуже не хочу переносити заради цього проект на АрдуіноІДЕ. Допоможіть будь ласка. Дякую.

Остання редакція Kotofeev (2023-09-25 03:38:15)

Неактивний

#2 2023-09-25 09:20:36

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

Вам потрібно за допомогою ф'юзів відключити бутлоадер. Для цього спочатку читаєте поточні ф'юзи:

avrdude -c USBasp -p m328p -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h

Вводите отримані значення в калькулятор ф'юзів (виберіть свій процесор ATmega328P) і в ньому редагуєте (те, що вас цікавить - прибрати галочку з Boot Reset vector Enabled):
https://www.engbedded.com/fusecalc/

Калькулятор видасть значення, які можна підставити в наступну команду. Потім записуєте (значення підставляєте свої):

avrdude -c USBasp -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

Тут інструкція по використанню avrdude під віндою:
https://forum.arduino.ua/viewtopic.php?id=2904

Неактивний

#3 2023-09-25 20:40:46

Kotofeev
Учасник
Зареєстрований: 2023-09-25
Повідомлень: 5

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

Honey пише:

Вам потрібно за допомогою ф'юзів відключити бутлоадер. Для цього спочатку читаєте поточні ф'юзи:

avrdude -c USBasp -p m328p -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h

Вводите отримані значення в калькулятор ф'юзів (виберіть свій процесор ATmega328P) і в ньому редагуєте (те, що вас цікавить - прибрати галочку з Boot Reset vector Enabled):
https://www.engbedded.com/fusecalc/

Калькулятор видасть значення, які можна підставити в наступну команду. Потім записуєте (значення підставляєте свої):

avrdude -c USBasp -p m328p -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

Тут інструкція по використанню avrdude під віндою:
https://forum.arduino.ua/viewtopic.php?id=2904

Дякую. Але, нажаль, в моєму випадку це не допомогло! Як я розумію, Ви маєте наувазі біт BOOTRST, вірно? Спробував прошити його і 0 і 1 - немає різниці, всеодно програма після спрацювання вотчдога не ініціалізується нормально і не йде очікуваним шляхом (вотчдог ставлю на 8с, щоб встигнути помігати діодом після ініціалізації). Може знаєте ще якісь шляхи для обходу цього бутлоадера?

Неактивний

#4 2023-09-25 22:54:59

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

Ви попросили вимкнути бутлоадер, цей рецепт його правильно і повністю вимикає. Якщо ви прошили в область бутлоадера нулі, то це також спрацює, просто буде виконуватись 512 або 2048 разів команда NOP (це кілька десятків мікросекунд, ви їх і не помітите).
Те, що не працює вочдог - окреме питання. Викладайте код, як ви його ініціалізуєте, і яким шляхом ви очікуєте, щоб програма йшла.

Неактивний

#5 2023-09-26 00:47:08

Kotofeev
Учасник
Зареєстрований: 2023-09-25
Повідомлень: 5

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

Зробив собі отакий простенький тестовий код. Хочу, щоб світлодіод блимав постійно, тобто коли спарцьовує вотчдог, то щоб все знов відновлювалось автоматично, а зараз воно блимає тільки до спрацювання таймера вотчдог і потім все "темно".

#include <avr/wdt.h>

void setup() {

  wdt_disable();
  wdt_reset();

  pinMode(LED_BUILTIN, OUTPUT);

  wdt_enable(WDTO_8S);
}

void loop() {
  //wdt_reset();
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);                 
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);                       
}

Неактивний

#6 2023-09-26 09:44:21

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

І ф'юзи покажіть:
avrdude -c USBasp -p m328p -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h

Неактивний

#7 2023-09-26 14:05:20

Kotofeev
Учасник
Зареєстрований: 2023-09-25
Повідомлень: 5

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

C:UsersEugeneAppDataLocalArduino15packagesMiniCoretoolsavrdude7.1-ardu
ino.1bin>avrdude -c USBasp -p m328pb -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-
:h

avrdude error: cannot set sck period; please check for usbasp firmware update
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9516 (probably m328pb)
avrdude: reading lfuse memory ...
avrdude: writing output file <stdout>
0xff
avrdude: reading hfuse memory ...
avrdude: writing output file <stdout>
0xd6
avrdude: reading efuse memory ...
avrdude: writing output file <stdout>
0xf5

avrdude done.  Thank you.


Зараз в мене AtMega328pb, ос фьюзи з неї. Вже пробував і на АТмега168 - всеодно нормально вотчдог не працює.

Неактивний

#8 2023-09-26 15:16:45

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

А якщо вимкнути Boot Reset vector Enabled? тобто ось так:
avrdude -c USBasp -p m328pb -U hfuse:w:0xd7:m

PS: скомпілював і залив Ваш код на m168p - працює, як від нього і очікується.
Ф'юзи: -p m168p -U lfuse:w:0xff:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m
Прошивка: 1.hex світлодіод на PD2
Порівняйте, можливо Ваш компілятор щось від себе додає.

Неактивний

#9 2023-09-26 15:27:36

Kotofeev
Учасник
Зареєстрований: 2023-09-25
Повідомлень: 5

Re: Допоможіть обійти бутлоадер Arduino Nano в PlatformIO.

Зараз завелось на 328pb, але чому я так і не зрозумів.  Вирішив прошити через VSCode - отримав помилку веріфікації:
avrdude: 4660 bytes of flash written
avrdude: verifying flash memory against .piobuildpro16MHzatmega328firmware.hex:
avrdude: load data flash data from input file .piobuildpro16MHzatmega328firmware.hex:
avrdude: input file .piobuildpro16MHzatmega328firmware.hex contains 4660 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 2.49s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0002
         0x88 != 0x89
avrdude: verification error; content mismatch

avrdude: safemode: Fuses OK (E:F5, H:D6, L:FF)

avrdude done.  Thank you.

*** [upload] Error 1

Зайшов в АрдуіноІДЕ, натиснув "Burn bootloader", повернувся в VSCode і натиснув прошити - прошилось і веріфікувалось успішно, працює як і очікувалось - тобто пес його скидає і все нормально переініціалізується. Ну думаю магія. Зайшов в AVRDUDESS 2.14 (це графічна оболонка над AVRDUDE), обрав hex, що було згенеровано VSCode і прошив - не працює пес. Біти, як Ви радили виставлені , тобто bootrst = 0.   От тепер на робочому варіанті (де ініціалізація йде правильно) встановив біт  bootrst - працювати нормально перестало (що логічно).

Тобто висновки мої доволі дивні:
1. bootrst - працює, але перед цим повинен буди залитий "правильний" бутлоадер, інакше не працює.
2. VSCode чомусь не схотіло завантажувати бінарь, коли був прошитий "неправильний" бутлоадер.
3. AVRDUDESS при завантаженні хекса (згенерованого через PlatrformIO)  перетирає бутлоадер чи якось все ламає, що після цього не допомагає прошивка через VSCode, а треба знов робити "Burn bootloader" в  АрдуіноІДЕ.
4. Не бутлоадер, а кара якась)))

Остання редакція Kotofeev (2023-09-26 15:57:47)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму