Untuk menjawab aspek pertanyaan Anda tentang "firmware" pada ATmega328p MCU yang digunakan di sebagian besar papan Arduino:
Tidak ada firmware pada ATmega sama sekali selain dari bootloader. Program yang Anda tulis berjalan langsung pada perangkat keras.
Ada pengaturan "sekering" tertentu yang ditetapkan dengan pemrogram ISP . Namun, hanya ada 24 di antaranya (tiga byte), dan sebagian besar berhubungan dengan konfigurasi tingkat rendah, dan bukan yang saya pikir Anda tanyakan:
Ada juga Bootloader , yang merupakan program kecil yang duduk di segmen terpisah dari memori program MCU dan memungkinkannya untuk memperbarui sendiri saat startup (yang merupakan cara semua arduinos diprogram). Namun, itu hanya berjalan untuk jangka waktu singkat saat startup, dan sepenuhnya dihapus dari memori setelah MCU telah melompat ke program utama.
Terakhir, ada MCU tambahan (ATmega16U2 / 8U2) pada sebagian besar papan Arduino yang digunakan sebagai antarmuka serial-USB, yang dapat diperbarui untuk berperilaku berbeda (misalnya mengemulasi keyboard / mouse), tetapi sekali lagi, ini sebenarnya bukan perubahan ke prosesor inti, jadi apakah itu dianggap sebagai "menginstal firmware yang berbeda" tergantung pada bagaimana Anda mendefinisikan Arduino.
Sungguh, saya akan sangat merekomendasikan membaca lembar data ATmega328P . Ini adalah dokumentasi untuk MCU yang pada dasarnya membentuk "Arduino". Ini harus membahas apa yang tampaknya kesalahpahaman.