CFU(구성 요소 펌웨어 업데이트) 프로토콜 사양

이 사양은 PC 또는 액세서리에 있는 구성 요소에 대한 펌웨어를 업데이트하는 일반 HID 프로토콜을 설명합니다. 사양을 사용하면 구성 요소가 다운로드 중에 디바이스 작업을 중단하지 않고 펌웨어를 수락할 수 있습니다. 사양은 펌웨어를 수락하는 구성 요소에 별도의 펌웨어 이미지가 필요한 하위 구성 요소가 있을 수 있는 구성을 지원합니다. 사양을 사용하면 담당 구성 요소가 펌웨어를 수락할지 여부를 결정할 수 있습니다. 또한 펌웨어 이미지가 수락할 수 있거나 허용할 준비가 된 경우에만 구성 요소로 전송되기 때문에 최적화의 역할을 합니다.

참고

CFU는 Windows 10 버전 2004(Windows 10 2020년 5월 업데이트) 이상 버전에서 사용할 수 있습니다.

콘텐츠

테이블

표 5.1-1 GET_FIRMWARE_VERSION 응답 레이아웃

표 5.1-2 GET_FIRMWARE_VERSION 응답 - 헤더 레이아웃

표 5.1-3 GET_FIRMWARE_VERSION 응답 - 헤더 비트

표 5.1-4 GET_FIRMWARE_VERSION 응답 - 구성 요소 버전 및 속성 레이아웃

표 5.1-5 GET_FIRMWARE_VERSION 응답 - 구성 요소 버전 및 속성 물린

표 5.2-1 FIRMWARE_UPDATE_OFFER 명령 레이아웃

표 5.2-2 FIRMWARE_UPDATE_OFFER 명령 - 구성 요소 정보 레이아웃

표 5.2-3 FIRMWARE_UPDATE_OFFER 명령 - 구성 요소 정보 비트

표 5.2-4 FIRMWARE_UPDATE_OFFER 명령 - 펌웨어 버전 레이아웃

표 5.2-5 FIRMWARE_UPDATE_OFFER 명령 - 펌웨어 버전 비트

표 5.2-6 FIRMWARE_UPDATE_OFFER 명령 - 공급업체별 레이아웃

표 5.2-7 FIRMWARE_UPDATE_OFFER 명령 - 기타 및 프로토콜 버전

표 5.2-8 FIRMWARE_UPDATE_OFFER 응답 토큰 레이아웃

표 5.2-9 FIRMWARE_UPDATE_OFFER 응답 - 토큰 레이아웃

표 5.2-10 FIRMWARE_UPDATE_OFFER 응답 - 토큰 비트

표 5.2-11 FIRMWARE_UPDATE_OFFER 응답 - 이유 레이아웃 거부

표 5.2-12 FIRMWARE_UPDATE_OFFER 응답 - 이유 비트 거부

표 5.2-13 FIRMWARE_UPDATE_OFFER 응답 RR 코드 값

표 5.2-14 FIRMWARE_UPDATE_OFFER 응답 상태 레이아웃

표 5.2-15 FIRMWARE_UPDATE_OFFER 응답 - 상태 비트

표 5.2-16 FIRMWARE_UPDATE_OFFER 응답 상태 값

표 5.3-1 FIRMWARE_UPDATE_OFFER - 정보 명령 레이아웃

표 5.3-2 FIRMWARE_UPDATE_OFFER - 정보 명령 - 구성 요소 레이아웃

표 5.3-3 FIRMWARE_UPDATE_OFFER - 정보 명령 - 구성 요소 비트

표 5.3-4 FIRMWARE_UPDATE_OFFER - 정보 명령 - 정보 코드 값

표 5.3-5 FIRMWARE_UPDATE_OFFER - 정보 응답 레이아웃

표 5.3-6 FIRMWARE_UPDATE_OFFER - 정보 패킷 응답 토큰 레이아웃

표 5.3-7 FIRMWARE_UPDATE_OFFER - 정보 응답 - 토큰 비트

표 5.3-8 FIRMWARE_UPDATE_OFFER - 정보 응답 - RR 코드 레이아웃

표 5.3-9 FIRMWARE_UPDATE_OFFER - 제품 정보 응답 - RR 코드 비트

표 5.3-10 FIRMWARE_UPDATE_OFFER- 정보 응답 - RR 코드 값

표 5.3-11 FIRMWARE_UPDATE_OFFER - 제품 정보 응답 상태 레이아웃

표 5.3-12 FIRMWARE_UPDATE_OFFER - 제품 정보 - 응답 상태 비트

표 5.4-1 FIRMWARE_UPDATE_OFFER - 확장 명령 레이아웃

표 5.4-2 FIRMWARE_UPDATE_OFFER - 확장 명령 패킷 - 명령 - 구성 요소 레이아웃

표 5.4-3 FIRMWARE_UPDATE_OFFER - 확장 명령 - 구성 요소 비트

표 5.4-4 FIRMWARE_UPDATE_OFFER - 확장 명령 - 명령 코드 값

표 5.4-5 FIRMWARE_UPDATE_OFFER - 확장 명령 패킷 응답 레이아웃

표 5.4-6 FIRMWARE_UPDATE_OFFER- 제품 명령 패킷 응답 - 토큰 레이아웃

표 5.4-7 FIRMWARE_UPDATE_OFFER - 명령 응답 제공 - 토큰 비트

표 5.4-8 FIRMWARE_UPDATE_OFFER - 제품 정보 패킷 응답 RR 레이아웃

표 5.4-9 FIRMWARE_UPDATE_OFFER- 제안 명령 응답 - RR 코드

표 5.4-10 FIRMWARE_UPDATE_OFFER- 제안 명령 패킷 - RR 코드 값

표 5.4-11 FIRMWARE_UPDATE_OFFER - 제품 명령 패킷 응답 상태 레이아웃

표 5.4-12 FIRMWARE_UPDATE_OFFER- 제안 명령 패킷 응답 RR 코드

표 5.5-1 FIRMWARE_UPDATE_CONTENT 명령 레이아웃

표 5.5-2 FIRMWARE_UPDATE_CONTENT 명령 머리글 레이아웃

표 5.5-3 FIRMWARE_UPDATE_CONTENT 헤더 비트

표 5.5-4 FIRMWARE_UPDATE_OFFER- 제품 명령 패킷 - 플래그 값

표 5.5-5 FIRMWARE_UPDATE_CONTENT 명령 데이터 레이아웃

표 5.5-6 FIRMWARE_UPDATE_CONTENT 명령 데이터 비트

표 5.5-7 FIRMWARE_UPDATE_CONTENT 명령 응답 레이아웃

표 5.5-8 FIRMWARE_UPDATE_CONTENT 응답 - 시퀀스 번호

표 5.5-9 FIRMWARE_UPDATE_CONTENT - 명령 - 응답 비트

표 5.5-10 FIRMWARE_UPDATE_CONTENT 응답 상태 레이아웃

표 5.5-11 FIRMWARE_UPDATE_OFFER - 응답 - 상태 비트

표 5.5-12 FIRMWARE_UPDATE_OFFER- 응답 - 상태 코드 값

1 소개

오늘날의 PC 및 액세서리에는 복잡한 작업을 수행하는 내부 구성 요소가 있습니다. 고품질 제품을 보장하기 위해 개발 이후 또는 고객에게 배송된 후 이러한 디바이스의 동작을 자주 업데이트해야 합니다. 업데이트는 식별된 기능 또는 보안 문제를 해결하거나 새 기능을 추가해야 할 수 있습니다. 복잡한 논리의 상당 부분은 업데이트할 수 있는 디바이스에서 실행되는 펌웨어에 있습니다.

이 사양은 PC 또는 액세서리에 있는 구성 요소의 펌웨어를 업데이트하는 일반 HID 프로토콜을 설명합니다. HID 구현은 사양의 scope 초과합니다.

프로토콜의 기능 중 일부는 다음과 같습니다.

  • 이 프로토콜은 HID(유비쿼터스)를 기반으로 하며 USB 및 I2C와 같은 다양한 상호 연결 버스에 대한 Windows 기본 제공 지원을 제공합니다. 따라서 동일한 소프트웨어(드라이버) 솔루션을 활용하여 모든 구성 요소에 대한 펌웨어를 업데이트할 수 있습니다.

    참고

    사양은 패킷 기반이므로 HID가 아닌 시나리오에 맞게 간단하게 조정할 수 있습니다.

  • 사양을 사용하면 구성 요소가 다운로드하는 동안 디바이스 작업을 중단하지 않고 펌웨어를 수락할 수 있습니다. 다른 작업을 다시 시작하기 전에 펌웨어 업데이트 프로세스가 완료되기를 기다릴 필요가 없으므로 사용자에게 더 나은 환경을 제공합니다. 새 펌웨어는 사용자에게 최소한의 영향을 주는 한 번에 단일 원자성 작업으로 호출할 수 있습니다.

  • 사양은 펌웨어를 수락하는 구성 요소에 별도의 펌웨어 이미지가 필요한 하위 구성 요소가 있을 수 있는 구성을 지원합니다.

    참고

    펌웨어를 하위 구성 요소에 넘겨주는 구성 요소의 프로세스는 이 사양의 scope 벗어났습니다.

  • 사양은 제품의 개념을 지원하고 담당 구성 요소를 사용하여 펌웨어를 수락할지 여부를 결정합니다. 새 펌웨어를 수락하는 결정은 간단하지 않습니다. 펌웨어 유형 및/또는 버전과 새 펌웨어가 적용되는 하드웨어의 기본 형식/버전 간에 종속성이 있을 수 있습니다. 펌웨어 이미지가 수락할 수 있는 /ready인 경우에만 구성 요소로 전송되므로 제품은 최적화 메커니즘으로도 작동합니다.

