Apa alternatif yang ada untuk Optiboot bootloader?

12

Hampir semua papan Arduino modern menggunakan bootloader Optiboot . Dibandingkan dengan ATmegaboot yang digunakan sebelumnya, ini lebih kecil dalam hal flash (sekitar 1,5KB) dan lebih cepat dalam kecepatan unggah (115.2k vs 57.6k) dan memulai sketsa Anda lebih cepat (penundaan sementara menunggu setelah reset lebih pendek).

Apakah ada alternatif untuk bootloader Optiboot? Secara khusus, apakah ada boot loader yang lebih kecil (dalam istilah flash)? Perbedaan apa yang mereka miliki?

Cybergibbons
sumber

Jawaban:

8

Optiboot adalah tentang bootloader terkecil yang tersedia.

Tapi, ada jauh lebih kuat (dengan konsol inbuilt untuk pengujian perangkat keras, memeriksa RAM dan konten Flash, dll) bootloader dengan protokol komunikasi stk500v2 yang lebih maju dan kuat antara avrdude dan AVR bootloader.

Saya sudah menggunakannya pada ATmega2560 dan pada ATmega1284p. Ia bekerja untuk MCU penghitung program 3 byte dan 2 byte.

Saya memiliki versi Bootloader STK500v2 di Sourceforge .

Bootloader ini didasarkan pada bootloader Peter Fleury STK500v2, yang diperbarui oleh Mark Sproul. Saya telah mengedit untuk mendukungnya dengan papan Goldilocks (sebuah ATmega1284p).

Fitur utamanya adalah menggunakan protokol STK500v2 untuk mengunggah gambar Flash ke Arduino. Protokol ini lebih kuat dan memberikan kemampuan kesalahan yang lebih baik daripada protokol avr109 . Sebagai tambahan, protokol avr109 disebut "Arduino" di dunia Arduino, karena ia mengaktifkan DTR (untuk mengatur ulang papan dan secara otomatis memasuki bootloader), dan protokol STK500v2 disebut "Wiring" di dunia Arduino, karena hal yang sama alasan.

Bootloader Fleury / Sproul STK500v2 dirancang untuk bekerja dengan ATmega2560 yang memiliki register program 3 byte, karena ukuran Flash yang lebih besar. Tapi, itu juga mendukung papan 2 byte normal (semuanya benar-benar lain).

Untuk papan dengan banyak Flash (seperti Goldilocks 1284p), ada monitor perangkat keras yang dapat digunakan untuk menanyakan Flash, SRAM, dan perangkat keras; Anda dapat memeriksa koneksi tanpa kode tambahan, dan memeriksa konten Flash dan EEPROM yang sebenarnya. Karena 1284p mendukung 2 USART, saya menambahkan kemampuan untuk melakukan debug pada USART1 , sehingga proses pengunggahan melalui USART0 tidak terganggu.

feilipu
sumber
Ini sepertinya menjadi bagian dari FreeRTOS, apakah bootloader itu benar-benar independen dari FreeRTOS?
jfpoilpret
1
Ini sepenuhnya independen. Bootloader digunakan untuk menulis flash dengan apa saja. FreeRTOS muncul kemudian setelah main () dimulai. Saya hanya menyimpannya di repositori yang sama. Saya tidak menulisnya, hanya dimodifikasi untuk keperluan saya.
feilipu
Ini sepertinya menarik; ini akan berguna jika Anda dapat meringkas fitur-fitur penting dari bootloader Anda dalam jawaban Anda: ukuran dalam Flash, kecepatan unggah maks, babi hutan Arduino dapat bekerja dengannya, dan beberapa detail lainnya tentang pengujian perangkat keras).
jfpoilpret
Ini (berdasarkan) bootloader Peter Fleury STK500v2, diperbarui oleh Mark Sproul. Saya telah mengedit untuk mendukungnya dengan papan Goldilocks (sebuah ATmega1284p). Fitur utamanya adalah menggunakan protokol STK500v2 untuk mengunggah gambar flash ke Arduino. Protokol ini lebih kuat dan memberikan kemampuan kesalahan yang lebih baik daripada protokol avr109. Sebagai tambahan, protokol avr109 disebut "Arduino" di dunia Arduino, karena ia mengaktifkan DTR (untuk mengatur ulang papan dan secara otomatis memasuki bootloader), dan protokol STK500v2 disebut "Wiring" di dunia Arduino, karena hal yang sama alasan.
feilipu
1
Terima kasih atas informasinya, saya telah memperbarui posting Anda karena saya pikir informasi ini harus langsung menjadi bagian dari jawaban Anda. Jangan ragu untuk menambahkan informasi lebih lanjut jika Anda mau!
jfpoilpret
3

