Bagikan melalui


Spesifikasi protokol Component Firmware Update (CFU)

Spesifikasi ini menjelaskan protokol HID generik untuk memperbarui firmware untuk komponen yang ada pada PC atau aksesori. Spesifikasi ini memungkinkan komponen untuk menerima firmware tanpa mengganggu operasi perangkat selama pengunduhan. Spesifikasi ini mendukung konfigurasi di mana komponen yang menerima firmware mungkin memiliki subkomponen, yang memerlukan gambar firmware terpisah. Spesifikasi ini memungkinkan komponen yang bertanggung jawab untuk memutuskan apakah akan menerima firmware. Ini juga bertindak sebagai pengoptimalan karena gambar firmware hanya dikirim ke komponen jika mampu atau siap menerimanya.

Catatan

CFU tersedia di Windows 10, versi 2004 (Windows 10 Pembaruan Mei 2020) dan versi yang lebih baru.

Konten

Tabel

Tabel 5,1-1 GET_FIRMWARE_VERSION Tata Letak Respons

Tabel 5.1-2 GET_FIRMWARE_VERSION Respons - Tata Letak Header

Tabel 5.1-3 GET_FIRMWARE_VERSION Respons - Bit Header

Tabel 5.1-4 GET_FIRMWARE_VERSION Respons - Versi Komponen dan Tata Letak Properti

Tabel 5.1-5 GET_FIRMWARE_VERSION Respons - Versi Komponen dan Gigitan Properti

Tabel 5.2-1 FIRMWARE_UPDATE_OFFER Tata Letak Perintah

Tabel 5.2-2 FIRMWARE_UPDATE_OFFER Perintah - Tata Letak Informasi Komponen

Tabel 5.2-3 FIRMWARE_UPDATE_OFFER Perintah - Bit Informasi Komponen

Tabel 5.2-4 FIRMWARE_UPDATE_OFFER Command - Tata Letak Versi Firmware

Tabel 5.2-5 FIRMWARE_UPDATE_OFFER Command - Bit Versi Firmware

Tabel 5.2-6 FIRMWARE_UPDATE_OFFER Command - Tata Letak Khusus Vendor

Tabel 5.2-7 FIRMWARE_UPDATE_OFFER Command - Versi Misc. dan Protocol

Tabel 5.2-8 FIRMWARE_UPDATE_OFFER Tata Letak Token Respons

Tabel 5.2-9 FIRMWARE_UPDATE_OFFER Respons - Tata Letak Token

Tabel 5.2-10 FIRMWARE_UPDATE_OFFER Respons - Bit Token

Tabel 5.2-11 FIRMWARE_UPDATE_OFFER Respons - Tolak Tata Letak Alasan

Tabel 5.2-12 FIRMWARE_UPDATE_OFFER Respons - Tolak Bit Alasan

Tabel 5.2-13 FIRMWARE_UPDATE_OFFER Respons Nilai Kode RR

Tabel 5.2-14 FIRMWARE_UPDATE_OFFER Tata Letak Status Respons

Tabel 5.2-15 FIRMWARE_UPDATE_OFFER Respons - Bit Status

Tabel 5.2-16 FIRMWARE_UPDATE_OFFER Nilai Status Respons

Tabel 5,3-1 FIRMWARE_UPDATE_OFFER - Tata Letak Perintah Informasi

Tabel 5.3-2 FIRMWARE_UPDATE_OFFER - Perintah Informasi - Tata Letak Komponen

Tabel 5.3-3 FIRMWARE_UPDATE_OFFER - Perintah Informasi - Bit Komponen

Tabel 5.3-4 FIRMWARE_UPDATE_OFFER - Perintah Informasi - Nilai Kode Informasi

Tabel 5.3-5 FIRMWARE_UPDATE_OFFER - Tata Letak Respons Informasi

Tabel 5.3-6 FIRMWARE_UPDATE_OFFER- Tata Letak Token Respons Paket Informasi

Tabel 5.3-7 FIRMWARE_UPDATE_OFFER - Respons Informasi - Bit Token

Tabel 5.3-8 FIRMWARE_UPDATE_OFFER - Respons Informasi - Tata Letak Kode RR

Tabel 5.3-9 FIRMWARE_UPDATE_OFFER- Respons Informasi Penawaran - Bit Kode RR

Tabel 5.3-10 FIRMWARE_UPDATE_OFFER- Respons Informasi - Nilai Kode RR

Tabel 5.3-11 FIRMWARE_UPDATE_OFFER - Tata Letak Status Respons Informasi Penawaran

Tabel 5.3-12 FIRMWARE_UPDATE_OFFER - Informasi Penawaran - Bit Status Respons

Tabel 5,4-1 FIRMWARE_UPDATE_OFFER - Tata Letak Perintah Yang Diperluas

Tabel 5,4-2 FIRMWARE_UPDATE_OFFER - Paket Perintah Yang Diperluas - Perintah - Tata Letak Komponen

Tabel 5,4-3 FIRMWARE_UPDATE_OFFER - Perintah Diperluas - Bit Komponen

Tabel 5,4-4 FIRMWARE_UPDATE_OFFER - Perintah Diperluas - Nilai Kode Perintah

Tabel 5,4-5 FIRMWARE_UPDATE_OFFER - Tata Letak Respons Paket Perintah Yang Diperluas

Tabel 5.4-6 FIRMWARE_UPDATE_OFFER- Respons Paket Perintah Penawaran - Tata Letak Token

Tabel 5.4-7 FIRMWARE_UPDATE_OFFER - Respons Perintah Penawaran - Bit Token

Tabel 5,4-8 FIRMWARE_UPDATE_OFFER - Tata Letak RR Respons Paket Informasi Penawaran

Tabel 5.4-9 FIRMWARE_UPDATE_OFFER- Respons Perintah Penawaran - Kode RR

Tabel 5.4-10 FIRMWARE_UPDATE_OFFER- Paket Perintah Penawaran - Nilai Kode RR

Tabel 5.4-11 FIRMWARE_UPDATE_OFFER - Tata Letak Status Respons Paket Perintah Penawaran

Tabel 5.4-12 FIRMWARE_UPDATE_OFFER- Menawarkan Kode RR Respons Paket Perintah

Tabel 5,5-1 FIRMWARE_UPDATE_CONTENT Tata Letak Perintah

Tabel 5,5-2 FIRMWARE_UPDATE_CONTENT Tata Letak Header Perintah

Tabel 5,5-3 FIRMWARE_UPDATE_CONTENT Header Bit

Tabel 5,5-4 FIRMWARE_UPDATE_OFFER- Paket Perintah Penawaran - Nilai Bendera

Tabel 5,5-5 FIRMWARE_UPDATE_CONTENT Tata Letak Data Perintah

Tabel 5,5-6 FIRMWARE_UPDATE_CONTENT Command Data Bits

Tabel 5,5-7 FIRMWARE_UPDATE_CONTENT Tata Letak Respons Perintah

Tabel 5,5-8 FIRMWARE_UPDATE_CONTENT Respons - Nomor Urut

Tabel 5,5-9 FIRMWARE_UPDATE_CONTENT - Perintah - Bit Respons

Tabel 5,5-10 FIRMWARE_UPDATE_CONTENT Tata Letak Status Respons

Tabel 5,5-11 FIRMWARE_UPDATE_OFFER - Respons - Bit Status

Tabel 5.5-12 FIRMWARE_UPDATE_OFFER- Respons - Nilai Kode Status

1 Pendahuluan

PC dan aksesori saat ini memiliki komponen internal yang melakukan operasi kompleks. Untuk memastikan produk berkualitas, ada kebutuhan untuk sering memperbarui perilaku perangkat ini di tahap pengembangan selanjutnya atau setelah dikirim ke pelanggan. Pembaruan mungkin memperbaiki masalah fungsi atau keamanan yang diidentifikasi, atau kebutuhan untuk menambahkan fitur baru. Sebagian besar logika kompleks ada di firmware yang berjalan pada perangkat, yang dapat diperbarui.

Spesifikasi ini menjelaskan protokol HID generik untuk memperbarui firmware untuk komponen yang ada pada PC atau aksesorinya. Implementasi HID berada di luar cakupan spesifikasi.