1.1 용어

용어 Description
구성 요소 ID 여러 구성 요소가 있는 디바이스에서 구성 요소 ID는 각 구성 요소를 고유하게 식별합니다.
CRC 순환 중복 검사

데이터 블록의 다이제스트 또는 지문을 생성하는 데 사용되는 암호화가 아닌 해시 알고리즘입니다. CRC는 CRC가 계산된 이후 데이터 블록이 변경되지 않았음을 보증하기 위해 검사 사용됩니다. CRC는 틀림없지만 데이터가 올바르게 수신되었다는 확신을 제공합니다.
디바이스 구성 요소의 컬렉션(하나의 기본 구성 요소 및 0개 이상의 하위 구성 요소). 디바이스는 운영 체제에 단일 단위로 표시됩니다. 호스트는 일반적으로 기본 구성 요소인 디바이스와 상호 작용합니다.

컴퓨터에 여러 디바이스가 있을 수 있습니다. 이 사양과 관련하여 2개의 서로 다른 디바이스에 대한 통신은 완전히 독립적입니다.
드라이버 WDF(Windows 드라이버 파운데이션) 프레임워크를 사용하여 작성된 드라이버입니다.
펌웨어 물리적 하드웨어에서 실행되는 코드입니다. 펌웨어는 호환성이 있으며 일반적으로 하드웨어와 연결된 프로그래밍 가능한 메모리에 상주합니다.
하드웨어 컴퓨터의 실제 실리콘 조각입니다.
기본 구성 요소 컴퓨터의 하드웨어와 이를 위한 펌웨어입니다. 이 사양의 컨텍스트에서 구성 요소는 펌웨어 업데이트를 필요로 하고 수락하는 엔터티입니다.
Segment 구성 요소에 대한 펌웨어 이미지는 더 작은 세그먼트로 분할될 수 있습니다. 각 세그먼트는 작은 펌웨어 이미지입니다.
세그먼트 ID 구성 요소의 펌웨어가 더 작은 세그먼트로 분할되는 경우 세그먼트 ID는 세그먼트의 고유 식별자입니다.
서명 암호화는 펌웨어 이미지가 권한 없는 수단으로 변경되었는지 확인하는 것을 의미합니다. 서명은 선택 사항이지만 이 사양의 scope 초과하는 것이 좋습니다.
하위 구성 요소 하드웨어 아키텍처에 따라 시스템에 표시되는 구성 요소의 다운스트림에 연결될 수 있으므로 모든 구성 요소가 운영 체제에 표시되지 않을 수 있습니다. 이러한 구성 요소를 이 사양의 하위 구성 요소라고 합니다.
Tlc HID 최상위 컬렉션입니다.
토큰 호스트 세션의 식별자입니다. 호스트는 토큰을 만들고 명령으로 보내고 디바이스는 응답에서 토큰을 반환합니다. 토큰은 특정 트랜잭션을 직렬화하거나 세션이 손실되고 다른 트랜잭션이 시작되었음을 식별하는 데 사용할 수 있습니다.

1.2 범위

1.2.1 Goals

  • 모든 유형의 버스에 대한 새 프로토콜을 피하려면 버스에 구애받지 않는 솔루션이 필요합니다. HID는 유비쿼터스이며 해당 요구 사항을 해결합니다.

  • 한 구성 요소가 기본 구성 요소로 작동하고 다른 구성 요소가 주 구성 요소에 연결된 하위 구성 요소인 다중 구성 요소 디바이스에 대한 펌웨어 업데이트를 지원하는 기능입니다. 각 구성 요소에는 서로 간에 사소한 종속성이 없는 자체 펌웨어가 필요합니다.

  • 구성 요소에 펌웨어 이미지를 다운로드하기 위한 일반적인 드라이버 모델입니다. 그런 다음 구성 요소에는 하위 구성 요소로 전달하기 위한 하위 구성 요소 특정 알고리즘이 있습니다. 하위 구성 요소는 펌웨어에 대한 유효성 검사를 수행하고 결과를 기본 구성 요소로 다시 전달할 수도 있습니다.

  • 디바이스 작업이 진행되는 동안 펌웨어 업데이트를 지원하는 기능입니다.

  • 권한 있는 도구를 통해 프로덕션 디바이스에서 펌웨어를 업데이트/롤백하고 Windows 업데이트 통해 시장 내 디바이스를 업데이트하는 기능입니다.

  • 개발 중인 펌웨어/시장 내 펌웨어를 지원하는 유연성.

  • 구성 요소가 펌웨어 이미지를 더 쉽게 수락할 수 있도록 큰 펌웨어 이미지를 더 작은 세그먼트로 분할하는 기능입니다.

1.2.2 비 Goals

  • 펌웨어 이미지의 내부 형식 정의: 호스트의 경우 펌웨어 이미지는 주소 및 페이로드 항목 집합입니다.

  • 허용되는 펌웨어 서명/암호화/유효성 검사: 이 사양에서는 펌웨어 이미지에 서명하고 암호화하는 방법을 설명하지 않습니다. 구성 요소에서 실행되는 예상되는 현재 펌웨어가 다운로드되는 펌웨어의 유효성을 검사해야 합니다.

  • 구성 요소가 하위 구성 요소와 상호 작용하는 방법에 대한 메커니즘 정의: 호스트는 디바이스와 단일 단위(일반적으로 기본 구성 요소)로 상호 작용합니다. 구성 요소는 하위 구성 요소 펌웨어와 관련된 통신을 위한 브리지 역할을 해야 합니다.

2 지원되는 하드웨어 아키텍처

유연한 하드웨어 디자인을 지원하기 위해 프로토콜은 각 구성 요소에 자체 펌웨어 이미지가 필요한 다중 구성 요소 디바이스를 지원합니다. 디자인에서 하나의 구성 요소는 기본 구성 요소이며 종속 하위 구성 요소는 해당 기본 구성 요소에 연결됩니다. 각 구성 요소는 구성 요소 ID로 고유하게 설명됩니다.

다중 구성 요소 디바이스는 운영 체제에 단일 단위로 표시됩니다. 호스트는 일반적으로 이 CFU 프로토콜을 사용하는 기본 구성 요소인 디바이스와만 상호 작용합니다. 구성 요소와 해당 하위 구성 요소 간의 통신은 이 사양의 scope.

PC에는 여러 디바이스가 있을 수 있습니다(디바이스에 하나 이상의 구성 요소가 있을 수 있음). 이 프로토콜의 컨텍스트에서 각 디바이스에 대한 통신은 독립적입니다. 각 디바이스에는 호스트의 해당 instance 있습니다.

디바이스 펌웨어, 기본 구성 요소 및 해당 하위 구성 요소.

3 프로토콜 필수 구성 요소

이 섹션에서는 이 프로토콜을 활용하기 위해 구현해야 하는 필수 구성 요소 및 모범 사례를 나열합니다.

  • 원자성 이미지 사용

    구성 요소에 대한 펌웨어 이미지는 전체 펌웨어 이미지가 성공적으로 다운로드될 때까지 사용되지 않습니다. 펌웨어가 여러 세그먼트로 분할되는 경우 보낸 사람으로부터 최종 세그먼트를 받을 때까지 이미지를 사용하면 안 됩니다. 무결성 검사는 최종 이미지에서 수행해야 합니다. 전송 오류 발생 시 반복 다운로드를 방지하기 위해 펌웨어 이미지를 제공하는 데 사용되는 전송에 오류 수정 및 재시도 메커니즘이 있는 것이 좋습니다.

  • 펌웨어 업데이트는 디바이스 작업을 중단해서는 안됩니다.

    펌웨어 이미지를 수락하는 디바이스는 업데이트 중에 작동할 수 있어야 합니다. 디바이스에는 들어오는 펌웨어를 저장하고 유효성을 검사할 수 있는 추가 메모리가 있어야 하지만 현재 펌웨어는 덮어쓰지 않습니다.

  • 인증 및 무결성

    구현자는 정품 펌웨어 이미지를 구성하는 요소를 결정합니다. 구성 요소의 현재 펌웨어는 적어도 들어오는 펌웨어 이미지의 CRC 유효성을 검사해야 합니다. 현재 펌웨어는 디지털 서명 또는 기타 오류 검색 알고리즘도 사용해야 합니다. 유효성 검사에 실패하면 펌웨어가 업데이트를 거부합니다. 오류 복구

    펌웨어 이미지를 다운로드하고 실패하는 경우 디바이스는 새 펌웨어를 호출하지 않아야 하며 기존 펌웨어로 계속 작동해야 합니다. 호스트는 업데이트를 다시 시도할 수 있습니다. 재시도 빈도는 구현에 따라 다릅니다.

  • 기밀성

    선택 사항입니다. 펌웨어 세그먼트를 암호화할 수 있습니다. 암호화 및 암호 해독 기술은 이 사양의 scope. 이 사양은 암호화 여부에 관계없이 펌웨어 페이로드를 데이터 스트림으로 처리합니다.

  • 롤백 보호

    롤백 정책은 기본 구성 요소에 의해 적용되며 구현에 따라 다릅니다. 구성 요소의 현재 펌웨어는 버전 번호가 최신 버전이어야 하거나 릴리스 유형을 릴리스에서 디버그로 전환할 수 없는 등의 내부 정책에 대해 들어오는 펌웨어 이미지의 유효성을 검사합니다. 프로토콜은 롤백 정책을 위반하는 경우에도 업데이트가 수락됨을 나타내는 메시징을 허용합니다.

