Bagaimana cara membakar bootloader?

15

Saya diperintahkan untuk "membakar bootloader" ke Arduino saya untuk memperbaiki kesalahan yang saya dapatkan. Bagaimana saya bisa melakukan ini? (Dan apa sebenarnya bootloader itu?)

The Guy with The Hat
sumber
Sangat mudah untuk membakar bootloader ke Arduino asalkan Anda mengikuti langkah yang benar. Video ini mungkin membantu Anda: YouTube - Cara Membakar Bootloader Ke ATMEGA328P-AU (SMD) | Homemade ARDUINO MINI
Sandesh HS

Jawaban:

15

Bootloader adalah program kecil yang (hampir) selalu menggunakan Arduino. Ia mengelola mengunggah dan memulai sketsa yang Anda buat, dan mengedipkan pin 13 LED setiap kali papan disetel ulang.


Untuk membakar bootloader:

  1. Dapatkan AVR ISP , USBtinyISP , ParallelProgrammer , atau board Arduino lainnya . Ini akan menjadi ISP Anda.
  2. Kecuali diinstruksikan sebaliknya, hubungkan ISP ke pin ICSP di papan Anda.
  3. Berikan daya pada papan Anda dengan kabel USB atau catu daya eksternal.
  4. Buka IDE Arduino.
  5. Pastikan Anda memilih papan yang benar di mana Anda membakar di Tools ► Board ►dalam IDE. Periksa ulang ini meskipun Anda dapat mengunggah program dengan benar; mengunggah tidak selalu membutuhkan papan yang tepat.
  6. Pilih programmer yang sesuai di Tools ► Programmer ►.
  7. Klik Tools ► Burn Bootloader, dan tunggu. Seharusnya tidak lebih dari satu menit, dan seringkali hanya membutuhkan beberapa detik.

Sumber:

The Guy with The Hat
sumber
1
AVRISP cukup banyak EOL (akhir hidup) pada saat ini. Minimal, Anda menginginkan AVRISPmk2. Ada juga banyak alat lain yang lebih menarik (misalnya AVR One!). Anda mungkin harus mengatakan{line 1} or other dedicated ISP programmer.
Connor Wolf
Di papan seperti Arduino Yun, setiap kali Anda "mengunggah melalui wifi", Anda membakar bootloader yang digabungkan dengan sketsa Anda. Ini berkat fakta bahwa CPU Linux terhubung ke AVR MCU melalui SPI, sehingga Anda dapat meniru ISP dengan perangkat lunak.
Federico Fissore
@FedericoFissore - apakah itu sebabnya butuh waktu lama?
TheDoctor
Ya, itu dan fakta bahwa bitbanging GPIO lebih lambat. Ada upaya berkelanjutan untuk mempercepatnya.
Federico Fissore
8

Apa itu bootloader?

Dan apa sebenarnya bootloader itu?

Bootloader adalah sepotong kecil kode yang berada di bagian "tinggi" dari memori program. Biasanya itu tidak terhapus saat Anda mengunggah sketsa baru. Tujuannya agar diaktifkan segera setelah reset (sekering dikonfigurasikan untuk memulai kode pada alamat bootloader daripada alamat 0x0000). Bootloader akan menunggu dalam waktu singkat (seperti satu detik) untuk melihat apakah data "pemrograman" masuk pada port serial.

  • Jika demikian, ia membaca data itu, dan menerjemahkannya untuk memprogram ulang sisa memori flash. Bekerja bersama dengan program pengunggahan (biasanya avrdude) sketsa baru dikirim melalui port serial. Bootloader menghapus halaman memori flash, dan menggantinya dengan kode baru. Setelah selesai, ia mengeksekusi kode baru.

  • Jika tidak ada instruksi yang datang, bootloader melompat ke alamat 0x0000 untuk menjalankan sketsa yang ada di papan tulis.


Bagaimana cara mengganti bootloader

Metode alternatif untuk memprogram bootloader adalah dengan menggunakan sketsa yang saya tulis beberapa waktu lalu yang berjalan pada:

  • Uno (atau serupa, seperti Duemilanove)
  • Leonardo
  • Mega2560

Papan "pemrograman" menjalankan sketsa yang berisi bootloader untuk sejumlah papan yang dikodekan ke dalamnya. Anda menghubungkan papan pemrograman ke papan target (papan menginginkan bootloader) dengan 6 kabel kait seperti yang ditunjukkan.

Programmer bootloader untuk Uno

Foto itu menggambarkan satu Uno memprogram yang lain.

Anda menjalankan sketsa (beroperasi melalui Serial Monitor untuk memberikannya perintah). Pertama mengidentifikasi chip target:

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 ...

Anda menekan G untuk memprogramnya.

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 ...

Untuk Uno ini membutuhkan satu detik. Untuk memprogram Mega2560 membutuhkan waktu 3 detik.

Instruksi lengkap di programmer bootmeer Atmega

Kode dapat diunduh dari Github: nickgammon / arduino_sketches

Nick Gammon
sumber
Apakah Anda harus memilih jenis chip yang Anda bakar (Tools-> Board ..)? Papan apa yang saya pilih ketika saya membakar bootloader untuk berdiri sendiri?
Camilo
Anda memilih jenis papan yang Anda gunakan untuk membakar bootloader di IDE. Sketsa bootloader mendeteksi secara otomatis tipe papan target.
Nick Gammon