[NFC] NDEF 분석

hooray·2021년 4월 6일
0
post-thumbnail

NFC 포럼 : https://nfc-forum.org/
나무위키 : https://namu.wiki/w/NFC
Realteck : https://www.amebaiot.com.cn/en/nfc-intro/
위 사이트를 참고하여 작성한 자료입니다.

NDEF(NFC Data Exchange Format)란?

  • NFC 데이터 교환에 이용되는 데이터 교환 포멧으로 NFC 포럼에서 정의

NDEF Message

|NDEF Record(begin)|NDEF Record| . . . |NDEF Record(end)|

NDEF Record

Format

| Header (1B) | Type len (1B) | Payload len (1-4B) | ID len (1B) | Type | ID | Payload |

Header(1B)

 | Message Begin (1b) | Message End (1b) | Chunk Flag (1b) | Short Record (1b) | ID len (1b) | Type Name Format (3b) |
  • MB (Message Begin) : 1bit NDEF 메시지의 첫 레코드는 비트가 1 .
  • ME (Message End) : 1bit NDEF 메시지의 마지막 레코드는 비트가 1.
  • CF (Chunk Flag) : 1bit 하나의 페이로드를 여러 개의 레코드로 나누어 전송하는 경우가 있는데, 이때 사용.
  • SR (Short Record) : 1bit 이 비트가 1이면 '페이로드 길이'의 크기는 1byte이고, 0이면 4byte.
  • IL (ID Length) : 1bit 레코드 ID가 존재하는 경우, 비트가 1.
  • TNF (Type Name Format) : 3bit
    • 0x00 Empty, 비어있는 레코드. 즉, 페이로드가 없음.
    • 0x01 WKT (NFC Forum well-known type), NFC 포럼에서 정의한 타입 형식. (예: URI, Text, Smart Poster)
    • 0x02 MIME (MIME Media type), MIME 타입 형식. (예: plain/text, image/jpeg)
    • 0x03 AURI (Absolute URI type), 예를 들어 XML의 경우 URI 형식의 DTD나 XML Schema를 타입으로 사용함.
    • (예: http://www.w3.org/TR/html4/strict.dtd, http://www.w3.org/2000/svg)
    • 0x04 EXT (NFC Forum external type), NFC 포럼에서 정의한 규칙대로, 임의의 타입 형식을 만들어 사용할 수
      있음. (예: startnfc.com:U)
    • 0x05 Unknown 알 수 없는 형식의 페이로드. 그냥 byte 덩어리로 취급됨.
    • 0x06 Unchanged 데이터를 여러 조각으로 나누어 전송하는 경우 (chunked record) 이전 레코드의 타입과 같은
      타입이라는 것을 나타내기 위해 사용.
    • 0x07 Reserved. 사용하지 않음.

Type length (1B)

  • 8 bit 부호 없는 정수형으로 TYPE 필드의 octet 길이를 명시함.

Payload length (1-4B)

  • payload 필드의 octet 길이를 명시함.
  • 필드의 값은 SR 플래그 설정에 의해 결정됨
    • SR 플래그가 설정된 경우 : 필드 값은 8 bit 부호없는 정수를 나타내는 1 octet
    • SR 플래그가 설정되지 않은 경우 : 32 bit 부호없는 정수형 4 octet. MSB 순으로 읽음.

ID len (1B)

  • 8 bit 부호 없는 정수형으로 ID 필드의 octet 길이를 명시함.

Type

  • 페이로드의 타입을 설명하는 식별자

ID

  • URI 형식[RFC 3986]의 식별자

Payload

  • NDEF 사용자 앱을 위해 페이로드를 전달

NDEF message Example

message : D1 01 12 55 03 62 6C 6F 67 2E 73 74 61 72 74 6E 66 63 2E 63 6F 6D

  • header 0xD1 이진수로 하면 11010001
    • MB=1 ME=1 : 첫 레코드인 동시에 마지막 레코드
    • CF=0 : Chunked record가 아님
    • SR=1 : 따라서 페이로드 길이의 크기가 1byte
    • IL=0 : 따라서 ID는 존재하지 않음
    • TNF=1 : TNF는 Well-Known type 타입 길이 0x01 타입의 길이가 1byte
  • Payload len : 0x12 페이로드의 길이가 18byte임
  • Type : 0x55 ('U') Well-Known type에서 'U'는 URI를 나타냄
  • Payload
    • 0x03 0x62 ... 0x6D 실제 데이터.
    • 첫번째 바이트 0x03은 URI 페이로드의 헤더
    • 이후 0x62부터 "blog.startnfc.com"의 아스키코드
profile
Stay hungry. Stay foolish.

0개의 댓글