Arduino sebagai ISP dan Arduino Bootloaders - TeachMeSoft

Arduino sebagai ISP dan Arduino Bootloaders

Arduino sebagai ISP dan Arduino Bootloaders

Apa yang membuat Arduino seperti apa? Banyak hal, tetapi salah satu yang paling penting adalah cara setiap papan Arduino mudah diprogram dengan Perangkat Lunak Arduino (IDE). Cukup menghubungkannya ke port USB komputer dan tekan ikon "Unggah" untuk memulai proses yang mentransfer sketsa Anda ke memori Flash mikrokontroler.

Daftar Isi

  • Bootloader
  • Gunakan Arduino sebagai ISP
    • Cara memasang papan Anda
    • Tentang tegangan
  • Muat sketsa
  • Programlah bootloader
    • Mode Pemrograman Serial
  • Aspek teknis pemrograman
  • Rekap: bakar Bootloader dalam 8 langkah

Bootloader


Perilaku yang dijelaskan di atas terjadi berkat potongan kode khusus yang dijalankan pada setiap reset mikrokontroler dan yang mencari sketsa untuk diunggah dari port serial / USB menggunakan protokol dan kecepatan tertentu. Jika tidak ada koneksi yang terdeteksi, eksekusi dilewatkan ke kode sketsa Anda.

Sepotong kecil kode (biasanya 512 byte) ini disebut "Bootloader" dan berada di area memori mikrokontroler - di akhir ruang alamat - yang tidak dapat diprogram ulang sebagai sketsa biasa dan telah dirancang untuk tujuan tersebut.

The Memory Map of an ATmega328P
Untuk memprogram bootloader dan memberikan kompatibilitas kepada mikrokontroler dengan Arduino Software (IDE), Anda perlu menggunakan Serial Programmer (ISP) In-circuit yang merupakan perangkat yang terhubung ke pin pin mikrokontroler tertentu untuk melakukan pemrograman dari seluruh memori flash mikrokontroler, termasuk bootloader. Prosedur pemrograman ISP juga termasuk penulisan sekering: seperangkat bit khusus yang menentukan cara kerja mikrokontroler dalam keadaan tertentu.


Gunakan Arduino sebagai ISP


Seluruh proses memuat kode bootloader dan membakar sekering dengan benar untuk membuat mikrokontroler ATmega menjadi “Arduino” dikelola oleh Arduino Software (IDE): ia menyediakan item menu tertentu dan memungkinkan Anda untuk menggunakan berbagai perangkat pemrograman. Di antara para programmer, "Arduino sebagai ISP" adalah solusi termurah dan paling praktis untuk membakar bootloader di papan Arduino lain dengan ATmega , 32U4 atau ATtiny .



Proses pemrograman menggunakan VCC, GND dan empat pin data. Tiga pin menghubungkan MISO, MOSI dan SCK antara mikro pemrograman dan mikro target, pin keempat dari mikro pemrograman menuju ke pin reset target.

Cara memasang papan Anda
Tabel berikut ini menampilkan pin MOSI, MISO dan SCK yang terputus pada papan Arduino yang berbeda:

Arduino / Genuino BoardMOSIMISOSCKTingkat
Uno atau Duemilanove11 atau ICSP-412 atau ICSP-113 atau ICSP-35V
Mega1280 atau Mega256051 atau ICSP-450 atau ICSP-152 atau ICSP-35V
LeonardoICSP-4ICSP-1ICSP-35V
DueICSP-4ICSP-1ICSP-33,3V
ZeroICSP-4ICSP-1ICSP-33,3V
10111 atau ICSP-412 atau ICSP-113 atau ICSP-33,3V
Keluarga MKR81093,3V
Antarmuka SPI - dan karenanya pin ini - adalah antarmuka yang digunakan untuk memprogram mikrokontroler AVR. Perhatikan bahwa MISO, MOSI, dan SCK tersedia di lokasi fisik yang konsisten di header ICSP; konektor ini digunakan juga oleh perisai yang mengandalkan antarmuka SPI yang memungkinkan desain perisai yang bekerja di setiap papan.


Pada UNO Arduino pada gambar berikut, kami telah menyoroti merah koneksi pada strip perempuan; berwarna kuning konektor ICSP yang menghubungkan ke ATmega328P . Harap dicatat bahwa board Rev.3 memiliki chip ATMega 16U2 yang mengelola koneksi USB dan juga chip yang dapat diprogram ulang melalui konektor khusus berlabel ICSP2 , tepat di atas ATMega 16U2 itu sendiri.




Pada beberapa papan Arduino (lihat tabel di atas), pin MOSI, MISO dan SCK masing-masing sama dengan pin digital 11, 12 dan 13. Itulah sebabnya banyak tutorial menginstruksikan Anda untuk menghubungkan target ke pin ini. Jika Anda merasa kabel ini lebih praktis, miliki USE_OLD_STYLE_WIRING yang ditentukan. Ini akan berfungsi bahkan ketika tidak menggunakan Uno. (Dengan papan Uno ini tidak diperlukan).



Pada gambar di atas kita menghubungkan dua papan UNO untuk pembakaran bootloader dengan koneksi "gaya lama": papan atas adalah Target, papan bawah adalah Programmer. Catat koneksi kuning dari D10 programmer ke RESET dari target. Pada family board MKR, Anda tidak dapat menggunakan D10 untuk mereset; kami sarankan D6 dan Anda harus ingat untuk mengubah baris 73 sketsa ArduinoISP - #define RESET 10- menempatkan "6" insteat dari 10.



NANO Arduino ini diprogram melalui konektor ICSP-nya dengan kabel yang berasal dari D10-D13 dari papan programmer UNO.


MEGA Arduino di atas memprogram Arduino UNO yang menghubungkan D51-D11, D50-D12, D52-D13, GND-GND, 5V-5V dan D10 ke RESET. Papan jenis ini membutuhkan kapasitor elektrolitik 10μF yang terhubung ke RESET dan GND dengan positif (kaki panjang) yang terhubung ke RESET. Kapasitor harus ditempatkan setelah papan programmer dimuat dengan sketsa ISP.
Kapasitor elektrolit 10μF yang terhubung ke RESET dan GND dari papan pemrograman hanya diperlukan untuk papan yang memiliki antarmuka antara mikrokontroler dan USB komputer, seperti Mega, Uno, Mini, Nano. Papan seperti Leonardo, Esplora dan Micro, dengan USB yang langsung dikelola oleh mikrokontroler, tidak memerlukan kapasitor.

Tentang tegangan
Rangkaian papan Arduino mencakup perangkat 5V dan 3.3V. Saat menggunakan Arduino yang tidak toleran 5V (Karena, Nol, ...) sebagai programmer, pastikan untuk tidak mengekspos pin programmer ke 5V. Cara sederhana untuk mencapai hal ini adalah memberi daya pada sistem yang lengkap (programmer dan target) pada 3V3.



Pada gambar di atas Anda melihat kabel antara MKR1000 dan UNO. Seperti dijelaskan di atas, semuanya berjalan pada 3.3V, diambil dari VCC dan GND dari MKR1000 dan dikirim ke 5V dan GND dari UNO. Koneksi yang sama dapat dilakukan ke ICSP dari UNO setelah pinout dijelaskan di halaman. Kami telah menggunakan warna yang sama untuk kabel seperti pada gambar lain untuk membantu Anda beralih dari "kabel lama" ke konektor ICSP dengan mudah. Harap dicatat bahwa keluarga dewan MKR berbagi pinout yang sama, oleh karena itu Anda dapat menggunakan papan MKR sebagai programmer ISP. Jika Anda menggunakan papan MKR sebagai programmer ISP, ingatlah untuk mengubah baris 73 ArduinoISP dengan mendefinisikan pin aktual yang digunakan pada papan MKR untuk Mengatur ulang target (6 pada gambar di atas).
Catatan: Harap jangan menyambungkan ke USB atau catu daya papan saat Anda mengatur koneksi dan kabel. Kami juga menyarankan agar Anda terlebih dahulu memprogram Arduino yang digunakan sebagai pemrogram ISP sebelum Anda melanjutkan pemasangan kabel ke papan target.


Muat sketsa


Arduino yang akan Anda gunakan sebagai programmer membutuhkan sketsa tertentu. Anda menemukannya di bawah Contoh> 11. ArduinoISP > ArduinoISP .



Melalui garis sketsa Anda menemukan sejumlah parameter yang perlu diatur sesuai papan target. Namun, parameter ini ditetapkan oleh file tertentu yang tersedia untuk setiap bootloader / board yang didukung oleh Arduino Software (IDE). Parameter lain dijelaskan dengan jelas oleh komentar dan harus diubah hanya jika Anda tahu apa yang Anda lakukan. Sketsa ini juga mendukung tiga LED yang memberi Anda umpan balik visual tentang proses pemrograman.



Untuk mengunggah sketsa ke papan Arduino Anda - yang akan Anda gunakan sebagai programmer - Anda harus memilih jenis dan port papan, maka Anda dapat melanjutkan seperti biasa.

Programlah bootloader


