Android 專屬 NCI 指令

近距離無線通訊控制器介面 (NCI) 用於與近距離無線通訊控制器 (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
0x05 NCI_MT_CMD NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
NCI_MT_RSP NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
0x06 NCI_MT_CMD NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
NCI_MT_RSP NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
0x07 NCI_MT_CMD NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
NCI_MT_RSP NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
0x08 NCI_MT_CMD NCI_ANDROID_BLANK_NCI_CMD
NCI_MT_RSP NCI_ANDROID_BLANK_NCI_RSP
0x09 NCI_MT_CMD NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
NCI_MT_RSP NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
0x0A NCI_MT_CMD NCI_ANDROID_QUERY_POWER_SAVING_CMD
NCI_MT_RSP NCI_ANDROID_QUERY_POWER_SAVING_RSP
0x0B NCI_MT_NTF NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
0x0C NCI_MT_NTF NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
0x0D NCI_MT_CMD NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
NCI_MT_RSP NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_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 octets

NCI_ANDROID_GET_CAPS_RSP

酬載欄位 大小 值/說明
狀態 1 個八位元 請參閱 NCI 規格的表 140 中的狀態碼。
Android_Version 2 個八位元 指出 NFCC 實作的 Android 規定版本。
0x0000 Android 15
功能數量 1 個八位元 支援的功能數量 (n)
功能 [0..n] (m + 2) * n 個八位元 支援的功能
類型 1 個八位元 功能的 ID
Len 1 個八位元 值的長度 (公尺)
m octets 功能價值
Android 專屬功能
功能名稱 ID 大小 值/說明
觀察模式 0x00 1 個八位元 支援觀察模式。
0x00 (預設) - 不支援這項功能。
0x01 - 支援主機停用射頻的功能 (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 個八位元 支援的離開影格項目數量。至少需要五個結束影格項目。
閱讀器模式註解 0x05 1 個八位元 支援閱讀器模式註解。
0x00 (預設) - 不支援這項功能。
0x01 - 支援這項功能。
其他值皆為 RFU。
0x06..0xFF 0 octets 保留供日後使用

省電指令

如要將 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

酬載欄位 大小 值/說明
Polling Data[0..n] (m +3) * n 個八位元 自上次通知以來收到的輪詢要求清單。每個結果都會顯示收到的要求類型 (技術),以及要求中可識別的資料 (視技術而定)。
類型 1 個八位元 請參閱影格類型
旗標 1 個八位元 請參閱「旗標位元組」。
長度 1 個八位元 輪詢資料報表的長度 (公尺),包括時間戳記和增益欄位。
時間戳記 4 octets 輪詢要求接收時間的時間戳記,以毫秒為單位,大端序。
增益 1 個八位元 輪詢要求的強度。
0xFF 表示值無法使用。
資料 m - 5 octets 傳回輪詢要求中可識別的資料
影格類型
輪詢影格 類型 大小 值/說明
遠端欄位 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 octets

NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP

酬載欄位 大小 值/說明
狀態 1 個八位元 請參閱 NCI 規格的表 140,瞭解狀態碼。
技術遮罩 1 個八位元 位元遮罩,指出已啟用哪些技術的觀察模式:
  • 位元 0:NFC-A
  • 位元 1:NFC-B
  • 位元 2:NFC-F
  • 位元 3:NFC-V

設定被動觀察者技術指令

如要設定被動觀察者技術,主機可以使用 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 個八位元 位元遮罩,指出要為哪些技術啟用觀察模式:
  • 位元 0:NFC-A
  • 位元 1:NFC-B
  • 位元 2:NFC-F
  • 位元 3:NFC-V
未在遮罩中設定的技術必須繼續以監聽模式運作。

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 個八位元 還原觀察模式的逾時時間 (毫秒,小端序)。
射頻訊框項目數量 1 個八位元 要追蹤的 RF 訊框項目欄位數量 (n)。0x00 會重設表格。
射頻訊框項目 [0..n] (2+x)*n octets
限定詞類型 1 個八位元 定義影格類型和比對選項。
值的長度 1 個八位元 「值」欄位的長度「x」。
x octets 電源狀態 (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 octets

NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP

酬載欄位 大小 值/說明
狀態 1 個八位元 請參閱 NCI 規格的表 140,瞭解狀態碼。

NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF

酬載欄位 大小 值/說明
觀察模式退出影格項目的數量 1 個八位元 要追蹤的觀察模式退出影格項目欄位數 (n)。
Entry [0..n] x+2 octets 限定符類型 (1)、長度 (1)、值 (x)。

空白 NCI 指令

如要將 NCI 設為空白,主機可以使用 NCI_ANDROID_BLANK_NCI_CMD 指令。NFCC 必須傳回 NCI_ANDROID_BLANK_NCI_RSP,並附上表示成功或失敗的狀態碼。

NCI_ANDROID_BLANK_NCI_CMD

酬載欄位 大小 值/說明
床架長度 1 個八位元 影格資料長度
Frame Data 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

酬載欄位 大小 值/說明
射頻訊框項目數量 1 個八位元 要追蹤的項目數 (n),介於 0 到 4 之間。如果 n=0,系統會停用這項功能。
RF 訊框項目 [1..n] 2+x octets
限定詞類型 1 個八位元 定義探索迴圈中的影格類型、技術和位置。
長度 1 個八位元 值的長度 (x)。
x octets 等待時間 (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 octets

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 octets

取得輪詢迴圈註解指令

如要讀取 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 octets

NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP

酬載欄位 大小 值/說明
狀態 1 個八位元 請參閱 NCI 規格的表 140,瞭解狀態碼。
射頻訊框項目數量 1 個八位元 要追蹤的項目數 (n),介於 0 到 4 之間。如果 n=0,系統會停用這項功能。
RF 訊框項目 [1..n] 2+x octets 限定詞類型 1 個八位元 定義探索迴圈中的影格類型、技術和位置。
長度 1 個八位元 值的長度 (x)。
x octets 等待時間 (1 個位元組) 和 RF 訊框 (1 到 16 個位元組)。

實作

如需參考實作方式,請參閱下列內容: