Die NFC-Controller-Schnittstelle (NFC Controller Interface, NCI) wird für die Interaktion mit einem NFC-Controller (Near Field Communication Controller, NFC-Kontroller) verwendet. Auf dieser Seite werden die Spezifikationen der proprietären NCI-Befehle von 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 | Nachrichtentyp | 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 „Get capabilities“
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
nimmt keine Parameter an.
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 frei wählbar. |
|||||
Benachrichtigung zum Polling-Frame | 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“ (Standard), wenn nicht unterstützt. Alle anderen Werte sind frei wählbar. | |||||
Filter für Autotransact-Polling-Schleife | 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. Der NFCC muss mit NCI_ANDROID_POWER_SAVING_RSP
antworten und einen Statuscode für Erfolg oder Fehler angeben.
Im Energiesparmodus darf der Host keine Befehle an den NFCC senden und der NFCC darf keine Benachrichtigungen oder Antworten an den Host senden. Der NFCC oder das eingebettete Secure Element (eSE) kann eingehende Zahlungsanfragen automatisch gemäß der Routingkonfiguration akzeptieren, die vor dem Aktivieren des Energiesparmodus festgelegt wurde.
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
Der Host kann den Befehl NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
verwenden, um den Beobachtungsmodus zu aktivieren oder zu deaktivieren. 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. Akku leer oder vom Nutzer initiierter Herunterfahrvorgang), damit SE-Transaktionen fortgesetzt werden können.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Nutzlastfelder | Größe | Wert/Beschreibung | |
---|---|---|---|
Beobachtungsmodus | 1 Oktett | 0x00 | Beobachtungsmodus deaktivieren (Standard) |
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 zur Polling-Schleife
Der NFCC muss die NCI_ANDROID_POLLING_FRAME_NTF
-Benachrichtigung nach jedem Polling-Loop-Frame an den Host senden. Wenn sowohl die RF_FIELD_INFO_NTF
- als auch die NCI_ANDROID_POLLING_FRAME_NTF
-Benachrichtigungen generiert werden, muss der NFCC NCI_ANDROID_POLLING_FRAME_NTF
nach RF_FIELD_INFO_NTF
senden.
Die NCI_ANDROID_POLLING_FRAME_NTF
-Benachrichtigung wird unabhängig davon angezeigt, 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 mit der Transaktion fortgefahren wird.
NCI_ANDROID_POLLING_FRAME_NTF
Nutzlastfelder | Größe | Wert/Beschreibung | |||||
---|---|---|---|---|---|---|---|
Umfragen[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 ggf. identifizierbare Daten aus der Anfrage. | |||||
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 Polling-Anfragen 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 | Rohdaten des Frames |
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 |