Jika semua kabel sudah diatur, Anda perlu beralih ke jenis papan yang ingin Anda program dengan bootloader. Langkah ini wajib untuk memilih kode bootloader yang tepat dan konfigurasi sekering. Prosedur pemrograman memeriksa tanda tangan mikrokontroler sebelum tindakan menulis dilakukan, tetapi banyak papan berbagi mikrokontroler yang sama dan setiap papan memiliki bootloader sendiri. Port tetap menjadi salah satu ArduinoISP .
Pilih "Bakar bootloader" di bawah alat dan tunggu pesan konfirmasi di bagian bawah antarmuka Arduino Software (IDE). Jika Anda menghubungkan LED Anda dapat mengikuti proses secara visual.




Mode Pemrograman Serial
Proses pemrograman mengelola tiga jalur SPI (MISO, MOSI dan SCK) sesuai dengan protokol pemrograman SPI standar, yang sama digunakan untuk membaca dan menulis kartu memori SD. Satu-satunya perbedaan dengan kartu memori adalah tidak adanya pin CS (pilih Chip). Pada mikrokontroler AVR kami, kami menggunakan pin RESET yang menghentikan eksekusi sketsa atau bootloader apa pun dan menempatkan mikrokontroler dalam keadaan tertentu di mana ia mendengarkan perintah yang datang dari antarmuka SPI. Perintah pertama yang diperlukan protokol adalah yang memasuki mikrokontroler dalam Mode Pemrograman Serial .

Setelah mode spesifik ini aktif, kita dapat menulis dan membaca semua area yang dapat diprogram mikrokontroler: Flash, EEPROM, dan Sekring. Di akhir memori Flash, kami memiliki area kode bootloader, seperti yang disorot pada gambar di awal artikel ini. Prosedur "Burn Bootloader" juga mengatur dengan benar sekering mikrokontroler sesuai dengan desain papan. Ini adalah salah satu alasan mengapa Anda harus membakar bootloader memilih model papan tepat Anda dalam daftar.


Aspek teknis pemrograman


Alat perangkat lunak open source yang digunakan untuk memprogram mikrokontroler adalah avrdude . Proses berjalan melalui empat langkah: membuka kunci bagian bootloader dari chip, mengatur sekering pada chip, mengunggah kode bootloader ke chip, mengunci kembali bagian bootloader dari chip.
Sekering dikelola sesuai dengan preferensi yang tersimpan di setiap file parameter yang terkait dengan papan, menghindari potensi kesalahan.
Manajemen sekering, biasanya satu set tiga byte - rendah, tinggi dan diperluas -, adalah aspek paling rumit dari pemrograman bootloader: pengaturan sekring yang salah dapat merusak mikrokontroler dan papan. Sekering mendefinisikan banyak aspek fungsi mikrokontroler seperti: memilih sumber jam yang berbeda dan mengubah seberapa cepat chip berjalan, mengatur tegangan minimum yang diperlukan sebelum chip bekerja (brownout), pengaturan apakah bootloader digunakan atau tidak, mengatur berapa banyak memori yang dialokasikan ke boot loader (dari 256 hingga 2048 kata - 512 hingga 4096 bytes), menonaktifkan program reset atau serial dan menghentikan data EEPROM yang terhapus saat mengunggah sketsa baru.
Penjelasan terperinci dari sekering dapat ditemukan pada lembar data setiap mikrokontroler.
Setiap pengaturan memiliki penggunaannya sendiri dan logis untuk memungkinkan pengembang untuk mengunci chip dan melindunginya dari pemrograman ISP, tetapi mungkin saja terjadi kesalahan pengaturan sekering dengan cara yang salah, mengunci Anda keluar dari proses pemrograman melalui antarmuka ISP . Untuk memulihkan mikrokontroler, Anda harus mengandalkan Programer Tegangan Tinggi yang menggunakan 12V untuk mengatur ulang sekering.


Rekap: bakar Bootloader dalam 8 langkah

  • Buka firmware ArduinoISP (dalam Contoh) ke papan Arduino Anda.
  • Catatan untuk Arduino 1.0: Anda perlu melakukan satu perubahan kecil pada kode ArduinoISP . Temukan garis dalam fungsi detak jantung () yang mengatakan "delay (40);" dan ubah ke "delay (20);".
  • Pilih item di menu Tools> Board dan Serial Port yang sesuai dengan board yang Anda gunakan sebagai programmer (bukan board yang sedang diprogram).
  • Unggah sketsa ArduinoISP .
  • Transfer papan Arduino Anda ..
  • Pilih item di menu Tools> Board yang sesuai dengan board tempat Anda ingin membakar bootloader (bukan board yang Anda gunakan sebagai programmer). Lihat deskripsi papan di halaman lingkungan untuk detailnya.
  • Pilih Arduino sebagai ISP di menu Tools> Programmer.
  • Gunakan perintah Burn Bootloader.

Sumber



Disqus comments