반응형

DFU(Secure Device Firmware Update)서비스는 장치에서 장치 펌웨어 업데이트를 수행하는데

필요한 정보를 제공한다.

이 서비스는 nRF5 장치에서 일반적인 장치 펌웨어 업데이트를 시연하기 위해

Nordic Semiconductor에서 정의한 독점 서비스이다.

 

Secure DFU 서비스의 UUID는 0xFE59이다.

서비스는 기본 서비스로 인스턴스화되어야 한다.

 

DFU 서비스는 다른 서비스에 의존하지 않는다.

이 서비스에는 다음 GATT sub-procedures에 대한 지원이 필수이다.

  • Write Characteristic Value
  • Write Characteristic Descriptor
  • Read Characteristic Descriptor
  • Notification

DFU서비스는 속성 프로트콜에 대한 새로운 오류 코드를 정의하지 않는다.

데이터 교환은 Little-endian(LSB 우선)순서이다.

API설명은 DFU BLE Service 를 참조한다.

1. Service characteristics

다음 특성은 필수 특성이다.

Characteristic name Requir properties Optional properties UUID
DFU Control Point Write, Notify   0x8EC90001-F315-4F60-9FB8-838830DAEA50
DFU Packet WriteWithoutResponse,
Notify
  0x8EC90002-F315-4F60-9FB8-838830DAEA50

이 서비스는 보안 요구 사항을 요구하지 않는다. 즉, 서비스의 모든 특성에 대해 암호화가 필수가 아니다.

그러나 가능한 경우 암호화를 사용해야 한다.

2. DFU Control Point

DFU Control Point 특성의 UUID는 0x0001이다.

DFU Control Point 특성은 DFU Process의 상태를 제어하는데 사용된다.

모든 DFU 절차는 이 특성에 작성하여 요청된다.

절차의 끝을 표시하는 응답은 notification으로 수신된다.

3. DFU Packet

DFU Packet 특성의 UUID는 0x0002이다.

이 특성은 장치 펌웨어 업데이트에 대한 데이터를 DFU패킷으로 수신한다.

 

각 패킷의 최대 크기는 connection의 Att MTU 크기로부터 파생된다.

DFU 서비스의 최대 Att MTU 크기는 256 Byte(NRF_SDH_BLE_GATT_MAX_MTU_SIZE에 저장됨)이며

DFU 패킷 특성의 최대 크기는 253 Byte(3 Byte는 쓰기시 opcode 및 handle ID에 사용됨)이다.

DFU 서비스와 더 큰 At MTU 크기를 협상하지 않은 경우, 예상되는 쓰기 최대 크기는 20 Byte이다.

(BLE_GATT_ATT_MTU_DEFAULT에서 opcode 및 handle ID에 사용되는 3바이트를 뺀 값)

간단하게하기 위해 아래 메세지 시퀀스 차트는 ATT MTU크기가 협상되지 않아 20Byte 쓰기가 사용되는

예를 보여준다.

패킷은 Little-endian(LSB 우선) 순서이여야 한다.

3. Message sequence charts

다음 메세지 시퀀스 차트는 각각 초기화 패킷과 펌웨어 이미지의 전송을 보여준다.

3.1 Transfer of an init packet

DFU 컨트롤러는 먼저 초기화 패킷이 성공적으로 전송 완료 되었는지 확인한다.

그렇지 않은 경우 DFU 컨트롤러가 부분적으로 전송되었는지 확인한다. 일부 데이터가 이미 전송된 경우 전송이

계속된다. 그렇지 않으면 DFU 컨트롤러는 Create 명령을 보내 새 데이터 개체를 만든 다음 초기화 패킷을 전송한다.

초기화 패킷을 사용할 수 있을 때 DFU 컨트롤러는 실행 명령을 실행하여 초기화 패킷의 유효성 검사를 시작한다.

3.2 Transfer of a firmware image

펌웨어 이미지는 연속적으로 전송되는 여러 데이터 개체로 분할된다.

데이터 개체의 전송이 실패하 경우(Power down등으로 인해) 다시 시작하는 대신 전송을 계속할 수 있다.

따라서, DFU 컨트롤러는 전송된 마지막 데이터 개체를 선택하여 시작하고 이것이 완전하고 유효한지 확인한다.

확인이 완료되면 실행 명령을 실행하고 다음 데이터 개체로 전송을 계속한다.

확인시 문제가 발견되면 DFU 컨트롤러는 필요한 경우(이 데이터 개체에 대한 전송이 아직 시작되지 않았거나

수신된 데이터가 손상된 경우) 새 데이터 개체를 생성하기 위해 Create 명령을 보내고 다음 데이터 개체를 전송한다.

 

모든 패킷이 전송되면 DFU 컨트롤러가 실행 명령을 실행하여 실제 펌웨어 업데이트를 트리거한다.

 

DFU 컨트롤러는 진행 상황을 추적할 책임이 있다. 각 선택 명령에 대한 응바에는 최대 개체 크기, 현재 오프셋 및

CRC에 대한 정보가 포함된다. 예를 들어 이미지 크기가 10kByte이고 최대 개체 크기가 4kByte인 경우

3개의 데이터 개체를 전송해야 한다. 반환된 오프셋이 6kByte인 경우 DFU 컨트롤러는 현재 개체가 전송할 두번째

개체이며 완전히 전송되지 않았음을 알고 있다.

4. Data reliability

BLE DFU 서비스는 직렬화된 개체를 처리하도록 설계되었다.

그러나 직렬화된 데이터의 전송 및 검증은 추상화되어 BLE 전송 계층 외부에서 볼 수 없다.

 

모든 데이터 패킷이 WriteWithoutResponse를 사용하여 전송된 경우에도 수신되도록 하려면 DFU 컨트롤러가

Execute 명령을 실행하기 전에 개체의 유효성을 검사하기 위해 CRC(순환 중복 검사)를 수행해야 한다.

반응형

+ Recent posts