본문 바로가기
Wireless Network/NFC

NFC with Android

by 개Foot/Dog발?! 2014. 9. 20.

URL : http://www.hardroid.net/archives/71


.....


1.1 RFID 와 NFC


NFC는 RFID 중 단거리에 유용하도록 정의된 기술로 먼저 RFID에 대해서 간략히 나마 설명하는 것이 좋을 것 같다. RFID는 무선 전파를 이용하여 일정 거리 안에 있는 정보를 자동으로 인식하는 기술로 RFID 태그와 RFID 리더를 사용하는데 RFID 리더가 일정거리 안에 있는 RFID 태그를 인식하여 태그에 있는 식별정보를 획득한다.

RFID 스티커 내부


RFID 태그는 많은 유형이 있지만 전원 공급에 따라 수동형(Passive)과 능동형(Active) 그리고 2가지 유형을 혼합한 반 수동형(Semi-passive)으로 나눌 수 있다. 

수동형 RFID 태그는 보드에 전원 공급 장치가 없이 RFID 리더의 신호를 전자기 유도를 통해 전원을 생산하여 태그의 정보를 전송하는데 짧은 거리에서만 통신이 가능하다. 일반적으로 NFC 태그들이 이 유형에 속한다. 

능동형 RFID 태그는 배터리가 내장되어 있고 수동형 RFID 태그보다 먼 거리에서도 송수신이 가능한 것이 특징인데 약 10m 이상 통신이 가능하다.


수동형 RFID는 가격이 싸고 크기가 작으며 회로가 심하게 구부려지거나 잘라지지 않은 한 통신은 가능하다. 보드 상에 전원 장치가 없으므로 일반 상태에서는 비활성화되어 있다가 RFID 리더가 태그를 감지할 때 방출하는 단거리 무선 주파수 신호를 태그 안의 안테나가 감지하여 신호를 전력으로 변환시키면 RFID 태그가 활성화된다. 


.....


RFID 태그는 Ox12345678AB와 같이 오직 40비트의 유일한 식별자를 저장하고 있다. RFID 리더가 RFID 태그를 활성화시키면 태그는 유일한 ID를 전송하는데 이를 리더의 미들웨어가 전달받아 해석한 후 해석된 정보를 사용할 소프트웨어를 소프트웨어 목록에서 찾아 전송한다. 


NXP의 PN65N을 NFC 컨트롤러로 사용하는 넥서스S의 NFC 미들웨어 스택


RFID와 가장 큰 차이는 근접 통신과 데이터의 량이다. 

10cm의 거리에서 통신이 가능하다고 하지만 정확히 인식되어 통신되려면 5cm 이내여야 한다. 그리고 태그의 안테나의 방향과 리더기 여기서는 스마트 폰의 안테나 방향이 일치해야 인식률이 높다. 

앞에서 RFID는 40비트의 식별자를 포함하고 이는 오직 읽기 전용으로 제공되지만 

NFC는 이보다 많은 데이터 용량을 지원한다. 

뒤에서 살펴보겠지만 NFC 표준화 단체인 NFC 포럼은 4가지 유형으로 태그를 분류하는데 이때 분류 기준 중 하나가 데이터의 용량이다. 

현재 제일 작은 용량을 지원하는 NFC가 48 바이트이고 보통 144 바이트를 지원하는 것으로 나타나고 있다. 점점 데이터의 양이 늘어나고 있는데 어떤 태그는 8K 바이트를 지원하는 것도 있다. 


.....


기기간 데이터 교환은 NFC 이외에 와이파이나 블루투스를 이용하여 많이 구현되었지만 페어링, 인증 단계등 여러 단계를 통해 설정이 되어야 데이터 교환을 할 수 있는데 반해 NFC는 한번의 접촉으로 물리적이고 직관적인 방식으로 아주 간편하게 연결하여 데이터를 교환할 수 있다.


블루투스 Connection Handover 흐름도 (NFC 포럼 Connection Handover 스펙 참조)


1.2 NFC 포럼


구글은 ISO 14443-3A, JIS 6319-4, ISO 15693 등 여러 NFC 기술들을 지원하지만 NFC 포럼을 표준으로 하여 태그 감지 시 NDEF 데이터가 태그로부터 스캔 될 경우 안드로이드는 자동으로 메시지를 파싱하여 바로 앱이 사용하기 편한 메시지 객체로 변환하여 제공하고 쉽게 데이터를 핸들링 하도록 API들을 제공한다.


NFC 포럼은 NDEF(NFC Data Exchange Format) 메시지 형식으로 기기간 통신, 쓰기/읽기, 카드 에뮬레이션으로 분류하여 각 모드에 필요한 기술요소들을 표준화하고 있으며 이 세가지 모드가 서로 유기적으로 제공될 수 있는 기술을 표준화하고 있다.