Beberapa fitur protokol adalah:

  • Protokol ini didasarkan pada HID—di mana-mana dan memiliki dukungan windows dalam kotak melalui berbagai bus interkoneksi seperti USB dan I2C. Oleh karena itu, solusi perangkat lunak (driver) yang sama dapat dimanfaatkan untuk memperbarui firmware untuk semua komponen.

    Catatan

    Karena spesifikasinya berbasis paket, mudah untuk menyesuaikannya dengan skenario non-HID.

  • Spesifikasi ini memungkinkan komponen untuk menerima firmware tanpa mengganggu operasi perangkat selama pengunduhan. Ini memungkinkan pengalaman yang lebih baik bagi pengguna karena mereka tidak perlu menunggu proses pembaruan firmware selesai sebelum mereka dapat melanjutkan tugas lain. Firmware baru dapat dipanggil dalam satu operasi atom pada satu waktu yang memiliki dampak minimal terhadap pengguna.

  • Spesifikasi ini mendukung konfigurasi di mana komponen yang menerima firmware mungkin memiliki subkomponen, yang memerlukan gambar firmware terpisah.

    Catatan

    Proses komponen menyerahkan firmware ke sub-komponen berada di luar cakupan spesifikasi ini.

  • Spesifikasi mendukung konsep penawaran dan bergantung pada komponen yang bertanggung jawab untuk memutuskan apakah akan menerima firmware. Keputusan untuk menerima firmware baru tidak sepele. Mungkin ada dependensi antara jenis firmware dan/atau versi dan jenis/versi perangkat keras yang mendasar tempat firmware baru berlaku. Penawaran juga bertindak sebagai mekanisme pengoptimalan karena gambar firmware dikirim ke komponen hanya jika mampu /siap menerimanya.

1.1 Daftar istilah

Istilah Deskripsi
ID Komponen Di perangkat dengan beberapa komponen, ID komponen secara unik mengidentifikasi setiap komponen.
CRC Pemeriksaan Redundansi Siklik

Algoritma hash non-kriptografi yang digunakan untuk menghasilkan hash atau sidik jari blok data. CRC digunakan sebagai pemeriksaan untuk memberikan jaminan bahwa blok data tidak berubah sejak CRC dihitung. CRC tidak sempurna tetapi memberikan keyakinan bahwa data diterima dengan benar.
Perangkat Kumpulan komponen (satu komponen utama dan nol atau lebih subkomponen). Perangkat terlihat oleh sistem operasi sebagai satu unit. Host berinteraksi dengan perangkat, yang biasanya merupakan komponen utama.

Komputer mungkin memiliki beberapa perangkat di dalamnya. Sehubungan dengan spesifikasi ini, komunikasi ke 2 perangkat yang berbeda benar-benar independen.
Driver Driver yang ditulis dengan menggunakan kerangka kerja Windows Driver Foundation (WDF).
Firmware Kode yang berjalan pada perangkat keras fisik. Firmware dapat diperbarui dan biasanya berada dalam memori yang dapat diprogram yang terkait dengan perangkat keras.
Perangkat Keras Sepotong fisik silikon di komputer.
Komponen Utama Sepotong perangkat keras di komputer dan firmware untuk itu. Dalam konteks spesifikasi ini, komponen adalah entitas yang membutuhkan dan menerima pembaruan firmware.
Segment Gambar firmware untuk komponen dapat disegmentasi menjadi segmen yang lebih kecil. Setiap segmen adalah gambar firmware kecil.
ID Segmen Jika firmware komponen disegmentasi menjadi segmen yang lebih kecil, ID segmen adalah pengidentifikasi unik untuk segmen tersebut.
Tanda Tangan Kriptografi berarti menentukan apakah gambar firmware telah diubah dengan cara yang tidak sah. Tanda tangan bersifat opsional tetapi direkomendasikan dan di luar cakupan spesifikasi ini.
Subkomponen Tergantung pada arsitektur perangkat keras, tidak semua komponen mungkin terlihat oleh sistem operasi, karena mungkin terhubung ke hilir komponen yang terlihat oleh sistem. Komponen-komponen ini disebut sebagai subkomponen dalam spesifikasi ini.
KLT Koleksi Tingkat Atas HID.
Token Pengidentifikasi untuk sesi host. Host membuat token dan mengirimkannya dalam perintah, dan perangkat mengembalikannya dalam respons. Token dapat digunakan untuk menserialisasikan transaksi tertentu atau untuk mengidentifikasi bahwa sesi telah hilang dan yang lain dimulai.

1.2 Cakupan

1.2.1 Goals

  • Solusi agnostik bus diperlukan untuk menghindari protokol baru untuk setiap jenis bus. HID di mana-mana dan memenuhi persyaratan tersebut.

  • Kemampuan untuk mendukung pembaruan firmware untuk perangkat multi-komponen, di mana satu komponen bertindak sebagai komponen utama dan yang lain adalah subkomponen yang terhubung ke komponen utama. Setiap komponen memerlukan firmware sendiri dengan dependensi non-sepele di antara satu sama lain.

  • Model driver umum untuk mengunduh gambar firmware ke komponen. Komponen kemudian memiliki algoritma khusus subkomponen untuk diteruskan ke subkomponen. Subkomponen juga dapat melakukan pemeriksaan validitas pada firmware mereka dan meneruskan hasilnya kembali ke komponen utama.

  • Kemampuan untuk mendukung pembaruan firmware saat operasi perangkat sedang berlangsung.

  • Kemampuan untuk memperbarui/memutar kembali firmware di perangkat produksi melalui alat resmi, dan memperbarui perangkat di pasar melalui Windows Update.

  • Fleksibilitas untuk mendukung firmware dalam pengembangan/firmware di pasar.

  • Kemampuan untuk mengegmentasi gambar firmware besar menjadi segmen yang lebih kecil untuk memudahkan komponen menerima gambar firmware.

1.2.2 Non-Goals

  • Tentukan format internal gambar firmware: Untuk host, gambar firmware adalah sekumpulan entri alamat dan payload.

  • Menandatangani/mengenkripsi/memvalidasi firmware yang diterima: Spesifikasi ini tidak menjelaskan cara menandatangani dan mengenkripsi gambar firmware. Diperlukan bahwa firmware yang diharapkan saat ini yang berjalan pada komponen memvalidasi firmware yang diunduh.

  • Tentukan mekanisme tentang bagaimana komponen berinteraksi dengan subkomponen: Host berinteraksi dengan perangkat sebagai satu unit, biasanya komponen utama. Komponen harus bertindak sebagai jembatan untuk komunikasi yang terkait dengan firmware subkomponen.

2 Arsitektur Perangkat Keras yang Didukung

Untuk mendukung desain perangkat keras yang fleksibel, protokol mendukung perangkat multi-komponen di mana setiap komponen memerlukan gambar firmwarenya sendiri. Dalam desain, satu komponen adalah komponen utama dan subkomponen dependen terhubung ke komponen utama tersebut. Setiap komponen dijelaskan secara unik oleh ID komponen.

Perangkat multi-komponen terlihat oleh sistem operasi sebagai satu unit. Host hanya berinteraksi dengan perangkat, biasanya komponen utama menggunakan protokol CFU ini. Komunikasi antara komponen dan subkomponennya berada di luar cakupan spesifikasi ini.

Pada PC, mungkin ada banyak perangkat yang berbeda (di mana perangkat mungkin memiliki satu atau beberapa komponen di sana). Dalam konteks protokol ini, komunikasi ke setiap perangkat bersifat independen. Setiap perangkat memiliki instans host yang sesuai.

Firmware Perangkat, Komponen Utama, dan Sub-komponennya.

3 Prasyarat Protokol

Bagian ini mencantumkan persyarat dan praktik terbaik yang harus diterapkan untuk memanfaatkan protokol ini:

  • Penggunaan gambar atomik

    Gambar firmware untuk komponen tidak digunakan sampai seluruh gambar firmware berhasil diunduh. Jika firmware dibagi menjadi beberapa segmen, gambar tidak boleh digunakan sampai segmen akhir diterima dari pengirim. Pemeriksaan integritas harus dilakukan pada gambar akhir. Disarankan agar transportasi, digunakan untuk mengirimkan gambar firmware, memiliki koreksi kesalahan dan mencoba kembali mekanisme untuk menghindari unduhan berulang jika terjadi kesalahan transportasi.

  • Pembaruan firmware tidak boleh mengganggu operasi perangkat

    Perangkat yang menerima gambar firmware harus dapat beroperasi selama pembaruan. Perangkat harus memiliki memori tambahan untuk menyimpan dan memvalidasi firmware yang masuk, sementara firmwarenya saat ini tidak ditimpa.

  • Autentikasi dan integritas

    Implementor memutuskan faktor-faktor yang merupakan gambar firmware otentik. Disarankan agar firmware komponen saat ini setidaknya harus memvalidasi CRC dari gambar firmware yang masuk. Firmware saat ini juga harus menggunakan tanda tangan digital, atau, algoritma deteksi kesalahan lainnya. Jika validasi gagal, firmware menolak pembaruan. Pemulihan Kegagalan

    Jika gambar firmware diunduh dan tidak berhasil, perangkat tidak boleh memanggil firmware baru dan terus beroperasi dengan firmware yang ada. Host dapat mencoba kembali pembaruan. Frekuensi percobaan ulang spesifik implementasi.

  • Kerahasiaan

    Pilihan. Segmen firmware dapat dienkripsi. Teknik enkripsi dan dekripsi berada di luar cakupan spesifikasi ini. Spesifikasi ini memperlakukan payload firmware sebagai aliran data, terlepas dari apakah itu dienkripsi.

  • Perlindungan pembatalan

    Kebijakan putar kembali diberlakukan oleh komponen utama dan spesifik implementasi. Firmware saat ini pada komponen memvalidasi gambar firmware masuk terhadap kebijakan internal seperti nomor versi harus lebih baru, atau jenis rilis tidak dapat dialihkan dari rilis ke debug, dan sebagainya. Protokol mengizinkan olahpesan untuk menunjukkan bahwa pembaruan diterima meskipun melanggar kebijakan putar kembali.