4 CFU 프로토콜 개요

CFU 프로토콜은 호스트에서 펌웨어가 의도된 디바이스로 새 펌웨어 이미지를 보내는 데 필요한 명령 및 응답 집합입니다.

높은 수준에서 프로토콜은 디바이스로 보낼 모든 펌웨어 이미지를 반복합니다. 각 펌웨어 이미지에 대해 호스트는 디바이스에 파일을 보내도록 제공합니다 . 디바이스가 제안을 수락하는 경우에만 호스트는 파일을 보냅니다.

디바이스 업데이트 주문에 종속성이 있는 경우를 지원하기 위해 디바이스는 첫 번째 단계에서 특정 제안을 수락하지 않을 수 있으므로 프로토콜을 사용하면 모든 종속성이 해결될 때까지 호스트가 모든 펌웨어 제품을 디바이스에 다시 전송할 수 있습니다.

4.1 펌웨어 업데이트 프로그래밍 명령 시퀀스

다음은 펌웨어 이미지를 업데이트하기 위한 CFU 명령 시퀀스입니다.

펌웨어 업데이트 프로그래밍 명령 시퀀스입니다.

4.1.1 상태: 호스트 초기화 알림

호스트가 자신을 초기화하고 디바이스에 보내야 하는 제안 집합을 식별한 후 호스트는 OFFER_INFO_START_ENTIRE_TRANSACTION 명령을 실행하여 호스트가 현재 초기화되었음을 구성 요소에 나타냅니다. 이 명령의 목적은 호스트의 새 instance 사용할 수 있음을 현재 디바이스 펌웨어에 알리는 것입니다. 이 알림은 호스트의 이전 instance 예기치 않게 종료되는 경우에 유용합니다. 디바이스는 이 명령을 성공적으로 완료해야 합니다.

4.1.2 상태: OFFER_INFO_START_OFFER_LIST 알림

이 상태에서 호스트는 OFFER_INFO_START_OFFER_LIST 명령을 실행하여 제품을 현재 디바이스 펌웨어로 보낼 준비가 되었음을 나타냅니다. 디바이스의 기본 구성 요소는 이 명령을 성공적으로 완료해야 합니다.

이 명령은 호스트가 모든 제품을 디바이스에 두 번 이상 보낼 수 있기 때문에 유용합니다.

4.1.3 상태: FIRMWARE_UPDATE_OFFER 보내기 명령

호스트는 구성 요소가 펌웨어를 수락/거부하려는 경우 검사 위해 주 구성 요소(또는 해당 하위 구성 요소)에 제품을 보냅니다. 제품에는 구성 요소의 현재 펌웨어가 제안을 수락, 보류, 건너뛰기 또는 거부할지 여부를 결정할 수 있도록 펌웨어 이미지에 필요한 모든 메타데이터가 포함되어 있습니다.

제품은 기본 구성 요소 또는 하위 구성 요소에 대한 것일 수 있습니다. 구성 요소가 제품을 수락할 수 있는 경우 펌웨어를 받을 준비를 합니다. 여기에는 들어오는 펌웨어 이미지를 수신하도록 메모리 뱅크를 준비하는 작업이 포함될 수 있습니다. 구성 요소는 제안을 수락하지 않을 수 있습니다. 예를 들어, 구성 요소에는 호스트가 보내려는 최신 펌웨어 버전이 이미 있을 수 있습니다. 자세한 내용은 부록 1: 펌웨어 업데이트 프로그래밍 명령 시퀀스 예제에 설명된 예제를 참조하세요.

제안이 수락되더라도 기본 구성 요소는 다운로드 후에도 무결성 오류 및/또는 받은 실제 이미지에 대한 롤백 검사를 수행한 후에도 펌웨어 이미지를 거부할 수 있습니다. 구성 요소는 제품의 정보와 관계없이 각 펌웨어 이미지 속성을 검사 합니다.

호스트는 FIRMWARE_UPDATE_OFFER 명령을 실행하여 호스트가 보내려는 펌웨어 이미지에 대해 기본 구성 요소에 알립니다.

구성 요소가 제안을 수락하면 FIRMWARE_UPDATE_OFFER_ACCEPT 상태 제안을 수락합니다.

디바이스 펌웨어가 사용 중이고 기본 구성 요소가 현재 이 제품 또는 다음 제품을 수락할 수 없는 경우 FIRMWARE_UPDATE_OFFER_BUSY 상태 사용 중인 응답을 보냅니다.

현재 펌웨어가 제품에 관심이 있지만 제품을 수락할 수 없는 경우(예: 하위 구성 요소에 대한 누락된 업데이트에 대한 종속성으로 인해) 이 펌웨어에 관심이 있음을 나타내는 FIRMWARE_UPDATE_OFFER_SKIP 응답합니다. 그러나 수락할 수는 없습니다. 그런 다음 호스트는 다음 제안으로 진행하며 나중에 이 펌웨어를 다시 제공해야 합니다.

현재 펌웨어가 제품에 관심이 없는 경우(예: 이전 버전) 적절한 거부 이유를 제공하는 FIRMWARE_UPDATE_OFFER_REJECT 상태 응답합니다. 이 상태 호스트가 나중에 이 제품을 다시 추가할 수 없음을 나타내지 않습니다. 호스트는 일반적으로 디바이스에 제품 목록을 초기화하거나 다시 보낼 때마다 각 제품을 보냅니다(상태: OFFER_INFO_START_OFFER_LIST 알림 참조).

4.1.4 상태: 펌웨어 보내기

이 상태에서 호스트는 구성 요소가 이전에 제안을 수락한 기본 구성 요소로 펌웨어 이미지를 보내기 시작합니다.

펌웨어 이미지의 콘텐츠는 단일 명령의 페이로드 제한을 초과할 가능성이 높기 때문에 호스트는 펌웨어 이미지를 패킷으로 나눕니다. 호스트는 별도의 FIRMWARE_UPDATE CONTENT 명령으로 각 패킷을 순차적으로 보냅니다. 기본 구성 요소는 각 명령에 대한 응답 패킷을 생성해야 합니다.

각 FIRMWARE_UPDATE CONTENT 명령은 부분 펌웨어 페이로드를 포함하는 오프셋 주소를 설명합니다. 구성 요소는 오프셋을 사용하여 부분 펌웨어 페이로드를 저장해야 하는 주소를 결정합니다. 디바이스는 적절한 위치에 콘텐츠를 쓰고 응답을 보내 명령을 승인합니다.

호스트가 보내는 첫 번째 패킷의 경우 디바이스에 펌웨어 이미지의 첫 번째 패킷임을 나타내는 FIRMWARE_UPDATE_FLAG_FIRST_BLOCK 플래그를 설정합니다. 디바이스가 펌웨어를 받기 위해 아직 준비되지 않은 경우 이때 이를 수행할 수 있습니다.

마지막 패킷의 경우 호스트는 FIRMWARE_UPDATE_FLAG_LAST_BLOCK 플래그를 설정합니다.

디바이스의 현재 펌웨어가 이 명령에 포함된 부분 펌웨어 페이로드를 작성한 후에는 응답을 보내기 전에 들어오는 펌웨어 이미지에 대한 유효성 검사 및 인증 검사를 수행해야 합니다 . 여기에는 최소한 다음이 포함됩니다.

  • CRC 검사 전체 펌웨어 이미지의 무결성을 확인합니다.

  • CRC 검사 성공하면 들어오는 이미지의 서명에 대한 선택적 확인입니다.

  • 선택적 서명 검사 후 버전이 검사 새 펌웨어 버전이 기존 펌웨어와 동일하거나 최신 버전인지 확인합니다.

들어오는 펌웨어 이미지가 더 작은 세그먼트로 나뉘어진 경우 현재 펌웨어가 펌웨어 이미지의 마지막 세그먼트인지 여부를 확인하고 유효성 검사의 일부로 모든 세그먼트를 포함해야 합니다.

위의 검사가 통과하면 현재 펌웨어는 다음 다시 설정 시 디바이스를 새 이미지로 교환하도록 설정하고 호스트에 성공을 보고할 수 있습니다. 일반적으로 구성 요소는 자체 재설정을 시작하지 않습니다. 이는 구성 요소가 상호 작용하는 모든 소프트웨어, 펌웨어, 하드웨어 엔터티의 중단을 방지하기 위한 것입니다. 그러나 이는 요구 사항이 아니며 구현에 따라 달라질 수 있습니다.

확인 단계가 실패하는 경우 펌웨어는 다음 재설정 시 교환을 설정하지 않아야 하며 호스트에 대한 실패 응답을 나타내야 합니다.

4.1.5 의사 결정 상태: 더 많은 제품이 있나요?

이 상태에서 호스트는 디바이스에 보낼 제품이 더 있는지 확인합니다.

4.1.6 상태: OFFER_INFO_END_OFFER_LIST 알림

호스트가 현재 디바이스 펌웨어의 기본 구성 요소에 모든 제품을 보낸 경우 이 상태에 도달합니다. 호스트는 OFFER_INFO_END_OFFER_LIST 명령을 보내 모든 제품을 구성 요소에 전송했음을 나타냅니다.

디바이스는 이 명령을 성공적으로 완료해야 합니다.