NFC 포럼 아키텍처



분류

스펙설명
Tag TypeType 1 Tag Operation
Type 2 Tag Operation

Type 3 Tag Operation

Type 4 Tag Operation
  • NFC 포럼 태그와 NDEF 메시지들을 어떻게 읽고 쓸 수 있는지 정의
  • 4가지 태그 유형 정의
  • 태그에 쓰고 읽는데 필요한 명령어들과 매개변수들을 정의
ProtocolLogical Link Control Protocol
  • NFC을 통해 신뢰할 수 있는 P2P 통신을 위한 프로토콜
  • Digital Protocol 스펙의 peer 모드에서 논리적 링크 제어 레이어를 정의
  • P2P 통신, Connection-Oriented와 Connectionless 전송, 프로토콜 멀티플렉싱에 대해 지원사항 제공
NFC Digital Protocol
  • 2개의 장비간 NFC 연결을 설정하고 유지하기 위한 빌딩 블록을 정의
  • ISO/IEC 14443을 포함한 NFCIP-1의 구현 스펙
NFC Activity
  • 특정 유즈케이스들에 대해 Digital Protocol의 빌딩 블록의 사용방법에 대한 스펙
  • 유즈케이스를 수행하는데 있어 필요한 Activity들의 순서를 정의한 Profile들을 정의
  • 다른 NFC 포럼 장비와 P2P 설정, 태그로부터 NDEF 데이터 읽기 등 정의
NFC Analog
  • Peer 모드, 읽기/쓰기 모드, 카드 에뮬레이터 모드에서 NFC 포럼 기기의 아날로그 인터페이스를 정의
  • 라디오 링크 시 상호운용에 따른 문제를 최소화하는 방법 등 여러 RF 특성을 정의
Data Exchange FormatNFC Data Exchange Format(NDEF)
  • NFC 애플리케이션을 위한 표준 데이터 형식을 제공
  • 메시지는 하나 이상의 레코드들을 중첩하여 구성
  • 하나의 메시지는 여러 개의 덩어리로 분리되어 전송하는 방법 제공
  • 메시지 크기는 태그의 메모리가 허락하는 한 최대 4GB까지 지원
NFC Simple NDEF Exchange Protocol
  • P2P 모드에서 2개의 NFC 지원 기기간의 애플리케이션들이 서로 NDEF 메시지들을 교환하기 위한 프로토콜
  • SNEP 클라이언트와 서버 애플리케이션 간의 요청/응답 프로토콜
  • 신뢰할 수 있는 데이터 교환을 위해 NFC LLCP의 Connection-oriented 전송 모드를 사용
Record TypeNFC Record Type Definition(RTD)
  • NDEF 메시지의 데이터 유형에 대해 식별하기 위한 확장 구조를 제공
  • 레코드 유형은 데이터의 의미를 식별
  • 레코드 유형은 NFC 포럼이 정의한 “Well-Known”과 서드파트에서 정의한 “External”로 구분
  • “External” 유형은 정의한 조직의 도메인을 근거로 하여 namespace 정의
NFC Text Record Type Definition텍스트 데이터를 위한 “Well-Known” 레코드 정의
NFC URI Record Type DefinitionURI 데이터를 위한 “Well-Known” 레코드 정의
Smart Poster Record Type Definition스마트 포스터 데이터를 위한 “Well-Known” 레코드 정의
NFC Signature Record Type Definition전자 서명 데이터를 위한 “Well-Known” 레코드 정의
Reference App.NFC Connection Handover 1.2
  • NFC을 이용하여 블루투스 페어링 연결과 와이파이 보안 설정을 통한 연결 초기화에 대해 설명
  • 무선 연결에 대한 설정 정보를 교환하기 위한 메시지들을 정의

NFC 포럼 기술 스펙


1.3 NDEF (NFC Forum Data Exchange Format)


NFC 포럼은 NFC 포럼 기기간 주고 받거나 태그에 저장되어 있는 데이터 감지 시 데이터에 대해 경량 바이너리 메시지 형식을 표준화하였는데 이를 NFC Forum Data Exchange Format(NDEF) 이라고 한다.


애플리케이션이 전송하는 데이터를 페이로드(payload)라고 하며 

페이로드들을 하나의 메시지(Message) 구조에 캡슐화하여 전송한다. 

하나의 메시지의 최대 길이는 4GB이고 하나 이상의 레코드(Record)를 가지고 있다. 