4 Gambaran Umum Protokol CFU

Protokol CFU adalah sekumpulan perintah dan respons yang diperlukan untuk mengirim gambar firmware baru dari host ke perangkat tempat firmware dimaksudkan.

Pada tingkat tinggi, protokol melakukan iterasi melalui semua gambar firmware untuk dikirim ke perangkat. Untuk setiap gambar firmware, host menawarkan untuk mengirim file ke perangkat. Hanya jika perangkat menerima penawaran, host akan mengirim file.

Untuk mendukung kasus di mana urutan pembaruan perangkat memiliki dependensi, perangkat mungkin tidak menerima penawaran tertentu dalam pass pertama, oleh karena itu protokol memungkinkan host untuk mengirim ulang semua penawaran firmware ke perangkat sampai semua dependensi diselesaikan.

4.1 Urutan Perintah Pemrograman Pembaruan Firmware

Berikut adalah urutan perintah CFU untuk memperbarui gambar firmware.

Urutan Perintah Pemrograman Pembaruan Firmware.

4.1.1 Status: Pemberitahuan Yang Diinisialisasi Host

Setelah host menginisialisasi dirinya sendiri dan telah mengidentifikasi serangkaian penawaran yang perlu dikirim ke perangkat, host mengeluarkan perintah OFFER_INFO_START_ENTIRE_TRANSACTION untuk menunjukkan kepada komponen bahwa host sekarang diinisialisasi. Tujuan dari perintah ini adalah untuk memberi tahu firmware perangkat saat ini bahwa instans baru host tersedia. Pemberitahuan ini berguna ketika instans host sebelumnya dihentikan secara tiba-tiba. Perangkat harus menyelesaikan perintah ini dengan sukses.

4.1.2 Status: Pemberitahuan OFFER_INFO_START_OFFER_LIST

Dalam status ini, host mengeluarkan perintah OFFER_INFO_START_OFFER_LIST untuk menunjukkan bahwa siap untuk mengirim penawaran ke firmware perangkat saat ini. Komponen utama perangkat harus menyelesaikan perintah ini dengan sukses.

Perintah ini berguna karena host dapat mengirim semua penawaran ke perangkat lebih dari sekali.

4.1.3 Status: Kirim perintah FIRMWARE_UPDATE_OFFER

Host mengirimkan penawaran ke komponen utama (atau subkomponennya) untuk memeriksa apakah komponen ingin menerima/menolak firmware. Penawaran berisi semua metadata yang diperlukan tentang gambar firmware, sehingga firmware saat ini pada komponen dapat memutuskan apakah akan menerima, menunggu, melompati, atau menolak penawaran.

Penawaran mungkin untuk komponen utama atau subkomponen. Jika komponen dapat menerima penawaran, komponen akan mempersiapkan diri untuk menerima firmware. Ini mungkin melibatkan persiapan bank memori untuk menerima gambar firmware yang masuk. Komponen mungkin tidak menerima penawaran, misalnya, komponen mungkin sudah memiliki versi firmware yang lebih baru (atau sama) yang ingin dikirim host. Untuk alasan selengkapnya, lihat contoh yang dijelaskan dalam Lampiran 1: Contoh Urutan Perintah Pemrograman Pembaruan Firmware.

Bahkan jika penawaran diterima, komponen utama mungkin masih menolak gambar firmware setelah pengunduhan untuk kegagalan integritas dan/atau pemeriksaan putar kembali terhadap gambar aktual yang diterima. Komponen harus memeriksa setiap properti gambar firmware terlepas dari informasi apa pun dalam penawaran.

Host mengeluarkan perintah FIRMWARE_UPDATE_OFFER untuk memberi tahu komponen utama tentang gambar firmware yang ingin dikirim host.

Jika komponen menerima penawaran, komponen tersebut dengan status FIRMWARE_UPDATE_OFFER_ACCEPT sehingga menerima penawaran.

Jika firmware perangkat sibuk dan komponen utama tidak dapat menerima ini atau penawaran berikutnya saat ini, firmware perangkat mengirimkan respons sibuk dengan status FIRMWARE_UPDATE_OFFER_BUSY.

Jika firmware saat ini tertarik dengan penawaran, namun tidak dapat menerima penawaran (misalnya, karena dependensi pada pembaruan yang hilang untuk subkomponen) itu merespons dengan FIRMWARE_UPDATE_OFFER_SKIP yang menunjukkan bahwa ia tertarik pada firmware ini namun tidak dapat menerimanya. Host kemudian melanjutkan ke penawaran berikutnya dan harus menawarkan kembali firmware ini nanti.

Jika firmware saat ini tidak tertarik dengan penawaran (misalnya, itu adalah versi yang lebih lama), maka firmware merespons dengan status FIRMWARE_UPDATE_OFFER_REJECT memberikan alasan penolakan yang sesuai. Status ini tidak menunjukkan bahwa host tidak dapat mengirim ulang penawaran ini di masa mendatang. Host biasanya mengirim setiap penawaran setiap kali menginisialisasi atau mengirim ulang daftar penawaran ke perangkat (lihat Status: OFFER_INFO_START_OFFER_LIST Pemberitahuan).

4.1.4 Status: Kirim Firmware

Dalam keadaan ini host mulai mengirim gambar firmware ke komponen utama, yang komponennya sebelumnya telah menerima penawaran.

Karena konten gambar firmware kemungkinan melebihi batas payload dari satu perintah, host memecah gambar firmware menjadi paket. Host mengirimkan setiap paket secara berurutan dalam perintah FIRMWARE_UPDATE CONTENT terpisah. Komponen utama harus menghasilkan paket respons untuk setiap perintah.

Setiap perintah FIRMWARE_UPDATE CONTENT menjelaskan alamat offset yang menyertakan payload firmware parsial. Komponen menggunakan offset untuk menentukan alamat tempat payload firmware parsial harus disimpan. Perangkat menulis konten ke lokasi yang sesuai dan mengakui perintah dengan mengirim respons.

Untuk paket pertama yang dikirim host, ia mengatur bendera FIRMWARE_UPDATE_FLAG_FIRST_BLOCK, menunjukkan ke perangkat bahwa ini adalah paket pertama dari gambar firmware. Jika perangkat belum menyiapkan dirinya sendiri untuk menerima firmware, perangkat dapat melakukannya saat ini.

Untuk paket terakhir, host mengirim, ia mengatur bendera FIRMWARE_UPDATE_FLAG_LAST_BLOCK.

Setelah firmware saat ini pada perangkat menulis payload firmware parsial yang disertakan dalam perintah ini, firmware harus melakukan pemeriksaan validasi dan autentikasi pada gambar firmware yang masuk sebelum mengirim respons. Ini minimal mencakup:

  • Pemeriksaan CRC untuk memverifikasi integritas seluruh gambar firmware.

  • Jika pemeriksaan CRC berhasil, verifikasi opsional tanda tangan gambar masuk.

  • Setelah pemeriksaan tanda tangan opsional, periksa versi untuk memastikan bahwa versi firmware baru sama atau lebih baru dari firmware yang ada.

Jika gambar firmware yang masuk dibagi menjadi segmen yang lebih kecil, terserah firmware saat ini untuk menentukan apakah itu segmen terakhir dari gambar firmware, dan kemudian menyertakan semua segmen sebagai bagian dari validasi.

Jika pemeriksaan sebelumnya lolos, firmware saat ini dapat mengatur perangkat untuk bertukar ke gambar baru pada reset berikutnya dan melaporkan keberhasilan ke host. Biasanya, komponen tidak memulai reset mandiri. Ini untuk mencegah gangguan dalam perangkat lunak, firmware, entitas perangkat keras apa pun yang berinteraksi dengan komponen. Namun, itu bukan persyaratan dan dapat bervariasi tergantung pada implementasinya.

Jika langkah-langkah verifikasi gagal, firmware tidak boleh menyiapkan pertukaran pada reset berikutnya dan harus menunjukkan respons kegagalan terhadap host.

4.1.5 Status Keputusan: Apakah ada lebih banyak penawaran

Dalam status ini, host menentukan apakah ada lebih banyak penawaran untuk dikirim ke perangkat.

4.1.6 Status: Pemberitahuan OFFER_INFO_END_OFFER_LIST

Status ini tercapai ketika host telah mengirim semua penawaran ke komponen utama di firmware perangkat saat ini. Host mengirimkan perintah OFFER_INFO_END_OFFER_LIST untuk menunjukkan bahwa host telah mengirim semua penawaran ke komponen.

Perangkat harus menyelesaikan perintah ini dengan sukses.

4.1.7 Status Keputusan: Daftar Penawaran Pemutaran Ulang

Host menentukan apakah perlu mengirim ulang semua penawaran. Kasus ini mungkin terjadi jika sebelumnya komponen utama telah melewatkan beberapa penawaran dan menerima beberapa penawaran. Host harus memutar ulang daftar penawaran lagi.

