Audiens:Artikel ini ditujukan untuk teknisi firmware, pemilik platform OTA, pemimpin TI sekolah yang mengelola peluncuran 5.000–40.000 unit, serta importir B2B yang harus memastikan bahwa satu kegagalan pembaruan firmware tidak dapat merusak seluruh armada pulpen B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, atau Y6. Artikel ini mengasumsikan Anda sudah memahami apa itu OTA, tetapi ingin mengetahui secara detail state machine, penghitung boot, aturan pertukaran A/B, serta semantik penguncian versi yang kami gunakan.
Sebuah distrik sekolah di Saudi mendorong firmware 3.3.0 ke armada berisi 9.000 pulpen melalui Wi-Fi pada Minggu malam. Pada Senin pagi, 0,7% perangkat — 63 pulpen — terjebak pada logo boot. Dalam waktu empat jam, setiap pulpen pulih secara otomatis ke firmware 3.2.1 tanpa satu pun pengiriman teknisi ke lokasi. Mekanisme yang menyelamatkan deployment tersebut adalah A/B swap dengan boot counter, dan disiplin yang melindungi armada yang berjalan dalam jangka panjang adalah version pinning. Artikel ini adalah uraian rekayasa dari kedua hal tersebut, beserta aturan yang kami terbitkan untuk distributor yang meng-host server OTA secara mandiri.
Sejak 2023, kami telah merilis 86 firmware dan mendorongnya via OTA ke 47.000+ pena di 47 negara. Total jumlah kerusakan permanen yang disebabkan oleh OTA, di seluruh rilis, adalah 41 pena (0,087%). Setiap satu dari 41 unit tersebut berhasil dipulihkan melalui rollback atau RMA. Tidak ada yang menjadi kerusakan permanen. Hasil tersebut bukanlah kebetulan. Itu adalah hasil dari state machine spesifik dan kebijakan pinning spesifik, keduanya dijelaskan secara lengkap di bawah ini.
1. Luas Permukaan OTA pada Pena Baca
Firmware pena baca bukanlah satu blob tunggal. Firmware dipartisi menjadi unit-unit yang dapat diperbarui secara independen:
| Unit | Ukuran (B1/B2/P2 NOR) | Ukuran (F8/K7/KF1 NAND) | Ukuran (L5/Q6/Q8 NAND) | Ukuran (T2/Y6 NAND) | Tanda tangan |
|---|---|---|---|---|---|
| Bootloader (BL) | 64 KB | 128 KB | 128 KB | 256 KB | Ed25519, hanya root pabrik |
| Firmware (FW) | 1,4 MB | 2,1 MB | 2,8 MB | 3,4 MB | Ed25519, root pabrik |
| Kamus (DICT) | 0,5–2,2 MB | 1,9–3,4 MB | 3,6 MB | 6,4 MB | Ed25519, subkey regional |
| Paket bahasa (LP) | 0,5–1,0 MB | 1,9 MB | 3,6 MB | 6,4 MB | Ed25519, subkey regional |
| Buku OID (BOOK) | 0,3–1,2 MB | 0,3–1,2 MB | 0,3–1,2 MB | 0,3–1,2 MB | Ed25519, subkey konten |
| Kalibrasi (CAL) | 8 KB | 8 KB | 8 KB | 8 KB | Ed25519, root pabrik |
Semua unit kecuali bootloader dapat di-swap A/B. Bootloader memiliki dual-bank sendiri dengan slot factory-rescue.
2. State Machine A/B
Setiap unit yang mendukung A/B berada di salah satu dari dua slot: A (saat ini) atau B (cadangan). State machine sengaja dibuat sederhana — enam state — dan dienkode dalam dua byte non-volatile per slot: boot_count dan boot_success.
State:
STABLE_A — A aktif saat ini, tidak ada pembaruan tertunda
STABLE_B — B aktif saat ini, tidak ada pembaruan tertunda
PENDING_A — A di-stage di B, menunggu boot pertama
PENDING_B — B di-stage di A, menunggu boot pertama
ROLLBACK_A — A gagal N kali boot, kembali ke B
ROLLBACK_B — B gagal N kali boot, kembali ke A
N adalah 3 pada NOR (B1/B2/P2) dan 5 pada NAND (semua yang lain). Penghitung boot akan bertambah setiap kali slot menjadi boot aktif; penghitung akan dihapus ketika boot_success ditandai oleh aplikasi yang mencapai layar utama.
Transisi status:
STABLE_A → PENDING_B [OTA push to B verifies, marks B pending]
PENDING_B → STABLE_B [boot_count reaches N, boot_success signalled]
PENDING_B → ROLLBACK_B [boot_count exceeds N without success]
ROLLBACK_B → STABLE_A [next boot loads A]
Langkah verifikasi sebelum menandai "pending" mencakup pemeriksaan tanda tangan, SHA-256 payload, pemeriksaan tabel dependensi (misalnya, firmware ≥3.2.0 memerlukan kamus ≥3.1.0), serta pemeriksaan keausan write-block jika slot target memiliki kurang dari 1.000 siklus erase gratis.
3. Mengapa Penghitung Boot Ada
Firmware yang buruk mungkin berhasil booting tetapi macet setelah 8 detik, atau melewati layar utama tetapi crash ketika kode OID diketuk. Satu kali booting tidak membuktikan kelayakan. Penghitung boot memaksa firmware baru menunjukkan bahwa firmware tersebut dapat membawa perangkat melalui N cold boot terpisah dengan boot_success ditandai setiap kali.
Pada NOR (B1/B2/P2), N = 3 karena daya tahan tulis NOR adalah 10.000 siklus dan kami ingin rollback terjadi dalam 48 jam penggunaan anak pada umumnya. Pada NAND (F8/K7/KF1/L5/Q6/Q8/T2/Y6), N = 5 karena daya tahan NAND adalah 60.000–100.000 siklus dan kami menginginkan standar keandalan yang lebih ketat dengan mengorbankan konvergensi yang lebih lambat.
Dalam insiden Arab Saudi 3.3.0, 63 pena yang gagal masing-masing menaikkan penghitung boot tiga kali, gagal menandai boot_success karena firmware baru terhenti pada logo boot, dan secara otomatis melakukan rollback ke 3.2.1 dalam 14 jam.
4. Semantik Penahan Versi
Penahan versi adalah kebijakan sisi perangkat yang menyatakan "jangan pasang firmware yang lebih lama dari X, dan jangan pasang firmware yang lebih baru dari Y." Penahan disimpan dalam catatan non-volatile 256-byte, direplikasi di kedua slot, ditandatangani oleh subkey OEM distributor.
Catatan pin (256 B, bertanda tangan Ed25519):
pin_min_fw uint32 misalnya, 0x00030002 = 3.2
pin_max_fw uint32 misalnya, 0x00030005 = 3.5
pin_min_dict uint32 misalnya, 0x00030001 = 3.1
pin_max_dict uint32 misalnya, 0x00030004 = 3.4
pin_region uint8 0x00..0xFF
pin_flags uint8 bit0 = block_minor_back, bit1 = block_emergency
reserved 196 B nol
signature 64 B
Pena yang ditahan akan menolak OTA apa pun yang versi targetnya berada di luar [pin_min_fw, pin_max_fw]. Inilah yang melindungi armada sekolah berisi 12.000 pena dari rilis pra-produksi yang tidak sengaja terdorong.
4.1 Kebijakan PIN berdasarkan Tipe Pembeli
| Tipe pembeli | pin_min | pin_max | pin_flags | Hasil |
|---|---|---|---|---|
| Ritel konsumen | none | none | none | Menerima semua OTA yang ditandatangani |
| Distributor dengan tim QA | current - 2 | current + 4 | none | Mengizinkan langkah mundur 2 versi minor |
| Armada sekolah / pemerintah | current - 0 | current + 2 | block_emergency | Jendela waktu sempit, menghambat peluncuran hari Jumat |
| Penerbit (konten kustom) | custom | custom | block_minor_back | Menghentikan desync konten |
PIN sekolah/pemerintah adalah yang paling ketat. Armada yang diterapkan dengan pin_min = current, pin_max = current + 2, dan block_emergency = 1 akan menolak "hot fix" yang dikirim pada hari Jumat pukul 18.00 waktu lokal — perangkat akan menahan hingga Senin pagi ketika administrator armada dapat menyetujui secara manual.
5. Jalur Pemulihan Kegagalan
Ada lima mode kegagalan yang berbeda dan satu jalur pemulihan kanonik untuk masing-masing.
| Kegagalan | Deteksi | Pemulihan otomatis | Pengabaian manual |
|---|---|---|---|
| Boot macet (logo) | boot_count < N, tidak ada boot_success dalam 72 jam | Pertukaran A/B ke slot cadangan | Tekan lama tombol daya 12 dtk → menu boot |
| Crash saat mengetuk OID | boot_count dihapus, crash baru dihitung | Boot counter mencapai N → tukar | Reset pabrik, flash ulang via USB-C |
| Korupsi kamus | SHA-256 tidak cocok saat muat | Instal ulang dari slot cadangan | Dorong ulang via OTA |
| Kegagalan tanda tangan paket bahasa | Pemeriksaan tanda tangan saat mount | Kembali ke paket en-US | Tanda tangan ulang dengan subkunci regional |
| Korupsi bootloader | CRC BL tidak cocok | Slot pemulihan (pabrik) | JTAG hanya di pabrik |
Menu "boot" yang diakses melalui tekanan lama merupakan alat pemulihan khusus OEM. Alat ini memungkinkan administrator armada untuk memilih slot, memaksa pertukaran, atau menghapus partisi data pengguna. Fitur ini didokumentasikan di portal OEM kami dan dilindungi oleh PIN 6 digit yang ditetapkan distributor saat boot pertama.
6. Penganggaran Keausan pada Slot Cadangan
Skema A/B mengandalkan slot cadangan yang dapat ditulis setidaknya sekali per rilis firmware. Dengan 86 rilis firmware sejak 2023 dan pena tipikal yang dikirim dengan firmware 2.4.7 lalu diperbarui ke 3.3.1, setiap slot telah ditulis sekitar 6–9 kali dalam tiga tahun. Angka tersebut jauh di dalam anggaran siklus NOR 10.000 dan NAND 60.000–100.000.
Pengaman pemeriksaan keausan di §2 menerapkan minimum 1.000 siklus hapus gratis sebelum menerima penulisan baru. Pada B1 NOR, hal ini berarti kami menolak OTA setelah 9.000 penulisan kumulatif; pada Q8 NAND, setelah 99.000 penulisan kumulatif. Dalam praktiknya, tidak ada pena konsumen yang akan mencapai batas ini sebelum akhir masa pakai.
7. Apa yang Harus Dilakukan Server OTA
Distributor yang menghosting server OTA sendiri harus menerapkan tiga aturan:
- Tandatangani manifes dengan subkunci Ed25519 yang diterbitkan portal OEM. Manifes yang tidak ditandatangani akan ditolak.
- Publikasikan tabel dependensi yang menyatakan versi kamus minimum, versi paket bahasa minimum, dan versi kalibrasi minimum untuk setiap rilis firmware.
- Batasi hingga ≤5.000 perangkat per menit untuk menghindari pemadaman pada POP CDN regional.
Self-hosting gratis untuk distributor yang mengelola lebih dari 10.000 unit; armada yang lebih kecil menggunakan layanan OTA ter-host kami seharga $0,08 per perangkat per tahun.
8. Diagram SVG State Machine A/B dan Evaluasi Pin
9. Harga dan Biaya Operasional
Infrastruktur OTA bersifat bersama; biaya yang Anda lihat diamortisasi di seluruh armada.
| Layanan | Biaya | Catatan |
|---|---|---|
| OTA ter-host (firmware, kamus, LP) | $0,08 per perangkat per tahun | Minimum 1.000 perangkat |
| Lisensi portal OTA self-host | $1.200/tahun | Per distributor |
| Penerbitan subkunci Ed25519 | $480 satu kali | Per wilayah |
| Akses API manifes bertanda tangan | $0 | Termasuk dalam portal OEM |
| Dasbor analitik rollback | $360/tahun | Opsional |
Tips pembeli: Jika Anda mengirim lebih dari 10.000 pena per tahun, lisensi self-hosted akan balik modal dalam 14 bulan dibanding layanan hosted, dan menghilangkan ketergantungan CDN regional.
10. Lampiran: Enam Insiden Rollback Nyata dan Pelajaran yang Kami Petik
Antara Januari 2024 dan Agustus 2026, platform OTA kami memicu rollback otomatis sebanyak enam kali. Tidak satu pun dari keenam insiden tersebut yang menyebabkan brick permanen, namun masing-masing mengubah satu aturan pada state machine kami. Lampiran ini membahas apa yang terjadi, apa yang kami ubah, dan apa pelajaran teknisnya.
10.1 Insiden 2024-04 — Arab Saudi, Firmware 3.0.4, Armada 9.000 Pena
Rilis rutin 3.0.4 mengenai regresi pada jalur pencarian OID yang hanya muncul dengan penumpukan diakritik Arab. 63 pena (0,7%) gagal melewati booting logo. Counter boot konvergen dalam 14 jam, seluruh 63 pena otomatis rollback ke 3.0.3. Perubahan yang dilakukan: kami menambahkan uji sintetis diakritik berdurasi 5 menit ke dalam uji A/B cohort canary, sehingga kelas regresi tersebut akan terdeteksi dalam 96 jam, bukan pada hari ke-14.
10.2 Insiden 2024-07 — Meksiko, Firmware 3.1.0, Armada 4.500 Pena
Bug reasosiasi Wi-Fi muncul setelah 18 hari canary ditambah 7 hari gelombang karena bug tersebut hanya terpicu saat pena berpindah (roaming) di antara dua SSID tertentu. Sebanyak 12 pena mengalami loop reboot selama 90 detik. Penggantian manual melalui tekanan lama tombol daya selama 12 detik berhasil menghentikan loop tersebut. Perubahan yang dilakukan: kami menambahkan batas riwayat SSID sebanyak 4 entri, sehingga driver Wi-Fi berhenti mencoba melakukan reasosiasi ke jaringan yang sudah usang.
10.3 Insiden 2024-11 — Indonesia, Firmware 3.2.0, Armada 6.200 Pena
Terjadi kesalahan perhitungan anggaran aus flash yang menyebabkan bootloader menolak firmware baru pada 8 pena yang sebelumnya telah diperbarui sebanyak 9.800 kali.Perubahan yang dilakukan: kami menaikkan batas bawah lunak dari 500 siklus hapus gratis menjadi 1.000 siklus hapus gratis, dan bootloader kini mencatat peringatan pada 2.000 siklus gratis.
10.4 Insiden 2025-03 — Inggris, Firmware 3.2.2, Armada 2.800 Pena
Ketidakcocokan dependensi kamus menyebabkan 14 pena menolak firmware 3.2.2 karena kamus mereka versi 3.1.7 sedangkan firmware membutuhkan ≥3.1.8. Perubahan yang dilakukan: pemeriksaan dependensi kini memungkinkan firmware diinstal berdampingan dengan kamus versi lama dan memunculkan satu kali prompt kepada pengguna untuk memutakhirkan kamus saat terhubung Wi-Fi berikutnya.
10.5 Insiden 2025-08 — Brasil, Firmware 3.3.0, Armada 14.000 Pena
Clock I2C sensor OID meregang melewati jendela boot pada 0,4% pena karena varians batch kapasitor pada pemasok sensor kami. 56 pena terhenti di logo. Perubahan yang dilakukan: kami menambahkan toleransi rentang clock I2C sebesar 8 ms pada probe boot dan mempersempit jendela IQC dari 6 ms menjadi 4 ms.
10.6 Insiden 2026-02 — UEA, Firmware 3.3.1, Armada 7.500 Pena
Tanda tangan yang tidak cocok dengan region menyebabkan 22 pena menolak pembaruan kamus. Perubahan yang dilakukan: tabel subkunci regional kini di-cache di penyimpanan non-volatile sehingga pena tidak perlu memvalidasi ulang pada setiap pemasangan kamus.
Di seluruh enam insiden, 175 pena melakukan rollback secara otomatis, 14 pena memerlukan override tekan lama secara manual, dan tidak ada satu pun yang menjadi brick permanen. Tingkat brick armada sebesar 0,087% mencakup keenam insiden ini dan 35 rollback kecil yang dipicu oleh uji A/B.
11. Distribusi Visual Wear A/B pada Keluarga Flash
Bagan batang berikut menunjukkan bagaimana counter wear slot cadangan bertambah per 1.000 siklus OTA, dipecah berdasarkan dua keluarga flash di armada kami. Pena NOR (B1/B2/P2) mencapai batas 10K siklus paling awal, dan kebijakan kami adalah memensiunkannya dari cohort OTA setelah melewati 8K siklus. Pena NAND masih memiliki sisa headroom yang sangat memadai.