하나의 페이로드는 하나의 레코드에 담겨 전송되거나 여러 개의 레코드에 분할되어 전송될 수 있는데 이때의 레코드들을 덩어리(chunk)하고 한다.


NDEF의 레코드는 페이로드에 대한 정보로 페이로드 길이, 페이로드 유형, 옵션으로 추가할 수 있는 페이로드 식별자 3개의 매개변수를 포함하고 있다.


페이로드 길이(Payload Length): 레코드에 포함되어 있는 페이로드의 길이를 나타내며 만약 짧은 페이로드를 포함한 레코드이면 1바이트(옥텟) 크기를 가지며 그렇지 않으면 4바이트(옥텟) 크기의 숫자로 페이로드 길이가 지정된다. 이때 짧은 페이로드를 포함하는지에 대한 구분은 레코드의 SR 플래그 값에 따라 정해진다.


페이로드 유형(Payload Type): 페이로드의 데이터 종류를 명시하며 URIs, text/plain-text와 같은 MIME, 스마트 포스터 등 애플리케이션 개발자들이 알 수 있는 유형으로 되어 있다. 안드로이드는 애플리케이션이 원하는 페이로드 유형을 등록하면 이 값에 따라 해당하는 애플리케이션을 활성화하여 메시지를 전달한다. 그리고 Type 필드의 값의 구조를 명시하는 

TNF(Type Name Format)에 대한 값을 android.nfc.NdefRecord에 정의하고 있어 쉽게 개발자들이 메시지 형식을 체크하여 핸들링할 수 있도록 지원하고 있다.


페이로드 식별자(Payload Identification): 페이로드 식별자는 옵션으로 개발자에 의해 설정되는 URI 기반의 값이다. 개발자는 유일한 식별자가 되도록 설정해야 한다.


NDEF 메시지 구조


1.4 NFC 태그 유형


NFC 포럼은 사용 용도에 따라 선택 할 수 있도록 태그를 4가지로 분류하였다. 각 분류는 용량, 쓰기 방지, 태그가 배치될 환경에 따라 선택할 수 있도록 세심하게 구분된다. 그리고 NFC 포럼과 호환되는 태그들은 앞서 말한 NDEF을 지원하며 안드로이드 개발자는 NFC Forum Type 1, 2, 3, 4 중 하나가 표시된 태그를 이용한다면 쉽게 API을 통해 태그와 상호 연동하는 애플리케이션을 만들 수 있을 것이다.


Type 1Type 2Type 3Type 4
RF 인터페이스ISO 14443AISO 14443AJIS X 6319-4ISO 14443A,ISO 14443B
속도106kbps106kbps212kbps 혹은 424kbps424kbps 이상
메모리 용량96 bytes, 2KB까지 확장 가능48 bytes,
일반적으로는 144bytes,

2KB까지 확장 가능
이론적으로는 1MB64KB 이하
(DESFire: 4KB)

(SmartFX: 32KB)
새로 쓰기사용자 새로 쓰기 가능
사용자에 의해 read-only 설정 가능
사용자 새로 쓰기 가능
사용자에 의해 read-only 설정 가능
read-only 혹은 새로 쓰기를 사전에 설정하여 제조read-only 혹은 새로 쓰기를 사전에 설정하여 제조
유명제품브로드콤 TopazTMMIFARE UltraLight소니 FeliCaTMINXP DESFire,
NXP SmartFX
가격저가(약 ~ $1, 2)저가
(약 ~ $1, 2)
고가
(약 ~ $8,10 이상)
중고가
(약 ~ $3, 4)

NFC 포럼의 태그 분류


.....


NFC 기술은 NFC 포럼이 설립되기 이전에 이미 존재했기 때문에 NDEF을 지원하지 않는 수많은 태그들이 존재하고 있다. 이런 경우를 위해 안드로이드는 표 1-3과 같이 android.nfc.tech 패키지에 NFC 기술들을 지원하는 클래스들을 정의하였으며 태그의 데이터를 바이트 배열로 받아 애플리케이션이 직접 파싱하여 사용할 수 있도록 지원하고 있다.


클래스설명제조사 지원
TagTechnology태그 기술에 대한 모든 클래스들이 구현해야 할 인터페이스반드시 지원
NfcANFC-A (ISO 14443-3A) 프로퍼티들과 I/O 기능을 제공
NfcBNFC-B (ISO 14443-3B) 프로퍼티들과 I/O 기능을 제공
NfcFNFC-F (JIS 6319-4) 프로퍼티들과 I/O 기능을 제공
NfcVNFC-V (ISO 15693) 프로퍼티들과 I/O 기능을 제공
IsoDepISO-DEP (ISO 14443-4) 프로퍼티들과 I/O 기능을 제공
NdefNDEF data에 접근할 수 있도록 지원하고 NDEF 형식의 NFC tags와 연동할 수 있는 기능을 제공
NdefFormatableNDEF 형식으로 접근 가능한 태그들을 위한 정형화된 기능을 제공
MifareClassicMIFARE Classic 프로퍼티들과 I/O 에 접근할 수 있는 기능을 제공옵션
MifareUltralightMIFARE Ultralight 프로퍼티들과 I/O 에 접근할 수 있는 기능을 제공