4.1.7 의사 결정 상태: 제품 목록 재생

호스트는 모든 제품을 다시 보내야 하는지 여부를 결정합니다. 이 경우는 이전에 주 구성 요소가 일부 제안을 건너뛰고 일부 제안을 수락한 경우에 발생할 수 있습니다. 호스트는 제품 목록을 다시 재생해야 합니다.

제안 목록을 재생하기로 결정할 수 있는 다른 구현 특정 논리가 있을 수 있습니다.

4.1.8 상태: 디바이스 사용 중

이 상태는 디바이스가 제품에 대한 사용 중인 응답을 반환했음을 의미합니다.

호스트는 OFFER_NOTIFY_ON_READY 명령을 전송하며, 디바이스가 무료가 될 때까지 디바이스가 수락으로 응답하지 않습니다.

5 CFU 프로토콜 패킷 형식

CFU 프로토콜은 명령 및 응답 집합으로 구현됩니다. 프로토콜은 본질적으로 순차적입니다. 호스트가 구성 요소에 보내는 각 명령에 대해 구성 요소가 응답해야 합니다(이 사양에서 명시적으로 명시되지 않는 한). 호스트는 보낸 이전 명령에 대해 유효한 응답을 받을 때까지 다음 명령을 보내지 않습니다.

구성 요소가 기간 내에 응답하지 않거나 잘못된 응답을 보내는 경우 호스트는 처음부터 프로세스를 다시 시작할 수 있습니다. 이 프로토콜은 특정 시간 제한 값을 정의하지 않습니다.

구성 요소에서 현재 펌웨어의 버전 정보를 가져오는 명령이 있습니다. 을 선택하여 제품을 보내고 펌웨어 이미지를 보냅니다.

그러나 호스트는 쿼리된 버전 정보에 대한 기본 구성 요소로부터 받은 응답에 따라 제품을 보류할 필요가 없습니다. 정보는 로깅 또는 기타 용도로 검색할 수 있습니다.

5.1 GET_FIRMWARE_VERSION

주 구성 요소(및 해당 하위 구성 요소)의 현재 펌웨어 버전을 가져옵니다. 명령에는 인수가 없습니다.

5.1.1 명령

이 명령은 호스트가 주 구성 요소(및 해당 하위 구성 요소)에서 현재 펌웨어의 버전을 쿼리하기 위해 전송됩니다. 호스트는 이를 사용하여 펌웨어가 성공적으로 업데이트되었는지 여부를 확인할 수 있습니다. 이 명령을 받으면 기본 구성 요소는 자체 및 모든 하위 구성 요소에 대한 펌웨어 버전으로 응답합니다.

5.1.2 응답

구성 요소는 기본 구성 요소 및 하위 구성 요소의 펌웨어 버전으로 응답합니다. 응답 크기는 최대 7개의 구성 요소(기본 구성 요소 1개 및 최대 6개 하위 구성 요소)에 대한 버전 정보를 허용하는 60바이트입니다.

표 5.1-1 GET_FIRMWARE_VERSION 응답 레이아웃

응답 레이아웃을 GET_FIRMWARE_VERSION.

5.1.2.1 헤더
표 5.1-2 GET_FIRMWARE_VERSION 응답 - 헤더 레이아웃

GET_FIRMWARE_VERSION 응답 - 헤더 레이아웃.

응답의 헤더는 다음 정보를 제공합니다.

표 5.1-3 GET_FIRMWARE_VERSION 응답 - 헤더 비트
비트 오프셋 필드 크기 설명
0 구성 요소 수 8 이 구성 요소에 대해 이 메커니즘을 통해 관리되는 다운로드 가능한 구성 요소의 수입니다. 구성 요소 개수는 최대 테이블 크기를 결정합니다. 현재 응답이 허용되는 60바이트 내에 들어갈 수 있도록 최대 7개의 구성 요소가 지원됩니다.
8 Rsvd 16 예약된 필드입니다. 발신자는 이를 0으로 설정해야 합니다. 수신기는 이 값을 무시해야 합니다.
24 프로토콜 버전 4 펌웨어 업데이트 수정 버전 비트는 현재 전송에서 사용 중인 FW 업데이트 프로토콜 수정 버전을 나타냅니다. 여기에 정의된 인터페이스의 경우 FW 업데이트 수정 버전은 0010b여야 합니다.
28 Rsvd 3 예약된 필드입니다. 발신자는 이를 0으로 설정해야 합니다. 수신기는 이 값을 무시해야 합니다.
31 E 1 확장 플래그는 추가 구성 요소를 보고할 수 있도록 하는 향후 프로토콜 후크입니다.
5.1.2.2 구성 요소 버전 및 속성

각 구성 요소에 대해 최대 7개 구성 요소의 속성을 설명하는 데 두 개의 DWORD가 사용됩니다. 헤더의 구성 요소 수가 7보다 작으면 응답 끝에 사용되지 않는 DWORDS를 0으로 설정해야 합니다.

표 5.1-4 GET_FIRMWARE_VERSION 응답 - 구성 요소 버전 및 속성 레이아웃

GET_FIRMWARE_VERSION 응답 - 구성 요소 버전 및 속성 레이아웃입니다.

각 구성 요소 관련 정보는 다음과 같이 두 개의 DWORD에 설명되어 있습니다.

표 5.1-5 GET_FIRMWARE_VERSION 응답 - 구성 요소 버전 및 속성 바이트
비트 오프셋 필드 크기 설명
0 펌웨어 버전 32 해당 구성 요소에 대한 현재 펌웨어의 버전을 반환합니다. 이 사양은 펌웨어 버전에 대한 특정 형식을 요구하지 않습니다. 지침은 펌웨어 버전 섹션을 참조하세요.
32 은행 2 선택 사항입니다. 아키텍처에 따라 구성 요소 하드웨어에는 펌웨어가 저장될 수 있는 여러 은행이 있을 수 있습니다. 구현에 따라 발신자는 펌웨어가 현재 존재하는 은행을 지정할 수 있습니다. 이 필드는 조건부 필수입니다. 지원은 선택 사항이지만 다른 용도로 사용하면 안 됩니다.
34 예약됨 2 예약된 필드입니다. 발신자는 이를 0으로 설정해야 합니다. 수신기는 이 값을 무시해야 합니다.
36 공급업체별 4 구현별 방식으로 사용할 수 있는 공급업체별 필드입니다.

공급업체는 다음 비트를 사용하여 다음과 같은 정보를 인코딩할 수 있습니다.

- 펌웨어 유형: 시험판/자체 호스트/프로덕션; debug/retail

- 개발 단계

- 동일한 업데이트 프로토콜을 사용하여 구성 요소가 다른 제품에 대한 펌웨어를 수신하지 못하도록 하는 제품 ID입니다.
40 구성 요소 ID 8 구성 요소의 고유 식별자입니다.
48 공급업체별 16 구현별 방식으로 사용할 수 있는 공급업체별 필드입니다.

5.1.3 HID에 매핑

이는 보고서 ID 외에도 응답 크기가 60바이트인 HID 기능 가져오기 요청으로 구현됩니다. 기능 보고서 길이는 전체 GET_FIRMWARE_VERSION 응답을 수용합니다. 호스트에서 기능 가져오기 요청과 연결된 데이터가 없습니다.

5.2 FIRMWARE_UPDATE_OFFER

주 구성 요소가 펌웨어를 수락하거나 거부할지 여부를 결정합니다.

5.2.1 명령

호스트는 이 명령을 구성 요소에 전송하여 펌웨어를 수락하거나 거부할지 여부를 결정합니다. 호스트는 제품을 보내야 하며 호스트가 펌웨어를 보내기 전에 구성 요소가 제안을 수락해야 합니다.

FIRMWARE_UPDATE_OFFER 명령 패킷은 다음과 같이 정의됩니다.

표 5.2-1 FIRMWARE_UPDATE_OFFER 명령 레이아웃

명령 레이아웃을 FIRMWARE_UPDATE_OFFER.

5.2.1.1 구성 요소 정보
표 5.2-2 FIRMWARE_UPDATE_OFFER 명령 - 구성 요소 정보 레이아웃

FIRMWARE_UPDATE_OFFER 명령 - 구성 요소 정보 레이아웃입니다.

구성 요소 정보 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.2-3 FIRMWARE_UPDATE_OFFER 명령 - 구성 요소 정보 비트
비트 오프셋 필드 크기 설명
0 세그먼트 번호 8 이 필드는 구성 요소의 펌웨어가 더 작은 세그먼트로 분할되는 경우에 사용됩니다. 사용되는 경우 이 값은 후속 페이로드 패킷에 포함된 세그먼트를 나타냅니다. 예를 들어 구성 요소의 펌웨어 이미지가 매우 크고 기본 구성 요소가 이미지의 작은 부분만 한 번에 취할 수 있는 경우 이 필드를 사용하여 이 제품이 전체 이미지의 i번째 세그먼트에 대한 것임을 나타낼 수 있습니다. 이미지의 i+1 세그먼트가 포함된 기본 구성 요소로 별도의 제품을 보낼 수 있습니다.
8 예약됨 6 예약된 필드입니다. 발신자는 이를 0으로 설정해야 합니다. 수신기는 이 값을 무시해야 합니다.
14 I 1 강제 즉시 다시 설정(I)

- 이 비트 값은 펌웨어 다운로드가 완료되고 즉시 호출하도록 확인된 후 즉시 다시 설정되도록 구성 요소에 나타내는 데 사용됩니다.

- 이 플래그는 개발 단계를 위한 것입니다.
15 V 1 강제 무시 버전(V)

- 이 플래그는 시험판 또는 디버그 펌웨어 이미지를 위한 것입니다. 펌웨어 버전에 따라 펌웨어를 거부하지 않도록 구성 요소에 나타냅니다.

- 이 플래그는 개발 단계를 위한 것입니다. 의도적으로 이전 펌웨어 버전으로 롤백하는 데 사용할 수 있습니다.

- 이 플래그는 프로덕션 펌웨어에서 무시해야 합니다.
16 구성 요소 ID 8 이 바이트는 다중 구성 요소 시나리오에 사용됩니다. 이 필드는 제품이 의도된 하위 구성 요소를 식별하는 데 사용될 수 있습니다. 사용하지 않는 경우 값은 0이어야 합니다. 구성 요소 ID의 가능한 값은 다음과 같습니다.

1 - 0xDF: 유효

0xE0 - 0xFD: 예약됨. 사용하지 마세요.

0xFF: 제품은 특별 제품 정보 패킷입니다. 자세한 내용은 FIRMWARE_UPDATE_OFFER 정보를 참조하세요.

0xFE: 제품은 특별한 제품 명령 패킷입니다. 자세한 내용은 FIRMWARE_UPDATE_OFFER 확장 섹션을 참조하세요.
24 토큰 8 호스트는 구성 요소에 대한 제품 패킷에 고유한 토큰을 삽입합니다. 이 토큰은 제품 응답의 구성 요소에서 반환해야 합니다.<

이는 구성 요소가 호스트의 서로 다른 호스트/유형을 구분해야 하는 경우에 유용합니다.

사용할 정확한 값은 구현별 값입니다. 예를 들어 한 값은 드라이버에 사용되고 다른 값은 애플리케이션에 사용할 수 있습니다. 이렇게 하면 현재 디바이스 펌웨어가 CFU 명령의 잠재적인 여러 보낸 사용자를 고려할 수 있습니다. 한 가지 가능한 구현은 첫 번째 CFU 명령을 수락하고 첫 번째 CFU 트랜잭션이 완료될 때까지 다른 토큰이 있는 다른 모든 명령을 거부하는 것입니다.
5.2.1.2 펌웨어 버전

이 4바이트는 32비트 버전의 펌웨어를 나타냅니다. 펌웨어 버전의 형식은 이 사양에 따라 지정되지 않습니다. 다음은 권장됩니다.

표 5.2-4 FIRMWARE_UPDATE_OFFER 명령 - 펌웨어 버전 레이아웃

FIRMWARE_UPDATE_OFFER 명령 - 펌웨어 버전 레이아웃.

펌웨어 버전의 형식은 이 사양에 따라 지정되지 않지만 권장 지침은 다음과 같습니다.

표 5.2-5 FIRMWARE_UPDATE_OFFER 명령 - 펌웨어 버전 비트
비트 오프셋 필드 크기 설명
0 Variant 8 이 필드는 시험판 펌웨어와 프로덕션 펌웨어를 구분하기 위해 설명될 수 있습니다. 펌웨어에 서명하는 데 사용되는 서명 유형을 나타낼 수 있습니다.
8 부 버전 16 이 필드 값은 펌웨어의 모든 빌드에 대해 업데이트해야 합니다.

이 필드 값은 펌웨어의 모든 빌드에 대해 업데이트해야 합니다.
24 주 버전 8 이 필드는 펌웨어 이미지의 주 버전입니다. 이 필드는 새 제품 라인, 펌웨어에 대한 주요 새 업데이트 등을 배송할 때 업데이트해야 합니다.
5.2.1.3 공급업체별

이러한 4바이트는 공급업체 구현과 관련된 제품의 사용자 지정 정보를 인코딩하는 데 사용할 수 있습니다.

5.2.1.4 기타 및 프로토콜 버전

이러한 4바이트는 공급업체 구현과 관련된 제품의 사용자 지정 정보를 인코딩하는 데 사용할 수 있습니다.

표 5.2-6 FIRMWARE_UPDATE_OFFER 명령 - 공급업체별 레이아웃

FIRMWARE_UPDATE_OFFER 명령 - 공급업체별 레이아웃입니다.

공급업체별 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.2-7 FIRMWARE_UPDATE_OFFER 명령 - 기타 및 프로토콜 버전
비트 오프셋 필드 크기 설명
0 프로토콜 버전 4 이 필드는 호스트/제안이 CFU 프로토콜의 버전 2에 해당함을 나타내는 0010b로 설정해야 합니다.
4 예약됨 4 예약되어 있습니다. 사용하지 마세요.
8 예약됨 8 예약되어 있습니다. 사용하지 마세요.
16 공급업체별 16 이 필드는 공급업체 구현과 관련된 제품의 사용자 지정 정보를 인코딩하는 데 사용할 수 있습니다.

5.2.2 응답

FIRMWARE_UPDATE_OFFER 응답 패킷은 다음과 같이 정의됩니다.

표 5.2-8 FIRMWARE_UPDATE_OFFER 응답 토큰 레이아웃

응답 토큰 레이아웃을 FIRMWARE_UPDATE_OFFER.

5.2.2.1 토큰
표 5.2-9 FIRMWARE_UPDATE_OFFER 응답 - 토큰 레이아웃

FIRMWARE_UPDATE_OFFER 응답 - 토큰 레이아웃입니다.

토큰 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.2-10 FIRMWARE_UPDATE_OFFER 응답 - 토큰 비트
비트 오프셋 필드 크기 설명
0 예약됨 8 예약되어 있습니다. 사용하지 마세요.
8 예약됨 8 예약되어 있습니다. 사용하지 마세요.
16 예약됨 8 예약되어 있습니다. 사용하지 마세요.
24 토큰 8 호스트를 식별하는 토큰입니다.
5.2.2.2 예약됨(B7 - B4)

예약되어 있습니다. 사용하지 마세요.

5.2.2.3 RR(거부 이유)
표 5.2-11 FIRMWARE_UPDATE_OFFER 응답 - 거부 이유 레이아웃

FIRMWARE_UPDATE_OFFER 응답 - 이유 레이아웃을 거부합니다.

표 5.2-12 FIRMWARE_UPDATE_OFFER 응답 - 거부 이유 비트

거부 이유 바이트의 비트는 이 표에 설명되어 있습니다.

비트 오프셋 필드 크기 설명
0 RR 코드 8 제안을 거부하는 구성 요소에서 제공하는 이유를 나타내는 거부 이유 코드입니다. 이 값은 상태 필드에 따라 달라집니다. RR 코드 매핑에 대한 상태는 표 5.2-13을 참조하세요.
8 예약됨 24 예약되어 있습니다. 사용하지 마세요.
표 5.2-13 FIRMWARE_UPDATE_OFFER 응답 RR 코드 값

RR 코드 바이트에 대한 가능한 값은 이 표에 설명되어 있습니다.

RR 코드 Name Description
0x00 FIRMWARE_OFFER_REJECT_OLD_FW 제공된 펌웨어의 버전이 현재 펌웨어와 오래되었거나 동일하기 때문에 제안이 거부되었습니다.
0x01 FIRMWARE_OFFER_REJECT_INV_COMPONENT 제품 플랫폼에 제공된 펌웨어를 적용할 수 없기 때문에 제안이 거부되었습니다. 이는 지원되지 않는 구성 요소 ID 또는 제공된 이미지가 시스템 하드웨어와 호환되지 않기 때문일 수 있습니다.
0x02 FIRMWARE_UPDATE_OFFER SWAP_PENDING 구성 요소 펌웨어가 업데이트되었지만 새 펌웨어로 교환이 보류 중입니다. 일반적으로 다시 설정을 통해 교환이 완료될 때까지 더 이상 펌웨어 업데이트 처리가 수행되지 않습니다.
0x03 - 0x08 (예약됨) 예약되어 있습니다. 사용하지 마세요.
0x09 - 0xDF (예약됨) 예약되어 있습니다. 사용하지 마세요.
0xE0 - 0xFF (공급업체별) 이러한 값은 프로토콜의 디자이너에서 사용되며 의미는 공급업체별입니다.
5.2.2.4 상태
표 5.2-14 FIRMWARE_UPDATE_OFFER 응답 상태 레이아웃

응답 상태 레이아웃을 FIRMWARE_UPDATE_OFFER.

상태 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.2-15 FIRMWARE_UPDATE_OFFER 응답 - 상태 비트
비트 오프셋 필드 크기 설명
0 상태 8 이 값은 제안을 수락, 보류, 건너뛰기 또는 거부하는 구성 요소의 결정을 나타냅니다. 구성 요소는 RR Code 필드 값의 이유를 제공합니다. RR 코드 매핑에 대한 상태는 표 5.2-16을 참조하세요.
8 예약됨 24 예약되어 있습니다. 사용하지 마세요.

상태 바이트에 대한 가능한 값은 이 표에 설명되어 있습니다.

