Android 專屬 NCI 指令

NFC 控制器介面 (NCI) 用於與 NFC 控制器 (NFCC) 互動。本頁說明 Android 專屬 NCI 指令的規格。

NCI 定義

Android 專屬 NCI 指令會使用專屬群組 ID (GID) 0xF 和 Android 操作碼 ID (OID) 代碼空間 0xC

常見的封包格式

Android NCI 封包格式遵循 NCI 規格,使用專屬的 Group_ID 0xFOpcode_ID 0x0C 控制封包。對於每個 Android 專屬訊息,封包酬載的第一個位元組都必須設為 Android 運算碼 (0x0C)。Android 控制封包會使用 Message_TypePBF 來識別指令、回應和通知,這與標準指令類似。

下表顯示 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 操作碼 ID 列於下表。各個封包的規格會在後續章節中說明。

Android OID 訊息類型 訊息名稱
0x00 NCI_MT_CMD NCI_ANDROID_GET_CAPS_CMD
NCI_MT_RSP NCI_ANDROID_GET_CAPS_RSP
0x01 NCI_MT_CMD NCI_ANDROID_POWER_SAVING_CMD
NCI_MT_RSP NCI_ANDROID_POWER_SAVING_RSP
0x02 NCI_MT_CMD NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
NCI_MT_RSP NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
0x03 NCI_MT_NTF NCI_ANDROID_POLLING_FRAME_NTF
0x04 NCI_MT_CMD NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
NCI_MT_RSP NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP

取得功能指令

主機會使用 NCI_ANDROID_GET_CAPS_CMD 查詢 NFCC 支援的 Android 專屬功能清單。NCI_ANDROID_GET_CAPS_CMD 指令不會接收任何參數。

NFCC 必須傳回 NCI_ANDROID_GET_CAPS_RSP 回應,其中包含 STATUS_OK 狀態和支援的功能和功能清單。

如果 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)
Capabilities[0..n] (m + 2) * n 個八位元 支援的功能
類型 1 個八位元 能力的 ID
Len 1 個八位元 值的長度 (m)
m 個八位元 能力的值
Android 專屬功能
能力名稱 ID 大小 值/說明
觀察模式 0x00 1 八位元組 支援觀察模式。
0x00 (預設) - 不支援這項功能。
0x01 - 支援主機的 RF 停用功能 (Android 15 以上版本必備)。
所有其他值皆為 RFU。
輪詢影格通知 0x01 1 個八位元 支援輪詢影格通知。如果支援,則為 0x01;如果不支援,則為 0x00 (預設值)。所有其他值皆為 RFU。
省電模式 0x02 1 個八位元 支援省電模式。0x01 (如果支援的話);0x00 (預設) 表示不支援。所有其他值皆為 RFU。
Auotransact 輪詢迴圈篩選器 0x03 1 八位元組 支援韌體中的輪詢迴圈篩選器,以便在啟用全域觀察模式時,針對特定模式略過觀察模式。
0x00 (預設) - 不支援這項功能
0x01 - 支援輪詢迴圈篩選器
所有其他值皆為 RFU
0x04..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_NTFNCI_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

酬載欄位 大小 值/說明
意見調查資料 [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 個八位元 0x00 觀察模式已停用
0x01 已啟用觀察模式