Mungkin ada logika spesifik implementasi lainnya yang dapat mengakibatkan keputusan untuk memutar ulang daftar penawaran.

4.1.8 Status: Perangkat Sibuk

Status ini menyiratkan bahwa perangkat mengembalikan respons sibuk terhadap penawaran.

Host mengirimkan perintah OFFER_NOTIFY_ON_READY, di mana perangkat tidak merespons dengan penerimaan hingga perangkat gratis.

5 Format Paket Protokol CFU

Protokol CFU diimplementasikan sebagai serangkaian perintah dan respons. Protokol berurutan bersifat berurutan. Untuk setiap perintah yang dikirim host ke komponen, komponen diharapkan merespons (kecuali dinyatakan sebaliknya secara eksplisit dalam spesifikasi ini). Host tidak mengirim perintah berikutnya, sampai respons yang valid diterima untuk perintah sebelumnya yang dikirimnya.

Jika komponen tidak merespons dalam periode, atau mengirim respons yang tidak valid, host dapat memulai ulang proses dari awal. Protokol ini tidak menentukan nilai batas waktu tertentu.

Ada perintah untuk mendapatkan informasi versi firmware saat ini pada komponen; untuk mengirim penawaran dan mengirim gambar firmware.

Namun, host tidak perlu menahan penawaran berdasarkan respons yang diterima dari komponen utama tentang informasi versi yang dikueri. Informasi ini dibuat dapat ditemukan untuk pengelogan atau tujuan lain.

5.1 GET_FIRMWARE_VERSION

Mendapatkan versi firmware saat ini dari komponen utama (dan subkomponennya). Perintah tidak memiliki argumen apa pun.

5.1.1 Perintah

Perintah ini dikirim oleh host untuk mengkueri versi firmware saat ini pada komponen utama (dan subkomponennya). Host dapat menggunakannya untuk mengonfirmasi apakah firmware berhasil diperbarui. Saat menerima perintah ini, komponen utama merespons dengan versi firmware untuk dirinya sendiri dan semua subkomponen.

5.1.2 Respons

Komponen merespons dengan versi firmware komponen utama dan subkomponen. Ukuran respons adalah 60 byte yang memungkinkan informasi versi hingga tujuh komponen (satu primer dan hingga enam subkomponen).

Tabel 5,1-1 GET_FIRMWARE_VERSION Tata Letak Respons

GET_FIRMWARE_VERSION Tata Letak Respons.

5.1.2.1 Header
Tabel 5.1-2 GET_FIRMWARE_VERSION Respons - Tata Letak Header

Respons GET_FIRMWARE_VERSION - Tata Letak Header.

Header untuk respons menyediakan informasi berikut.

Tabel 5.1-3 GET_FIRMWARE_VERSION Respons - Bit Header
Bit Offset Bidang Ukuran Deskripsi
0 Jumlah Komponen 8 Jumlah komponen yang dapat diunduh yang dikelola melalui mekanisme ini untuk Komponen ini. Jumlah Komponen menentukan ukuran tabel maksimum. Saat ini hingga 7 komponen didukung untuk memastikan bahwa respons dapat sesuai dalam 60 byte yang diizinkan.
8 Rsvd 16 Bidang yang dipesan. Pengirim harus mengatur ini ke 0. Penerima harus mengabaikan nilai ini.
24 Versi Protokol 4 Bit revisi pembaruan firmware mewakili revisi Protokol Pembaruan FW saat ini sedang digunakan dalam transportasi. Untuk antarmuka yang ditentukan di sini, Revisi Pembaruan FW harus 0010b.
28 Rsvd 3 Bidang yang dipesan. Pengirim harus mengatur ini ke 0. Penerima harus mengabaikan nilai ini.
31 E 1 Bendera ekstensi adalah kait protokol di masa mendatang untuk memungkinkan komponen tambahan dilaporkan.
5.1.2.2 Versi dan Properti Komponen

Untuk setiap komponen, dua DWORD digunakan untuk menjelaskan properti komponen hingga 7 komponen. Jika jumlah komponen di header kurang dari 7, DWORDS yang tidak digunakan di akhir respons harus diatur ke 0.

Tabel 5.1-4 GET_FIRMWARE_VERSION Respons - Versi Komponen dan Tata Letak Properti

Respons GET_FIRMWARE_VERSION - Versi Komponen dan Tata Letak Properti.

Setiap informasi spesifik komponen dijelaskan dalam dua DWORD sebagai berikut:

Tabel 5.1-5 GET_FIRMWARE_VERSION Respons - Versi Komponen dan Gigitan Properti
Bit Offset Bidang Ukuran Deskripsi
0 Versi firmware 32 Mengembalikan versi firmware saat ini untuk komponen tersebut. Spesifikasi ini tidak mengamanatkan format tertentu untuk versi firmware. Lihat bagian Versi Firmware untuk panduan.
32 Bank 2 Pilihan. Tergantung pada arsitekturnya, perangkat keras komponen mungkin memiliki beberapa bank tempat firmware dapat disimpan. Tergantung pada implementasinya, pengirim dapat menentukan bank tempat firmware saat ini berada. Bidang ini Wajib Bersyukur - dukungan bersifat opsional, namun tidak boleh digunakan untuk tujuan lain.
34 Dicadangkan 2 Bidang yang dipesan. Pengirim harus mengatur ini ke 0. Penerima harus mengabaikan nilai ini.
36 Vendor Spesifik 4 Bidang khusus vendor yang dapat digunakan secara spesifik implementasi.

Vendor dapat menggunakan bit ini untuk mengodekan informasi seperti:

- Jenis firmware: Pra-rilis/host mandiri/produksi; debug/ritel

- Fase pengembangan

- ID produk, untuk mencegah komponen menerima firmware untuk produk lain menggunakan protokol pembaruan yang sama.
40 ID Komponen 8 Pengidentifikasi unik untuk komponen.
48 Vendor Spesifik 16 Bidang khusus vendor yang dapat digunakan secara spesifik implementasi.

5.1.3 Pemetaan ke HID

Ini diimplementasikan sebagai permintaan HID Get Feature dengan ukuran respons 60 byte, selain ID Laporan. Panjang laporan fitur mengakomodasi seluruh respons GET_FIRMWARE_VERSION. Tidak ada data yang terkait dengan permintaan Dapatkan Fitur dari host.

5.2 FIRMWARE_UPDATE_OFFER

Menentukan apakah komponen utama menerima atau menolak firmware.

5.2.1 Perintah

Host mengirimkan perintah ini ke komponen untuk menentukan apakah ia menerima atau menolak firmware. Host harus mengirim penawaran dan komponen harus menerima penawaran sebelum host dapat mengirim firmware.

Paket perintah FIRMWARE_UPDATE_OFFER didefinisikan sebagai berikut.

Tabel 5,2-1 tata letak perintah FIRMWARE_UPDATE_OFFER

FIRMWARE_UPDATE_OFFER Tata Letak Perintah.

5.2.1.1 Informasi Komponen
Tabel 5.2-2 perintah FIRMWARE_UPDATE_OFFER - Tata Letak Informasi Komponen

Perintah FIRMWARE_UPDATE_OFFER - Tata Letak Informasi Komponen.

Bit byte Informasi Komponen dijelaskan dalam tabel ini.

Tabel 5.2-3 perintah FIRMWARE_UPDATE_OFFER - Bit Informasi Komponen
Bit Offset Bidang Ukuran Deskripsi
0 Nomor Segmen 8 Bidang ini digunakan jika firmware untuk komponen disegmentasi menjadi segmen yang lebih kecil. Jika digunakan, nilai ini menunjukkan segmen yang terkandung dalam paket payload berikutnya. Misalnya - jika gambar firmware untuk komponen sangat besar dan komponen utama hanya dapat mengambil bagian gambar yang lebih kecil pada satu waktu, bidang ini dapat digunakan untuk menunjukkan bahwa penawaran ini adalah untuk segmen ke-i dari gambar lengkap. Penawaran terpisah dapat dikirim ke komponen utama yang berisi segmen gambar ke-1 i dan sebagainya.
8 Dicadangkan 6 Bidang yang dipesan. Pengirim harus mengatur ini ke 0. Penerima harus mengabaikan nilai ini.
14 I 1 Reset Segera Paksa (I)

- Nilai bit ini digunakan untuk menunjukkan kepada komponen untuk segera mengatur ulang dirinya sendiri setelah unduhan firmware selesai dan diverifikasi untuk segera memanggilnya.

- Bendera ini ditujukan untuk fase pengembangan.
15 V 1 Paksa Abaikan Versi (V)

- Bendera ini ditujukan untuk gambar firmware pra-rilis atau debug. Ini menunjukkan kepada komponen untuk tidak menolak firmware berdasarkan versi firmware.

- Bendera ini ditujukan untuk fase pengembangan. Ini dapat digunakan untuk dengan sengaja memutar kembali ke versi firmware sebelumnya.

