NFC 컨트롤러 인터페이스 (NCI)는 NFC 컨트롤러 (NFCC)와 상호작용하는 데 사용됩니다. 이 페이지에서는 Android 독점 NCI 명령의 사양을 설명합니다.
NCI 정의
Android 독점 NCI 명령어는 독점 그룹 ID (GID) 0xF
와 Android 작업 코드 식별자 (OID) 코드 공간 0xC
을 사용합니다.
일반 패킷 형식
Android NCI 패킷 형식은 독점 Group_ID 0xF
및 Opcode_ID 0x0C
를 사용하여 제어 패킷의 NCI 사양을 따릅니다. 각 Android 독점 메시지의 경우 패킷 페이로드의 첫 번째 바이트는 Android 작업 코드 (0x0C
)로 설정해야 합니다. Android 제어 패킷은 표준 명령어와 마찬가지로 명령어, 응답, 알림을 식별하는 데 Message_Type
및 PBF
를 사용합니다.
Android 패킷 형식은 다음 표에 나와 있습니다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
나중에 사용하기 위해 예약됨 (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
할당된 Android 명령 코드 식별자는 다음 표에 나열되어 있습니다. 각 패킷의 사양은 다음 섹션에 나와 있습니다.
기능 가져오기 명령어
호스트는 NCI_ANDROID_GET_CAPS_CMD
를 사용하여 NFCC에서 지원하는 Android 독점 기능 목록을 쿼리합니다. NCI_ANDROID_GET_CAPS_CMD
명령어는 매개변수를 사용하지 않습니다.
NFCC는 상태가 STATUS_OK
이고 지원되는 기능 목록이 있는 NCI_ANDROID_GET_CAPS_RSP
응답으로 응답해야 합니다.
NFCC가 NCI_ANDROID_GET_CAPS_CMD
을 지원하지 않으면 호스트는 각 기능이 지정된 기본값을 취한다고 가정해야 합니다. 지정된 기능이 응답에서 NFCC에 의해 반환되지 않으면 호스트는 기능에 지정된 기본값이 있다고 가정해야 합니다.
NCI_ANDROID_GET_CAPS_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
해당 사항 없음 | 0옥텟 |
NCI_ANDROID_GET_CAPS_RSP
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. | |||||
Android_Version
|
2옥텟 | NFCC에서 구현한 Android 요구사항 버전을 식별합니다. | |||||
0x0000 | Android 15 | ||||||
기능 수 | 1옥텟 | 지원되는 기능의 수 (n) | |||||
기능[0..n] | (m + 2) * n옥텟 | 지원되는 기능 | |||||
유형 | 1옥텟 | 기능의 식별자 | |||||
Len | 1옥텟 | 값의 길이 (m) | |||||
값 | m옥텟 | 기능의 값 |
Android 독점 기능
기능 이름 | ID | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|---|
관찰 모드 | 0x00 | 1옥텟 | 관찰 모드 지원
0x00 (기본값) - 이 기능을 지원하지 않습니다. 0x01 - 호스트에서 RF 비활성화를 사용하여 기능을 지원합니다 (Android 15에 필요). <0x02 - 호스트에서 RF 비활성화 없이 기능을 지원합니다 (Android 16 이상에 필요). 다른 모든 값은 RFU입니다. |
|||||
폴링 프레임 알림 | 0x01 | 1옥텟 | 폴링 프레임 알림 지원 지원되는 경우 0x01, 지원되지 않는 경우 0x00 (기본값) 다른 모든 값은 RFU입니다. | |||||
절전 모드 | 0x02 | 1옥텟 | 절전 모드 지원 지원되는 경우 0x01, 지원되지 않는 경우 0x00 (기본값) 다른 모든 값은 RFU입니다. | |||||
Auotransact 폴링 루프 필터 | 0x03 | 1옥텟 | 관찰 모드가 전역적으로 사용 설정된 경우 특정 패턴의 관찰 모드를 우회하기 위해 펌웨어에서 폴링 루프 필터 지원
0x00 (기본값) - 이 기능을 지원하지 않음 0x01 - 폴링 루프 필터 지원 기타 모든 값은 RFU입니다. |
|||||
지원되는 종료 프레임 항목 수 | 0x04 | 1옥텟 | 지원되는 종료 프레임 항목 수입니다. 최소 5개의 종료 프레임 항목이 필요합니다. | |||||
읽기 모드 주석 | 0x05 | 1옥텟 | 읽기 모드 주석 지원
0x00 (기본값) - 이 기능을 지원하지 않습니다. 0x01 - 이 기능을 지원합니다. 다른 모든 값은 RFU입니다. |
|||||
0x06..0xFF | 0옥텟 | 나중에 사용하기 위해 예약됨 |
절전 모드 명령어
NFCC를 절전 모드로 전환하려면 호스트가 NCI_ANDROID_POWER_SAVING_CMD
명령어를 사용할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드가 포함된 NCI_ANDROID_POWER_SAVING_RSP
로 응답해야 합니다.
절전 모드에서는 호스트가 NFCC에 명령어를 전송하면 안 되고 NFCC가 호스트에 알림이나 응답을 전송하면 안 됩니다. NFCC 또는 삽입된 보안 요소 (eSE)는 절전 모드를 사용 설정하기 전에 설정된 라우팅 구성에 따라 수신되는 결제 요청을 자동으로 수락할 수 있습니다.
전체 전원 모드로 돌아가려면 호스트가 NFCC를 재설정하거나 다시 초기화하면 됩니다.
NCI_ANDROID_POWER_SAVING_CMD
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
절전 모드 | 1옥텟 | 0x00 | 절전 모드 사용 중지 |
0x01 | 절전 모드 사용 설정 |
NCI_ANDROID_POWER_SAVING_RSP
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
관찰 모드 명령 설정
관찰 모드를 활성화하거나 비활성화하려면 호스트가 NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
명령어를 사용하면 됩니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
로 응답해야 합니다.
관찰 모드가 사용 중지되면 NFCC는 활동 기술 사양에 따라 표준 수신 모드 활동을 구현해야 합니다.
관찰 모드가 활성화된 경우 NFCC는 호스트가 명시적으로 승인할 때까지 수신 모드의 폴링 루프 중에 폴링 요청에 응답하면 안 됩니다.
NFCC는 필드 활성화를 감지하면 RF_FIELD_INFO_NTF
알림 (NCI 사양의 섹션 5.3에 정의됨)을 전송해야 합니다. 폴링 모드 검색이 활성 상태인 경우 NFCC는 활동 기술 사양에 따라 폴링 모드 활동을 구현해야 합니다.
NFCC는 관찰 모드가 비활성화되는 즉시 기기 활성화를 진행할 수 있도록 설문조사 정보를 캐시할 수 있습니다.
호스트가 어떤 이유로든 종료되는 경우 (예: 배터리 부족 또는 사용자가 시작한 종료) NFCC는 SE 거래가 진행될 수 있도록 관찰 모드를 사용 중지해야 합니다.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
관찰 모드 | 1옥텟 | 0x00 | 관찰 모드 사용 중지 (기본값) |
0x01 | 관찰 모드 사용 설정 |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
폴링 루프 알림
NFCC는 각 폴링 루프 프레임 후에 호스트에 NCI_ANDROID_POLLING_FRAME_NTF
알림을 전송해야 합니다. RF_FIELD_INFO_NTF
및 NCI_ANDROID_POLLING_FRAME_NTF
알림이 모두 생성되면 NFCC는 RF_FIELD_INFO_NTF
다음에 NCI_ANDROID_POLLING_FRAME_NTF
을 전송해야 합니다.
NCI_ANDROID_POLLING_FRAME_NTF
알림은 관찰 모드의 활성화 여부와 관계없이 표시됩니다. 관찰 모드가 활성화된 경우 NFCC는 거래를 진행하기 전에 항상 NCI_ANDROID_POLLING_FRAME_NTF
알림을 전송해야 합니다.
NCI_ANDROID_POLLING_FRAME_NTF
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m +3) * n옥텟 | 마지막 알림 이후 수신된 폴링 요청 목록입니다. 각 결과는 수신된 요청의 유형 (기술)과 기술에 따라 요청에서 식별 가능한 데이터를 제공합니다. | |||||
유형 | 1옥텟 | 프레임 유형을 참고하세요. | |||||
플래그 | 1옥텟 | 플래그 바이트를 참고하세요. | |||||
길이 | 1옥텟 | 타임스탬프 및 게인 필드를 포함한 폴링 데이터 보고서의 길이 (m)입니다. | |||||
타임스탬프 | 4옥텟 | 폴링 요청 수신 시간의 타임스탬프(밀리초 단위, 빅엔디언)입니다. | |||||
게인 | 1옥텟 | 폴링 요청의 강도입니다.
0xFF는 값을 사용할 수 없음을 나타냅니다. |
|||||
데이터 | m - 5옥텟 | 폴링 요청에 있는 식별 가능한 데이터를 반환합니다. |
프레임 유형
폴링 프레임 | 유형 | 크기 | 값/설명 | |
---|---|---|---|---|
원격 필드 | 0x00 | 1옥텟 | 0x00 | 필드 꺼짐 |
0x01 | 필드 | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n옥텟 | 값에 ISO 14443-3 명령어 (예: REQ 또는 WUP)가 포함되어야 합니다. | |
NFC-B | 0x02 | n옥텟 | 값에는 AIF 바이트와 ISO 14443-3 명령어가 포함되어야 합니다(예: REQ 또는 WUP). | |
NFC-F | 0x03 | n옥텟 | 값에 ISO 14443-3 명령어 (예: REQ 또는 WUP)가 포함되어야 합니다. | |
NFC-V | 0x04 | n옥텟 | 값에 ISO 14443-3 명령어 (예: REQ 또는 WUP)가 포함되어야 합니다. | |
알 수 없음 | 0x07 | n옥텟 | 원시 프레임 데이터 |
플래그 바이트 정의
플래그 | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | 짧은 프레임 | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | 긴 프레임 |
관찰 모드 상태 명령어를 쿼리합니다.
수동 주문 모드의 현재 상태를 가져오기 위해 호스트는 NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
명령어를 사용할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
로 응답해야 합니다.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
해당 사항 없음 | 0옥텟 |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. | |
기술 마스크 | 1옥텟 | 관찰 모드가 사용 설정된 기술을 나타내는 비트 마스크입니다.
|
수동 관찰자 기술 명령 설정
수동 관찰자 기술을 설정하기 위해 호스트는 NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
명령어를 사용할 수 있습니다. 이 명령어는 RF_DEACTIVATE_CMD
없이 지정된 기술의 관찰 모드를 사용 설정하거나 사용 중지합니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
로 응답해야 합니다.
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
기술 마스크 | 1옥텟 | 관찰 모드를 사용 설정할 기술을 나타내는 비트 마스크입니다.
|
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
수동 관찰자 종료 프레임 명령 설정
관찰 모드 종료 프레임 테이블을 구성하기 위해 호스트는 NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
명령어를 사용할 수 있습니다. 이 명령어는 관찰 모드 종료를 트리거하는 RF 프레임을 지정합니다. 이 명령어는 RFST_IDLE
에서만 전송할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
로 응답해야 합니다.
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
더보기 | 1옥텟 | 0x00 - 마지막 메시지 0x01 - 추가 메시지 |
|||||
채팅 일시 차단 | 2옥텟 | 관찰 모드를 복원하는 시간 제한(ms)(리틀 엔디언)입니다. | |||||
RF 프레임 항목 수 | 1옥텟 | 따라야 할 RF 프레임 항목 필드 수 (n)입니다. 0x00은 테이블을 재설정합니다. | |||||
RF 프레임 항목 [0..n] | (2+x)*n옥텟 | ||||||
Qualifier-Type | 1옥텟 | 프레임 유형과 일치 옵션을 정의합니다. | |||||
값의 길이 | 1옥텟 | 값 필드의 길이 'x'입니다. | |||||
값 | x옥텟 | 전원 상태 (1), 참조 데이터 (n), 마스크 (n) 1 <= n <= 16 |
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
수동 관찰자 종료 프레임 명령 가져오기
관찰 모드 종료 프레임 테이블의 현재 구성을 가져오기 위해 호스트는 NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
명령어를 사용할 수 있습니다. NFCC는 NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
로 응답한 후 NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
로 응답해야 합니다.
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
해당 사항 없음 | 0옥텟 |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
관찰 모드 종료 프레임 항목 수 | 1옥텟 | 따라야 할 관찰 모드 종료 프레임 항목 필드 수 (n)입니다. | |
항목 [0..n] | x+2옥텟 | 한정자 유형 (1), 길이 (1), 값 (x) |
빈 NCI 명령어
NCI를 블랭크 처리하기 위해 호스트는 NCI_ANDROID_BLANK_NCI_CMD
명령어를 사용할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_BLANK_NCI_RSP
로 응답해야 합니다.
NCI_ANDROID_BLANK_NCI_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
프레임 길이 | 1옥텟 | 프레임 데이터 길이 | |||||
프레임 데이터 | n옥텟 | 프레임 데이터 |
NCI_ANDROID_BLANK_NCI_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
폴링 루프 주석 명령어 설정
폴링 루프 주석을 설정하기 위해 호스트는 NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
명령어를 사용하여 맞춤 폴링 프레임 테이블을 채울 수 있습니다. 이 표는 표준 검색 루프 내에 삽입할 맞춤 RF 프레임을 정의합니다. 이 명령어는 RFST_IDLE
에서만 전송할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
로 응답해야 합니다.
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
페이로드 필드 | 크기 | 값/설명 | ||
---|---|---|---|---|
RF 프레임 항목 수 | 1옥텟 | 팔로우할 항목 수 (n), 0~4. n=0이면 기능이 사용 중지됩니다. | ||
RF 프레임 항목 [1..n] | 2+x옥텟 | |||
Qualifier-Type | 1옥텟 | 프레임 유형, 기술, 검색 루프의 위치를 정의합니다. | ||
길이 | 1옥텟 | 값 (x)의 길이입니다. | ||
값 | x옥텟 | 대기 시간 (1바이트) 및 RF 프레임 (1~16바이트) |
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
절전 모드 명령 쿼리
절전 모드를 쿼리하기 위해 호스트는 NCI_ANDROID_QUERY_POWER_SAVING_CMD
명령어를 사용할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 함께 NCI_ANDROID_QUERY_POWER_SAVING_RSP
로 응답해야 합니다.
NCI_ANDROID_QUERY_POWER_SAVING_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
해당 사항 없음 | 0옥텟 |
NCI_ANDROID_QUERY_POWER_SAVING_RSP
페이로드 필드 | 크기 | 값/설명 | |
---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. |
수동 관찰자 정지 알림
NFCC는 종료 프레임이 감지되면 호스트에 NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
알림을 전송하여 관찰 모드가 일시 중지되도록 해야 합니다.
NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
유형 | 1옥텟 | 프레임 유형: 0x00=Type-A, 0x01=Type-B | |||||
길이 | 1옥텟 | 값의 길이 (n) | |||||
값 | n옥텟 | 종료 프레임 항목과 일치하는 프레임을 수신했습니다. |
수동적 관찰자 재개 알림
NFCC는 제한 시간이나 기타 조건 후 수동 관찰자가 재개되면 호스트에 NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
알림을 전송해야 합니다.
NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
해당 사항 없음 | 0옥텟 |
폴링 루프 주석 명령어 가져오기
NFCC의 맞춤 폴링 프레임 테이블을 읽으려면 호스트가 NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
명령어를 사용할 수 있습니다. 이 명령어는 RFST_IDLE
에서만 전송할 수 있습니다. NFCC는 성공 또는 실패를 나타내는 상태 코드와 맞춤 폴링 프레임 정보가 포함된 NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
로 응답해야 합니다.
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
페이로드 필드 | 크기 | 값/설명 | |||||
---|---|---|---|---|---|---|---|
해당 사항 없음 | 0옥텟 |
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
페이로드 필드 | 크기 | 값/설명 | ||
---|---|---|---|---|
상태 | 1옥텟 | NCI 사양의 표 140에 있는 상태 코드를 참고하세요. | ||
RF 프레임 항목 수 | 1옥텟 | 팔로우할 항목 수 (n), 0~4. n=0이면 기능이 사용 중지됩니다. | ||
RF 프레임 항목 [1..n] | 2+x옥텟 | Qualifier-Type | 1옥텟 | 프레임 유형, 기술, 검색 루프의 위치를 정의합니다. |
길이 | 1옥텟 | 값 (x)의 길이입니다. | ||
값 | x옥텟 | 대기 시간 (1바이트) 및 RF 프레임 (1~16바이트) |
구현
참조 구현은 다음을 참고하세요.