안드로이드에서 지원하고 있는 NFC 태그 기술 클래스


참고로 MifareClassic은 “Classic” 라벨이 부착된 MIFARE 태그들을 인식하는 것으로 이 태그는 4KB정도로 용량이 크고 비교적 1, 2달러 이내로 저렴하며 구글의 Nexus 계열 스마트 폰은 이 태그 기술을 지원하고 있다. 그러나 NDEF 메시지들을 형식화하는데 자신들만의 프로토콜을 사용하므로 제조사가 이를 지원하려면 라이선스 비용을 지불하기 때문에 조만간 안드로이드 폰에서 지원하지 않을 수 있으므로 선택에 유의하기 바란다.


1.5 NFC 서비스 유형


.....


NFC 통신 모드설명응용 서비스
카드 에뮬레이션단말기 상태에 관계없이 리더기에 접촉하면 인식되는 모드모바일 결제, 인증을 통한 출입문 개폐, 전자제품 사용 인증
읽기/쓰기NFC 단말기가 활성화되어 있는 상태에서 NFC 태그를 인식하면 태그에 있는 데이터를 읽거나 태그에 데이터를 쓸 수 있는 모드블루투스 혹은 Wifi 핸드오버, 스마트 포스터, 주차 위치 관리, 티켓팅, 이력 추적, 위치 기반 광고, 소셜 네트워크 연결
P2P2대의 NFC 단말기간에 상호 인식되어 저용량 데이터를 주고 받을 수 있는 모드명함 교환, 계좌 이체, 콘텐츠 구매, 사진 및 음악 공유

NFC 3대 통신 모드와 응용 서비스


안드로이드는 카드 에뮬레이션 모드를 제외한 읽기/쓰기 모드와 P2P 모드를 지원하고 있다. 

읽기/쓰기 모드는 안드로이드 폰의 잠금 상태를 해제하면 android.tech 패키지에 있는 태그 기술을 이용하여 태그를 인식하여 데이터를 읽고 쓸 수 있도록 지원하며 P2P 모드는 진저브레드 버전에서는 NPP(NDEF Push Protocol)로 ICS 이상에서는 안드로이드 빔을 이용하여 다른 단말기간에 데이터를 공유할 수 있도록 지원하고 있다.



** 최근 안드로이드 4.4 킷캣에서 NFC HCE기능이 추가되어 카드 에뮬레이션 기능을 구현할 수 있도록 인터페이스를 구글측에서 제공해 주었다. 

그러나 아직 넘을 산이 많다. 

가장 중요한 부분중에 하나인 SE(Secure Element)가 그 이유이다. 지금까지 우리나라(대한민국)에서는 SE가 보통 USIM에 포함되어 있고 기존방식은 NFC Controller에서 USIM과 NFC Reader와 직접 통신하고 앱측에서는 관여를 할 수 없었다.

그러나 HCE기능이 제공되면서 NFC Contoller의 카드에뮬레이션 기능임에도 데이터가 기본 테이블이 AP로 전달가능하게 된 것이다. 즉, USIM으로 가지 않고 앱으로 전달 받을 수 있게 되었다는 것이다. 

 

 




앱에서 결제 관련 처리가 가능한 인터페이스가 생기게 되어서 기존 SE를 포함한 USIM과 통신할 수 있거나 상태 및 결과값을 받을 수 있는 방법이 있어야 하나, 현재로서는 안드로이드에서 이 부분에서는 공식적으로 지원하지 않는다.

또는

현재 계속 세계적으로 연구중인 다른방식의 USIM의 SE를 대체할 보안기술을 연구중이다. USIM의 SE를 사용하지 않고 안전하게 결제하는 방법을 연구하고 있다.



1.6 안드로이드 폰 지원


.....


특히 안드로이드의 NFC 기능 중 안드로이드 빔을 이용한 P2P 앱을 개발하고 싶다면 아이스크림 샌드위치(ICS) 버전을 지원하는 폰을 이용하길 바란다. 진저브레드는 안드로이드 빔을 지원하지 않고 NDEF Push Protocol을 이용해야 하므로 ICS가 설치되고 NFC을 지원하는 폰을 사용하길 권장한다.