- Bendera ini harus diabaikan oleh firmware produksi.
16 ID Komponen 8 Byte ini digunakan untuk skenario multi-komponen. Bidang ini dapat digunakan untuk mengidentifikasi subkomponen yang penawarannya dimaksudkan. Jika tidak digunakan, nilainya harus 0. Nilai yang mungkin dari ID komponen adalah sebagai berikut:

1 - 0xDF: Valid

0xE0 - 0xFD: Dicadangkan. Jangan gunakan.

0xFF: Penawaran ini adalah paket informasi penawaran khusus. Lihat Informasi FIRMWARE_UPDATE_OFFER untuk detailnya.

0xFE : Penawaran adalah paket perintah penawaran khusus. Lihat bagian FIRMWARE_UPDATE_OFFER Diperluas untuk detailnya.
24 Token 8 Host menyisipkan token unik dalam paket penawaran ke komponen. Token ini harus dikembalikan oleh komponen dalam respons penawaran.<

Ini berguna jika ada kebutuhan komponen untuk membedakan antara host/jenis host yang berbeda.

Nilai yang tepat untuk digunakan adalah implementasi khusus. Misalnya, satu nilai dapat digunakan untuk driver dan satu lagi untuk aplikasi. Ini memungkinkan firmware perangkat saat ini untuk mempertangungjawabkan potensi beberapa pengirim perintah CFU. Salah satu implementasi yang mungkin adalah menerima perintah CFU pertama dan menolak semua perintah lain dengan token yang berbeda sampai transaksi CFU pertama selesai.
5.2.1.2 Versi Firmware

Keempat byte ini mewakili firmware versi 32-bit. Format untuk versi firmware tidak diamanatkan oleh spesifikasi ini. Berikut ini disarankan.

Tabel 5.2-4 FIRMWARE_UPDATE_OFFER Command - Tata Letak Versi Firmware

Perintah FIRMWARE_UPDATE_OFFER - Tata Letak Versi Firmware.

Format untuk versi firmware tidak diamanatkan oleh spesifikasi ini, namun berikut ini adalah pedoman yang direkomendasikan.

Tabel 5.2-5 FIRMWARE_UPDATE_OFFER Command - Bit Versi Firmware
Bit Offset Bidang Ukuran Deskripsi
0 Varian 8 Bidang ini dapat dijelaskan untuk membedakan antara firmware pra-rilis dan firmware produksi. Ini mungkin menunjukkan jenis tanda tangan yang digunakan untuk menandatangani firmware.
8 Versi Minor 16 Nilai bidang ini harus diperbarui untuk setiap build firmware.

Nilai bidang ini harus diperbarui untuk setiap build firmware.
24 Versi Utama 8 Bidang ini adalah versi utama dari gambar firmware. Bidang ini harus diperbarui saat mengirim lini produk baru, pembaruan baru utama untuk firmware, dan sebagainya.
5.2.1.3 Vendor Spesifik

Keempat byte ini dapat digunakan untuk mengodekan informasi kustom apa pun dalam penawaran yang khusus untuk implementasi vendor.

5.2.1.4 Misc. dan Versi protokol

Keempat byte ini dapat digunakan untuk mengodekan informasi kustom apa pun dalam penawaran yang khusus untuk implementasi vendor.

Tabel 5.2-6 perintah FIRMWARE_UPDATE_OFFER - Tata Letak Khusus Vendor

Perintah FIRMWARE_UPDATE_OFFER - Tata Letak Khusus Vendor.

Bit byte Khusus Vendor dijelaskan dalam tabel ini.

Tabel 5.2-7 FIRMWARE_UPDATE_OFFER Command - Versi Misc. dan Protocol
Bit Offset Bidang Ukuran Deskripsi
0 Versi Protokol 4 Bidang ini harus diatur ke 0010b yang menunjukkan bahwa host/penawaran sesuai dengan versi 2 protokol CFU.
4 Dicadangkan 4 Dicadangkan. Jangan gunakan.
8 Dicadangkan 8 Dicadangkan. Jangan gunakan.
16 Vendor Spesifik 16 Bidang ini dapat digunakan untuk mengodekan informasi kustom apa pun dalam penawaran yang khusus untuk implementasi vendor.

5.2.2 Respons

Paket FIRMWARE_UPDATE_OFFER Response didefinisikan sebagai berikut.

Tabel 5.2-8 FIRMWARE_UPDATE_OFFER Tata Letak Token Respons

FIRMWARE_UPDATE_OFFER Tata Letak Token Respons.

5.2.2.1 Token
Tabel 5.2-9 FIRMWARE_UPDATE_OFFER Respons - Tata Letak Token

Respons FIRMWARE_UPDATE_OFFER - Tata Letak Token.

Bit byte Token dijelaskan dalam tabel ini.

Tabel 5.2-10 FIRMWARE_UPDATE_OFFER Respons - Bit Token
Bit Offset Bidang Ukuran Deskripsi
0 Dicadangkan 8 Dicadangkan. Jangan gunakan.
8 Dicadangkan 8 Dicadangkan. Jangan gunakan.
16 Dicadangkan 8 Dicadangkan. Jangan gunakan.
24 Token 8 Token untuk mengidentifikasi host.
5.2.2.2 Dicadangkan (B7 - B4)

Dicadangkan. Jangan gunakan.

5.2.2.3 Alasan Penolakan (RR)
Tabel 5.2-11 FIRMWARE_UPDATE_OFFER Respons - Tolak Tata Letak Alasan

Respons FIRMWARE_UPDATE_OFFER - Tolak Tata Letak Alasan.

Tabel 5.2-12 FIRMWARE_UPDATE_OFFER Respons - Tolak Bit Alasan

Bit byte Tolak Alasan dijelaskan dalam tabel ini.

Bit Offset Bidang Ukuran Deskripsi
0 Kode RR 8 Kode Alasan Penolakan yang menunjukkan alasan yang disediakan oleh komponen untuk menolak penawaran. Nilai ini tergantung pada bidang Status. Untuk pemetaan Status ke Kode RR, lihat Tabel 5.2-13.
8 Dicadangkan 24 Dicadangkan. Jangan gunakan.
Tabel 5.2-13 FIRMWARE_UPDATE_OFFER Respons Nilai Kode RR

Nilai yang mungkin untuk byte Kode RR dijelaskan dalam tabel ini.

Kode RR Nama Deskripsi
0x00 FIRMWARE_OFFER_REJECT_OLD_FW Penawaran ditolak karena versi firmware yang ditawarkan lebih lama atau sama dengan firmware saat ini.
0x01 FIRMWARE_OFFER_REJECT_INV_COMPONENT Penawaran ditolak karena firmware yang ditawarkan tidak berlaku untuk platform produk. Hal ini dapat disebabkan oleh ID komponen yang tidak didukung atau gambar yang ditawarkan tidak kompatibel dengan perangkat keras sistem.
0x02 FIRMWARE_UPDATE_OFFER SWAP_PENDING Firmware komponen telah diperbarui namun pertukaran ke firmware baru tertunda. Tidak ada pemrosesan Pembaruan Firmware lebih lanjut yang dapat terjadi sampai pertukaran selesai, biasanya melalui reset.
0x03 - 0x08 (Dicadangkan) Dicadangkan. Jangan gunakan.
0x09 - 0xDF (Dicadangkan) Dicadangkan. Jangan gunakan.
0xE0 - 0xFF (Khusus Vendor) Nilai-nilai ini digunakan oleh perancang protokol dan maknanya spesifik untuk vendor.
5.2.2.4 Status
Tabel 5.2-14 FIRMWARE_UPDATE_OFFER Tata Letak Status Respons

FIRMWARE_UPDATE_OFFER Tata Letak Status Respons.

Bit byte Status dijelaskan dalam tabel ini.

Tabel 5.2-15 FIRMWARE_UPDATE_OFFER Respons - Bit Status
Bit Offset Bidang Ukuran Deskripsi
0 Status 8 Nilai ini menunjukkan keputusan komponen untuk menerima, menunggu, melewati, atau menolak penawaran. Komponen memberikan alasan dalam nilai bidang Kode RR. Untuk pemetaan Status ke Kode RR, lihat Tabel 5.2-16.
8 Dicadangkan 24 Dicadangkan. Jangan gunakan.

Nilai yang mungkin untuk byte Status dijelaskan dalam tabel ini.

Tabel 5.2-16 FIRMWARE_UPDATE_OFFER Nilai Status Respons
Status Nama Deskripsi
0x00 FIRMWARE_UPDATE_OFFER_SKIP Komponen telah memutuskan untuk melewati penawaran. Host harus menawarkannya lagi nanti.
0x01 FIRMWARE_UPDATE_OFFER_ACCEPT Komponen telah memutuskan untuk menerima penawaran.
0x02 FIRMWARE_UPDATE_OFFER_REJECT Komponen telah memutuskan untuk menolak penawaran.
0x03 FIRMWARE_UPDATE_OFFER_BUSY Perangkat sibuk, dan host harus menunggu sampai perangkat siap.
0x04 FIRMWARE_UPDATE_OFFER_COMMAND Digunakan saat ID Komponen dalam byte Informasi Komponen (lihat Informasi Komponen 5.1.2.1.1) diatur ke 0xFE.

