Sdílet prostřednictvím


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

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.

Firmware zařízení, primární komponenta a její dílčí komponenty.

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.

sekvence příkazů pro aktualizaci 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

GET_FIRMWARE_VERSION rozložení odpovědi.

5.1.2.1 Hlavička
Tabulka 5.1-2 – rozložení záhlaví odpovědi GET_FIRMWARE_VERSION

Odpověď GET_FIRMWARE_VERSION – rozložení záhlaví.

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ěď GET_FIRMWARE_VERSION – verze komponenty a rozložení vlastností.

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

FIRMWARE_UPDATE_OFFER rozložení příkazu.

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 FIRMWARE_UPDATE_OFFER – rozložení informací o komponentě.

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 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 FIRMWARE_UPDATE_OFFER – rozložení verze firmwaru.

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 FIRMWARE_UPDATE_OFFER – rozložení specifické pro dodavatele

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

FIRMWARE_UPDATE_OFFER rozložení tokenu odpovědi.

Token 5.2.2.1
Tabulka 5.2-9 Odpověď FIRMWARE_UPDATE_OFFER – rozložení tokenu

ODPOVĚĎ FIRMWARE_UPDATE_OFFER – Rozložení Tokenu

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ěď FIRMWARE_UPDATE_OFFER – rozvržení důvodu zamítnutí

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

FIRMWARE_UPDATE_OFFER rozložení stavu odpovědi.

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

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

FIRMWARE_UPDATE_OFFER – informační příkaz – uspořádání 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

FIRMWARE_UPDATE_OFFER – rozložení informací v odpovědi

Token 5.3.2.1
Tabulka 5.3-6 FIRMWARE_UPDATE_OFFER – rozložení tokenu odpovědi na pakety informací

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

Nabídka aktualizace firmwaru – Informační odpověď – Rozložení 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

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ů

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

FIRMWARE_UPDATE_OFFER – Rozšířený paket příkazů – Příkaz – Rozložení součástí.

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

FIRMWARE_UPDATE_OFFER – struktura odpovědi 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ů

FIRMWARE_UPDATE_OFFER - Odpověď na příkazový paket - rozložení tokenu

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

FIRMWARE_UPDATE_OFFER – Rozvržení odpovědi na informační balíček nabídky RR.

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

FIRMWARE_UPDATE_OFFER – Rozložení stavu odpovědi na nabídku příkazových 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

FIRMWARE_UPDATE_CONTENT rozložení příkazu.

5.5.1.1 Hlavička (B7 - B0)
Tabulka 5.5-2 FIRMWARE_UPDATE_CONTENT rozvržení hlavičky příkazu

FIRMWARE_UPDATE_CONTENT rozložení záhlaví 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

FIRMWARE_UPDATE_CONTENT rozložení dat příkazů

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

Rozvržení odpovědi příkazu FIRMWARE_UPDATE_CONTENT.

5.5.2.1 Pořadové číslo
Tabulka 5.5-8 FIRMWARE_UPDATE_CONTENT Odpověď – pořadové číslo

Odpověď FIRMWARE_UPDATE_CONTENT – pořadové číslo.

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

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:

  1. Nabídka hostitele: ID komponenty 1 – Verze firmwaru 7.1.3

  2. Primární komponenta přijímá nabídku.

  3. Hostitel odešle image firmwaru.

  4. Primární komponenta přijímá firmware, ověřuje ho.

  5. Nabídka hostitele: Komponenta ID 2 – verze firmwaru 12.4.54

  6. Primární komponenta odmítne nabídku.

  7. Nabídka hostitele: ID komponenty 3 – Verze firmwaru 4.5.0

  8. Primární komponenta přijímá nabídku.

  9. Hostitel odešle image firmwaru.

  10. 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:

  1. Nabídka hostitele: ID komponenty 1 – verze firmwaru 7.1.3

  2. Komponenta odmítne

  3. Nabídka hostitele: ID komponenty 2 – Firmware verze 12.4.54

  4. Komponenta odmítne

  5. Hostitel nabízí: ID komponenty 3 – Firmware verze 4.5.0

  6. 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:

  1. Nabídka hostitele: ID komponenty 1 – verze firmwaru 8.0.0

  2. Primární komponenta odmítne (protože ID komponenty 3 ještě není aktualizováno)

  3. Nabídka hostitele: ID komponenty 2 – Verze firmwaru 12.4.54

  4. Primární komponenta odmítne

  5. Nabídky hostitelů: ID komponenty 3 – verze firmwaru 9.0.0

  6. Primární komponenta přijímá nabídku

  7. Hostitel odešle image firmwaru.

  8. 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.

  1. Nabídky hostitelů: ID komponenty 1 – Verze firmwaru 8.0.0

  2. Primární komponenta přijímá nabídku

  3. Hostitel odešle image firmwaru.

  4. Primární komponenta přijímá firmware, ověřuje ho.

  5. Nabídky hostitelů: ID komponenty 2 – verze firmwaru 12.4.54

  6. Primární komponenta odmítne

  7. Nabídka hostitele: ID komponenty 3 – Verze firmwaru 9.0.0

  8. Primární komponenta odmítne