표 5.2-16 FIRMWARE_UPDATE_OFFER 응답 상태 값
상태 이름 Description
0x00 FIRMWARE_UPDATE_OFFER_SKIP 구성 요소가 제안을 건너뛰기로 결정했습니다. 호스트는 나중에 다시 제공해야 합니다.
0x01 FIRMWARE_UPDATE_OFFER_ACCEPT 구성 요소가 제안을 수락하기로 결정했습니다.
0x02 FIRMWARE_UPDATE_OFFER_REJECT 구성 요소가 제안을 거부하기로 결정했습니다.
0x03 FIRMWARE_UPDATE_OFFER_BUSY 디바이스가 사용 중이며 호스트는 디바이스가 준비될 때까지 기다려야 합니다.
0x04 FIRMWARE_UPDATE_OFFER_COMMAND 구성 요소 정보 바이트(5.1.2.1.1 구성 요소 정보 참조)의 구성 요소 ID가 0xFE 설정된 경우에 사용됩니다.

명령 코드가 OFFER_NOTIFY_ON_READY 요청으로 설정된 경우 액세서리가 추가 제안을 수락할 준비가 되었음을 나타냅니다.
0xFF FIRMWARE_UPDATE_CMD_NOT_SUPPORTED 제품 요청이 인식되지 않습니다.

5.2.3 HID 프로토콜에 매핑

메시지는 펌웨어 업데이트 전용 HID 유틸리티 보고서 ID를 사용하여 HID 출력 보고서 메커니즘을 통해 구성 요소에 발급됩니다. 부록에 설명된 를 사용할 HID 유틸리티 TLC입니다.

5.3 FIRMWARE_UPDATE_OFFER - 정보

구성 요소 정보 바이트(구성 요소 정보 참조)의 구성 요소 ID가 0xFF 설정된 경우 호스트에서 구성 요소로의 제품 정보만을 나타내도록 비트(15바이트)가 다시 정의됩니다. 이 메커니즘을 사용하면 확장성과 호스트가 제품 시작 목록, 최종 제품 목록, 전체 트랜잭션 시작과 같은 특정 정보를 디바이스에 제공할 수 있습니다. 제품 정보 패킷은 항상 구성 요소에서 즉시 수락됩니다.

5.3.1 명령

FIRMWARE_UPDATE_OFFER -Information Command 패킷은 다음과 같이 정의됩니다.

표 5.3-1 FIRMWARE_UPDATE_OFFER - 정보 명령 레이아웃

FIRMWARE_UPDATE_OFFER - 정보 명령 레이아웃입니다.

5.3.1.1 구성 요소
표 5.3-2 FIRMWARE_UPDATE_OFFER - 정보 명령 - 구성 요소 레이아웃

FIRMWARE_UPDATE_OFFER - 정보 명령 - 구성 요소 레이아웃.

구성 요소 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.3-3 FIRMWARE_UPDATE_OFFER - 정보 명령 - 구성 요소 비트
비트 오프셋 필드 크기 설명
0 정보 코드 8 이 값은 정보의 형식을 나타냅니다. 이 값은 비트 마스크가 아니며 표 5.3-4에 설명된 가능한 값 중 하나일 수 있습니다.
8 예약되어 있습니다. 8 예약되어 있습니다. 사용하지 마세요.
16 구성 요소 ID 8 를 0xFF.
24 토큰 호스트는 구성 요소에 대한 제품 패킷에 고유한 토큰을 삽입합니다. 이 토큰은 제품 응답의 구성 요소에서 반환해야 합니다.
표 5.3-4 FIRMWARE_UPDATE_OFFER - 정보 명령 - 정보 코드 값
상태 이름 Description
0x00 OFFER_INFO_START_ENTIRE_TRANSACTION 호스트가 새 호스트이거나 다시 로드되었으며 전체 제품 처리가 (다시) 시작됨을 나타냅니다.
0x01 OFFER_INFO_START_OFFER_LIST 액세서리에 시스템의 다른 하위 구성 요소 이전에 한 하위 구성 요소가 업데이트되었는지 확인하는 것과 관련된 다운로드 규칙이 있는 경우 호스트에서 제품 목록의 시작을 나타냅니다.
0x02 OFFER_INFO_END_OFFER_LIST 호스트에서 제품 목록의 끝을 나타냅니다.
5.3.1.2 예약 B7 - B4

예약되어 있습니다. 사용하지 마세요.

5.3.1.3 예약 B11 - B8

예약되어 있습니다. 사용하지 마세요.

5.3.1.4 예약 B15 - B12

예약되어 있습니다. 사용하지 마세요.

5.3.2 응답

FIRMWARE_UPDATE_OFFER - 제품 정보 응답 패킷 회신은 다음과 같이 정의됩니다.

표 5.3-5 FIRMWARE_UPDATE_OFFER - 정보 응답 레이아웃

FIRMWARE_UPDATE_OFFER - 정보 응답 레이아웃입니다.

5.3.2.1 토큰
표 5.3-6 FIRMWARE_UPDATE_OFFER - 정보 패킷 응답 토큰 레이아웃

FIRMWARE_UPDATE_OFFER- 정보 패킷 응답 토큰 레이아웃.

토큰 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.3-7 FIRMWARE_UPDATE_OFFER - 정보 응답 - 토큰 비트
비트 오프셋 필드 크기 설명
0 예약됨 8 예약되어 있습니다. 사용하지 마세요.
8 예약됨 8 예약되어 있습니다. 사용하지 마세요.
16 예약됨 8 예약되어 있습니다. 사용하지 마세요.
24 토큰 8 호스트를 식별하는 토큰
5.3.2.2 예약 B7 - B4

예약되어 있습니다. 사용하지 마세요.

5.3.2.3 RR(거부 이유)
표 5.3-8 FIRMWARE_UPDATE_OFFER - 정보 응답 - RR 코드 레이아웃

FIRMWARE_UPDATE_OFFER - 정보 응답 - RR 코드 레이아웃.

거부 이유 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.3-9 FIRMWARE_UPDATE_OFFER - 제품 정보 응답 - RR 코드 비트
비트 오프셋 필드 크기 설명
0 RR 코드 8 제안을 거부하는 구성 요소에서 제공한 이유를 나타내는 거부 이유 코드입니다. 가능한 값은 표 5.3-10에 설명되어 있습니다. 이 값은 상태 필드에 따라 달라집니다.
8 예약됨 24 예약되어 있습니다. 사용하지 마세요.

RR 코드 바이트에 대한 가능한 값은 이 표에 설명되어 있습니다.

표 5.3-10 FIRMWARE_UPDATE_OFFER- 정보 응답 - RR 코드 값
RR 코드 Name Description
0x00 FIRMWARE_OFFER_REJECT_OLD_FW 제공된 펌웨어의 버전이 현재 펌웨어와 이전 버전이거나 동일하기 때문에 제안이 거부되었습니다.
0x01 FIRMWARE_OFFER_REJECT_INV_COMPONENT 제품 플랫폼에 제공된 펌웨어를 적용할 수 없기 때문에 제안이 거부되었습니다. 이는 지원되지 않는 구성 요소 ID 또는 제공된 이미지가 시스템 하드웨어와 호환되지 않기 때문일 수 있습니다.
0x02 FIRMWARE_UPDATE_OFFER SWAP_PENDING 구성 요소 펌웨어가 업데이트되었지만 새 펌웨어로의 교환이 보류 중입니다. 일반적으로 다시 설정을 통해 교환이 완료될 때까지 더 이상 펌웨어 업데이트 처리가 수행되지 않습니다.
0x03 - 0x08 (예약됨) 예약되어 있습니다. 사용하지 마세요.
0x09 - 0xDF (예약됨) 예약되어 있습니다. 사용하지 마세요.
0xE0 — 0xFF (공급업체별) 이러한 값은 프로토콜의 디자이너에서 사용되며 의미는 공급업체별로 다릅니다.
5.3.2.4 상태
표 5.3-11 FIRMWARE_UPDATE_OFFER - 제품 정보 응답 상태 레이아웃

FIRMWARE_UPDATE_OFFER - 제품 정보 응답 상태 레이아웃.

상태 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.3-12 FIRMWARE_UPDATE_OFFER - 제품 정보 - 응답 상태 비트
비트 오프셋 필드 크기 설명
0 상태 8 이 필드는 FIRMWARE_UPDATE_OFFER_ACCEPT 설정해야 합니다. 이는 구성 요소가 제안을 수락하기로 결정했음을 나타냅니다.
8 예약되어 있습니다. 24 예약되어 있습니다. 사용하지 마세요.

5.4 FIRMWARE_UPDATE_OFFER - 확장

구성 요소 정보 바이트의 구성 요소 ID가 0xFE 설정된 경우 호스트에서 디바이스 펌웨어로 제품 명령을 나타내도록 비트(15바이트)가 다시 정의됩니다. 이 메커니즘을 사용하면 확장성과 호스트가 디바이스에 특정 정보를 제공할 수 있습니다. 제품 명령 패킷은 구성 요소가 수락됨으로 응답할 준비가 되면 반환됩니다.

5.4.1 명령

구성 요소 정보 바이트의 구성 요소 ID가 0xFE 설정되면 다음과 같이 4개의 DWORD가 다시 정의됩니다.

표 5.4-1 FIRMWARE_UPDATE_OFFER - 확장 명령 레이아웃

FIRMWARE_UPDATE_OFFER - 확장 명령 레이아웃입니다.

5.4.1.1 구성 요소
표 5.4-2 FIRMWARE_UPDATE_OFFER - 확장 명령 패킷 - 명령 - 구성 요소 레이아웃

FIRMWARE_UPDATE_OFFER - 확장 명령 패킷 - 명령 - 구성 요소 레이아웃