Untuk Kode Perintah yang diatur ke permintaan OFFER_NOTIFY_ON_READY, menunjukkan aksesori siap menerima penawaran tambahan.
0xFF FIRMWARE_UPDATE_CMD_NOT_SUPPORTED Permintaan penawaran tidak dikenali.

5.2.3 Pemetaan ke Protokol HID

Pesan dikeluarkan untuk komponen melalui mekanisme Laporan Output HID , dengan menggunakan ID Laporan Utilitas HID khusus untuk Pembaruan Firmware. TLC Utilitas HID untuk digunakan yang dijelaskan dalam Lampiran.

5.3 FIRMWARE_UPDATE_OFFER - Informasi

Jika ID Komponen dalam byte Informasi Komponen (lihat Informasi Komponen) diatur ke 0xFF, maka bit (15 byte) didefinisikan ulang untuk menunjukkan Informasi Penawaran Saja, dari Host ke komponen. Mekanisme ini memungkinkan ekstensibilitas dan cara bagi Host untuk memberikan informasi spesifik kepada perangkat seperti Daftar Penawaran Mulai, Daftar Penawaran Akhir, Mulai Seluruh Transaksi. Paket Informasi Penawaran selalu segera Diterima oleh komponen.

5.3.1 Perintah

Paket Perintah FIRMWARE_UPDATE_OFFER -Information didefinisikan sebagai berikut:

Tabel 5.3-1 FIRMWARE_UPDATE_OFFER - Tata Letak Perintah Informasi

FIRMWARE_UPDATE_OFFER - Tata Letak Perintah Informasi.

5.3.1.1 Komponen
Tabel 5.3-2 FIRMWARE_UPDATE_OFFER - Perintah Informasi - Tata Letak Komponen

FIRMWARE_UPDATE_OFFER - Perintah Informasi - Tata Letak Komponen.

Bit byte Komponen dijelaskan dalam tabel ini.

Tabel 5.3-3 FIRMWARE_UPDATE_OFFER - Perintah Informasi - Bit Komponen
Bit Offset Bidang Ukuran Deskripsi
0 Kode Informasi 8 Nilai ini menunjukkan jenis informasi. Nilai ini bukan bitmask dan hanya bisa menjadi salah satu nilai yang mungkin dijelaskan dalam Tabel 5,3-4.
8 Dicadangkan. 8 Dicadangkan. Jangan gunakan.
16 ID Komponen 8 Atur ke 0xFF.
24 Token Host menyisipkan token unik dalam paket penawaran ke komponen. Token ini harus dikembalikan oleh komponen dalam respons penawaran.
Tabel 5.3-4 FIRMWARE_UPDATE_OFFER - Perintah Informasi - Nilai Kode Informasi
Status Nama Deskripsi
0x00 OFFER_INFO_START_ENTIRE_TRANSACTION Menunjukkan bahwa host baru, atau telah dimuat ulang, dan seluruh pemrosesan penawaran dimulai (kembali).
0x01 OFFER_INFO_START_OFFER_LIST Menunjukkan awal daftar Penawaran dari host jika Accessory memiliki aturan unduhan yang terkait dengan memastikan satu subkomponen diperbarui sebelum subkomponen lain dalam sistem.
0x02 OFFER_INFO_END_OFFER_LIST Menunjukkan akhir daftar Penawaran dari host.
5.3.1.2 Cadangan B7 - B4

Dicadangkan. Jangan gunakan.

5.3.1.3 Cadangan B11 - B8

Dicadangkan. Jangan gunakan.

5.3.1.4 Cadangan B15 - B12

Dicadangkan. Jangan gunakan.

5.3.2 Respons

Balasan paket FIRMWARE_UPDATE_OFFER - Respons Informasi Penawaran didefinisikan sebagai berikut.

Tabel 5.3-5 FIRMWARE_UPDATE_OFFER - Tata Letak Respons Informasi

FIRMWARE_UPDATE_OFFER - Tata Letak Respons Informasi.

5.3.2.1 Token
Tabel 5.3-6 FIRMWARE_UPDATE_OFFER- Tata Letak Token Respons Paket Informasi

FIRMWARE_UPDATE_OFFER- Tata Letak Token Respons Paket Informasi.

Bit byte Token dijelaskan dalam tabel ini.

Tabel 5.3-7 FIRMWARE_UPDATE_OFFER - Respons Informasi - Bit Token
Bit Offset Bidang Ukuran Deskripsi
0 Dicadangkan 8 Dicadangkan. Jangan gunakan.
8 Dicadangkan 8 Dicadangkan. Jangan gunakan.
16 Dicadangkan 8 Dicadangkan. Jangan gunakan.
24 Token 8 Token untuk mengidentifikasi host
5.3.2.2 Cadangan B7 - B4

Dicadangkan. Jangan gunakan.

5.3.2.3 Alasan Penolakan (RR)
Tabel 5.3-8 FIRMWARE_UPDATE_OFFER - Respons Informasi - Tata Letak Kode RR

FIRMWARE_UPDATE_OFFER - Respons Informasi - Tata Letak Kode RR.

Bit byte Tolak Alasan dijelaskan dalam tabel ini.

Tabel 5.3-9 FIRMWARE_UPDATE_OFFER- Respons Informasi Penawaran - Bit Kode RR
Bit Offset Bidang Ukuran Deskripsi
0 Kode RR 8 Kode Alasan Penolakan yang menunjukkan alasan yang disediakan oleh komponen untuk menolak penawaran. Nilai yang mungkin dijelaskan dalam Tabel 5,3-10. Nilai ini tergantung pada bidang Status.
8 Dicadangkan 24 Dicadangkan. Jangan gunakan.

Nilai yang mungkin untuk byte Kode RR dijelaskan dalam tabel ini.

Tabel 5.3-10 FIRMWARE_UPDATE_OFFER- Respons Informasi - Nilai Kode RR
Kode RR Nama Deskripsi
0x00 FIRMWARE_OFFER_REJECT_OLD_FW Penawaran ditolak karena versi firmware yang ditawarkan lebih lama atau sama dengan firmware saat ini.
0x01 FIRMWARE_OFFER_REJECT_INV_COMPONENT Penawaran ditolak karena firmware yang ditawarkan tidak berlaku untuk platform produk. Hal ini dapat disebabkan oleh ID komponen yang tidak didukung atau gambar yang ditawarkan tidak kompatibel dengan perangkat keras sistem.
0x02 FIRMWARE_UPDATE_OFFER SWAP_PENDING Firmware komponen telah diperbarui namun pertukaran ke firmware baru tertunda. Tidak ada pemrosesan Pembaruan Firmware lebih lanjut yang dapat terjadi sampai pertukaran selesai, biasanya melalui reset.
0x03 - 0x08 (Dicadangkan) Dicadangkan. Jangan gunakan.
0x09 - 0xDF (Dicadangkan) Dicadangkan. Jangan gunakan.
0xE0 — 0xFF (Khusus Vendor) Nilai-nilai ini digunakan oleh perancang protokol dan maknanya spesifik untuk vendor.
5.3.2.4 Status
Tabel 5.3-11 FIRMWARE_UPDATE_OFFER - Tata Letak Status Respons Informasi Penawaran

FIRMWARE_UPDATE_OFFER - Tata Letak Status Respons Informasi Penawaran.

Bit byte Status dijelaskan dalam tabel ini.

Tabel 5.3-12 FIRMWARE_UPDATE_OFFER - Informasi Penawaran - Bit Status Respons
Bit Offset Bidang Ukuran Deskripsi
0 Status 8 Bidang ini harus diatur ke FIRMWARE_UPDATE_OFFER_ACCEPT. Ini menunjukkan bahwa komponen telah memutuskan untuk menerima penawaran.
8 Dicadangkan. 24 Dicadangkan. Jangan gunakan.

5.4 FIRMWARE_UPDATE_OFFER - Diperpanjang

Jika ID Komponen dalam byte Informasi Komponen diatur ke 0xFE, maka bit (15 byte) didefinisikan ulang untuk menunjukkan Perintah Penawaran dari host ke firmware perangkat. Mekanisme ini memungkinkan ekstensibilitas dan cara bagi host untuk memberikan informasi tertentu ke perangkat. Paket Perintah Penawaran dikembalikan ketika komponen siap untuk merespons Diterima.

5.4.1 Perintah

Jika ID Komponen dalam byte Informasi Komponen diatur ke 0xFE, empat DWORD didefinisikan ulang sebagai berikut:

Tabel 5,4-1 FIRMWARE_UPDATE_OFFER - Tata Letak Perintah Yang Diperluas

FIRMWARE_UPDATE_OFFER - Tata Letak Perintah yang Diperluas.

5.4.1.1 Komponen
Tabel 5,4-2 FIRMWARE_UPDATE_OFFER - Paket Perintah Yang Diperluas - Perintah - Tata Letak Komponen

