1. NFC란?
NFC(근거리 통신, Near Field Communication)는 약 4cm 내외의 짧은 거리에서 무선으로 통신할 수 있는 기술입니다. RFID(라디오 주파수 식별) 기술을 기반으로 하며, 주로 스마트폰, 태블릿, 스마트 카드와 같은 장치 간에 데이터를 손쉽게 교환하는 데 사용됩니다. NFC는 13.56MHz 대역에서 작동하며, 모바일 결제, 파일 전송, 기기 간 연결과 같은 다양한 용도로 활용됩니다.
NFC는 크게 세 가지 모드로 나뉩니다:
- 카드 에뮬레이션 모드: NFC 디바이스가 RFID 카드처럼 동작하며, 주로 모바일 결제나 출입 카드로 활용됩니다.
- 리더/라이터 모드: NFC 디바이스가 태그를 읽거나 쓰는 방식으로 동작합니다.
- 피어 투 피어(P2P) 모드: 두 장치 간 데이터를 주고받을 수 있는 방식으로, 주로 파일 전송에 사용됩니다.
2. NFC의 주요 활용
NFC는 다음과 같은 다양한 상황에서 사용할 수 있습니다:
- 모바일 결제: NFC 기반 결제 시스템은 스마트폰을 이용해 물리적 카드 없이도 편리하게 결제를 처리할 수 있습니다. 애플 페이(Apple Pay)와 구글 페이(Google Pay) 같은 서비스가 대표적입니다.
- 데이터 전송: NFC는 스마트폰 간에 사진, 비디오, 연락처 등의 파일을 전송할 수 있는 기능을 제공합니다.
- 교통카드 및 출입카드: NFC는 교통카드, 전자 티켓 및 출입 인증 카드로도 사용됩니다. 지하철, 버스, 도서관 출입 등을 편리하게 처리할 수 있습니다.
- 기기 간 연결: NFC는 스마트폰과 무선 이어폰, 스피커 등의 연결 설정을 빠르게 할 수 있게 도와줍니다. NFC로 두 기기를 가까이 대면 자동으로 블루투스 페어링이 이루어지는 방식입니다.
3. NFC 기술의 특징
NFC는 다음과 같은 주요 특징을 가지고 있습니다:
- 짧은 통신 거리: NFC는 보통 4cm 이내의 매우 짧은 거리에서 통신이 이루어지기 때문에, 비교적 높은 보안성을 제공합니다.
- 비접촉 통신: NFC는 물리적인 접촉이 필요하지 않으며, 케이블이나 복잡한 설정 없이도 통신이 가능합니다.
- 양방향 통신: NFC는 단방향 통신이 아닌, 양방향 데이터 전송이 가능합니다. 즉, 데이터를 읽고 쓰는 작업을 모두 지원합니다.
- 간단한 설정: 두 장치를 가까이 대기만 하면 자동으로 연결되며, 설정 과정이 매우 간편합니다. 예를 들어, 두 스마트폰을 NFC로 연결하여 블루투스를 자동 설정할 수 있습니다.
4. nRF52 NFC 특징
nRF52 시리즈는 노르딕 세미컨덕터(Nordic Semiconductor)에서 제공하는 무선 통신용 SoC(System on Chip)로, BLE(Bluetooth Low Energy)와 NFC를 지원하는 저전력 제품입니다. nRF52 시리즈의 NFC 기능은 아래와 같은 특징을 가지고 있습니다:
- 다양한 NFC 타입 지원: nRF52는 NFC-A, NFC-B, NFC-F의 세 가지 타입을 지원하여 다양한 NFC 기기와의 통신을 제공합니다.
- 데이터 읽기/쓰기: nRF52는 NFC 통신을 통해 데이터를 읽거나 쓸 수 있으며, 스마트폰과 상호 작용하여 데이터 전송 및 저장이 가능합니다.
- NFC 태그 역할 수행: nRF52는 NFC 태그처럼 동작할 수 있으며, 다른 NFC 판독기 또는 NFC 지원 기기에 응답할 수 있습니다.
- 보안 기능: NFC 통신 중에 데이터의 기밀성과 안전성을 확보할 수 있는 다양한 보안 기능을 제공합니다.
- 저전력 설계: NFC 통신 시에도 저전력 모드로 작동하여, 배터리 수명을 최적화할 수 있습니다.
5. nRF52에서 NFC 설정
nRF52에서 NFC를 설정하려면 몇 가지 초기화 작업이 필요합니다. 이를 위해 sdk_config.h 파일에서 필요한 설정을 활성화해야 합니다.
#define NRFX_NFCT_ENABLED 1
#define NRFX_TIMER_ENABLED 1
#define NRFX_TIMER4_ENABLED 1
#define TIMER_ENABLED 1
#define NFC_PLATFORM_ENABLED 1
이후 필요한 드라이버와 라이브러리를 프로젝트에 추가합니다.
- nRF 드라이버 추가
./modules/nrfx/drivers/src/nrfx_nfct.c
./modules/nrfx/drivers/src/nrfx_timer.c
- nRF 라이브러리 추가
./components/nfc/t4t_lib/nfc_t4t_lib_gcc.a
./components/nfc/platform/nfc_platform.c
이 설정들은 NFC 모듈이 정상적으로 동작할 수 있도록 하는 기본 설정입니다.
6. nRF52에서 NFC 초기화
nRF52 SDK는 두 가지 NFC 태그 타입을 지원합니다: NFC tag 2 type(T2T)과 NFC tag 4 type(T4T). 여기서는 ISO14443-4A(ISO-DEP) 프로토콜을 지원하는 T4T 라이브러리를 사용하여 NFC 태그를 구현합니다.
다음은 기본적인 NFC 초기화 코드입니다.
static void aika_nfc_callback(void* context, nfc_t4t_event_t event, const uint8_t* data, size_t dataLength, uint32_t flags){
UNUSED_PARAMETER(context);
switch(event){
case NFC_T4T_EVENT_FIELD_ON:
NRF_LOG_INFO("NFC_T4T_EVENT_FIELD_ON");
break;
case NFC_T4T_EVENT_FIELD_OFF:
NRF_LOG_INFO("NFC_T4T_EVENT_FIELD_OFF");
break;
case NFC_T4T_EVENT_DATA_IND:
NRF_LOG_INFO("%d %s", dataLength, NRF_LOG_PUSH((char*)data));
check_nfc_data((uint8_t*)data, dataLength);
break;
default:
break;
}
}
int aika_nfc_init(void)
{
ret_code_t err_code;
/* NFC 설정 */
err_code = nfc_t4t_setup(aika_nfc_callback, NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_INFO("NFC 시작.");
/* NFC 필드 감지 시작 */
err_code = nfc_t4t_emulation_start();
APP_ERROR_CHECK(err_code);
}
위 코드에서는 aika_nfc_callback 함수를 NFC 이벤트 핸들러로 설정하고, nfc_t4t_setup 함수를 통해 NFC 모듈을 초기화합니다. 그런 다음 nfc_t4t_emulation_start 함수를 호출하여 NFC 필드 감지를 시작할 수 있습니다.
7. NFC 이벤트 처리
aika_nfc_callback 함수는 NFC 이벤트를 처리하는 역할을 합니다. 이 함수는 NFC 필드 감지, 데이터 전송 등의 다양한 이벤트에 대한 로그를 기록하며, 필요한 경우 추가 처리를 할 수 있습니다. 특히 데이터 수신 이벤트는 NFC_T4T_EVENT_DATA_IND로 처리됩니다.
8. NFC 응답 데이터 전송
nRF52는 NFC를 통해 수신한 데이터를 처리하고, 응답 데이터를 전송할 수 있습니다. 응답 데이터는 nfc_t4t_response_pdu_send 함수를 사용하여 전송됩니다.
ret_code_t nfc_send_response(uint8_t* data, uint16_t data_size){
ret_code_t err_code;
err_code = nfc_t4t_response_pdu_send((const uint8_t*)data, (size_t)data_size);
if(NRF_SUCCESS != err_code)
NRF_LOG_ERROR("%s %d", __func__, err_code);
return err_code;
}
void check_nfc_data(uint8_t* data, uint16_t dataLength)
{
if(0 == strncmp("android-5", (char*)data, dataLength))
{
nfc_send_response((uint8_t*)"last", 4);
return;
}
nfc_send_response((uint8_t*)"data", 4);
}
이 코드는 NFC로 수신한 데이터를 확인한 후, 조건에 따라 적절한 응답을 전송하는 로직을 담고 있습니다. 예를 들어, 수신한 데이터가 "android-5"라는 문자열일 경우 "last"라는 데이터를 응답으로 전송합니다.
9. 결론
NFC는 간편하고 빠른 데이터 교환과 결제 서비스를 제공하여 다양한 IoT(사물인터넷) 및 무선 통신 응용 분야에서 널리 사용됩니다. 특히 nRF52 시리즈는 NFC 기능을 활용하여 BLE 장치 간 연결 설정, 인증, 데이터 전송 등의 용도로 활용할 수 있습니다. 저전력 설계로 배터리 수명도 향상시킬 수 있어 IoT 장치 개발에 매우 유용합니다.
nRF52에서 NFC를 구현하는 것은 매우 간단합니다. SDK에서 제공하는 NFC 라이브러리와 드라이버를 추가하고, 적절한 콜백 함수와 설정을 통해 빠르게 NFC 기능을 활성화할 수 있습니다. NFC는 앞으로도 다양한 분야에서 더욱 발전하고, 활용될 가능성이 높은 기술입니다.
'nRF52' 카테고리의 다른 글
nRF52 BLE Advertising Interval 설정과 최적화 (0) | 2024.09.11 |
---|---|
nRF52 Bluetooth Low Energy (BLE) Peripheral 개발 가이드 (0) | 2024.09.10 |
nRF52840에서 USB Mass Storage Class (MSC) 사용하기 (0) | 2024.09.08 |
nRF52840 USB CDC ACM 이용 (0) | 2024.09.07 |
nRF52840에서 FatFs 사용 - 파일 시스템 (0) | 2024.09.06 |