Bagaimana saya bisa melakukan pembaruan inkremental dengan flash yang hanya bisa dihapus blok-bijaksana?

11

Skenario

Saya ingin memperbarui perangkat IoT murah dengan over-the-air dengan firmware baru memperbarui mikrokontroler perangkat. Memori mikrokontroler adalah memori flash dalam kisaran 32k hingga 128k (setiap sen dihitung). Memori murah ini memiliki satu batasan utama: hanya dapat dihapus dengan bijaksana.

Pertanyaan

Apakah itu berarti saya tidak dapat membuat pembaruan diferensial ( delta )? Apakah saya harus selalu memperbarui seluruh memori pengontrol (atau paling tidak sebagian besar)?

Saya ingin mengurangi kebutuhan untuk mem-flash semuanya dan berisiko merusak perangkat sepenuhnya. Adakah strategi yang ada saat memasang mikrokontroler di udara?

Helmar
sumber
Apa yang lebih penting untuk biaya Anda atau tingkat risiko terendah?
Bence Kaulics
@ BenceKaulics menemukan keseimbangan yang tepat antara keduanya, kurasa. Bagaimanapun, risiko batu bata juga merupakan biaya (tertimbang).
Helmar

Jawaban:

8

Jawaban sederhananya adalah ya - Anda memerlukan cukup banyak blok flash untuk mendukung bootloader dan gambar kode A / B jika Anda menginginkan keandalan yang tinggi. Sebelum mengaktifkan gambar baru, Anda dapat menulis semuanya, memverifikasi dan berpotensi mencoba lagi.

Namun ini adalah strategi yang mahal / andal dan ada beberapa hal yang dapat Anda lakukan untuk mengurangi biaya overhead. Dukungan tingkat rendah untuk pembaruan OTA juga dapat datang sebagai bagian dari firmware perangkat atau OS, sehingga Anda dapat menghindari rolling milik Anda sendiri kecuali jika Anda ingin belajar. Fitur ini dapat digambarkan sebagai FOTA.

Mempartisi basis kode Anda memungkinkan untuk pembaruan tambahan, jika bootloader terbaik dapat memunculkan koneksi jaringan, mengunduh dan memverifikasi kode tanpa perlu kode pengguna cadangan. Dengan gateway lokal, manajemen tugas ini dapat didelegasikan dari titik akhir berbiaya rendah.

Banyak perangkat memiliki sedikit flash penghapus kata, dan bahkan jika gagal, Anda biasanya dapat mengatur bit tanpa perlu menghapus seluruh blok. Fitur-fitur ini dapat digunakan untuk memanipulasi tabel lompatan dan menjahit kode bersama yang diperbarui dalam potongan ukuran blok. Bahkan jika Anda awalnya merencanakan untuk ruang kode A / B penuh, Anda mungkin perlu kembali ke skema yang lebih kompleks ketika basis kode tumbuh terlalu banyak.

Untuk memperjelas fungsionalitas yang dapat dicapai dengan solusi firmware-over-the-air yang canggih, bootloader dan berpotensi tumpukan komunikasi utama dapat tetap ada sementara ruang aplikasi pengguna yang tersisa penuh di-flash ulang. Ini tidak memerlukan overhead (terutama jika partisi blok lunak). Dalam skenario di mana tumpukan komunikasi perlu ditingkatkan, wilayah yang umumnya digunakan untuk kode aplikasi dapat sementara digunakan selama pengunduhan dan verifikasi. Untuk mencapai ini diperlukan beberapa dukungan di SoC, tetapi perangkat generasi ke-2 dan ke-3 yang dirancang dengan pemikiran ini sudah ada.

Sean Houlihane
sumber
6

Saya ingin mengurangi kebutuhan untuk mem-flash semuanya dan berisiko merusak perangkat sepenuhnya. Adakah strategi yang ada saat memasang mikrokontroler di udara?

