Ketika saya mengunggah sketsa baru ke Arduino Uno saya menggunakan bootloader Optiboot, apa yang sebenarnya terjadi?
- Apa yang dikirim ke Arduino?
- Bagaimana tanggapannya?
- Apa artinya "tidak sinkron"?
- Apa itu "sinkron"?
Catatan: Ini dimaksudkan sebagai "pertanyaan referensi" .
arduino-uno
bootloader
Nick Gammon
sumber
sumber
Jawaban:
Saat Anda mengatur ulang Uno yang menjalankan loader Optiboot, bootloader pertama akan mem-flash pin 13 sebanyak tiga kali.
Baris atas (abu-abu) dikirim ke Arduino, garis tengah (oranye) dikirim dari Arduino.
Ketika itu terjadi, program yang
avrdude
berjalan di komputer Anda mengirimkan kueri ke perangkat:Arduino tidak melihat "get sync" yang pertama karena sibuk mem-flash pin 13. Setelah selesai, pemberitahuan "get sync" (itu akan disangga oleh perangkat keras serial) dan menjawab:
Sepertinya avrdude menjadi sedikit tidak sabar, dan kehabisan waktu, karena ia mencoba lagi dengan permintaan "get sync". Kali ini Optiboot segera merespons.
Sisa dari pengunggahan dijelaskan pada gambar berikutnya. Contoh yang dihasilkan mengunggah program saham "Blink".
(Klik pada gambar di atas untuk versi yang lebih besar)
Langkah-langkahnya adalah:
Tetapkan parameter perangkat. Parameter perangkat berikut dikirim ke chip:
Optiboot mengabaikan semua itu dan membalas dengan In Sync / OK. :)
Tetapkan parameter perangkat yang diperluas:
Optiboot mengabaikan semua itu juga dan membalas dengan In Sync / OK.
Masuk ke mode program. Jawab: Di Sinkron / OK.
Baca tanda tangan. Optiboot membalas dengan
0x1E 0x95 0x0F
tanpa benar-benar membaca tanda tangan .Tulis sekering (empat kali). Optiboot tidak menulis sekring tetapi hanya membalas Dalam Sinkronisasi / OK.
Muat alamat (awalnya 0x0000). Alamatnya dalam kata-kata (mis. Sebuah kata adalah dua byte). Ini menetapkan alamat di mana halaman data selanjutnya akan ditulis.
Halaman program (hingga 128 byte dikirim). Optiboot segera membalas "In Sync". Lalu ada jeda sekitar 4 ms sementara sebenarnya memprogram halaman. Kemudian itu menjawab "OK".
Muat alamat (sekarang 0x0040). Ini adalah alamat 64 dalam desimal, yaitu. 128 byte dari awal memori program.
Halaman lain ditulis. Urutan ini berlanjut sampai semua halaman ditulis.
Muat alamat (kembali ke 0x0000). Ini untuk memverifikasi penulisan.
Baca halaman (hingga 128 byte dibaca). Ini untuk memverifikasi. Perhatikan bahwa meskipun verifikasi gagal, data buruk telah ditulis ke chip.
Tinggalkan mode pemrograman.
Apa artinya "tidak sinkron"?
Seperti yang Anda lihat dari atas, setiap langkah melalui urutan pemrograman yang diharapkan akan dijawab oleh Arduino dengan "In Sync" (0x14), mungkin diikuti oleh beberapa data, diikuti oleh "OK" (0x10).
Jika "tidak sinkron" itu berarti avrdude tidak mendapatkan respons "sinkron". Kemungkinan alasannya adalah:
Apa itu "dalam sinkronisasi"?
Seperti disebutkan di atas, respons "Dalam sinkronisasi" berarti Arduino (bootloader) disinkronkan dengan program pengunggahan.
Protokol apa yang digunakan?
Protokol adalah protokol STK500 yang didokumentasikan oleh Atmel. Lihat referensi di bawah ini.
Referensi
Catatan : STK500 Versi 2 tidak digunakan dalam Optiboot, tetapi disertakan untuk informasi jika Anda menggunakan papan seperti Mega2560.
Konstanta STK500
sumber
avrdude
perilaku verifikasi default adalah bootloader yang mendukung pembacaan konten flash.