FIRMWARE_UPDATE_OFFER - Paket Perintah Yang Diperluas - Perintah - Tata Letak Komponen.

Bit byte Komponen dijelaskan dalam tabel ini.

Tabel 5,4-3 FIRMWARE_UPDATE_OFFER - Perintah Diperluas - Bit Komponen
Bit Offset Bidang Ukuran Deskripsi
0 Kode Perintah 8 Nilai ini menunjukkan jenis perintah. Nilai ini bukan bitmask dan hanya bisa menjadi salah satu nilai yang mungkin dijelaskan dalam Tabel 5,4-4.
8 Dicadangkan. 8 Dicadangkan. Jangan gunakan.
16 ID Komponen 8 Atur ke 0xFE.
24 Token Host menyisipkan token unik dalam paket penawaran ke komponen. Token ini harus dikembalikan oleh komponen dalam respons penawaran.
Tabel 5,4-4 FIRMWARE_UPDATE_OFFER - Perintah Diperluas - Nilai Kode Perintah
Status Nama Deskripsi
0x01 OFFER_NOTIFY_ON_READY Dikirim oleh host jika penawaran sebelumnya ditolak oleh komponen.
0x02 - 0xFF Telah dipesan Telah dipesan
5.4.1.2 Cadangan B7 - B4

Dicadangkan. Jangan gunakan.

5.4.1.3 Cadangan B11 - B8

Dicadangkan. Jangan gunakan.

5.4.1.4 Cadangan B15 - B12

Dicadangkan. Jangan gunakan.

5.4.2 Respons

Respons perintah FIRMWARE_UPDATE_OFFER - Penawaran dari perangkat mungkin tidak segera diterima. Respons didefinisikan sebagai berikut.

Tabel 5,4-5 FIRMWARE_UPDATE_OFFER - Tata Letak Respons Paket Perintah Yang Diperluas

FIRMWARE_UPDATE_OFFER - Tata Letak Respons Paket Perintah Yang Diperluas.

5.4.2.1 Token
Tabel 5.4-6 FIRMWARE_UPDATE_OFFER- Respons Paket Perintah Penawaran - Tata Letak Token

FIRMWARE_UPDATE_OFFER- Respons Paket Perintah Penawaran - Tata Letak Token.

Bit byte Token dijelaskan dalam tabel ini.

Tabel 5.4-7 FIRMWARE_UPDATE_OFFER - Respons Perintah Penawaran - Bit Token
Bit Offset Bidang Ukuran Deskripsi
0 Dicadangkan 8 Dicadangkan. Jangan gunakan.
8 Dicadangkan 8 Dicadangkan. Jangan gunakan.
16 Dicadangkan 8 Dicadangkan. Jangan gunakan.
24 Token 8 Token untuk mengidentifikasi host.
5.4.2.2 Cadangan B7 - B4

Dicadangkan. Jangan gunakan.

5.4.2.3 Alasan Penolakan
Tabel 5,4-8 FIRMWARE_UPDATE_OFFER - Tata Letak RR Respons Paket Informasi Penawaran

FIRMWARE_UPDATE_OFFER - Menawarkan Tata Letak RR Respons Paket Informasi.

Bit byte Tolak Alasan dijelaskan dalam tabel ini.

Tabel 5.4-9 FIRMWARE_UPDATE_OFFER- Respons Perintah Penawaran - Kode RR
Bit Offset Bidang Ukuran Deskripsi
0 Kode RR 8 Nilai ini tergantung pada bidang Status. Untuk kemungkinan nilai Kode RR, lihat Tabel 5.4-10.
8 Dicadangkan 24 Dicadangkan. Jangan gunakan.

Nilai yang mungkin untuk byte Kode RR dijelaskan dalam tabel ini.

Tabel 5.4-10 FIRMWARE_UPDATE_OFFER- Paket Perintah Penawaran - Nilai Kode RR
Kode RR Nama Deskripsi
0x00 FIRMWARE_OFFER_REJECT_OLD_FW Penawaran ditolak karena versi firmware yang ditawarkan lebih lama atau sama dengan firmware saat ini.
0x01 FIRMWARE_OFFER_REJECT_INV_COMPONENT Penawaran ditolak karena firmware yang ditawarkan tidak berlaku untuk platform produk. Hal ini dapat disebabkan oleh ID komponen yang tidak didukung atau gambar yang ditawarkan tidak kompatibel dengan perangkat keras sistem.
0x02 FIRMWARE_UPDATE_OFFER SWAP_PENDING Firmware komponen telah diperbarui namun pertukaran ke firmware baru tertunda. Tidak ada pemrosesan Pembaruan Firmware lebih lanjut yang dapat terjadi sampai pertukaran selesai, biasanya melalui reset.
0x03 - 0x08 (Dicadangkan) Dicadangkan. Jangan gunakan.
0x09 - 0xDF (Dicadangkan) Dicadangkan. Jangan gunakan.
0xE0 — 0xFF (Khusus Vendor) Nilai-nilai ini digunakan oleh perancang protokol dan maknanya spesifik untuk vendor.
5.4.2.4 Status
Tabel 5.4-11 FIRMWARE_UPDATE_OFFER - Tata Letak Status Respons Paket Perintah Penawaran

FIRMWARE_UPDATE_OFFER - Menawarkan Tata Letak Status Respons Paket Perintah.

Bit byte Status dijelaskan dalam tabel ini.

Tabel 5.4-12 FIRMWARE_UPDATE_OFFER- Menawarkan Kode RR Respons Paket Perintah
Bit Offset Bidang Ukuran Deskripsi
0 Status 8 Bidang ini harus diatur ke FIRMWARE_UPDATE_OFFER_ACCEPT. Ini menunjukkan bahwa komponen telah memutuskan untuk menerima penawaran.
8 Dicadangkan. 24 Dicadangkan. Jangan gunakan.

5,5 FIRMWARE_UPDATE_CONTENT

Host mengirimkan perintah ini ke firmware perangkat untuk menyediakan konten firmware (yaitu, gambar firmware). Seluruh file gambar tidak diharapkan pas dalam satu perintah. Host harus memecah gambar menjadi blok yang lebih kecil dan setiap perintah mengirimkan satu blok gambar pada satu waktu.

Dengan setiap perintah host menunjukkan informasi tambahan—baik itu blok pertama, blok terakhir, dan sebagainya, dari firmware. Komponen utama firmware perangkat menerima setiap blok gambar firmware yang masuk, menyimpannya ke dalam memorinya, dan harus merespons setiap perintah satu per satu.

Ketika komponen utama menerima blok terakhir, komponen memvalidasi seluruh gambar firmware (pemeriksaan CRC, validasi tanda tangan). Berdasarkan hasil pemeriksaan tersebut mengembalikan respons yang sesuai (kegagalan atau keberhasilan) untuk blok terakhir.

5.5.1 Perintah

Tabel 5,5-1 FIRMWARE_UPDATE_CONTENT Tata Letak Perintah

FIRMWARE_UPDATE_CONTENT Tata Letak Perintah.

5.5.1.1 Header (B7 - B0)
Tabel 5,5-2 FIRMWARE_UPDATE_CONTENT Tata Letak Header Perintah

FIRMWARE_UPDATE_CONTENT Tata Letak Header Perintah.

Bit Header FIRMWARE_UPDATE_CONTENT dijelaskan dalam tabel ini.

Tabel 5,5-3 FIRMWARE_UPDATE_CONTENT Header Bit
Bit Offset Bidang Ukuran Deskripsi
0 Bendera 8 Bidang ini menyediakan informasi tambahan tentang perintah . Nilai ini adalah masker bendera yang akan digunakan untuk transfer data. Nilai yang mungkin dijelaskan dalam Tabel 5,5-4.
8 Panjang Data 8 Panjang bidang Data yang berlaku menunjukkan jumlah byte yang akan ditulis.

Mengingat ukuran perintah ini, nilai maksimum yang diizinkan untuk panjangnya adalah 52 byte.
16 Nomor Urut 16 Nilai ini dibuat oleh host dan unik untuk setiap paket konten yang dikeluarkan. Komponen harus mengembalikan nomor urut dalam responsnya terhadap permintaan ini.
32 Alamat Firmware 32 Alamat Little Endian (LSB First) untuk menulis data. Alamatnya berbasis 0. Firmware menggunakan ini sebagai offset untuk menentukan alamat sesuai kebutuhan saat menempatkan gambar dalam memori.

Nilai yang mungkin untuk byte Bendera dijelaskan dalam tabel ini.

Tabel 5,5-4 FIRMWARE_UPDATE_OFFER- Paket Perintah Penawaran - Nilai Bendera
Bendera Nama Deskripsi
0x80 FIRMWARE_UPDATE_FLAG_FIRST_BLOCK Bendera ini menunjukkan bahwa ini adalah blok pertama dari gambar firmware.
0x40 FIRMWARE_UPDATE_FLAG_LAST_BLOCK Bendera ini menunjukkan bahwa ini adalah blok terakhir dari gambar firmware dan bahwa gambar siap untuk divalidasi.

