Die NFC-Controller-Schnittstelle (NCI) wird für die Interaktion mit einem NFC-Controller (NFCC) verwendet. Auf dieser Seite werden die Spezifikationen der proprietären NCI-Befehle für Android beschrieben.
NCI-Definitionen
Die proprietären NCI-Befehle von Android verwenden die proprietäre Gruppen-ID (GID) 0xF
und den Android-Opcode-Identifikationscode (OID) 0xC
.
Gängiges Paketformat
Das Android-NCI-Paketformat entspricht der NCI-Spezifikation für Steuerpakete mit den proprietären Group_ID 0xF
- und Opcode_ID 0x0C
-Typen. Bei jeder proprietären Android-Nachricht muss das erste Byte der Paketnutzlast auf den Android-Opcode (0x0C
) gesetzt werden. Die Android-Kontrollpakete verwenden Message_Type
und PBF
, um Befehle, Antworten und Benachrichtigungen ähnlich wie Standardbefehle zu identifizieren.
Das Android-Paketformat ist in der folgenden Tabelle dargestellt:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
Reserviert für zukünftige Verwendung (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Die zugewiesenen Android-Opcode-IDs sind in der folgenden Tabelle aufgeführt. Die Spezifikation für jedes Paket folgt in den folgenden Abschnitten.
Android-OID | Mitteilungstyp | Name der Nachricht |
---|---|---|
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 |
Befehl zum Abrufen von Funktionen
Der Host verwendet NCI_ANDROID_GET_CAPS_CMD
, um die Liste der von der NFCC unterstützten proprietären Android-Funktionen abzufragen. Der Befehl NCI_ANDROID_GET_CAPS_CMD
akzeptiert keine Parameter.
Der NFCC muss mit der NCI_ANDROID_GET_CAPS_RSP
-Antwort mit dem Status STATUS_OK
und der Liste der unterstützten Funktionen antworten.
Wenn der NFCC NCI_ANDROID_GET_CAPS_CMD
nicht unterstützt, muss der Host davon ausgehen, dass die Funktionen jeweils den angegebenen Standardwert haben. Wenn eine angegebene Funktion vom NFCC nicht in der Antwort zurückgegeben wird, muss der Host davon ausgehen, dass die Funktion den angegebenen Standardwert hat.
NCI_ANDROID_GET_CAPS_CMD
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
– | 0 Oktette |
NCI_ANDROID_GET_CAPS_RSP
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
Status | 1 Oktett | Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation. | |||||
Android_Version
|
2 Oktette | Gibt die Version der Android-Anforderungen an, die vom NFCC implementiert wird. | |||||
0x0000 | Android 15 | ||||||
Anzahl der Funktionen | 1 Oktett | Anzahl (n) der unterstützten Funktionen | |||||
Capabilities[0..n] | (m + 2) * n Oktette | Unterstützte Funktionen | |||||
Eingeben | 1 Oktett | Die Kennung der Funktion | |||||
Len | 1 Oktett | Länge (m) des Werts | |||||
Wert | m Oktette | Der Wert der Funktion |
Proprietäre Android-Funktionen
Funktionsname | ID | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|---|
Beobachtungsmodus | 0x00 | 1 Oktett | Unterstützung für den Beobachtungsmodus
0x00 (Standardeinstellung): Diese Funktion wird nicht unterstützt. 0x01 – Unterstützt die Funktion mit RF-Deaktivierung vom Host (erforderlich für Android 15 oder höher). Alle anderen Werte sind „RFU“ (ohne Angabe). |
|||||
Benachrichtigung zum Abfrageframe | 0x01 | 1 Oktett | Unterstützung für Benachrichtigungen zu Polling-Frames. 0x01, wenn unterstützt, 0x00 (Standard), wenn nicht unterstützt. Alle anderen Werte sind frei wählbar. | |||||
Energiesparmodus | 0x02 | 1 Oktett | Unterstützung für den Energiesparmodus 0x01, wenn unterstützt, 0x00 (Standardeinstellung), wenn nicht unterstützt. Alle anderen Werte sind frei wählbar. | |||||
Filter für die Abfrageschleife von Autotransact | 0x03 | 1 Oktett | Unterstützung für Polling-Loop-Filter in der Firmware, um den Beobachtungsmodus für bestimmte Muster zu umgehen, wenn der Beobachtungsmodus global aktiviert ist.
0x00 (Standard): Diese Funktion wird nicht unterstützt. 0x01: Unterstützt Polling-Loop-Filter. Alle anderen Werte sind RFU. |
|||||
0x04..0xFF | 0 Oktette | Reserviert für zukünftige Verwendung |
Befehl zum Energiesparen
Um den NFCC in den Energiesparmodus zu versetzen, kann der Host den Befehl NCI_ANDROID_POWER_SAVING_CMD
verwenden. Die NFCC muss mit NCI_ANDROID_POWER_SAVING_RSP
antworten und einen Statuscode für Erfolg oder Fehler angeben.
Im Energiesparmodus darf der Host keinen Befehl an den NFCC senden und der NFCC darf keine Benachrichtigung oder Antwort an den Host senden. Die NFCC oder das eingebettete Secure Element (eSE) kann eingehende Zahlungsanfragen gemäß der festgelegten Routingkonfiguration automatisch akzeptieren, bevor der Energiesparmodus aktiviert wird.
Um zum Vollleistungsmodus zurückzukehren, kann der Host den NFCC zurücksetzen oder neu initialisieren.
NCI_ANDROID_POWER_SAVING_CMD
Nutzlastfelder | Größe | Wert/Beschreibung | |
---|---|---|---|
Energiesparmodus | 1 Oktett | 0x00 | Energiesparmodus deaktivieren |
0x01 | Energiesparmodus aktivieren |
NCI_ANDROID_POWER_SAVING_RSP
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
Status | 1 Oktett | Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation, |
Befehl für den Beobachtungsmodus festlegen
Zum Aktivieren oder Deaktivieren des Beobachtungsmodus kann der Host den Befehl NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
verwenden. Der NFCC muss mit NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
antworten und einen Statuscode für Erfolg oder Misserfolg angeben.
Wenn der Beobachtungsmodus deaktiviert ist, muss der NFCC die Standardaktivität im Modus „Lauschen“ gemäß der technischen Spezifikation für Aktivitäten implementieren.
Wenn der Beobachtungsmodus aktiv ist, darf der NFCC während der Polling-Schleife im Listenermodus nicht auf Polling-Anfragen antworten, es sei denn, er wurde vom Host ausdrücklich dazu autorisiert. Der NFCC muss die RF_FIELD_INFO_NTF
-Benachrichtigung (wie in Abschnitt 5.3 der NCI-Spezifikation definiert) senden, wenn er eine Feldaktivierung erkennt. Wenn die Erkennung des Polling-Modus aktiv ist, muss der NFCC die Polling-Aktivität gemäß der technischen Spezifikation für Aktivitäten implementieren.
Der NFCC kann die Umfrageinformationen im Cache speichern, um sofort mit der Geräteaktivierung fortzufahren, sobald der Beobachtungsmodus deaktiviert wird.
Der NFCC sollte den Beobachtungsmodus deaktivieren, wenn der Host aus irgendeinem Grund heruntergefahren wird (z. B. wenn der Akku leer ist oder der Nutzer den Vorgang initiiert hat), damit SE-Transaktionen fortgesetzt werden können.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Nutzlastfelder | Größe | Wert/Beschreibung | |
---|---|---|---|
Beobachtungsmodus | 1 Oktett | 0x00 | Beobachtungsmodus deaktivieren (Standardeinstellung) |
0x01 | Beobachtungsmodus aktivieren |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
Status | 1 Oktett | Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation. |
Benachrichtigung in Abfrageschleife
Der NFCC muss die NCI_ANDROID_POLLING_FRAME_NTF
-Benachrichtigung nach jedem Polling-Loop-Frame an den Host senden. Wenn die Benachrichtigungen RF_FIELD_INFO_NTF
und NCI_ANDROID_POLLING_FRAME_NTF
generiert werden, muss die NFCC nach RF_FIELD_INFO_NTF
NCI_ANDROID_POLLING_FRAME_NTF
senden.
Die NCI_ANDROID_POLLING_FRAME_NTF
-Benachrichtigung ist unabhängig davon, ob der Beobachtungsmodus aktiv ist oder nicht. Wenn der Beobachtungsmodus aktiv ist, muss der NFCC immer eine NCI_ANDROID_POLLING_FRAME_NTF
-Benachrichtigung senden, bevor die Transaktion fortgesetzt wird.
NCI_ANDROID_POLLING_FRAME_NTF
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
Umfragedaten[0..n] | (m + 3) * n Oktette | Liste der Abfrageanfragen, die seit der letzten Benachrichtigung eingegangen sind. Jedes Ergebnis enthält den Typ (Technologie) der empfangenen Anfragen und personenbezogene Daten aus der Anfrage, je nach Technologie. | |||||
Eingeben | 1 Oktett | Weitere Informationen finden Sie unter Frame-Typen. | |||||
Flaggen | 1 Oktett | Siehe Flag-Byte. | |||||
Länge | 1 Oktett | Länge (m) des Berichts zu Umfragedaten, einschließlich Zeitstempel- und Gewinnfeldern. | |||||
Zeitstempel | 4 Oktette | Zeitstempel des Empfangs der Abfrageanfragen in Millisekunden, Big-Endian-Format. | |||||
Verstärkung | 1 Oktett | Stärke der Polling-Anfrage.
0xFF gibt an, dass der Wert nicht verfügbar ist. |
|||||
Daten | m – 5 Oktette | Gibt die personenidentifizierbaren Daten zurück, die in der Abfrageanfrage enthalten sind. |
Frame-Typen
Polling-Frame | Eingeben | Größe | Wert/Beschreibung | |
---|---|---|---|---|
Remote-Feld | 0x00 | 1 Oktett | 0x00 | Feld deaktiviert |
0x01 | Feld ein | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n Oktette | Der Wert muss einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP) | |
NFC-B | 0x02 | n Oktette | Der Wert muss ein AIF-Byte und einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP). | |
NFC-F | 0x03 | n-Oktette | Der Wert muss einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP). | |
NFC-V | 0x04 | n Oktette | Der Wert muss einen ISO 14443-3-Befehl enthalten (z. B. REQ oder WUP). | |
Unbekannt | 0x07 | n Oktette | Frame-Rohdaten |
Definition des Flags-Byte
Flaggen | ||||||||
---|---|---|---|---|---|---|---|---|
B0 | b1 | b2 | b3 | b4 | B5 | B6 | b7 | |
0 | Kurzer Frame | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Langer Frame |
Befehl zum Abfragen des Status des Beobachtungsmodus
Um den aktuellen Status des passiven Bestellmodus abzurufen, kann der Host den Befehl NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
verwenden. Die NFCC muss mit NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
antworten und einen Statuscode angeben, der den Erfolg oder Fehler angibt.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
– | 0 Oktette |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Nutzlastfelder | Größe | Wert/Beschreibung | |
---|---|---|---|
Status | 1 Oktett | Siehe Statuscodes in Tabelle 140 der NCI-Spezifikation, | |
Beobachtungsmodus | 1 Oktett | 0x00 | Beobachtungsmodus deaktiviert |
0x01 | Beobachtungsmodus aktiviert |