-
NDEF(NFC Data Exchage Format) 메시지 구조iOS Swift 2023. 6. 6. 13:51
Core NFC
NDEF
NDEF(NFC Data Exchange Format)는 NFC를 이용한 데이터 통신에서 사용되는 데이터 교환 포맷을 정의한 프로토콜입니다. 이는 폰과 태그 사이에 데이터 송 수신 시 사용됩니다.
NDEF 메시지는 하나 이상의 NDEF 레코드로 구성됩니다.
NDEF 레코드는 아래와 같이 레코드에 대한 정보를 표현하는 헤더와 실제 전송될 데이터를 나타내는 페이로드로 구성됩니다.
NDEF 헤더 구조
NDEF 헤더의 첫 바이트는 해당 레코드에 대한 플래그 값들이 설정되어 있습니다.
각 플래그 값에 대한 내용은 아래 표와 같습니다.
MB 7 Message Begin NDEF의 첫번째 레코드를 나타낼 때 1로 설정 ME 6 Message End NDEF의 마지막 레코드를 나타낼 때 1 로 설정 CF 5 Chunked Flag 현재 레코드와 다음 레코드가 쪼개져 있음을 나타낼 때 1로 설정 SR 4 Shot Record 해당 레코드가 갖는 페이로드의 길이가 0-255 일 때 설정 IL 3 ID Length 페이로드 ID와 페이로드의 ID의 길이를 갖고 있을 때 1로 설정 TNF [2:0] Type name Format 페이로드의 타입에 대해 설정한다. 해당 타입은 아래와 값 중 하나이다. MB 비트는 해당 메시지의 첫번째 레코드를 표시하기 위해 사용되는 데, 해당 비트가 1인 경우 메시지의 첫번째 레코드임을 표시합니다.
ME 비트는 해당 메시지의 마지막 레코드를 표사할 때 사용합니다. 해당 비트가 1인 경우 메시지에 더 이상 레코드가 존재하지 않음을 알 수 있어 이 값을 확인하고 NFC 연결을 종료하는 데 유용합니다. CF 플래그는 데이터가 하나의 레코드로 보낼 수 없을 만큼 클 때 데이터를 쪼개어 보내게 되는 데 이를 Chunk 레코드라 하고, 해당 레코드가 청크 레코드인 지를 표시하기 위해 사용됩니다.
SR 플래그는 전송할 데이터의 크기가 작은 경우를 표시하며 이 값에 따라 페이로드의 길이를 표시하는 Length of Payload Data의 크기가 1 바이트에서 4바이트로 가변적으로 변하게 됩니다. IL 플래그는 레코드에 페이로드 ID 사용 여부를 설정한다. 페이로드 ID를 사용 시 추가적으로 페이로드 ID의 길이를 표시하기 위한 1바이트와 페이로드 ID 값이 추가된다. TNF는 타입 이름 포맷으로 아래의 값 중 하나로 표시된다.
값 TYPE NAME FORMAT 0 Empty Type 페이로드가 존재하지 않는다 1 NFC Forum well-known 타입 포럼에서 정의한 형식 2 MIME 타입 3 AURI(Absolute URI type) 4 NFC Forum External Type NFC 포럼에서 정의한 형식되로 임의의 타입을 만들 때 사용 5 Unknown Type 6 Unchanged 청크 레코드 에서 해당 슬라이스가 이전 슬라이스와 같은 타입임을 나타낼 때 사용 7 Reserved 사용되지 않음 해당 값은 NFC 포럼에서 정의하고 있으며, 자세한 내용은 다음에 다루도록 하겠습니다.
첫 번째 바이트 이 후 TNF 에서 정의한 페이로드 타입에 대한 길이를 설정하는 페이로드 Length 필드가 오게 되는 데 이는 페이로드 데이터의 첫번째 구조에 설정되는 페이로드 타입에 대한 길이를 설정하게 됩니다.
두 번째는 페이로드 데이터 Length 필드 입니다. 해당 필드의 크기는 SR 플래그에 따라 변경됩니다. SR 플래그가 1로 설정되면 Short Record를 나타내고 페이로드 데이터를 통해서 보낼 수 있는 데이터의 크기가 제한됩니다. 해당 필드의 크기는 SR 플래그가 1 일 때 1bytes SR 플래그가 1일 때 4bytes의 크기를 갖습니다. 마지막으로 페이로드 ID의 길이를 설정하는 Payload ID Length 필드가 있습니다. 이는 IL 플래그를 통해서 페이로드 ID 사용 여부를 설정하는 데 해당 플래그가 0인 경우 해당 필드는 존재하지 않습니다. 해당 플래그가 1일 경우 페이로드 ID의 길이를 가리키기 위해 1byte의 필드가 추가 됩니다. 지금 까지 내용을 정리하면 아래의 표와 같습니다.
Payload Type Length 1 byte 페이로드 타입에 대한 길이 Payload Data Length 1 or 4 byte(s) 페이로드 데이터 길이
SR 값이 1 일 때 1byte, SR값이 0일 때 4bytes 값을 갖는다.Payload ID Length 1byte 페이로드 ID 길이
IL 이 1로 설정되어 있다면 해당 필드가 존재하고, 0일 경우 존재하지 않는다.NDEF 페이로드
NDFE 페이로드는 아래와 같은 구조를 갖습니다.
페이로드 타입은 TNF에서 설정된 페이로드 타입으로 Paylod Type Length에 해당 데이터의 크기가 설정되어 있습니다. 다음은 IL 플래그 설정 여부에 따라 Payload ID 값이 나올 수 있습니다. Payload ID는 Payload ID Length에서 설정된 크기만큼의 데이터를 갖습니다. 다음은 Payload Data로 실제 사용자가 사용하는 데이터를 표시하고 Payload Data Length에 설정된 크기만큼의 데이터를 갖습니다.
페이로드 타입 TNF 타입에 해당하는 데이터 타입 페이로드 ID IL 플래그가 1일 때 존재,
URI 코딩 포맷으로 하나의 레코드가 다른 레코드와 연결되기 위해 사용된다.
이는 청크 레코드와는 다른데 Record는 오직 하나의 페이로드 ID를 가지고 있어, 모든 Chunk Record는 동일한 페이로드 ID를 가지고 있다.페이로드 데이터 사용자 데이터 'iOS Swift' 카테고리의 다른 글
BLE 프로토콜 구조 (0) 2023.06.07 Adding Support for Background Tag Reading (0) 2023.06.06 NDEF 의 TNF(Type Name Format) (1) 2023.06.06 swift 에서 C++ 사용하기 - opencv 연동 (0) 2020.09.09 Playground를 이용한 UI 프로토타입 설계 (0) 2020.09.09