Penting bahwa firmware saat ini pada komponen melakukan validasi pada seluruh gambar firmware yang diunduh setelah menulis blok ini ke memori non-volatil.
5.5.1.2 Data
Tabel 5,5-5 FIRMWARE_UPDATE_CONTENT Tata Letak Data Perintah

FIRMWARE_UPDATE_CONTENT Tata Letak Data Perintah.

Bit data FIRMWARE_UPDATE_CONTENT dijelaskan dalam tabel ini.

Tabel 5,5-6 FIRMWARE_UPDATE_CONTENT Command Data Bits
Bit Offset Bidang Ukuran Deskripsi
64 Data Maksimal 52. Array byte yang akan ditulis. Host biasanya mengirim blok 4 byte berdasarkan arsitektur produk. Setiap byte yang tidak digunakan pada akhirnya harus 0 padded.

5.5.2 Respons

Tabel 5,5-7 FIRMWARE_UPDATE_CONTENT Tata Letak Respons Perintah

FIRMWARE_UPDATE_CONTENT Tata Letak Respons Perintah.

5.5.2.1 Nomor Urut
Tabel 5,5-8 FIRMWARE_UPDATE_CONTENT Respons - Nomor Urut

Respons FIRMWARE_UPDATE_CONTENT - Nomor Urut.

Bit respons FIRMWARE_UPDATE_CONTENT (3-0) dijelaskan dalam tabel ini.

Tabel 5,5-9 FIRMWARE_UPDATE_CONTENT - Perintah - Bit Respons
Bit Offset Bidang Ukuran Deskripsi
0 Nomor Urut 16 Bidang ini adalah nomor urut yang dikirim oleh host dalam permintaan.
16 Dicadangkan 16 Dicadangkan. Jangan gunakan.
5.5.2.2 Status
Tabel 5,5-10 FIRMWARE_UPDATE_CONTENT Tata Letak Status Respons

FIRMWARE_UPDATE_CONTENT Tata Letak Status Respons.

Bit respons FIRMWARE_UPDATE_CONTENT (7-4) dijelaskan dalam tabel ini.

Tabel 5,5-11 FIRMWARE_UPDATE_OFFER - Respons - Bit Status
Bit Offset Bidang Ukuran Deskripsi
0 Status 8 Nilai ini menunjukkan kode status yang dikembalikan oleh komponen perangkat. Ini bukan bitwise dan bisa menjadi salah satu nilai yang dijelaskan dalam Tabel 5.5-12.
8 Dicadangkan 24 Dicadangkan. Jangan gunakan.

Nilai yang mungkin untuk byte Status dijelaskan dalam tabel ini.

Tabel 5.5-12 FIRMWARE_UPDATE_OFFER- Respons - Nilai Kode Status
Bendera Nama Deskripsi
0x00 FIRMWARE_UPDATE_SUCCESS Permintaan berhasil diselesaikan.
0x01 FIRMWARE_UPDATE_ERROR_PREPARE Komponen tidak siap untuk menerima konten firmware.

Jika digunakan, kode ini biasanya digunakan sebagai respons terhadap blok pertama. Misalnya, hapus kesalahan pada flash.
0x02 FIRMWARE_UPDATE_ERROR_WRITE Permintaan tidak dapat menulis byte.
0x03 FIRMWARE_UPDATE_ERROR_COMPLETE Permintaan tidak dapat menyiapkan pertukaran sebagai respons terhadap FIRMWARE_UPDATE_FLAG_LAST_BLOCK.
0x04 FIRMWARE_UPDATE_ERROR_VERIFY Verifikasi DWORD gagal, sebagai respons terhadap FIRMWARE_UPDATE_FLAG_VERIFY.
0x05 FIRMWARE_UPDATE_ERROR_CRC CRC gambar firmware gagal sebagai respons terhadap FIRMWARE_UPDATE_FLAG_LAST_BLOCK.
0x06 FIRMWARE_UPDATE_ERROR_SIGNATURE Verifikasi tanda tangan firmware gagal sebagai respons terhadap FIRMWARE_UPDATE_FLAG_LAST_BLOCK.
0x07 FIRMWARE_UPDATE_ERROR_VERSION Verifikasi versi firmware gagal sebagai respons terhadap FIRMWARE_UPDATE_FLAG_LAST_BLOCK.
0x08 FIRMWARE_UPDATE_SWAP_PENDING Firmware telah diperbarui dan pertukaran tertunda. Tidak ada perintah Pembaruan Firmware lebih lanjut yang dapat diterima sampai aksesori telah direset.
0x09 FIRMWARE_UPDATE_ERROR_INVALID_ADDR Firmware telah mendeteksi alamat tujuan yang tidak valid dalam konten data pesan.
0x0A FIRMWARE_UPDATE_ERROR_NO_OFFER Perintah FIRMWARE_UPDATE_OFFER diterima tanpa terlebih dahulu menerima penawaran pembaruan firmware yang valid dan diterima.
0x0B FIRMWARE_UPDATE_ERROR_INVALID Kesalahan umum untuk Perintah FIRMWARE_UPDATE_OFFER, seperti Panjang Data yang berlaku tidak valid.
5.5.2.3 Cadangan B8 - B11

Dicadangkan. Jangan gunakan.

5.5.2.4 Cadangan B12 - B15

Dicadangkan. Jangan gunakan.

6 Lampiran 1: Contoh Urutan Perintah Pemrograman Pembaruan Firmware

6.1 Contoh 1

Pertimbangkan firmware perangkat berikut:

  • Komponen Utama - ID Komponen 1 - Firmware versi saat ini 7.0.1

  • Subkomponen - ID Komponen 2 - Firmware versi saat ini 12.4.54

  • Subkomponen - ID Komponen 3 - Firmware versi saat ini 4.4.2

  • Subkomponen - ID Komponen 4 - Firmware versi saat ini 23.32.9

Host memiliki tiga gambar firmware ini:

  • ID Komponen 1 - Firmware versi 7.1.3

  • ID Komponen 2 - Firmware versi 12.4.54

  • ID Komponen 3 - Firmware versi 4.5.0

Urutannya adalah:

  1. Penawaran host: ID Komponen 1 - Firmware versi 7.1.3

  2. Komponen utama menerima penawaran

  3. Host mengirimkan gambar firmware

  4. Komponen utama menerima firmware, memvalidasinya

  5. Penawaran host: ID Komponen 2 - Firmware versi 12.4.54

  6. Komponen utama menolak penawaran

  7. Penawaran host: ID Komponen 3 - Firmware versi 4.5.0

  8. Komponen utama menerima penawaran

  9. Host mengirimkan gambar firmware

  10. Komponen utama menerima firmware, memvalidasinya

Karena semua penawaran tidak ditolak, host memutar ulang semua penawaran:

  1. Penawaran host: ID Komponen 1 - Firmware versi 7.1.3

  2. Penolakan komponen

  3. Penawaran host: ID Komponen 2 - Firmware versi 12.4.54

  4. Penolakan komponen

  5. Penawaran host: ID Komponen 3 - Firmware versi 4.5.0

  6. Penolakan komponen

6.2 Contoh 2

Pertimbangkan firmware perangkat berikut:

  • Komponen Utama - ID Komponen 1 - Firmware versi 7.0.1 saat ini

  • Subkomponen - ID Komponen 2 - Firmware versi 12.4.54 saat ini

  • Subkomponen - ID Komponen 3 - Firmware versi 7.4.2 saat ini

  • Subkomponen - ID Komponen 4 - Firmware versi saat ini 23.32.9

Host memiliki tiga gambar firmware ini:

  • ID Komponen 1 - Firmware versi 8.0.0

  • ID Komponen 2 - Firmware versi 12.4.54

  • ID Komponen 3 - Firmware versi 9.0.0

Selain itu, implementasi mengharuskan versi firmware subkomponen tidak boleh kurang dari versi firmware yang berjalan pada komponen utama. Host tidak mengetahui persyaratan itu dan siap untuk komponen utama untuk memastikan aturan ini.

Urutannya adalah:

  1. Penawaran host: ID Komponen 1 - Firmware versi 8.0.0

  2. Komponen utama menolak (karena ID komponen 3 belum diperbarui)

  3. Penawaran host: ID Komponen 2 - Firmware versi 12.4.54

  4. Penolakan komponen utama

  5. Penawaran host: ID Komponen 3 - Firmware versi 9.0.0

  6. Komponen utama menerima penawaran

  7. Host mengirimkan gambar firmware

  8. Komponen utama menerima firmware, memvalidasinya

Karena semua penawaran tidak ditolak, host memutar ulang semua penawaran

  1. Penawaran host: ID Komponen 1 - Firmware versi 8.0.0

  2. Komponen utama menerima penawaran

  3. Host mengirimkan gambar firmware

  4. Komponen utama menerima firmware, memvalidasinya

  5. Penawaran host: ID Komponen 2 - Firmware versi 12.4.54

  6. Penolakan komponen utama

  7. Penawaran host: ID Komponen 3 - Firmware versi 9.0.0

  8. Penolakan komponen utama