Specifikace protokolu aktualizace firmwaru komponenty (CFU)
Tato specifikace popisuje obecný protokol HID pro aktualizaci firmwaru pro součásti, které jsou přítomné na počítači nebo příslušenství. Specifikace umožňuje komponentě přijmout firmware bez přerušení operace zařízení během stahování. Specifikace podporuje konfigurace, ve kterých komponenta přijímající firmware může mít dílčí součásti, které vyžadují samostatné image firmwaru. Specifikace umožňuje, aby se komponenta in-charge rozhodla, zda má přijmout firmware. Funguje také jako optimalizace, protože image firmwaru se odesílá jenom do komponenty, pokud je schopná nebo připravená ji přijmout.
Poznámka
CfU je k dispozici ve Windows 10 verze 2004 (Windows 10 Květen 2020 Update) a novějších verzích.
Obsah
- 1 Úvod
- 2 podporovaná hardwarová architektura
- požadavky protokolu 3
-
4 Přehled protokolu CFU
-
4.1 Sekvence příkazů pro aktualizaci firmwaru
- 4.1.1 Stav: Oznámení o inicializaci hostitele
- 4.1.2 Stav: OFFER_INFO_START_OFFER_LIST Oznámení
- 4.1.3 Stav: Odešlete příkaz FIRMWARE_UPDATE_OFFER
- 4.1.4 Stav: Odeslat Firmware
- 4.1.5 Stav rozhodnutí: Jsou k dispozici další nabídky
- 4.1.6 Stav: OFFER_INFO_END_OFFER_LIST oznámení
- 4.1.7 Stav rozhodnutí: Seznam nabídek k opětovnému přehrání
- 4.1.8 Stav: Zařízení je zaneprázdněné
-
4.1 Sekvence příkazů pro aktualizaci firmwaru
-
5 formát paketů protokolu CFU
- 5,1 GET_FIRMWARE_VERSION
-
5,2 AKTUALIZACE_FIRMWARE_NABÍDKA
-
Příkaz 5.2.1
- informace o komponentách 5.2.1.1
- verze firmwaru 5.2.1.2
- 5.2.1.3 specifické pro dodavatele
- Verze 5.2.1.4 Různé a Verze protokolu
- 5.2.2 Odpověď
- 5.2.3 Mapování na protokol HID
-
Příkaz 5.2.1
- 5.3 FIRMWARE_UPDATE_OFFER – informace
- 5,4 FIRMWARE_UPDATE_OFFER – rozšířené
- 5,5 FIRMWARE_UPDATE_CONTENT
- 6 Dodatek 1: Příklad sekvence příkazů aktualizace firmwaru
Tabulky
Tabulka 5.1–1 GET_FIRMWARE_VERSION rozložení odpovědi
Tabulka 5.1-2 GET_FIRMWARE_VERSION – rozložení záhlaví odpovědi
Tabulka 5.1–3 GET_FIRMWARE_VERSION Odpověď – bity hlavičky
Tabulka 5.1-4 GET_FIRMWARE_VERSION Response – uspořádání verze komponenty a vlastností
Tabulka 5.1-5 GET_FIRMWARE_VERSION Odezva – Verze komponenty a vlastnosti Bites
Tabulka 5.2-1 FIRMWARE_UPDATE_OFFER Rozložení příkazu
Tabulka 5.2-2 Příkaz FIRMWARE_UPDATE_OFFER – rozložení informací o komponentách
Příkaz Tabulka 5.2-3 FIRMWARE_UPDATE_OFFER – informace o komponentách, bity
Table 5.2-4 FIRMWARE_UPDATE_OFFER Command – rozložení verze firmwaru
Tabulka 5.2-5 Příkaz FIRMWARE_UPDATE_OFFER - Bity verze firmwaru
Tabulka 5.2-6 FIRMWARE_UPDATE_OFFER Command - Rozložení specifické pro dodavatele
Tabulka 5.2-7 FIRMWARE_UPDATE_OFFER Příkaz - Různé a Verze protokolu
Tabulka 5.2-8 Rozložení tokenu odpovědi FIRMWARE_UPDATE_OFFER
Tabulka 5.2-9 FIRMWARE_UPDATE_OFFER Response – rozložení tokenů
tabulka 5.2–10 FIRMWARE_UPDATE_OFFER – bity tokenů
Tabulka 5.2-11 FIRMWARE_UPDATE_OFFER Odpověď – Rozložení důvodu odmítnutí
Tabulka 5.2–12 FIRMWARE_UPDATE_OFFER Odpověď – Odmítnutí bitů důvodu
Tabulka 5.2-13 hodnoty kódu RR odpovědi FIRMWARE_UPDATE_OFFER
Tabulka 5.2-14 FIRMWARE_UPDATE_OFFER Rozložení Stavu Odpovědi
tabulka 5.2–15 FIRMWARE_UPDATE_OFFER Odpověď – bity stavu
Tabulka 5.2–16 Hodnoty stavu odpovědi FIRMWARE_UPDATE_OFFER
Tabulka 5.3-1 FIRMWARE_UPDATE_OFFER – rozložení informačních příkazů
Tabulka 5.3-2 FIRMWARE_UPDATE_OFFER – Informační Příkaz – Rozložení Komponenty
tabulka 5.3-3 FIRMWARE_UPDATE_OFFER – informační příkaz – bity komponent
Tabulka 5.3-4 FIRMWARE_UPDATE_OFFER - Informační Příkaz - Hodnoty Informačního Kódu
Tabulka 5.3–5 FIRMWARE_UPDATE_OFFER – Informační rozložení odpovědí
tabulka 5.3-6 FIRMWARE_UPDATE_OFFER – rozložení tokenu odpovědi paketů informací
Tabulka 5.3-7 FIRMWARE_UPDATE_OFFER – Odpověď na informace – Bity tokenů
Tabulka 5.3-8 FIRMWARE_UPDATE_OFFER – Informační Odpověď – Rozložení Kódu RR
Tabulka 5.3-9 FIRMWARE_UPDATE_OFFER - Odpověď na informace o nabídce – Bity kódu RR
Tabulka 5.3-10 FIRMWARE_UPDATE_OFFER - Odpověď na informace - Hodnoty kódu RR
tabulka 5.3-11 FIRMWARE_UPDATE_OFFER - Rozložení stavu nabídky pro odpověď
Tabulka 5.3–12 FIRMWARE_UPDATE_OFFER – Informace o nabídce – Bity stavu odpovědí
Tabulka 5.4-1 FIRMWARE_UPDATE_OFFER – rozšířené rozložení příkazů
Tabulka 5.4-2 FIRMWARE_UPDATE_OFFER – Rozšířený paket příkazů – Příkaz – Rozložení součásti
Tabulka 5.4-3 FIRMWARE_UPDATE_OFFER – rozšířený příkaz – Komponentní bity
tabulka 5.4-4 FIRMWARE_UPDATE_OFFER – rozšířený příkaz – hodnoty kódu příkazu
Tabulka 5.4-5 FIRMWARE_UPDATE_OFFER – Rozložení rozšířené odpovědi příkazového paketu
Tabulka 5.4-6 FIRMWARE_UPDATE_OFFER – odpověď na paket příkazu nabídky – rozložení tokenu
Tabulka 5.4-7 FIRMWARE_UPDATE_OFFER – Odpověď příkazu nabídky – Bity tokenů
tabulka 5.4-8 FIRMWARE_UPDATE_OFFER – rozložení RR odpovědi na informace o nabídce
Tabulka 5.4-9 FIRMWARE_UPDATE_OFFER – Odpověď příkazu nabídky – kódu RR
Tabulka 5.4-10 FIRMWARE_UPDATE_OFFER – příkazový paket nabídky – hodnoty kódu RR
Tabulka 5.4-11 FIRMWARE_UPDATE_OFFER – Rozložení stavu odpovědi na příkazový paket
Tabulka 5.4-12 FIRMWARE_UPDATE_OFFER – Odpověď na příkazový paket nabídky, kód RR
Tabulka 5.5-1 Rozložení příkazu FIRMWARE_UPDATE_CONTENT
Tabulka 5.5-2 Rozložení Záhlaví Příkazu FIRMWARE_UPDATE_CONTENT
Tabulka 5.5-3 FIRMWARE_UPDATE_CONTENT Bity záhlaví
Tabulka 5.5-4 FIRMWARE_UPDATE_OFFER – Paket příkazu nabídky – Hodnoty příznaku
Tabulka 5.5–5 FIRMWARE_UPDATE_CONTENT rozložení dat příkazu
Tabulka 5.5-6 datové bity příkazu FIRMWARE_UPDATE_CONTENT
Tabulka 5.5-7 FIRMWARE_UPDATE_CONTENT Rozložení odpovědi příkazu
Tabulka 5.5-8 FIRMWARE_UPDATE_CONTENT Response - pořadové číslo
Tabulka 5.5-9 FIRMWARE_UPDATE_CONTENT – příkaz – Bity odpovědí
Tabulka 5.5–10 FIRMWARE_UPDATE_CONTENT Rozložení Stavu Odpovědi
Tabulka 5.5-11 FIRMWARE_UPDATE_OFFER – Odpověď – Statusové bity
Tabulka 5.5-12 FIRMWARE_UPDATE_OFFER – Odpověď – Hodnoty Stavového Kódu
1 Úvod
Dnešní počítače a příslušenství mají interní komponenty, které provádějí složité operace. Abyste zajistili kvalitní produkt, je potřeba často aktualizovat chování těchto zařízení v pozdějších fázích vývoje nebo po jejich odeslání zákazníkům. Aktualizace může opravit zjištěné problémy s funkcí nebo zabezpečením nebo nutnost přidat nové funkce. Velká část složité logiky je ve firmwaru spuštěném na zařízení, který je aktualizovatelný.
Tato specifikace popisuje obecný protokol HID pro aktualizaci firmwaru pro součásti, které jsou přítomné na počítači nebo jeho příslušenství. Implementace HID je nad rámec specifikace.
Mezi funkce protokolu patří:
Protokol je založený na rozhraní HID – všudypřítomný a má podporu systému Windows v boxu přes různé propojené autobusy, jako je USB a I2C. Proto lze ke aktualizaci firmwaru pro všechny komponenty využít stejné softwarové řešení (ovladač).
Poznámka
Vzhledem k tomu, že specifikace je založená na paketech, je snadné ji přizpůsobit scénářům, které nejsou HID.
Specifikace umožňuje komponentě přijmout firmware bez přerušení operace zařízení během stahování. Umožňuje uživatelům lepší prostředí, protože nemusí čekat na dokončení procesu aktualizace firmwaru, aby mohli pokračovat v dalších úlohách. Nový firmware lze vyvolat v jedné atomické operaci v době, která má minimální dopad na uživatele.
Specifikace podporuje konfigurace, ve kterých komponenta přijímající firmware může mít dílčí součásti, které vyžadují samostatné image firmwaru.
Poznámka
Proces předání firmwaru dílčí komponentě je mimo rozsah této specifikace.
Specifikace podporuje koncept nabídky a spoléhá na komponentu, která je odpovědná a rozhoduje, jestli má firmware přijmout. Rozhodnutí o přijetí nového firmwaru není triviální. Můžou existovat závislosti mezi typem firmwaru nebo verzí a základním typem/verzí hardwaru, na který se nový firmware vztahuje. Nabídka funguje také jako optimalizační mechanismus, protože image firmwaru se odesílá do komponenty pouze v případě, že je schopna ji přijmout / připravena.
1.1 Glosář
Termín | Popis |
---|---|
ID komponenty | V zařízení s více komponentami id komponenty jednoznačně identifikuje každou komponentu. |
CRC | Kontrola cyklické redundance Nešifrovaný algoritmus hash použitý k vytvoření digestu nebo otisku prstu bloku dat. CRC se používá jako kontrola zajištění, že se datový blok od výpočtu CRC nezměnil. CRC není neomylný, ale poskytuje jistotu, že data byla přijata správně. |
Zařízení | Kolekce komponent (jedna primární komponenta a nula nebo více dílčích komponent). Zařízení je viditelné pro operační systém jako jedna jednotka. Hostitel komunikuje se zařízením, což je obvykle primární komponenta. Počítač může mít v něm více zařízení. S ohledem na tuto specifikaci jsou komunikace se 2 různými zařízeními zcela nezávislá. |
Řidič | Ovladač, který je napsán pomocí rozhraní WDF (Windows Driver Foundation). |
Mikroprogramové vybavení | Kód, který běží na fyzickém hardwaru. Firmware je aktualizovatelný a obvykle se nachází v programovatelné paměti přidružené k hardwaru. |
Hardware | Fyzický kus silikonu na počítači. |
Primární komponenta | Kus hardwaru na počítači a firmware pro něj. V kontextu této specifikace je komponenta entitou, která potřebuje a přijímá aktualizaci firmwaru. |
Segment | Image firmwaru pro komponentu může být segmentována do menších segmentů. Každý segment je malý obraz firmwaru. |
ID segmentu | Pokud je firmware komponenty segmentovaný do menších segmentů, ID segmentu je jedinečný identifikátor segmentu. |
Podpis | Kryptografický prostředek k určení, jestli byla image firmwaru změněna neoprávněnými prostředky. Podpisy jsou volitelné, ale doporučené a nad rámec této specifikace. |
Podsoučást | V závislosti na hardwarové architektuře nemusí být všechny komponenty viditelné pro operační systém, protože mohou být připojeny do části, která je již viditelná systému. Tyto komponenty jsou v této specifikaci označovány jako dílčí součásti. |
Láskyplná péče | Kolekce nejvyšší úrovně HID |
Token | Identifikátor hostitelské relace. Hostitel vytvoří token a odešle ho v příkazech a zařízení ho vrátí v odpovědi. Tokeny mohou být použity k serializaci určitých transakcí nebo k identifikaci, že relace byla ztracena a nová zahájena. |
1.2 Rozsah
1.2.1 Cíle
Aby se zabránilo novému protokolu pro každý typ sběrnice, vyžaduje se řešení nezávislé na sběrnici. HID je všudypřítomný a řeší tento požadavek.
Schopnost podporovat aktualizaci firmwaru pro zařízení s více komponentami, kde jedna komponenta funguje jako primární komponenta a další jsou dílčí součásti připojené k primární komponentě. Každá komponenta vyžaduje vlastní firmware bez triviálních závislostí.
Běžný model ovladače pro stažení image firmwaru do komponenty. Komponenta pak obsahuje dílčí algoritmy specifické pro předávání podkomponentům. Podkomponenty mohou také provádět kontroly platnosti firmwaru a předávat výsledky zpět do primární komponenty.
Možnost podporovat aktualizaci firmwaru, když probíhá operace zařízení.
Možnost aktualizovat nebo vrátit firmware v produkčních zařízeních prostřednictvím autorizovaných nástrojů a aktualizovat zařízení na trhu prostřednictvím služby Windows Update.
Flexibilita pro podporu firmwaru v rámci vývoje nebo firmwaru na trhu.
Možnost segmentovat velkou image firmwaru do menších segmentů, aby komponenta snadněji přijímala image firmwaru.
1.2.2 Ne-cíle
Definujte interní formát image firmwaru: Pro hostitele je image firmwaru sada položek adresy a datové části.
Podepsat/šifrovat/ověřit přijatý firmware: Tato specifikace nepopisuje, jak podepsat a šifrovat image firmwaru. Vyžaduje se, aby očekávaný aktuální firmware běžící na komponentě ověřil firmware, který je stahován.
Definujte mechanismus interakce komponenty s dílčími součástmi: Hostitel komunikuje se zařízením jako s jednou jednotkou, obvykle primární komponentou. Komponenta musí fungovat jako most pro komunikaci související s dílčím firmwarem.
2 Podporovaná hardwarová architektura
Pro podporu flexibilního návrhu hardwaru protokol podporuje vícesložkové zařízení, kde každá komponenta vyžaduje vlastní image firmwaru. V návrhu je jedna komponenta primární komponentou a závislé dílčí součásti jsou připojeny k této primární komponentě. Každá komponenta je jedinečně popsána ID komponenty.
Zařízení s více komponentou je viditelné pro operační systém jako jedna jednotka. Hostitel komunikuje pouze se zařízením, obvykle primární komponentou pomocí tohoto protokolu CFU. Komunikace mezi komponentou a jeho dílčími součástmi je nad rámec této specifikace.
Na počítači může existovat mnoho různých zařízení (kde může mít zařízení jednu nebo více součástí). V kontextu tohoto protokolu je komunikace s každým zařízením nezávislá. Každé zařízení má odpovídající instanci hostitele.
3 Požadavky protokolu
V této části jsou uvedeny požadavky a osvědčené postupy, které je potřeba implementovat, aby bylo možné tento protokol využít:
Atomické využití obrázků
Image firmwaru pro komponentu se nepoužívá, dokud nebude úspěšně stažena celá image firmwaru. V případě, že je firmware rozdělený do více segmentů, nesmí se image používat, dokud se od odesílatele nepřičte konečný segment. Kontroly integrity musí být provedeny na konečném obrazu. Doporučuje se, aby přenos, který se používá k doručení image firmwaru, měl zavedené mechanismy pro opravu chyb a opakování, aby se zabránilo opakovanému stahování v případě přenosových chyb.
Aktualizace firmwaru nesmí přerušit provoz zařízení.
Zařízení, které přijímá image firmwaru, musí být během aktualizace schopné pracovat. Zařízení musí mít k uložení a ověření příchozího firmwaru další paměť, zatímco jeho aktuální firmware není přepsán.
Ověřování a integrita
Implementátor rozhodne o faktorech, které tvoří autentický obraz firmwaru. Doporučuje se, aby aktuální firmware komponenty alespoň ověřil CRC příchozí image firmwaru. Aktuální firmware by měl také používat digitální podpis nebo jiné algoritmy detekce chyb. Pokud se ověření nezdaří, firmware aktualizaci odmítne. Obnova po selhání
Pokud je image firmwaru stažena a neúspěšná, zařízení nesmí vyvolat nový firmware a nadále pracovat s existujícím firmwarem. Hostitel může aktualizaci zopakovat. Četnost opakování je specifická pro implementaci.
Důvěrnost
Volitelný. Segment firmwaru může být šifrovaný. Techniky šifrování a dešifrování jsou nad rámec této specifikace. Tato specifikace zpracovává datovou část firmwaru jako datový proud bez ohledu na to, jestli je zašifrovaná.
Ochrana proti vrácení zpět
Zásady vrácení zpět se vynucují primární komponentou a jsou specifické pro implementaci. Aktuální firmware v komponentě ověřuje příchozí obrazy firmwaru podle interních zásad, například číslo verze musí být novější a typ uvolnění nelze přepínat z produkčního na ladění, a podobně. Protokol umožňuje zasílání zpráv indikovat, že aktualizace je přijata, i když porušuje zásady vrácení zpět.
Přehled protokolu CFU 4
Protokol CFU je sada příkazů a odpovědí, které jsou potřeba k odeslání nových imagí firmwaru z hostitele do zařízení, pro které je firmware zamýšlen.
Obecně protokol iteruje všemi soubory firmwaru, které se mají odeslat do zařízení. Pro každou image firmwaru hostitel nabízí k odeslání souboru do zařízení. Soubor odešle hostitel pouze v případě, že zařízení nabídku přijme.
Aby bylo možné podporovat případy, kdy má objednávka aktualizace zařízení závislosti, nemusí zařízení přijmout určité nabídky při prvním průchodu, a proto protokol umožňuje hostiteli znovu odeslat všechny nabídky firmwaru do zařízení, dokud nebudou vyřešeny všechny závislosti.
4.1 Sekvence příkazů pro aktualizaci firmwaru
Tady je sekvence příkazů CFU pro aktualizaci image firmwaru.
4.1.1 Stav: Inicializované oznámení hostitele
Jakmile se hostitel inicializuje a identifikuje sadu nabídek, které potřebuje odeslat do zařízení, vydá příkaz OFFER_INFO_START_ENTIRE_TRANSACTION, aby komponentě oznámil, že je nyní inicializován. Účelem tohoto příkazu je upozornit aktuální firmware zařízení, že je k dispozici nová instance hostitele. Toto oznámení je užitečné, když se neočekávaně ukončí předchozí instance hostitele. Zařízení musí dokončit tento příkaz úspěšně.
4.1.2 Stav: oznámení OFFER_INFO_START_OFFER_LIST
V tomto stavu host vydá příkaz OFFER_INFO_START_OFFER_LIST, který indikuje, že je připraven odeslat nabídku (nebo nabídky) do aktuálního firmwaru zařízení. Primární komponenta zařízení musí dokončit tento příkaz s úspěchem.
Tento příkaz je užitečný, protože hostitel může odeslat všechny nabídky do zařízení více než jednou.
4.1.3 Stav: Odeslat příkaz FIRMWARE_UPDATE_OFFER
Hostitel odešle nabídku primární komponentě (nebo její dílčí komponentě) a zkontroluje, jestli má komponenta přijmout nebo odmítnout firmware. Nabídka obsahuje všechna potřebná metadata o obrazu firmwaru, aby se aktuální firmware komponenty mohl rozhodnout, zda má nabídku přijmout, pozdržet, přeskočit nebo odmítnout.
Nabídka může být určená pro primární komponentu nebo dílčí součást. Pokud komponenta může nabídku přijmout, připraví se na příjem firmwaru. To může zahrnovat přípravu paměťové banky na příjem příchozí image firmwaru. Komponenta nemusí nabídku přijmout, například komponenta již může mít novější (nebo stejnou) verzi firmwaru, kterou hostitel hodlá odeslat. Další důvody najdete v příkladech popsaných v dodatku 1: Příklad sekvence příkazů pro aktualizaci firmwaru.
I když je nabídka přijata, primární komponenta může i po stažení odmítnout image firmwaru kvůli selhání integrity a/nebo vrácení zpět kontroly oproti skutečné přijaté imagi. Komponenta musí zkontrolovat každou vlastnost image firmwaru nezávisle na všech informacích v nabídce.
Hostitel vydá příkaz FIRMWARE_UPDATE_OFFER, který informuje primární komponentu o imagi firmwaru, který hostitel hodlá odeslat.
Pokud komponenta nabídku přijme, bude mít stav FIRMWARE_UPDATE_OFFER_ACCEPT, čímž tuto nabídku potvrdí.
Pokud je firmware zařízení zaneprázdněný a primární komponenta momentálně nemůže tuto nebo další nabídku přijmout, odešle odpověď se stavem FIRMWARE_UPDATE_OFFER_BUSY signalizující zaneprázdněnost.
Pokud má aktuální firmware zájem o nabídku, ale nemůže ji přijmout (například kvůli závislosti na chybějící aktualizaci pro dílčí součást), odpoví kódem FIRMWARE_UPDATE_OFFER_SKIP, což značí, že se o tento firmware zajímá, ale není schopen jej přijmout. Hostitel pak pokračuje k další nabídce a musí tento firmware později znovu nabídnout.
Pokud aktuální firmware nemá zájem o nabídku (například jde o starší verzi), odpoví stavem FIRMWARE_UPDATE_OFFER_REJECT s odpovídajícím důvodem zamítnutí. Tento stav neznamená, že hostitel nemůže tuto nabídku v budoucnu znovu odeslat. Hostitel obvykle odesílá každou nabídku pokaždé, když inicializuje nebo znovu odešle seznam nabídek do zařízení (viz Stav: OFFER_INFO_START_OFFER_LIST Oznámení).
4.1.4 Stav: Odeslání firmwaru
V tomto stavu hostitel začne odesílat image firmwaru do primární komponenty, pro kterou tato komponenta dříve nabídku přijala.
Vzhledem k tomu, že obsah image firmwaru pravděpodobně překročí limity datové části jednoho příkazu, hostitel rozdělí image firmwaru do paketů. Hostitel odesílá každý paket postupně v samostatném příkazu FIRMWARE_UPDATE CONTENT. Primární komponenta musí pro každý příkaz vygenerovat paket odpovědi.
Každý příkaz FIRMWARE_UPDATE CONTENT popisuje posunovou adresu, která obsahuje částečnou zátěž firmwaru. Komponenta používá posun k určení adresy, kde musí být uložena částečná datová část firmwaru. Zařízení zapíše obsah do vhodného umístění a potvrdí příkaz odesláním odpovědi.
U prvního paketu, který hostitel odešle, nastaví příznak FIRMWARE_UPDATE_FLAG_FIRST_BLOCK, který označuje zařízení, že se jedná o první paket image firmwaru. Pokud se zařízení ještě nepřipravilo na příjem firmwaru, může to v tuto chvíli udělat.
Když hostitel odešle poslední paket, nastaví příznak FIRMWARE_UPDATE_FLAG_LAST_BLOCK.
Jakmile aktuální firmware na zařízení zapíše částečnou datovou část firmwaru, která je součástí tohoto příkazu, musí před odesláním odpovědi provést kontroly ověření a ověření na příchozí imagi firmwaru. To zahrnuje minimálně:
Kontrola CRC za účelem ověření integrity celé image firmwaru.
Pokud kontrola CRC proběhne úspěšně, volitelné ověření podpisu příchozího obrázku.
Po kontrole volitelného podpisu zkontrolujte verzi a ujistěte se, že nová verze firmwaru je stejná nebo novější než stávající firmware.
V případě, že byla image příchozího firmwaru rozdělena do menších segmentů, je na současném firmwaru určit, zda se jedná o poslední segment image firmwaru, a následně zahrnout všechny segmenty do ověření.
Pokud předchozí kontroly projdou, může aktuální firmware nastavit zařízení tak, aby se při příštím resetování přepnulo na nový obraz a nahlásí hostiteli úspěch. Komponenta obvykle neicializuje samoobslužné resetování. Cílem je zabránit narušení jakéhokoli softwaru, firmwaru či hardwarových entit, s nimiž komponenta interaguje. To ale není požadavek a může se lišit v závislosti na implementaci.
Pokud kroky ověření selžou, firmware nesmí nastavit výměnu při dalším resetování a musí indikovat hostiteli odpověď o selhání.
4.1.5 Rozhodnutí: Existují další nabídky
V tomto stavu hostitel určí, jestli existují další nabídky k odeslání do zařízení.
4.1.6 Stav: OFFER_INFO_END_OFFER_LIST oznámení
Tento stav se dosáhne, když hostitel odeslal všechny nabídky primární komponentě v aktuálním firmwaru zařízení. Hostitel odešle příkaz OFFER_INFO_END_OFFER_LIST, který indikuje, že komponentě odeslal všechny nabídky.
Zařízení musí dokončit tento příkaz úspěšně.
4.1.7 Stav rozhodnutí: Seznam opakovaných nabídek
Hostitel určí, jestli je potřeba znovu odeslat všechny nabídky. K takovému případu může dojít, pokud dříve primární komponenta přeskočila některé nabídky a přijala některé nabídky. Hostitel musí znovu přehrát seznam nabídek.
Může existovat další logika specifická pro implementaci, která může vést k rozhodnutí znovu přehrát seznam nabídek.
4.1.8 Stav: Zařízení je zaneprázdněné
Tento stav znamená, že zařízení vrátilo zaneprázdněnou odpověď na nabídku.
Hostitel odešle příkaz OFFER_NOTIFY_ON_READY, na který zařízení neodpovídá přijetím, dokud není volné.
5 Formát paketů protokolu CFU
Protokol CFU se implementuje jako sada příkazů a odpovědí. Protokol je v podstatě sekvenční. U každého příkazu, který hostitel odesílá do komponenty, se očekává, že komponenta odpoví (pokud není výslovně uvedeno jinak v této specifikaci). Hostitel neodesílá další příkaz, dokud nebude přijata platná odpověď pro předchozí příkaz, který odeslal.
V případě, že komponenta během určitou dobu neodpověděla nebo odešle neplatnou odpověď, může hostitel proces restartovat od začátku. Tento protokol nedefinuje konkrétní hodnotu časového limitu.
Existují příkazy pro získání informací o verzi aktuálního firmwaru komponenty; odeslat nabídku a odeslat image firmwaru.
Hostitel však nemusí zadržovat nabídku na základě odpovědi přijaté z primární komponenty ohledně informací o verzi, na kterou bylo dotazováno. Tyto informace jsou zjistitelné pro účely protokolování nebo jiné účely.
5.1 ZÍSKAT_VERZI_FIRMWARE
Získá aktuální verze firmwaru primární komponenty (a jeho dílčí součásti). Příkaz neobsahuje žádné argumenty.
5.1.1 Příkaz
Tento příkaz odešle hostitel k dotazování verzí aktuálního firmwaru na primární komponentě (a jeho dílčí součásti). Hostitel ho může použít k potvrzení, jestli se firmware úspěšně aktualizoval. Při přijetí tohoto příkazu primární komponenta odpoví verzí firmwaru pro sebe a všechny dílčí součásti.
5.1.2 Odpověď
Komponenta reaguje na verzi firmwaru primární komponenty a dílčích komponent. Velikost odpovědi je 60 bajtů, což umožňuje informace o verzi až pro sedm komponent (jeden primární a až šest dílčích komponent).
Tabulka 5.1-1 Uspořádání odpovědi GET_FIRMWARE_VERSION
5.1.2.1 Hlavička
Tabulka 5.1-2 – rozložení záhlaví odpovědi GET_FIRMWARE_VERSION
Odpověď
Hlavička odpovědi obsahuje následující informace.
Table 5.1-3 GET_FIRMWARE_VERSION Response – Bity hlaviček
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Počet součástí | 8 | Počet komponent ke stažení spravovaných prostřednictvím tohoto mechanismu pro tuto komponentu. Počet součástí určuje maximální velikost tabulky. V současné době je podporováno až 7 součástí, aby se odpověď vešla do povolených 60 bajtů. |
8 | Rsvd | 16 | Vyhrazená pole. Odesílatel musí nastavit hodnotu 0. Příjemce musí tuto hodnotu ignorovat. |
24 | Verze protokolu | 4 | Revizní bity aktualizace firmwaru představují revizi protokolu FW Update Protocol, která se aktuálně používá v přenosu. Pro rozhraní definované zde musí být revize aktualizace FW 0010b. |
28 | Rsvd | 3 | Vyhrazená pole. Odesílatel musí nastavit hodnotu 0. Příjemce musí tuto hodnotu ignorovat. |
31 | E | 1 | Příznak rozšíření je budoucí háček protokolu pro povolení hlášení dalších komponent. |
5.1.2.2 Verze součásti a vlastnosti
Pro každou komponentu jsou použity dva DWORDy k popisu vlastností komponenty až pro 7 komponent. Pokud je počet součástí v hlavičce menší než 7, musí být počet nepoužitých DWORDS na konci odpovědi nastaven na hodnotu 0.
Tabulka 5.1-4 GET_FIRMWARE_VERSION Response – rozložení verzí komponenty a vlastností
odpověď
Informace specifické pro každou komponentu jsou popsány ve dvou identifikátorech DWOR takto:
Tabulka 5.1-5 Odezva GET_FIRMWARE_VERSION - Verze komponentu a vlastnosti bajtů
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Verze firmwaru | 32 | Vrátí verzi aktuálního firmwaru pro danou komponentu. Tato specifikace nevyžaduje žádný konkrétní formát pro verzi firmwaru. Pokyny najdete v části Verze firmwaru. |
32 | Banka | 2 | Volitelný. V závislosti na architektuře může hardware komponenty obsahovat několik bank, ve kterých může být firmware uložen. V závislosti na implementaci může odesílatel zadat banku, ve které firmware aktuálně existuje. Toto pole je Podmíněné povinné – podpora je nepovinná, ale nesmí být použita pro žádný jiný účel. |
34 | Rezervovaný | 2 | Vyhrazená pole. Odesílatel musí nastavit hodnotu 0. Příjemce musí tuto hodnotu ignorovat. |
36 | Specifická pro dodavatele | 4 | Pole specifické pro dodavatele, které lze použít určitým způsobem implementace. Dodavatel může tyto bity použít ke kódování informací, jako jsou: - Typ firmwaru: předběžná verze/vlastní hostování/produkce; ladění/spotřebitelská verze - Fáze vývoje - ID produktu, aby se zabránilo tomu, že součásti obdrží firmware určený pro jiné produkty používající stejný aktualizační protokol. |
40 | ID komponenty | 8 | Jedinečný identifikátor komponenty. |
48 | Specifická pro dodavatele | 16 | Pole specifické pro dodavatele, které lze použít určitým způsobem implementace. |
5.1.3 Mapování na HID
To se implementuje jako HID Get Feature požadavek s velikostí odpovědi 60 bajtů kromě ID sestavy. Délka zprávy o funkci odpovídá celé odpovědi GET_FIRMWARE_VERSION. K žádosti o získání funkce z hostitele nejsou přidružená žádná data.
5.2 NABÍDKA AKTUALIZACE FIRMWARE
Určuje, zda primární komponenta přijme nebo odmítne firmware.
5.2.1 Příkaz
Hostitel odešle tento příkaz komponentě a určí, jestli přijme nebo odmítne firmware. Hostitel musí odeslat nabídku a komponenta musí nabídku přijmout, aby hostitel mohl odeslat firmware.
Paket FIRMWARE_UPDATE_OFFER Command je definován následujícím způsobem.
Tabulka 5.2-1: Rozložení příkazu FIRMWARE_UPDATE_OFFER
5.2.1.1 Informace o součástech
Tabulka 5.2-2 FIRMWARE_UPDATE_OFFER Příkaz - Uspořádání informací o komponentě
příkaz
Bity bajtu informace o komponentě jsou popsány v této tabulce.
Tabulka 5.2-3 FIRMWARE_UPDATE_OFFER Příkaz - Informační bity komponenty
Bitový posun | Pole | Velikost | Popis |
---|---|---|---|
0 | Číslo segmentu | 8 | Toto pole se používá pro případ, že je firmware komponenty segmentovaný do menších segmentů. Pokud se použije, hodnota označuje segment obsažený v následujícím paketu datové části. Například pokud je image firmwaru pro komponentu velmi velká a primární komponenta může najednou zpracovat jen menší části image, toto pole může být použito k označení, že tato nabídka je pro segment iúplného snímku. Samostatná nabídka může být odeslána primární komponentě, která obsahuje i+1. segment obrázku atd. |
8 | Rezervovaný | 6 | Vyhrazená pole. Odesílatel musí nastavit hodnotu 0. Příjemce musí tuto hodnotu ignorovat. |
14 | Já | 1 | Vynucení okamžitého resetování (I) - Tato bitová hodnota se používá k označení komponenty, aby se okamžitě resetovala po dokončení stahování firmwaru a ověřila, že se okamžitě vyvolá. - Tento příznak je určen pro fázi vývoje. |
15 | V | 1 | Vynucení ignorování verze (V) – Tento příznak je určený pro předběžnou verzi nebo ladění image firmwaru. Indikuje komponentě, aby neodmítla firmware na základě verze firmwaru. - Tato vlajka je určena pro fázi vývoje. Dá se použít k úmyslnému vrácení zpět na předchozí verzi firmwaru. – Tento příznak by měl být ignorován produkčním firmwarem. |
16 | ID komponenty | 8 | Tento bajt se používá pro scénáře s více komponentami. Toto pole lze použít k identifikaci dílčího podsložky, pro kterou je nabídka určena. Pokud se hodnota nepoužívá, měla by být 0. Možné hodnoty ID součástí jsou následující: 1 – 0xDF: Platné 0xE0 – 0xFD: rezervováno. Nepoužívejte. 0xFF: Nabídka je paket s informacemi o speciální nabídce. Podrobnosti najdete v části FIRMWARE_UPDATE_OFFER. 0xFE: Jedná se o speciální příkazový paket. Podrobnosti najdete v rozšířené části FIRMWARE_UPDATE_OFFER. |
24 | Token | 8 | Hostitel vloží jedinečný token do nabídkového paketu, který je určen pro komponentu. Tento token musí vrátit komponenta v odpovědi na nabídku. To je užitečné, pokud je potřeba, aby komponenta rozlišovala mezi různými hostiteli a typy hostitelů. Přesné hodnoty, které se mají použít, jsou specifické pro implementaci. Například jedna hodnota může být použita pro ovladač a jinou pro aplikaci. Díky tomu může aktuální firmware zařízení počítat s potenciálními několika odesílateli příkazů CFU. Jednou z možných implementací může být přijetí prvního příkazu CFU a odmítnutí všech ostatních příkazů s různými tokeny, dokud nebudou dokončeny první transakce CFU. |
Verze firmwaru 5.2.1.2
Tyto čtyři bajty představují 32bitovou verzi firmwaru. Tato specifikace nevyžaduje formát verze firmwaru. Doporučuje se následující:
Tabulka 5.2-4 FIRMWARE_UPDATE_OFFER příkaz - rozvržení verze firmwaru
příkaz
Formát verze firmwaru není touto specifikací vyžadován, avšak následující pokyny jsou doporučené.
Tabulka 5.2-5 FIRMWARE_UPDATE_OFFER příkaz – Bity verze firmwaru
Bitový posun | Pole | Velikost | Popis |
---|---|---|---|
0 | Varianta | 8 | Toto pole může být popsáno k rozlišení mezi předběžným firmwarem a produkčním firmwarem. Může značit typ podpisu použitého k podepsání firmwaru. |
8 | Menší verze | 16 | Tato hodnota pole by se měla aktualizovat pro každé sestavení firmwaru. Tato hodnota pole by se měla aktualizovat pro každé sestavení firmwaru. |
24 | Hlavní verze | 8 | Toto pole je hlavní verzí firmwarového obrazu. Toto pole by se mělo aktualizovat při expedici nové produktové řady, hlavních nových aktualizací firmwaru atd. |
5.2.1.3 Specifické pro dodavatele
Tyto čtyři bajty lze použít ke kódování jakýchkoli vlastních informací v nabídce, která je specifická pro implementaci dodavatele.
5.2.1.4 Různé a verze protokolu
Tyto čtyři bajty lze použít ke kódování jakýchkoli vlastních informací v nabídce, která je specifická pro implementaci dodavatele.
Tabulka 5.2-6 FIRMWARE_UPDATE_OFFER příkaz - specifické uspořádání pro dodavatele
příkaz
Bity bajtu specifického dodavatele jsou popsány v této tabulce.
Tabulka 5.2-7 Příkaz FIRMWARE_UPDATE_OFFER - Různé a Verze protokolu
Bitový posun | Pole | Velikost | Popis |
---|---|---|---|
0 | Verze protokolu | 4 | Toto pole musí být nastaveno na 0010b, což znamená, že hostitel/nabídka odpovídá verzi 2 protokolu CFU. |
4 | Rezervovaný | 4 | Rezervovaný. Nepoužívejte. |
8 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
16 | Specifická pro dodavatele | 16 | Toto pole lze použít ke kódování jakýchkoli vlastních informací v nabídce, která je specifická pro implementaci dodavatele. |
5.2.2 Odpověď
Paket odpovědi FIRMWARE_UPDATE_OFFER je definován následujícím způsobem.
Tabulka 5.2-8 Rozložení tokenu odpovědi FIRMWARE_UPDATE_OFFER
Token 5.2.2.1
Tabulka 5.2-9 Odpověď FIRMWARE_UPDATE_OFFER – rozložení tokenu
ODPOVĚĎ
Bity bajtu tokenu jsou popsány v této tabulce.
Tabulka 5.2–10 FIRMWARE_UPDATE_OFFER - Odpověď - bity tokenů
Bitový posun | Pole | Velikost | Popis |
---|---|---|---|
0 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
8 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
16 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
24 | Token | 8 | Token pro identifikaci hostitele |
5.2.2.2 Vyhrazeno (B7 - B4)
Rezervovaný. Nepoužívejte.
5.2.2.3 Důvod odmítnutí (RR)
Odpověď Tabulka 5.2-11 FIRMWARE_UPDATE_OFFER – Důvod odmítnutí
odpověď
Odpověď na FIRMWARE_UPDATE_OFFER v tabulce 5.2-12 – důvody odmítnutí ve formě bitů
Bity bajtu Odmítnout důvod jsou popsány v této tabulce.
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Kód RR | 8 | Kód zamítnutí důvodu, který označuje důvod poskytnutý komponentou pro odmítnutí nabídky. Tato hodnota závisí na poli Stav. Mapování kódu stavu na RR najdete v tabulce 5.2–13. |
8 | Rezervovaný | 24 | Rezervovaný. Nepoužívejte. |
Tabulka 5.2-13 hodnoty kódu odpovědi FIRMWARE_UPDATE_OFFER RR
Možné hodnoty bajtu kódu RR jsou popsány v této tabulce.
Kód RR | Jméno | Popis |
---|---|---|
0x00 | Nabídka Zastaralého Firmware Odmítnuta | Nabídka byla odmítnuta, protože verze nabízeného firmwaru je starší nebo stejná jako aktuální firmware. |
0x01 | FIRMWARE_NABÍDKA_ODMITNOUT_NEPLATNÝ_KOMPONENT | Nabídka byla odmítnuta, protože nabízený firmware se nevztahuje na platformu produktu. Příčinou může být nepodporované ID komponenty nebo nabízená image není kompatibilní se systémovým hardwarem. |
0x02 | NABÍDKA_AKTUALIZACE_FIRMWARE ČEKÁ_NA_VÝMĚNU | Firmware komponenty byl aktualizován, ale čeká se na výměnu nového firmwaru. Dokud není dokončeno prohození, což obvykle nastane prostřednictvím resetu, nemůže dojít k žádnému dalšímu zpracování aktualizace firmwaru. |
0x03 – 0x08 | (Vyhrazeno) | Rezervovaný. Nepoužívejte. |
0x09 – 0xDF | (Vyhrazeno) | Rezervovaný. Nepoužívejte. |
0xE0 – 0xFF | (Konkrétní dodavatel) | Tyto hodnoty používají návrháři protokolu a význam je specifický pro dodavatele. |
5.2.2.4 Stav
Tabulka 5.2–14 Struktura stavu odpovědi FIRMWARE_UPDATE_OFFER
Bity bajtů stavu jsou popsány v této tabulce.
Tabulka 5.2–15 FIRMWARE_UPDATE_OFFER Response – stavové bity
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Stav | 8 | Tato hodnota označuje rozhodnutí komponenty nabídku přijmout, pozdržet, přeskočit nebo odmítnout. Komponenta poskytuje důvod pro hodnotu pole kódu RR. Mapování kódu stavu na RR najdete v tabulce 5.2–16. |
8 | Rezervovaný | 24 | Rezervovaný. Nepoužívejte. |
Možné hodnoty bajtu Status jsou popsány v této tabulce.
Tabulka 5.2-16 FIRMWARE_UPDATE_OFFER hodnoty stavu odpovědi
Stav | Jméno | Popis |
---|---|---|
0x00 | Přeskočit aktualizaci firmwaru | Komponenta se rozhodla nabídku ignorovat. Hostitel ho musí nabídnout znovu později. |
0x01 | NABÍDKA_AKTUALIZACE_FIRMWARE_PŘIJMOUT | Komponenta se rozhodla nabídku přijmout. |
0x02 | Odmítnout nabídku aktualizace firmwaru | Komponenta se rozhodla nabídku odmítnout. |
0x03 | Nabídka aktualizace firmwaru zaneprázdněna | Zařízení je zaneprázdněné a hostitel musí počkat, až bude zařízení připravené. |
0x04 | FIRMWARE_UPDATE_OFFER_COMMAND | Používá se, když je ID součásti v bajtech informací o komponentách (viz 5.1.2.1.1 Informace o komponentě) nastaveny na 0xFE. Pro požadavek s příkazovým kódem nastaveným na OFFER_NOTIFY_ON_READY to znamená, že příslušenství je připraveno přijmout další nabídky. |
0xFF | Aktualizace firmwaru není podporována | Žádost o nabídku není rozpoznána. |
5.2.3 Mapování na protokol HID
Zpráva je komponentě vydána mechanismem HID výstupní sestavy s využitím vyhrazeného HID Utility Report ID pro aktualizaci firmwaru. Použití HID Utility TLC, jak je popsáno v dodatku.
5.3 Nabídka aktualizace firmwaru - Informace
Pokud je ID komponenty v bajtech informací o komponentách (viz Informace o komponentě) nastaveno na 0xFF, jsou bity (15 bajtů) přepracovány, aby indikovali pouze informace o nabídce, od hostitele ke komponentě. Tento mechanismus umožňuje rozšiřitelnost a poskytuje hostiteli způsob, jak zařízení předat konkrétní informace, jako je například Zahájení seznamu nabídek, Ukončení seznamu nabídek a Zahájení celé transakce. Pakety informací o nabídce jsou vždy okamžitě přijaty komponentou.
5.3.1 Příkaz
Paket FIRMWARE_UPDATE_OFFER -Information Command je definován takto:
Tabulka 5.3-1 FIRMWARE_UPDATE_OFFER – rozložení příkazu informace
5.3.1.1 Součást
Tabulka 5.3-2 FIRMWARE_UPDATE_OFFER - Informační příkaz - Rozložení komponenty
Bity bajtů komponenty jsou popsány v této tabulce.
Tabulka 5.3-3 FIRMWARE_UPDATE_OFFER - Informační příkaz - Bity komponentů
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Informační kód | 8 | Tato hodnota označuje typ informací. Tato hodnota není bitová maska a může to být jenom jedna z možných hodnot popsaných v tabulce 5.3-4. |
8 | Rezervovaný. | 8 | Rezervovaný. Nepoužívejte. |
16 | ID komponenty | 8 | Nastavte na 0xFF. |
24 | Žeton | Hostitel vloží jedinečný token do nabídkového paketu pro komponentu. Tento token musí vrátit komponenta v odpovědi na nabídku. |
Tabulka 5.3-4 FIRMWARE_UPDATE_OFFER - Informační příkaz - Hodnoty kódu informací
Stav | Jméno | Popis |
---|---|---|
0x00 | NABÍDKA_INFO_ZAČÁTEK_CELÉ_TRANSAKCE | Označuje, že hostitel je nový nebo se znovu načte a celé zpracování nabídky je (znovu) spuštěno. |
0x01 | INFORMACE_O_NABÍDCE_ZAČÁTEK_SEZNAMU_NABÍDEK | Označuje začátek seznamu nabídek od hostitele v případě, že příslušenství má pravidla stahování zajišťující, že jeden podkomponent se aktualizuje před jinou podkomponentou v systému. |
0x02 | INFORMACE_NABÍDKA_KONEC_SEZNAM_NABÍDEK | Označuje konec seznamu nabídek od hostitele. |
5.3.1.2 Rezervované B7 - B4
Rezervovaný. Nepoužívejte.
5.3.1.3 Rezervované B11 - B8
Rezervovaný. Nepoužívejte.
5.3.1.4 Rezervované B15 - B12
Rezervovaný. Nepoužívejte.
5.3.2 Odpověď
Paket odpovědi na informace o nabídce FIRMWARE_UPDATE_OFFER je definován následujícím způsobem.
Tabulka 5.3–5 FIRMWARE_UPDATE_OFFER – rozložení informativní odpovědi
Token 5.3.2.1
Tabulka 5.3-6 FIRMWARE_UPDATE_OFFER – rozložení tokenu odpovědi na pakety informací
Bity bajtu tokenu jsou popsány v této tabulce.
Tabulka 5.3-7 FIRMWARE_UPDATE_OFFER – Odpověď na informace – Bity tokenů
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
8 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
16 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
24 | Token | 8 | Token pro identifikaci hostitele |
5.3.2.2 Rezervované B7 - B4
Rezervovaný. Nepoužívejte.
Důvod odmítnutí (RR)
Tabulka 5.3-8 FIRMWARE_UPDATE_OFFER – Informace k odpovědi – Schéma kódu RR
Bity bajtu Odmítnout důvod jsou popsány v této tabulce.
Tabulka 5.3-9 FIRMWARE_UPDATE_OFFER - Odpověď na informace o nabídce – Bity kódu RR
Bitový posun | Pole | Velikost | Popis |
---|---|---|---|
0 | Kód RR | 8 | Kód zamítnutí důvodu, který označuje důvod poskytnutý komponentou pro odmítnutí nabídky. Možné hodnoty jsou popsány v tabulce 5.3-10. Tato hodnota závisí na poli Stav. |
8 | Rezervovaný | 24 | Rezervovaný. Nepoužívejte. |
Možné hodnoty bajtu kódu RR jsou popsány v této tabulce.
Tabulka 5.3-10 FIRMWARE_UPDATE_OFFER– odpověď na informace – hodnoty kódu RR
Kód RR | Jméno | Popis |
---|---|---|
0x00 | Odmítnout nabídku starého firmwaru | Nabídka byla odmítnuta, protože verze nabízeného firmwaru je starší nebo stejná jako aktuální firmware. |
0x01 | NABÍDKA_FIRMWARE_ODMITNUTÍ_NEPLATNÁ_SOUBOROVÁ_SOUČÁST | Nabídka byla odmítnuta, protože nabízený firmware se nevztahuje na platformu produktu. Příčinou může být nepodporované ID komponenty nebo nabízená image není kompatibilní se systémovým hardwarem. |
0x02 | NABÍDKA_AKTUALIZACE_FIRMWARE ČEKÁ_VÝMĚNA | Firmware komponenty byl aktualizován, ale čeká se na výměnu nového firmwaru. K žádnému dalšímu zpracování aktualizace firmwaru nedojde, dokud nebude dokončeno prohození, což obvykle vyžaduje resetování. |
0x03 – 0x08 | (Vyhrazeno) | Rezervovaný. Nepoužívejte. |
0x09 – 0xDF | (Vyhrazeno) | Rezervovaný. Nepoužívejte. |
0xE0 — 0xFF | (Konkrétní dodavatel) | Tyto hodnoty používají návrháři protokolu a význam je specifický pro dodavatele. |
5.3.2.4 Stav
Tabulka 5.3–11 FIRMWARE_UPDATE_OFFER – rozložení stavu odpovědi na informace o nabídce
Bity bajtů stavu jsou popsány v této tabulce.
Tabulka 5.3–12 FIRMWARE_UPDATE_OFFER – Informace o nabídce – Bity stavu odpovědi
Bitový offset | Pole | Velikost | Popis |
---|---|---|---|
0 | Stav | 8 | Toto pole musí být nastaveno na FIRMWARE_UPDATE_OFFER_ACCEPT. To znamená, že se komponenta rozhodla nabídku přijmout. |
8 | Rezervovaný. | 24 | Rezervovaný. Nepoužívejte. |
5.4 FIRMWARE_UPDATE_OFFER – rozšířené
Pokud je ID komponenty v bajtech informací o komponentách nastaveno na 0xFE, jsou bity (15 bajtů) redefinovány pro indikaci příkazu nabídky z hostitele do firmwaru zařízení. Tento mechanismus umožňuje rozšiřitelnost a poskytuje hostiteli způsob, jak předat konkrétní informace zařízení. Pakety příkazu nabídky se vrátí, když je komponenta připravena na přijetí odpovědi typu Akceptováno.
5.4.1 Příkaz
Pokud je ID komponenty v bajtech informací o komponentě nastaveno na 0xFE, čtyři DWORDy jsou předefinovány následujícím způsobem:
Tabulka 5.4-1 FIRMWARE_UPDATE_OFFER – rozšířené rozložení příkazů
5.4.1.1 Součást
Tabulka 5.4-2 FIRMWARE_UPDATE_OFFER – Rozšířený paket příkazů – Příkaz – Rozložení komponenty
Bity bajtů komponenty jsou popsány v této tabulce.
Tabulka 5.4-3 FIRMWARE_UPDATE_OFFER – Rozšířený příkaz – Bity komponent
Bitový offset | Pole | Velikost | Popis |
---|---|---|---|
0 | Kód příkazu | 8 | Tato hodnota označuje typ příkazu. Tato hodnota není bitová maska a může to být pouze jedna z možných hodnot popsaných v tabulce 5.4-4. |
8 | Rezervovaný. | 8 | Rezervovaný. Nepoužívejte. |
16 | ID komponenty | 8 | Nastavte na 0xFE. |
24 | Token | Hostitel vloží jedinečný token do nabídky paketu komponentě. Tento token musí vrátit komponenta v odpovědi na nabídku. |
Tabulka 5.4-4 FIRMWARE_UPDATE_OFFER – rozšířený příkaz – hodnoty kódu příkazu
Stav | Jméno | Popis |
---|---|---|
0x01 | NABÍDKA_OZNÁMENÍ_PŘIPRAVENO | Hostitel to odeslal, pokud byla nabídka dříve odmítnuta komponentou. |
0x02 – 0xFF | Rezervovaný | Rezervovaný |
5.4.1.2 Rezervované B7 - B4
Rezervovaný. Nepoužívejte.
5.4.1.3 Rezervované B11 - B8
Rezervovaný. Nepoužívejte.
5.4.1.4 Rezervované B15 - B12
Rezervovaný. Nepoužívejte.
5.4.2 Odpověď
Odpověď na FIRMWARE_UPDATE_OFFER – příkaz nabídky ze zařízení nemusí být přijata okamžitě. Odpověď je definována následujícím způsobem.
Tabulka 5.4-5 FIRMWARE_UPDATE_OFFER – rozložení odezvy rozšířeného příkazového paketu
5.4.2.1 Token
Tabulka 5.4-6 FIRMWARE_UPDATE_OFFER — Nabídka Odpověď na příkazový paket — Rozvržení tokenů
Bity bajtu tokenu jsou popsány v této tabulce.
Tabulka 5.4-7 FIRMWARE_UPDATE_OFFER – Odpověď na příkaz nabídky – Bity tokenů
Bitový offset | Pole | Velikost | Popis |
---|---|---|---|
0 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
8 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
16 | Rezervovaný | 8 | Rezervovaný. Nepoužívejte. |
24 | Token | 8 | Token pro identifikaci hostitele |
5.4.2.2 Rezervované B7 - B4
Rezervovaný. Nepoužívejte.
5.4.2.3 Důvod odmítnutí
Tabulka 5.4-8 FIRMWARE_UPDATE_OFFER – Rozložení odpovědi na pakety s informacemi o nabídce
Bity bajtu Odmítnout důvod jsou popsány v této tabulce.
Tabulka 5.4-9 FIRMWARE_UPDATE_OFFER - Odezva na příkaz nabídky – kód RR
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Kód RR | 8 | Tato hodnota závisí na poli Stav. Možné hodnoty kódu RR najdete v tabulce 5.4-10. |
8 | Rezervovaný | 24 | Rezervovaný. Nepoužívejte. |
Možné hodnoty bajtu kódu RR jsou popsány v této tabulce.
Tabulka 5.4-10 FIRMWARE_UPDATE_OFFER- Nabídka příkazového paketu - Hodnoty RR kódu
Kód RR | Jméno | Popis |
---|---|---|
0x00 | Odmítnout starou verzi firmwaru | Nabídka byla odmítnuta, protože verze nabízeného firmwaru je starší nebo stejná jako aktuální firmware. |
0x01 | NABÍDKA_FIRMWARE_ODMITNUTA_NEPLATNÁ_KOMPONENTA | Nabídka byla odmítnuta, protože nabízený firmware se nevztahuje na platformu produktu. Příčinou může být nepodporované ID komponenty nebo nabízená image není kompatibilní se systémovým hardwarem. |
0x02 | NABÍDKA AKTUALIZACE FIRMWARE S ČEKÁNÍM NA VÝMĚNU | Firmware komponenty byl aktualizován, ale čeká se na výměnu nového firmwaru. Dokud se přepnutí nedokončí, obvykle resetováním, nemůže dojít k žádnému dalšímu zpracování aktualizace firmwaru. |
0x03 – 0x08 | (Vyhrazeno) | Rezervovaný. Nepoužívejte. |
0x09 – 0xDF | (Vyhrazeno) | Rezervovaný. Nepoužívejte. |
0xE0 — 0xFF | (Konkrétní dodavatel) | Tyto hodnoty používají návrháři protokolu a význam je specifický pro dodavatele. |
5.4.2.4 Stav
Tabulka 5.4-11 FIRMWARE_UPDATE_OFFER – Rozvržení stavu odpovědi na nabídkový příkazový paket
Bity bajtů stavu jsou popsány v této tabulce.
Tabulka 5.4-12 FIRMWARE_UPDATE_OFFER - Kód odpovědi na příkazový paket Offer
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Stav | 8 | Toto pole musí být nastaveno na FIRMWARE_UPDATE_OFFER_ACCEPT. To znamená, že se komponenta rozhodla nabídku přijmout. |
8 | Rezervovaný. | 24 | Rezervovaný. Nepoužívejte. |
5,5 FIRMWARE_UPDATE_CONTENT
Hostitel odešle tento příkaz do firmwaru zařízení, aby poskytl obsah firmwaru (to znamená image firmwaru). Neočekává se, že by se celý soubor obrázku vešel do jednoho příkazu. Hostitel musí rozdělit image na menší bloky a každý příkaz odešle vždy jeden blok image.
S každým příkazem hostitel naznačuje další informace; jestli se jedná o první blok, poslední blok a tak dále, vztahující se k firmwaru. Primární komponenta firmwaru zařízení přijímá každý blok příchozí image firmwaru, ukládá ho do paměti a musí reagovat na každý příkaz jednotlivě.
Když primární komponenta obdrží poslední blok, komponenta ověří celou image firmwaru (kontrola CRC, ověření podpisu). Na základě výsledků těchto kontrol systém vrátí odpovídající odpověď (selhání nebo úspěch) pro poslední blok.
5.5.1 Příkaz
Tabulka 5.5-1 Rozvržení příkazu FIRMWARE_UPDATE_CONTENT
5.5.1.1 Hlavička (B7 - B0)
Tabulka 5.5-2 FIRMWARE_UPDATE_CONTENT rozvržení hlavičky příkazu
Bity hlavičky FIRMWARE_UPDATE_CONTENT jsou popsány v této tabulce.
Bity záhlaví tabulky 5.5-3 FIRMWARE_UPDATE_CONTENT
Bitový offset | Pole | Velikost | Popis |
---|---|---|---|
0 | Vlajky | 8 | Toto pole obsahuje další informace o příkazu. Tato hodnota je maska příznaků, které se mají použít pro přenosy dat. Možné hodnoty jsou popsány v tabulce 5.5-4. |
8 | Délka dat | 8 | Délka příslušného datového pole označující počet bajtů, které se mají zapsat. Vzhledem k velikosti tohoto příkazu je maximální povolená hodnota pro délku 52 bajtů. |
16 | Pořadové číslo | 16 | Tato hodnota je vytvořená hostitelem a je jedinečná pro každý vystavený paket obsahu. Komponenta musí v odpovědi na tento požadavek vrátit pořadové číslo. |
32 | Adresa firmwaru | 32 | Little Endian (LSB First) Adresa pro zápis dat. Adresa je číslovaná od nuly. Firmware používá tento posun k určení adresy podle potřeby při umísťování image do paměti. |
Možné hodnoty bajtů Flags jsou popsány v této tabulce.
Tabulka 5.5-4 FIRMWARE_UPDATE_OFFER- Nabídkový příkazový paket - Hodnoty příznaků
Vlajka | Jméno | Popis |
---|---|---|
0x80 | FIRMWARE_UPDATE_FLAG_FIRST_BLOCK | Tento příznak označuje, že se jedná o první blok image firmwaru. |
0x40 | FIRMWARE_UPDATE_FLAG_LAST_BLOCK | Tento příznak označuje, že se jedná o poslední blok image firmwaru a že je image připravená k ověření. Je důležité, že aktuální firmware komponenty po zápisu tohoto bloku do nevolatilní paměti provede ověřování celého staženého obrazu firmwaru. |
5.5.1.2 Data
Tabulka 5.5-5 Rozvržení dat příkazu FIRMWARE_UPDATE_CONTENT
Bity dat FIRMWARE_UPDATE_CONTENT jsou popsány v této tabulce.
Tabulka 5.5-6 FIRMWARE_UPDATE_CONTENT datové bity příkazu
Bitový odstup | Pole | Velikost | Popis |
---|---|---|---|
64 | Data | Max. 52. | Bajtové pole, které se má napsat. Hostitel obvykle odesílá bloky se 4 bajty na základě architektury produktu. Jakékoliv nepoužité bajty na konci by měly být doplněny nulami. |
5.5.2 Odpověď
Tabulka 5.5-7 FIRMWARE_UPDATE_CONTENT Rozložení Odpovědi na Příkaz
5.5.2.1 Pořadové číslo
Tabulka 5.5-8 FIRMWARE_UPDATE_CONTENT Odpověď – pořadové číslo
Odpověď FIRMWARE_UPDATE_CONTENT
Bity odpovědi FIRMWARE_UPDATE_CONTENT (3–0) jsou popsané v této tabulce.
Tabulka 5.5-9 FIRMWARE_UPDATE_CONTENT – Příkaz – Bity odpovědí
Posun bitu | Pole | Velikost | Popis |
---|---|---|---|
0 | Pořadové číslo | 16 | Toto pole je pořadové číslo odeslané hostitelem v požadavku. |
16 | Rezervovaný | 16 | Rezervovaný. Nepoužívejte. |
5.5.2.2 Stav
Tabulka 5.5–10 FIRMWARE_UPDATE_CONTENT rozložení stavu odpovědi
Bity odpovědi FIRMWARE_UPDATE_CONTENT (7–4) jsou popsány v této tabulce.
Tabulka 5.5-11 FIRMWARE_UPDATE_OFFER – Odpověď – Bity stavu
Bitový posun | Pole | Velikost | Popis |
---|---|---|---|
0 | Stav | 8 | Tato hodnota označuje stavový kód vrácený komponentou zařízení. Toto není bitové a může to být jedna z hodnot popsaných v tabulce 5.5-12. |
8 | Rezervovaný | 24 | Rezervovaný. Nepoužívejte. |
Možné hodnoty bajtu Status jsou popsány v této tabulce.
Tabulka 5.5-12 FIRMWARE_UPDATE_OFFER – odpověď – hodnoty stavového kódu
Vlajka | Jméno | Popis |
---|---|---|
0x00 | Aktualizace firmwaru byla úspěšná | Žádost byla úspěšně dokončena. |
0x01 | CHYBA_PŘÍPRAVY_AKTUALIZACE_FIRMWARE | Komponenta nebyla připravena přijímat obsah firmwaru. Pokud se použije, tento kód se obvykle používá v odpovědi na první blok. Například vymažte chybu na flash paměti. |
0x02 | CHYBA_ZÁPISU_AKTUALIZACE_FIRMWARE | Požadavek nemohl zapsat bajty. |
0x03 | CHYBA_AKTUALIZACE_FIRMWARE_DOKONČENA | Žádost nemohla nastavit přepínač v reakci na FIRMWARE_UPDATE_FLAG_LAST_BLOCK. |
0x04 | CHYBA_OVĚŘENÍ_AKTUALIZACE_FIRMWARE | Ověření DWORD selhalo v reakci na FIRMWARE_UPDATE_FLAG_VERIFY. |
0x05 | FIRMWARE_UPDATE_ERROR_CRC (Chyba aktualizace firmwaru: CRC) | CRC image firmwaru selhalo v reakci na FIRMWARE_UPDATE_FLAG_LAST_BLOCK. |
0x06 | Chyba aktualizace firmwaru - signatura | Ověření podpisu firmwaru selhalo v reakci na FIRMWARE_UPDATE_FLAG_LAST_BLOCK. |
0x07 | FIRMWARE_UPDATE_ERROR_VERSION | Ověření verze firmwaru se nepovedlo v reakci na FIRMWARE_UPDATE_FLAG_LAST_BLOCK. |
0x08 | Aktualizace firmwaru: Výměna čeká | Firmware již byl aktualizován a čeká se na výměnu. Dokud se příslušenství resetuje, není možné přijmout žádné další příkazy aktualizace firmwaru. |
0x09 | Chyba aktualizace firmwaru: Neplatná adresa (FIRMWARE_UPDATE_ERROR_INVALID_ADDR) | Firmware zjistil neplatnou cílovou adresu v datovém obsahu zprávy. |
0x0A | CHYBA_AKTUALIZACE_FIRMWARE_NEJSOU_NABÍDKY | Příkaz FIRMWARE_UPDATE_OFFER byl přijat, aniž by nejprve obdržel platnou a přijatou nabídku aktualizace firmwaru. |
0x0B | ZÁVADA_PŘI_AKTUALIZACI_FIRMWARE_NEPLATNÝ | Obecná chyba příkazu FIRMWARE_UPDATE_OFFER, například neplatná příslušná délka dat. |
5.5.2.3 Rezervované B8 - B11
Rezervovaný. Nepoužívejte.
5.5.2.4 Rezervované B12 - B15
Rezervovaný. Nepoužívejte.
6 Příloha 1: Příklad sekvence příkazů pro aktualizaci firmwaru
6.1 Příklad 1
Zvažte následující firmware zařízení:
Primární komponenta – ID komponenty 1 – Aktuální firmware verze 7.0.1
Subcomponent – ID komponenty 2 – Aktuální firmware verze 12.4.54
Dílčí součást – ID komponenty 3 – Aktuální firmware verze 4.4.2
Subcomponent – ID komponenty 4 – Aktuální firmware verze 23.32.9
Hostitel má tyto tři image firmwaru:
ID komponenty 1 – Firmware verze 7.1.3
ID komponenty 2 – Firmware verze 12.4.54
ID komponenty 3 – verze firmwaru 4.5.0
Posloupnost bude:
Nabídka hostitele: ID komponenty 1 – Verze firmwaru 7.1.3
Primární komponenta přijímá nabídku.
Hostitel odešle image firmwaru.
Primární komponenta přijímá firmware, ověřuje ho.
Nabídka hostitele: Komponenta ID 2 – verze firmwaru 12.4.54
Primární komponenta odmítne nabídku.
Nabídka hostitele: ID komponenty 3 – Verze firmwaru 4.5.0
Primární komponenta přijímá nabídku.
Hostitel odešle image firmwaru.
Primární komponenta přijímá firmware, ověřuje ho.
Vzhledem k tomu, že všechny nabídky nebyly odmítnuty, hostitel přehraje všechny nabídky:
Nabídka hostitele: ID komponenty 1 – verze firmwaru 7.1.3
Komponenta odmítne
Nabídka hostitele: ID komponenty 2 – Firmware verze 12.4.54
Komponenta odmítne
Hostitel nabízí: ID komponenty 3 – Firmware verze 4.5.0
Komponenta odmítne
6.2 Příklad 2
Zvažte následující firmware zařízení:
Primární komponenta – ID komponenty 1 – Aktuální firmware verze 7.0.1
Subcomponent – ID komponenty 2 – Aktuální firmware verze 12.4.54
Subcomponent – ID komponenty 3 – Aktuální firmware verze 7.4.2
Subcomponent – ID komponenty 4 – Aktuální firmware verze 23.32.9
Hostitel má tyto tři image firmwaru:
ID komponenty 1 – Firmware verze 8.0.0
ID komponenty 2 – Firmware verze 12.4.54
ID komponenty 3 – Firmware verze 9.0.0
Kromě toho implementace vyžaduje, aby verze firmwaru dílčích komponent nebyla menší než verze firmwaru spuštěná v primární komponentě. Hostitel o tomto požadavku neví a up-to je primární komponentou k zajištění tohoto pravidla.
Posloupnost bude:
Nabídka hostitele: ID komponenty 1 – verze firmwaru 8.0.0
Primární komponenta odmítne (protože ID komponenty 3 ještě není aktualizováno)
Nabídka hostitele: ID komponenty 2 – Verze firmwaru 12.4.54
Primární komponenta odmítne
Nabídky hostitelů: ID komponenty 3 – verze firmwaru 9.0.0
Primární komponenta přijímá nabídku
Hostitel odešle image firmwaru.
Primární komponenta přijímá firmware, ověřuje ho.
Vzhledem k tomu, že všechny nabídky nebyly odmítnuty, hostitel přehraje všechny nabídky.
Nabídky hostitelů: ID komponenty 1 – Verze firmwaru 8.0.0
Primární komponenta přijímá nabídku
Hostitel odešle image firmwaru.
Primární komponenta přijímá firmware, ověřuje ho.
Nabídky hostitelů: ID komponenty 2 – verze firmwaru 12.4.54
Primární komponenta odmítne
Nabídka hostitele: ID komponenty 3 – Verze firmwaru 9.0.0
Primární komponenta odmítne