Selain kode Anda yang melakukan pembaruan yang relatif statis, Anda perlu menyimpan dua gambar di penyimpanan Anda: gambar aktif dan gambar cadangan. Kapan pun, Anda perlu memperbarui, lakukan di cadangan, lalu alihkan agar aktif. Setelah stabil, perbarui gambar aktif lama yang sekarang seharusnya menjadi cadangan Anda.

Dengan mengingat hal itu, Anda dapat menggunakan algoritme level-aus saat memperbarui kedua gambar. Kode untuk algoritme tersebut mungkin memakan waktu sekitar 10-15% dari total penyimpanan, tetapi sangat berharga untuk memperpanjang umur perangkat.

Levelling aus biasanya dikelola oleh pengontrol flash, yang menggunakan algoritme leveling aus untuk menentukan blok fisik mana yang digunakan setiap kali data diprogram. Ada dua jenis level-memakai drive solid-state drive (SSD): dinamis dan statis. Pool levelling dinamis menghapus blok dan memilih blok dengan jumlah penghapusan terendah untuk penulisan berikutnya.

Meratakan keausan statis, di sisi lain, memilih blok target dengan jumlah penghapusan keseluruhan terendah, menghapus blok jika perlu, menulis data baru ke blok, dan memastikan bahwa blok data statis dipindahkan ketika jumlah penghapusan blok mereka di bawah ambang batas tertentu. Langkah tambahan untuk memindahkan data ini dapat memperlambat kinerja penulisan karena overhead pada pengontrol flash, tetapi leveling keausan statis jauh lebih efektif daripada leveling keausan dinamis untuk memperpanjang umur perangkat solid state.

( Techtarget.com: Kenaikkan level pakai )

Leon Carlo Valencia
sumber
6

Freescale Semiconductor menjelaskan cara upgrade firmware over-the-air yang kuat untuk Mikrokontroler Kinetis mereka .

Ini disebut: Program Flash Memory Swap .

Sistem menggunakan swap memori flash

Pada perangkat dengan dua atau lebih blok flash internal yang mendukung swap, alamat basis memori masing-masing blok flash dapat dipertukarkan. Lokasi alamat masing-masing blok flash dengan demikian akan ditukar dalam peta memori logis perangkat. Setelah reset, sistem swap flash bawaan pada dasarnya memilih perangkat lunak mana yang dieksekusi oleh lokasi blok flash dalam peta memori logis. Ini memungkinkan sistem cadangan kode dengan kemudahan pemrograman tambahan. Anda dapat mengeksekusi dari satu blok saat menghapus / memprogram blok lainnya. Pada perangkat Kinetis, sistem swap flash memantau / mengontrol semua langkah beralih dari aplikasi lama ke yang baru; ada jaminan tambahan operasi yang andal dalam hal kehilangan daya selama salah satu langkah tersebut.

Keuntungan

  • Kemudahan pemrograman. Aplikasi selalu dijalankan di luar blok bawah di peta memori.
  • Toleransi kehilangan daya.
  • Tidak perlu bootloader. Tidak ada penundaan pada awal aplikasi utama.
  • Sangat cocok untuk OS multi-tasking. Downtime aplikasi minimal. Dalam sistem multi-tugas, dimungkinkan untuk terus menjalankan tugas aplikasi utama saat tugas latar belakang sedang berjalan untuk memperbarui salinan aplikasi yang baru.
  • Cadangkan salinan kode. Kemungkinan untuk kembali ke aplikasi kerja yang dikenal.

Kekurangan

  • Ruang memori flash tambahan diperlukan untuk menyimpan salinan cadangan.

Anda dapat memperbarui blok lalu menukarnya.

pertukaran memori selama pembaruan divisualisasikan

Dokumen yang ditautkan memuat uraian terperinci.

Ini memastikan peningkatan firmware yang lebih aman, tetapi karena membutuhkan lebih banyak flash memroy, tentu lebih mahal . Juga tidak berlaku untuk semua jenis mikrokontroler, hanya yang mendukung swap blok flash internal.

Bence Kaulics
sumber
2
Ini terlihat hebat dan terlihat seperti solusi yang harus dipertimbangkan jika dapat diseimbangkan dengan persyaratan biaya. +1
Helmar