NFC 控制器介面 (NCI) 用於與 NFC 控制器 (NFCC) 互動。本頁說明 Android 專屬 NCI 指令的規格。
NCI 定義
Android 專屬 NCI 指令會使用專屬群組 ID (GID) 0xF
和 Android 操作碼 ID (OID) 代碼空間 0xC
。
常見的封包格式
Android NCI 封包格式遵循 NCI 規格,使用專屬的 Group_ID 0xF
和 Opcode_ID 0x0C
控制封包。對於每個 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 操作碼 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_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
酬載欄位 | 大小 | 值/說明 | |||||
---|---|---|---|---|---|---|---|
意見調查資料 [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 | 已啟用觀察模式 |