Мені доручили "спалити завантажувач" моєму Arduino, щоб виправити помилку, яку я отримував. Як я можу це зробити? (А який саме завантажувач?)
Мені доручили "спалити завантажувач" моєму Arduino, щоб виправити помилку, яку я отримував. Як я можу це зробити? (А який саме завантажувач?)
Відповіді:
Завантажувач - це невелика програма, яка (майже) завжди є на Arduino. Він керує завантаженням і запуском ескізів, які ви робите, і блимає 13-контактним світлодіодним штифтом щоразу, коли плата скидається.
Щоб записати завантажувач:
Tools ► Board ►
в IDE. Двічі перевірте це, навіть якщо ви могли правильно завантажити програми; для завантаження не завжди потрібна потрібна дошка.Tools ► Programmer ►
.Tools ► Burn Bootloader
і чекайте. Це не повинно зайняти більше хвилини, а часто займає лише кілька секунд.Джерела:
{line 1} or other dedicated ISP programmer.
А який саме завантажувач?
Завантажувач - це невеликий фрагмент коду, що знаходиться у "високій" частині пам'яті програми. Зазвичай він не стирається під час завантаження нових ескізів. Її мета - активувати його відразу після скидання (запобіжники налаштовані для початку коду за адресою завантажувача, а не адреси 0x0000). Завантажувач завантаження зачекає недовго (наприклад, одну секунду), щоб побачити, чи надходять "програмуючі" дані на послідовний порт.
Якщо так, він зчитує ці дані та розшифровує їх для перепрограмування решти флеш-пам'яті. Працюючи спільно з програмою завантаження (зазвичай avrdude), новий ескіз надсилається через послідовний порт. Завантажувач видаляє сторінки флеш-пам'яті та замінює їх новим кодом. Після цього він виконує новий код.
Якщо ніяких інструкцій не надійде, завантажувач скаче на адресу 0x0000, щоб виконати існуючий ескіз на дошці.
Альтернативний метод програмування завантажувача - це використовувати ескіз, про який я писав деякий час тому, який працює на:
Дошка "програмування" виконує ескіз, який містить завантажувачі для ряду дощок, жорстко закодованих у нього. Ви підключаєте плату програмування до цільової плати (дошки, що бажає завантажувача) за допомогою 6 проводів підключення, як показано.
Ця конкретна фотографія ілюструє одну програмування Uno, іншу.
Ви запускаєте ескіз (працюючи через послідовний монітор, щоб давати йому команди). Спочатку він визначає цільовий чіп:
Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xCF
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...
Ви натискаєте G, щоб запрограмувати його.
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xCF
Done.
Type 'C' when ready to continue with another chip ...
Для Uno це займає одну секунду. Для програмування Mega2560 потрібно 3 секунди.
Детальні інструкції у програміста завантажувача Atmega
Код можна завантажити з Github: nickgammon / arduino_sketches