Pembaruan firmware anti-peluru

16

Apa jenis teknik yang digunakan untuk memungkinkan pengguna untuk secara aman meningkatkan penjualan perangkat firmware pasca penjualan? Saya ingin melakukan ini dengan mikrokontroler Cortex M3 / 4, tapi saya kira teknik untuk mikro harus dilakukan.

Lebih disukai dengan jumlah komponen ekstra paling sedikit tentunya.

Imbrondir
sumber

Jawaban:

16

Gunakan chip yang memiliki lebih dari dua kali jumlah memori Flash yang Anda perlukan untuk kode Anda. Dengan cara ini Anda bisa mendapatkan firmware baru ke memori ini sambil tetap meninggalkan yang lama jika terjadi kesalahan.

Setelah Anda mendekripsi dan memverifikasi checksum pada firmware baru, bootloader dapat menyalinnya ke lokasi final, menggantikan yang lama. Jika terjadi kesalahan selama bagian ini, setelah hard-reset bootloader akan melihat bahwa firmware baru tidak valid (dengan menjalankan checksum sekali lagi) dan coba lagi penyalinan.

Ini adalah cara paling sederhana dan paling mudah saya tahu. Ini juga memerlukan sedikit kode dalam bootloader dan tidak memerlukan duplikasi fungsi apa pun antara program utama dan bootloader (Anda tidak memerlukan logika komunikasi apa pun di bootloader).

jpc
sumber
10
Sebagai pengguna elektronik, saya mungkin menambahkan bahwa akan lebih baik memiliki tombol di suatu tempat untuk menahan saat mem-boot yang akan mem-boot firmware lama, jika yang baru memiliki checksum yang benar tetapi perangkat lunak itu sendiri memiliki bug.
Zan Lynx
4
"Masalah" yang saya lihat dengan solusi ini adalah bahwa Anda memerlukan semacam tabel relokasi atau kode independen posisi lengkap. Kalau tidak, kode Anda tidak akan berjalan.
Nico Erfurth
2
@Masta - Anda tidak memahami bagian di mana firmware disalin ke lokasi final (normal).
Kevin Vermeer
3
@jpc - Kami menggunakan teknik ini dengan chip Flash serial eksternal pada beberapa alat internal di kantor. Anda tidak perlu memiliki mikrokontroler dengan lebih dari dua kali Flash jika Anda memiliki ruang untuk bagian SOIC atau QFN 8-pin. Memori Flash serial 1MB dapat dimiliki dengan harga kurang dari satu dolar sehingga mungkin lebih murah untuk menggunakan rute ini daripada meningkatkan mikrokontroler dalam beberapa kasus!
Kevin Vermeer
@zan - Yup, kami menggunakan ini juga. Satu masalah atau manfaatnya adalah bahwa perangkat akan diatur ulang ke default ketika Anda menyalin ulang firmware lama (kami tidak memiliki EEPROM pada mikro kami; kami menyimpan data konfigurasi seperti alamat MAC dan alamat IP dalam Flash yang ditulis sendiri). Bagi kami, ini membuatnya mudah untuk menemukan papan ketika kami lupa alamat IP.
Kevin Vermeer
12

Gunakan bootloader dan beberapa flash ekstra KB.

Pemutakhiran dilakukan oleh bootloader, dengan mengirimkan beberapa perintah khusus melalui UART, USB, I2C, atau protokol lain. Hanya kode utama yang pernah diperbarui - kode bootloader tidak pernah disentuh kecuali melalui programmer eksternal (yaitu JTAG / PICkit untuk PIC dll.)

Jika pembaruan gagal (listrik mati, seseorang tersandung kabel atau alasan lain), maka widget tidak akan berfungsi, tetapi bootloader akan tetap ada di sana sehingga pemutakhiran dapat dicoba lagi.

Bendera dapat diatur dalam beberapa byte di suatu tempat yang mencegah eksekusi kode utama salah karena belum sepenuhnya diperbarui.

Thomas O
sumber
Anda juga bisa memaksa bootloader untuk menjalankan jika boot karena power-up. Ini akan membantu jika Anda memuat di firmware buruk yang segera macet. Bootloader perlu waktu tunggu untuk menjalankan aplikasi setelah X detik.
Robert
Adalah ide yang baik jika Anda dapat menggunakan protokol sederhana (seperti serial async, TTL atau 485). Untuk kasus-kasus yang lebih terlibat (kartu SD, GPRS, USB) saya tidak akan memasukkan kode dukungan yang kompleks dalam bootloader (tidak dapat di-upgrade). Ethernet OTOH (UDP atau TFTP mentah) cukup sederhana untuk ini.
jpc
3