구성 요소 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.4-3 FIRMWARE_UPDATE_OFFER - 확장 명령 - 구성 요소 비트
비트 오프셋 필드 크기 설명
0 명령 코드 8 이 값은 명령의 형식을 나타냅니다. 이 값은 비트 마스크가 아니며 표 5.4-4에 설명된 가능한 값 중 하나일 수 있습니다.
8 예약되어 있습니다. 8 예약되어 있습니다. 사용하지 마세요.
16 구성 요소 ID 8 를 0xFE.
24 토큰 호스트는 구성 요소에 대한 제품 패킷에 고유한 토큰을 삽입합니다. 이 토큰은 제품 응답의 구성 요소에서 반환해야 합니다.
표 5.4-4 FIRMWARE_UPDATE_OFFER - 확장 명령 - 명령 코드 값
상태 이름 설명
0x01 OFFER_NOTIFY_ON_READY 이전에 구성 요소에서 제안을 거부한 경우 호스트에서 전송합니다.
0x02 - 0xFF 예약됨 예약됨
5.4.1.2 예약 B7 - B4

예약되어 있습니다. 사용하지 마세요.

5.4.1.3 예약 B11 - B8

예약되어 있습니다. 사용하지 마세요.

5.4.1.4 예약 B15 - B12

예약되어 있습니다. 사용하지 마세요.

5.4.2 응답

FIRMWARE_UPDATE_OFFER - 디바이스의 제품 명령 응답이 즉시 수신되지 않을 수 있습니다. 응답은 다음과 같이 정의됩니다.

표 5.4-5 FIRMWARE_UPDATE_OFFER - 확장 명령 패킷 응답 레이아웃

FIRMWARE_UPDATE_OFFER - 확장 명령 패킷 응답 레이아웃

5.4.2.1 토큰
표 5.4-6 FIRMWARE_UPDATE_OFFER- 제안 명령 패킷 응답 - 토큰 레이아웃

FIRMWARE_UPDATE_OFFER- 제품 명령 패킷 응답 - 토큰 레이아웃.

토큰 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.4-7 FIRMWARE_UPDATE_OFFER - 제안 명령 응답 - 토큰 비트
비트 오프셋 필드 크기 설명
0 예약됨 8 예약되어 있습니다. 사용하지 마세요.
8 예약됨 8 예약되어 있습니다. 사용하지 마세요.
16 예약됨 8 예약되어 있습니다. 사용하지 마세요.
24 토큰 8 호스트를 식별하는 토큰입니다.
5.4.2.2 예약 B7 - B4

예약되어 있습니다. 사용하지 마세요.

5.4.2.3 거부 이유
표 5.4-8 FIRMWARE_UPDATE_OFFER - 제품 정보 패킷 응답 RR 레이아웃

FIRMWARE_UPDATE_OFFER - 제품 정보 패킷 응답 RR 레이아웃.

거부 이유 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.4-9 FIRMWARE_UPDATE_OFFER- 제안 명령 응답 - RR 코드
비트 오프셋 필드 크기 설명
0 RR 코드 8 이 값은 상태 필드에 따라 달라집니다. 가능한 RR 코드 값은 표 5.4-10을 참조하세요.
8 예약됨 24 예약되어 있습니다. 사용하지 마세요.

RR 코드 바이트에 대한 가능한 값은 이 표에 설명되어 있습니다.

표 5.4-10 FIRMWARE_UPDATE_OFFER- 제안 명령 패킷 - RR 코드 값
RR 코드 Name Description
0x00 FIRMWARE_OFFER_REJECT_OLD_FW 제공된 펌웨어의 버전이 현재 펌웨어와 오래되었거나 동일하기 때문에 제안이 거부되었습니다.
0x01 FIRMWARE_OFFER_REJECT_INV_COMPONENT 제품 플랫폼에 제공된 펌웨어를 적용할 수 없기 때문에 제안이 거부되었습니다. 이는 지원되지 않는 구성 요소 ID 또는 제공된 이미지가 시스템 하드웨어와 호환되지 않기 때문일 수 있습니다.
0x02 FIRMWARE_UPDATE_OFFER SWAP_PENDING 구성 요소 펌웨어가 업데이트되었지만 새 펌웨어로 교환이 보류 중입니다. 일반적으로 다시 설정을 통해 교환이 완료될 때까지 더 이상 펌웨어 업데이트 처리가 수행되지 않습니다.
0x03 - 0x08 (예약됨) 예약되어 있습니다. 사용하지 마세요.
0x09 - 0xDF (예약됨) 예약되어 있습니다. 사용하지 마세요.
0xE0 — 0xFF (공급업체별) 이러한 값은 프로토콜의 디자이너에서 사용되며 의미는 공급업체별입니다.
5.4.2.4 상태
표 5.4-11 FIRMWARE_UPDATE_OFFER - 제품 명령 패킷 응답 상태 레이아웃

FIRMWARE_UPDATE_OFFER - 제품 명령 패킷 응답 상태 레이아웃.

상태 바이트의 비트는 이 표에 설명되어 있습니다.

표 5.4-12 FIRMWARE_UPDATE_OFFER - 제안 명령 패킷 응답 RR 코드
비트 오프셋 필드 크기 설명
0 상태 8 이 필드는 FIRMWARE_UPDATE_OFFER_ACCEPT 설정해야 합니다. 이는 구성 요소가 제안을 수락하기로 결정했음을 나타냅니다.
8 예약되어 있습니다. 24 예약되어 있습니다. 사용하지 마세요.

5.5 FIRMWARE_UPDATE_CONTENT

호스트는 이 명령을 디바이스 펌웨어로 보내 펌웨어 콘텐츠(즉, 펌웨어 이미지)를 제공합니다. 전체 이미지 파일이 단일 명령에 맞지 않을 것으로 예상됩니다. 호스트는 이미지를 더 작은 블록으로 분할해야 하며 각 명령은 한 번에 하나의 이미지 블록을 보냅니다.

각 명령을 사용하면 호스트는 펌웨어의 첫 번째 블록, 마지막 블록 등과 같은 추가 정보를 나타냅니다. 디바이스 펌웨어의 기본 구성 요소는 들어오는 펌웨어 이미지의 각 블록을 수락하고 메모리에 저장하며 각 명령에 개별적으로 응답해야 합니다.

기본 구성 요소가 마지막 블록을 받으면 구성 요소는 전체 펌웨어 이미지(CRC 검사, 서명 유효성 검사)의 유효성을 검사합니다. 이러한 검사 결과에 따라 마지막 블록에 대한 적절한 응답(실패 또는 성공)이 반환됩니다.

5.5.1 명령

표 5.5-1 FIRMWARE_UPDATE_CONTENT 명령 레이아웃

명령 레이아웃을 FIRMWARE_UPDATE_CONTENT.

5.5.1.1 헤더(B7 - B0)
표 5.5-2 FIRMWARE_UPDATE_CONTENT 명령 머리글 레이아웃

명령 머리글 레이아웃을 FIRMWARE_UPDATE_CONTENT.

FIRMWARE_UPDATE_CONTENT 헤더의 비트는 이 표에 설명되어 있습니다.

표 5.5-3 FIRMWARE_UPDATE_CONTENT 헤더 비트
비트 오프셋 필드 크기 설명
0 플래그 8 이 필드는 명령에 대한 추가 정보를 제공합니다. 이 값은 데이터 전송에 사용할 플래그 마스크입니다. 가능한 값은 표 5.5-4에 설명되어 있습니다.
8 데이터 길이 8 쓸 바이트 수를 나타내는 해당 데이터 필드의 길이입니다.

이 명령의 크기를 고려할 때 길이에 허용되는 최대 값은 52바이트입니다.
16 일련 번호 16 이 값은 호스트에서 생성되며 발급된 각 콘텐츠 패킷에 대해 고유합니다. 구성 요소는 이 요청에 대한 응답에서 시퀀스 번호를 반환해야 합니다.
32 펌웨어 주소 32 Little Endian(LSB First) 데이터를 쓸 주소입니다. 주소는 0 기반입니다. 펌웨어는 이를 오프셋으로 사용하여 이미지를 메모리에 배치할 때 필요에 따라 주소를 결정합니다.

Flags 바이트에 사용할 수 있는 값은 이 표에 설명되어 있습니다.

표 5.5-4 FIRMWARE_UPDATE_OFFER- 제품 명령 패킷 - 플래그 값
플래그 이름 Description
0x80 FIRMWARE_UPDATE_FLAG_FIRST_BLOCK 이 플래그는 펌웨어 이미지의 첫 번째 블록임을 나타냅니다.
0x40 FIRMWARE_UPDATE_FLAG_LAST_BLOCK 이 플래그는 이것이 펌웨어 이미지의 마지막 블록이며 이미지의 유효성을 검사할 준비가 되었음을 나타냅니다.

이 블록을 비휘발성 메모리에 쓴 후 구성 요소의 현재 펌웨어가 다운로드한 전체 펌웨어 이미지에서 유효성 검사를 수행하는 것이 중요합니다.
5.5.1.2 데이터
표 5.5-5 FIRMWARE_UPDATE_CONTENT 명령 데이터 레이아웃

명령 데이터 레이아웃을 FIRMWARE_UPDATE_CONTENT.

FIRMWARE_UPDATE_CONTENT 데이터의 비트는 이 표에 설명되어 있습니다.

표 5.5-6 FIRMWARE_UPDATE_CONTENT 명령 데이터 비트
비트 오프셋 필드 크기 Description
64 데이터 최대 52. 쓸 바이트 배열입니다. 호스트는 일반적으로 제품 아키텍처에 따라 4바이트 블록을 보냅니다. 마지막에 사용되지 않는 바이트는 0 패딩이어야 합니다.

