Android 独自の NCI コマンド

NFC コントローラ インターフェース(NCI)は、NFC コントローラ(NFCC)との通信に使用されます。このページでは、Android 独自の NCI コマンドの仕様について説明します。

NCI の定義

Android 独自の NCI コマンドは、独自のグループ ID(GID)0xF と Android オペコード識別子(OID)コード空間 0xC を使用します。

共通のパケット形式

Android NCI のパケット形式は、独自の Group_ID 0xFOpcode_ID 0x0C を使用するコントロール パケットの NCI 仕様に準拠しています。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 オペコード識別子を下表に示します。各パケットの仕様は次のセクションで説明します。

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 オクテット サポートされている機能の数
機能 [0..n] (m + 2) * n オクテット サポートされている機能
タイプ 1 オクテット 機能の識別子
長さ 1 オクテット 値の長さ(m)
m オクテット 機能の値
Android 独自の機能
機能名 ID サイズ 値 / 説明
観察モード 0x00 1 オクテット 観察モードのサポート。
0x00(デフォルト)- この機能をサポートしていません。
0x01 - ホストからの RF 無効化でこの機能をサポートします(Android 15 以降が必要)。
他の値はすべて RFU です。
ポーリング フレーム通知 0x01 1 オクテット ポーリング フレーム通知のサポート。サポートされている場合は 0x01、サポートされていない場合は 0x00(デフォルト)。他の値はすべて RFU です。
省電力モード 0x02 1 オクテット 省電力モードのサポート。サポートされている場合は 0x01、サポートされていない場合は 0x00(デフォルト)。他の値はすべて RFU です。
自動トランザクション ポーリング ループ フィルタ 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 観察モード有効