Jika perangkat Anda relatif mahal dan Anda dapat membayar biayanya (dan pelanggan Anda peduli dengan peningkatan), Anda dapat melakukan ini ...

(umumnya teknik ini membutuhkan penyimpanan eksternal atau penggunaan jtag yang licik ..)

Punya program mikro yang diperbaiki (seperti PIC kecil) yang dapat menghentikan sistem dan memprogram ulang.

karena Anda tidak dapat mengubah firmware "upgrade prosesor", itu tidak akan pernah salah.

1) pengguna dapat meningkatkan perangkat

2) jika upgrade gagal, mereka selalu dapat mencoba lagi. Itu tidak bisa ditutup

3) bahkan ketika perangkat target Anda tidak mendukung boot-loader (hanya ingin mem-boot dan menjalankan) Anda masih dapat membuatnya melakukan apa yang Anda inginkan.

berfungsi untuk FPGA, DSP, dan target eksentrik lainnya.

Dapat memiliki antarmuka pengguna yang sangat rapi (bahkan PIC dapat menjalankan server web ....)

Tim Williscroft
sumber
2

Pastikan produk Anda memiliki beberapa antarmuka serial sederhana , lebih disukai EIA232. Konektor non-standar OK jika Anda tidak memiliki ruang untuk DB-9. Misalnya konektor TRS adalah semua yang Anda butuhkan untuk TxD, RxD dan ground.

Saat memprogram perangkat pertama kali, sertakan bootloader . Ini harus sesederhana mungkin , karena cepat atau lambat Anda ingin memutakhirkan bootloader itu sendiri jika memerlukan fitur baru. (Anda mungkin bahkan tidak bisa memutakhirkannya)

Kemudian konektor TRS. Gunakan jack dengan sakelar sehingga Anda dapat mendeteksi ketika ada konektor. Cukup periksa segera dari reset, dan mulai bootloader jika steker ada, jika tidak jalankan aplikasi. Dengan begitu bootloader dan program aplikasi pengguna tetap terpisah dengan baik. (Pemeriksaan sebenarnya adalah bagian dari bootloader; kita akan membutuhkannya terlepas dari versi aplikasi, jika tidak kita tidak akan bisa masuk ke bootloader!)

stevenvh
sumber
Mengapa Anda ingin memutakhirkan bootloader? Bagaimana Anda memastikan bahwa proses peningkatan tidak akan merusak perangkat? Jika bisa, fitur baru apa yang akan sangat menarik sehingga Anda berisiko mengalami peningkatan?
Kevin Vermeer
5
@ Kevin - Saya pikir maksudnya bootloader harus sangat sederhana sehingga Anda tidak akan pernah berpikir untuk "memutakhirkan" itu.
jpc
@ jpc - Ah, Anda benar, salah mengartikannya. Kami sepakat!
Kevin Vermeer
1

Peralatan apa yang akan tersedia oleh 'upgrader'? PC, stik USB, kartu micro SD?

Salah satu caranya adalah memiliki aplikasi dalam item yang dapat dilepas (usb stick, kartu SD, dll). Chip memuat aplikasinya dari item. Upgrade Anda cukup menukar item dan reboot.

Chip mikrokontroler ARM dan Cortex yang saya tahu (NXP, Atmel) semuanya memiliki bootloader serial built-in, jadi jika updater Anda datang dengan PC dan kabel serial (dan Anda telah mengatur antarmuka port COM) ia dapat dengan mudah mengunduh Anda memperbarui.

Wouter van Ooijen
sumber
Jadi cukup dengan menyambungkan pin UART ke port, saat terhubung ke port COM dan PC, Anda dapat mem-flash firmware tanpa kode pada MCU sama sekali? Tip yang bagus.
Imbrondir
Periksa lembar data, bagian 'bootloader'. Untuk melakukan ini dengan benar-benar 'lepas tangan', Anda akan memerlukan 1. cara untuk mereset chip; 2. aktifkan bootloader (chip memeriksa pin ceratin). Ini dapat dilakukan dengan jumper dan saklar (reset), tetapi cara yang lebih nyaman (terutama di meja Anda) adalah dengan menggunakan dua garis jabat tangan untuk melakukan trik 'lepas tangan'. Sebagian besar program unduhan PC (mis. Flashmagic, lpc21isp) dapat melakukan keajaiban handshaking untuk Anda (jika Anda memasang kabel handshake dengan benar).
Wouter van Ooijen