5.5.2 응답

표 5.5-7 FIRMWARE_UPDATE_CONTENT 명령 응답 레이아웃

명령 응답 레이아웃을 FIRMWARE_UPDATE_CONTENT.

5.5.2.1 시퀀스 번호
표 5.5-8 FIRMWARE_UPDATE_CONTENT 응답 - 시퀀스 번호

FIRMWARE_UPDATE_CONTENT 응답 - 시퀀스 번호입니다.

FIRMWARE_UPDATE_CONTENT 응답의 비트(3-0)는 이 표에 설명되어 있습니다.

표 5.5-9 FIRMWARE_UPDATE_CONTENT - 명령 - 응답 비트
비트 오프셋 필드 크기 설명
0 일련 번호 16 이 필드는 요청에서 호스트가 보낸 시퀀스 번호입니다.
16 예약됨 16 예약되어 있습니다. 사용하지 마세요.
5.5.2.2 상태
표 5.5-10 FIRMWARE_UPDATE_CONTENT 응답 상태 레이아웃

응답 상태 레이아웃을 FIRMWARE_UPDATE_CONTENT.

FIRMWARE_UPDATE_CONTENT 응답의 비트(7-4)는 이 표에 설명되어 있습니다.

표 5.5-11 FIRMWARE_UPDATE_OFFER - 응답 - 상태 비트
비트 오프셋 필드 크기 설명
0 상태 8 이 값은 디바이스 구성 요소에서 반환된 상태 코드를 나타냅니다. 이는 비트가 아니며 표 5.5-12에 설명된 값 중 하나일 수 있습니다.
8 예약됨 24 예약되어 있습니다. 사용하지 마세요.

상태 바이트에 대한 가능한 값은 이 표에 설명되어 있습니다.

표 5.5-12 FIRMWARE_UPDATE_OFFER- 응답 - 상태 코드 값
플래그 이름 Description
0x00 FIRMWARE_UPDATE_SUCCESS 요청이 성공적으로 완료되었습니다.
0x01 FIRMWARE_UPDATE_ERROR_PREPARE 구성 요소가 펌웨어 콘텐츠를 받을 준비가 되지 않았습니다.

사용되는 경우 이 코드는 일반적으로 첫 번째 블록에 대한 응답에서 사용됩니다. 예를 들어 플래시에서 오류를 지우는 경우입니다.
0x02 FIRMWARE_UPDATE_ERROR_WRITE 요청에서 바이트를 쓸 수 없습니다.
0x03 FIRMWARE_UPDATE_ERROR_COMPLETE 요청이 FIRMWARE_UPDATE_FLAG_LAST_BLOCK 대한 응답으로 교환을 설정할 수 없습니다.
0x04 FIRMWARE_UPDATE_ERROR_VERIFY FIRMWARE_UPDATE_FLAG_VERIFY 대한 응답으로 DWORD 확인에 실패했습니다.
0x05 FIRMWARE_UPDATE_ERROR_CRC FIRMWARE_UPDATE_FLAG_LAST_BLOCK 대한 응답으로 펌웨어 이미지의 CRC가 실패했습니다.
0x06 FIRMWARE_UPDATE_ERROR_SIGNATURE FIRMWARE_UPDATE_FLAG_LAST_BLOCK 대한 응답으로 펌웨어 서명 확인에 실패했습니다.
0x07 FIRMWARE_UPDATE_ERROR_VERSION FIRMWARE_UPDATE_FLAG_LAST_BLOCK 대한 응답으로 펌웨어 버전 확인에 실패했습니다.
0x08 FIRMWARE_UPDATE_SWAP_PENDING 펌웨어가 이미 업데이트되었으며 교환이 보류 중입니다. 액세서리가 다시 설정될 때까지 더 이상 펌웨어 업데이트 명령을 수락할 수 없습니다.
0x09 FIRMWARE_UPDATE_ERROR_INVALID_ADDR 펌웨어가 메시지 데이터 콘텐츠 내에서 잘못된 대상 주소를 검색했습니다.
0x0A FIRMWARE_UPDATE_ERROR_NO_OFFER FIRMWARE_UPDATE_OFFER 명령은 먼저 유효하고 허용된 펌웨어 업데이트 제안을 받지 않고 수신되었습니다.
0x0B FIRMWARE_UPDATE_ERROR_INVALID 잘못된 적용 가능한 데이터 길이와 같은 FIRMWARE_UPDATE_OFFER 명령에 대한 일반적인 오류입니다.
5.5.2.3 예약 B8 - B11

예약되어 있습니다. 사용하지 마세요.

5.5.2.4 예약 B12 - B15

예약되어 있습니다. 사용하지 마세요.

6 부록 1: 예제 펌웨어 업데이트 프로그래밍 명령 시퀀스

6.1 예제 1

다음 디바이스 펌웨어를 고려합니다.

  • 기본 구성 요소 - 구성 요소 ID 1 - 현재 펌웨어 버전 7.0.1

  • 하위 구성 요소 - 구성 요소 ID 2 - 현재 펌웨어 버전 12.4.54

  • 하위 구성 요소 - 구성 요소 ID 3 - 현재 펌웨어 버전 4.4.2

  • 하위 구성 요소 - 구성 요소 ID 4 - 현재 펌웨어 버전 23.32.9

호스트에는 다음과 같은 세 가지 펌웨어 이미지가 있습니다.

  • 구성 요소 ID 1 - 펌웨어 버전 7.1.3

  • 구성 요소 ID 2 - 펌웨어 버전 12.4.54

  • 구성 요소 ID 3 - 펌웨어 버전 4.5.0

시퀀스는 다음과 같습니다.

  1. 호스트 제품: 구성 요소 ID 1 - 펌웨어 버전 7.1.3

  2. 기본 구성 요소가 제안을 수락합니다.

  3. 호스트가 펌웨어 이미지를 보냅니다.

  4. 기본 구성 요소는 펌웨어를 수락하고 유효성을 검사합니다.

  5. 호스트 제품: 구성 요소 ID 2 - 펌웨어 버전 12.4.54

  6. 기본 구성 요소가 제안을 거부합니다.

  7. 호스트 제품: 구성 요소 ID 3 - 펌웨어 버전 4.5.0

  8. 기본 구성 요소가 제안을 수락합니다.

  9. 호스트가 펌웨어 이미지를 보냅니다.

  10. 기본 구성 요소는 펌웨어를 수락하고 유효성을 검사합니다.

모든 제품이 거부되지 않았기 때문에 호스트는 모든 제품을 재생합니다.

  1. 호스트 제품: 구성 요소 ID 1 - 펌웨어 버전 7.1.3

  2. 구성 요소 거부

  3. 호스트 제품: 구성 요소 ID 2 - 펌웨어 버전 12.4.54

  4. 구성 요소 거부

  5. 호스트 제품: 구성 요소 ID 3 - 펌웨어 버전 4.5.0

  6. 구성 요소 거부

6.2 예제 2

다음 디바이스 펌웨어를 고려합니다.

  • 기본 구성 요소 - 구성 요소 ID 1 - 현재 펌웨어 버전 7.0.1

  • 하위 구성 요소 - 구성 요소 ID 2 - 현재 펌웨어 버전 12.4.54

  • 하위 구성 요소 - 구성 요소 ID 3 - 현재 펌웨어 버전 7.4.2

  • 하위 구성 요소 - 구성 요소 ID 4 - 현재 펌웨어 버전 23.32.9

호스트에는 다음과 같은 세 가지 펌웨어 이미지가 있습니다.

  • 구성 요소 ID 1 - 펌웨어 버전 8.0.0

  • 구성 요소 ID 2 - 펌웨어 버전 12.4.54

  • 구성 요소 ID 3 - 펌웨어 버전 9.0.0

또한 구현을 수행하려면 하위 구성 요소의 펌웨어 버전이 기본 구성 요소에서 실행되는 펌웨어 버전보다 작지 않아야 합니다. 호스트는 해당 요구 사항을 인식하지 못하며 이 규칙을 보장하는 것은 기본 구성 요소에 달려 있습니다.

시퀀스는 다음과 같습니다.

  1. 호스트 제품: 구성 요소 ID 1 - 펌웨어 버전 8.0.0

  2. 기본 구성 요소가 거부됨(구성 요소 ID 3이 아직 업데이트되지 않았기 때문)

  3. 호스트 제품: 구성 요소 ID 2 - 펌웨어 버전 12.4.54

  4. 기본 구성 요소 거부

  5. 호스트 제품: 구성 요소 ID 3 - 펌웨어 버전 9.0.0

  6. 기본 구성 요소가 제안을 수락합니다.

  7. 호스트가 펌웨어 이미지를 보냅니다.

  8. 기본 구성 요소는 펌웨어를 수락하고 유효성을 검사합니다.

모든 제품이 거부되지 않았기 때문에 호스트는 모든 제품을 재생합니다.

  1. 호스트 제품: 구성 요소 ID 1 - 펌웨어 버전 8.0.0

  2. 기본 구성 요소가 제안을 수락합니다.

  3. 호스트가 펌웨어 이미지를 보냅니다.

  4. 기본 구성 요소는 펌웨어를 수락하고 유효성을 검사합니다.

  5. 호스트 제품: 구성 요소 ID 2 - 펌웨어 버전 12.4.54

  6. 기본 구성 요소 거부

  7. 호스트 제품: 구성 요소 ID 3 - 펌웨어 버전 9.0.0

  8. 기본 구성 요소 거부