TinySafeBoot adalah alternatif untuk perangkat ATtiny dan ATmega.

  • Kompatibel dengan banyak ATtinys dan ATmegas (lihat di bawah)

  • Baca / Tulis akses ke Flash dan EEPROM.

  • Semua IO tersedia untuk komunikasi serial

  • Satu kawat, juga dengan beberapa AVR pada satu baris

  • Autobauding, protokol yang kasar.

  • Diaktifkan oleh Reset + Kata Sandi (opsional)

  • Pengguna kata sandi dan Timeout dapat berubah kapan saja.

  • "Emergency Erase" untuk mengatasi Kata Sandi yang hilang - bunuh semua data tetapi biarkan bootloader tetap utuh.

  • ATtinys: ~ 550 byte,

  • ATmegas: <512 byte (!)

  • TSB untuk ATtiny dapat memperbarui sendiri.

  • Sourcecode adalah Perangkat Lunak bebas (GPL)

Ashlyn Black
sumber
ada yang tahu bagaimana TSB dibandingkan dengan Optiboot? Pembaruan terakhir tampaknya setidaknya 2 tahun yang lalu ...
Johnny mengapa
1

Apakah ada alternatif untuk bootloader Optiboot?

Err ... tidak juga. Sebenarnya ada modifikasi [tidak resmi] untuk Optiboot untuk membuatnya lebih cepat saat mengunggah .

Untuk menginstal variasi baud rate tinggi ...

  • Pastikan Arduino IDE tidak berjalan
  • Unduh arsip 7-Zip menggunakan tautan di atas
  • Ekstrak tiga file ke direktori berikut: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Buka file boards.txt yang terletak di direktori berikut: {Arduino Installation Root}\hardware\arduino\

Temukan bagian ini di dalamnya:

uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

Tambahkan bagian berikut ...

uno_uf.name=Arduino Uno / Upload Fast
uno_uf.upload.protocol=arduino
uno_uf.upload.maximum_size=32256
uno_uf.upload.speed=250000
uno_uf.bootloader.low_fuses=0xff
uno_uf.bootloader.high_fuses=0xde
uno_uf.bootloader.extended_fuses=0x05
uno_uf.bootloader.path=optiboot
uno_uf.bootloader.file=optiboot_atmega328_250000.hex
uno_uf.bootloader.unlock_bits=0x3F
uno_uf.bootloader.lock_bits=0x0F
uno_uf.build.mcu=atmega328p
uno_uf.build.f_cpu=16000000L
uno_uf.build.core=arduino
uno_uf.build.variant=standard
  • Ubah dua nilai yang disorot menjadi baud rate yang Anda rencanakan untuk digunakan: 250000, 500000, atau 1000000 Simpan dan tutup file boards.txt
  • Menggunakan programmer ISP favorit Anda, instal bootloader baru. Jangan lupa untuk: Pastikan papan Arduino Uno / Unggah Terpilih dipilih (Alat / Papan) , Jika sesuai, pastikan Port Serial programmer Anda dipilih (Alat / Port Serial) , Pastikan programmer dipilih (Tools / Programmer) ) , Setelah menginstal bootloader, ubah Port Serial ke port serial Arduino Uno Anda .

Teks di atas sedikit dimodifikasi untuk kompatibilitas dengan situs. Pos asli


Selain itu, dan bootloader ATmegaboot, Anda tidak dapat menemukan alternatifnya. Saya akan membayangkan bahwa jika Arduino memuatnya di semua Unos yang pernah diproduksi, itu cukup optimal. Retas di atas mempercepat waktu unggah, tetapi itu tidak mengurangi ukuran bootloader. Anda juga dapat menghapus waktu tunggu pada bootloader sehingga memiliki waktu mulai yang lebih cepat.

Jika Anda khawatir memaksimalkan flash, lihat: Cara mengecilkan sketsa dan jawaban ini [aktif pada Apa yang bisa saya lakukan jika kehabisan memori Flash atau SRAM? ]

Penguin Anonim
sumber