Tingkatkan ARM melalui udara

9

Kami akan membuat papan ARM dengan modem GSM on-board.
Kami ingin dapat meningkatkan firmware ARM melalui udara.

Apakah ada solusi open source yang bagus, andal, untuk itu?
Jika tidak, apakah ada OS berbayar dengan fitur ini?

hotips
sumber
2
ARM cukup umum: ada banyak produsen yang menanamkan arsitektur ARM, dan beberapa dari mereka mungkin menyediakan fitur itu.
clabacchio
1
Info yang lebih spesifik tentang chip ARM / keluarga yang akan Anda gunakan akan menyenangkan. Banyak jika tidak semua mikrokontroler Cortex-M mendukung penulisan untuk flash dari kode pengguna. Contoh implementasi open-source ada, seperti Maple bootloader leaflabs.com/docs/bootloader.html , dan saya pikir saya telah melihat peningkatan firmware melalui tautan radio yang didukung di beberapa quadcopter.
Thorn
Kami belum memilih perangkat ARM saat ini;)
hotips
7
Masalah besar dengan peningkatan firmware adalah bagaimana memaksa chip ke mode pembaruan begitu ada yang salah dengan firmware. Ketika Anda memiliki akses ke chip, Anda dapat meresetnya dan memaksa pin bootload tinggi, tetapi bagaimana Anda akan melakukannya di udara? Satu-satunya solusi yang dapat saya bayangkan adalah memiliki chip kedua (tidak dapat diperbarui) yang menangani komunikasi dasar dan dapat memperbarui chip utama. Setelah menyelesaikan masalah itu, bootloading yang sebenarnya dapat sesederhana menggunakan (misalnya) bootloader yang dibangun ke dalam chip (misalnya, LPC UC saya tahu semua memiliki bootloader serial).
Wouter van Ooijen
2
@Hernan Itu akan membuat mode kegagalan yang halus mungkin, seperti satu chip (entah bagaimana menjalankan kode yang salah) menjaga yang lain di reset. Satu-satunya solusi yang benar-benar dapat diandalkan adalah menjaga fungsi dalam satu chip begitu sederhana sehingga Anda tidak perlu memperbaruinya.
Wouter van Ooijen

Jawaban:

9

Saya tidak mengetahui adanya solusi yang sudah dibuat sebelumnya tetapi saya akan menjelaskan bagaimana saya mengatasinya dalam satu proyek. Ini tidak sepenuhnya 'tidak bisa diperangi' tapi saya tidak menyadarinya gagal lebih dari ribuan upgrade. Untuk aplikasi ini tingkat kegagalan yang sangat rendah masih akan lebih murah daripada harus mendapatkan akses ke unit.

Aplikasi utama memiliki tiga jenis paket tambahan yang ditambahkan ke protokol komunikasi normal yang mencakup deteksi kesalahan dan coba lagi stategy di atas:

  1. Perintah pembaruan firmware mulai membersihkan area memori yang dicadangkan di Flash SPI eksternal. Ini mengembalikan kesalahan jika unit berjalan dari baterai cadangannya atau jika itu berjalan dari daya eksternal tetapi status baterai di bawah 25%.

  2. Perintah blok tulis menerima alamat offset dan data yang ditulis ke memori Flash eksternal dalam potongan kecil. Protokol tingkat yang lebih tinggi menangani deteksi kesalahan dan transmisi ulang. Setelah setiap blok ditulis, itu dibaca kembali dan diverifikasi sebelum perintah tersebut diakui.

  3. Perintah pembaruan firmware selesai mencakup panjang bahwa firmware yang diterima harus bersama dengan CRC32 dari seluruh gambar untuk verifikasi lebih lanjut. Jika itu cocok dengan isi memori Flash eksternal dan kondisi daya masih OK, panjang yang sama dan CRC32 ditransfer ke area EEPROM bersama dengan 'angka ajaib' untuk menunjukkan bahwa pembaruan firmware sedang menunggu.

  4. Hard loop dijalankan di aplikasi utama untuk memaksa pengawas memulai kembali.

  5. Bootloader (yang terletak di area yang dilindungi tulis dari ARM's Flash) melihat angka ajaib di EEPROM dan sekali lagi memverifikasi CRC32 gambar. Jika semuanya OK, ia akan mentransfer gambar dari Flash eksternal ke area program utama Flash ARM.

  6. Informasi upgrade yang tertunda dihapus dari EEPROM dan hard loop memaksa reboot lain. Kali ini bootloader akan memulai aplikasi utama secara normal.

Meskipun saya belum pernah melihat fase pembaruan gagal menguji rilis firmware baru sebelum menggunakan sangat penting menggunakan metode ini. Jika rilis baru tidak dapat terhubung ke jaringan GSM dan menerima perintah pembaruan di masa mendatang, maka akan memerlukan pembaruan firmware di tempat.

PeterJ
sumber
1

Apakah Anda menjalankan Linux atau RTOS, atau bare metal? Jika menggunakan Debian Anda dapat mengambil snapshot dari sistem file saat ini, lakukan upgrade melalui "apt-get" lalu simpan atau kembalikan perubahan tergantung pada apakah itu berfungsi atau tidak.

fret basset
sumber
Kami memiliki Linux dan bare metal tergantung dari aplikasi ;-)
hotips
1
Jika Anda memiliki Linux maka Anda dapat memanfaatkan banyak infrastruktur itu. Cara saya menangani pembaruan pada proyek saya saat ini adalah membuat file deb untuk aplikasi khusus, kemudian menggunakan pembaruan apt-get untuk memperbarui sistem. Saya juga bereksperimen dengan btrfs. Sistem file itu memungkinkan Anda mengambil snapshot. Jadi rencana saya adalah untuk memotret direktori yang diinginkan, mencoba dan memperbarui, dan jika tidak berhasil, kembalikan snapshot itu. Jika Anda menggunakan bare metal maka Anda mungkin harus menggunakan pendekatan memori ganda biasa, satu gambar untuk kode kerja terbaru, dan satu lagi untuk kode yang baru diunduh.
fred basset