近距離無線通訊控制器介面 (NCI) 用於與近距離無線通訊控制器 (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。各封包的規格將在下節說明。
取得功能指令
主機會使用 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_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 個八位元 | 輪詢資料報表的長度 (公尺),包括時間戳記和增益欄位。 | |||||
時間戳記 | 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 個八位元 | 位元遮罩,指出已啟用哪些技術的觀察模式:
|
設定被動觀察者技術指令
如要設定被動觀察者技術,主機可以使用 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 個八位元 | 還原觀察模式的逾時時間 (毫秒,小端序)。 | |||||
射頻訊框項目數量 | 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 個位元組)。 |
實作
如需參考實作方式,請參閱下列內容: