Interfejs kontrolera NFC (NCI) służy do interakcji z kontrolerem NFC (NFCC). Na tej stronie opisujemy specyfikacje zastrzeżonych poleceń NCI Androida.
Definicje NCI
Proprietary commands Android NCI używają zastrzeżonego identyfikatora grupy (GID) 0xF
i przestrzeni kodowej identyfikatora kodu operacji (OID) Androida 0xC
.
Wspólny format pakietu
Format pakietu NCI na Androidzie jest zgodny ze specyfikacją NCI dotyczącą pakietów sterujących
z użyciem zastrzeżonych wartości Group_ID 0xF
i Opcode_ID 0x0C
. W przypadku każdego zastrzeżonego komunikatu Androida pierwszy bajt ładunku pakietu musi być ustawiony na kod operacji Androida (0x0C
). Pakiety sterujące Androida używają kodów Message_Type
i PBF
do identyfikowania poleceń, odpowiedzi i powiadomień podobnie jak standardowe polecenia.
Format pakietu Androida jest przedstawiony w tej tabeli:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
zarezerwowany do użycia w przyszłości (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
Przypisane identyfikatory kodów operacji na Androidzie są wymienione w tej tabeli. Specyfikacje poszczególnych pakietów znajdziesz w dalszej części tego artykułu.
Polecenie pobierania funkcji
Host używa NCI_ANDROID_GET_CAPS_CMD
do wysyłania zapytań o listę funkcji zastrzeżonych Androida obsługiwanych przez NFCC. Polecenie NCI_ANDROID_GET_CAPS_CMD
nie przyjmuje żadnych parametrów.
NFCC musi odpowiedzieć komunikatem NCI_ANDROID_GET_CAPS_RSP
ze stanem STATUS_OK
oraz listą obsługiwanych funkcji.
Jeśli NFCC nie obsługuje NCI_ANDROID_GET_CAPS_CMD
, host musi założyć, że każda funkcja przyjmuje domyślną określoną wartość. Jeśli określona funkcja nie zostanie zwrócona przez NFCC w odpowiedzi, host musi założyć, że ma ona domyślną określoną wartość.
NCI_ANDROID_GET_CAPS_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_GET_CAPS_RSP
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. | |||||
Android_Version
|
2 oktety | Określa wersję wymagań Androida, która jest zaimplementowana przez NFCC. | |||||
0x0000 | Android 15 | ||||||
Liczba funkcji | 1 oktet | Liczba (n) obsługiwanych funkcji | |||||
Capabilities[0..n] | (m + 2) * n oktetów | Obsługiwane funkcje | |||||
Typ | 1 oktet | Identyfikator funkcji | |||||
Len | 1 oktet | Długość (m) wartości | |||||
Wartość | m oktetów | Wartość funkcji |
Funkcje zastrzeżone Androida
Nazwa funkcji | ID | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|---|
Tryb obserwacji | 0x00 | 1 oktet | Obsługa trybu obserwacji.
0x00 (domyślnie) – nie obsługuje tej funkcji. 0x01 – obsługuje funkcję z dezaktywacją RF z urządzenia hosta (wymagane w przypadku Androida 15). 0x02 – obsługuje funkcję bez dezaktywacji RF z poziomu hosta (wymagane w przypadku Androida 16 i nowszych). Wszystkie pozostałe wartości są zarezerwowane do wykorzystania w przyszłości. |
|||||
Powiadomienie o ramce odpytywania | 0x01 | 1 oktet | Obsługa powiadomień o ramkach odpytywania. 0x01, jeśli jest obsługiwany, 0x00 (domyślnie), jeśli nie jest obsługiwany. Wszystkie inne wartości są zarezerwowane do wykorzystania w przyszłości. | |||||
Tryb oszczędzania energii | 0x02 | 1 oktet | Obsługa trybu oszczędzania energii. 0x01, jeśli jest obsługiwany, 0x00 (domyślnie), jeśli nie jest obsługiwany. Wszystkie inne wartości są zarezerwowane do wykorzystania w przyszłości. | |||||
Filtr pętli odpytywania Auotransact | 0x03 | 1 oktet | Obsługa filtrów pętli odpytywania w oprogramowaniu sprzętowym, aby w przypadku określonych wzorców obejść tryb obserwacji, gdy jest on włączony globalnie.
0x00 (domyślnie) – nie obsługuje tej funkcji 0x01 – obsługuje filtry pętli odpytywania Wszystkie inne wartości są zarezerwowane do przyszłego użytku. |
|||||
Liczba obsługiwanych wpisów klatek wyjściowych | 0x04 | 1 oktet | Liczba obsługiwanych wpisów w klatce wyjściowej. Wymaganych jest co najmniej 5 pozycji ramki wyjścia. | |||||
Adnotacja w trybie czytnika | 0x05 | 1 oktet | Obsługa adnotacji w trybie czytnika.
0x00 (domyślnie) – nie obsługuje tej funkcji. 0x01 – obsługuje tę funkcję. Wszystkie pozostałe wartości są zarezerwowane do wykorzystania w przyszłości. |
|||||
0x06..0xFF | 0 oktetów | Zarezerwowany do użycia w przyszłości |
Polecenie oszczędzania energii
Aby przełączyć NFCC w tryb oszczędzania energii, host może użyć polecenia NCI_ANDROID_POWER_SAVING_CMD
. NFCC musi odpowiedzieć kodem stanu NCI_ANDROID_POWER_SAVING_RSP
wskazującym powodzenie lub niepowodzenie.
W trybie oszczędzania energii host nie może wysyłać żadnych poleceń do kontrolera NFCC, a kontroler NFCC nie może wysyłać do hosta żadnych powiadomień ani odpowiedzi. NFCC lub wbudowany bezpieczny element (eSE) mogą automatycznie akceptować przychodzące prośby o płatność zgodnie z konfiguracją routingu ustawioną przed włączeniem trybu oszczędzania energii.
Aby powrócić do trybu pełnej mocy, host może zresetować lub ponownie zainicjować NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Tryb oszczędzania energii | 1 oktet | 0x00 | Wyłączanie trybu oszczędzania energii |
0x01 | Włączanie trybu oszczędzania energii |
NCI_ANDROID_POWER_SAVING_RSP
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Ustawianie polecenia trybu obserwacji
Aby włączyć lub wyłączyć tryb obserwatora, gospodarz może użyć polecenia NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. NFCC musi odpowiedzieć kodem stanu NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
wskazującym powodzenie lub niepowodzenie.
Gdy tryb obserwacji jest wyłączony, kontroler NFCC musi realizować standardową aktywność trybu nasłuchiwania zgodnie ze specyfikacją techniczną aktywności.
Gdy tryb obserwacji jest aktywny, kontroler NFCC nie może odpowiadać na żadne żądania sondowania podczas pętli sondowania w trybie nasłuchiwania, dopóki nie zostanie wyraźnie upoważniony przez hosta.
Gdy NFCC wykryje aktywację pola, musi wysłać powiadomienie RF_FIELD_INFO_NTF
(zgodnie z sekcją 5.3 specyfikacji NCI). Jeśli wykrywanie w trybie odpytywania jest aktywne, NFCC musi implementować aktywność w trybie odpytywania zgodnie ze specyfikacją techniczną aktywności.
NFCC może buforować informacje o sondowaniu, aby natychmiast przystąpić do aktywacji urządzenia po wyłączeniu trybu obserwacji.
Kontroler NFCC powinien wyłączyć tryb obserwacji, jeśli host zostanie wyłączony z jakiegokolwiek powodu (np. z powodu wyczerpania baterii lub na skutek działania użytkownika), aby można było przeprowadzać transakcje z użyciem SE.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
tryb obserwacji, | 1 oktet | 0x00 | Wyłącz tryb obserwacji (domyślny) |
0x01 | Włącz tryb obserwacji |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Powiadomienie o pętli odpytywania
Po każdej ramce pętli odpytywania NFCC musi wysłać powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
do hosta. Gdy generowane są powiadomienia RF_FIELD_INFO_NTF
i NCI_ANDROID_POLLING_FRAME_NTF
, NFCC musi wysłać RF_FIELD_INFO_NTF
po RF_FIELD_INFO_NTF
.NCI_ANDROID_POLLING_FRAME_NTF
Powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
jest niezależne od tego, czy tryb obserwacji jest aktywny. Gdy tryb obserwacji jest aktywny, kontroler NFCC musi zawsze wysyłać powiadomienie NCI_ANDROID_POLLING_FRAME_NTF
przed kontynuowaniem transakcji.
NCI_ANDROID_POLLING_FRAME_NTF
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m +3) * n oktetów | Lista żądań odpytywania otrzymanych od ostatniego powiadomienia. Każdy wynik zawiera typ (technologię) otrzymanych żądań i dane umożliwiające identyfikację z żądania w zależności od technologii. | |||||
Typ | 1 oktet | Zobacz typy ramek. | |||||
Flagi | 1 oktet | Zobacz bajt flagi. | |||||
Długość | 1 oktet | Długość (w metrach) raportu z danymi z odpytywania, w tym pola sygnatury czasowej i wzmocnienia. | |||||
Sygnatura czasowa | 4 oktety | Sygnatura czasowa (w milisekundach) otrzymania żądań sondowania, big endian. | |||||
Zysk | 1 oktet | Siła żądania sondowania.
0xFF oznacza, że wartość jest niedostępna. |
|||||
Dane | m – 5 oktetów | Zwraca dane umożliwiające identyfikację obecne w żądaniu sondowania. |
Typy ramek
Ramka sondowania | Typ | Rozmiar | Wartość/Opis | |
---|---|---|---|---|
Pole zdalne | 0x00 | 1 oktet | 0x00 | Pole wyłączone |
0x01 | Pole włączone | |||
0x02..0xFF | RFU | |||
NFC-A | 0x01 | n oktetów | Wartość musi zawierać polecenie ISO 14443-3 (np. REQ lub WUP). | |
NFC-B | 0x02 | n oktetów | Wartość musi zawierać bajt AIF i polecenie ISO 14443-3 (np. REQ lub WUP). | |
NFC-F | 0x03 | n oktetów | Wartość musi zawierać polecenie ISO 14443-3 (np. REQ lub WUP). | |
NFC-V | 0x04 | n oktetów | Wartość musi zawierać polecenie ISO 14443-3 (np. REQ lub WUP). | |
Nieznane | 0x07 | n oktetów | Nieprzetworzone dane klatek |
Definicja bajtu flagi
Flagi | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | Krótka ramka | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Długa ramka |
Zapytanie o stan trybu obserwacji
Aby uzyskać bieżący stan pasywnego trybu zamówień, gospodarz może użyć polecenia NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. NFCC musi odpowiedzieć kodem NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
ze statusem wskazującym powodzenie lub niepowodzenie.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. | |
Maska technologiczna | 1 oktet | Maska bitowa wskazująca, dla których technologii włączony jest tryb obserwacji:
|
Ustawianie polecenia technologii pasywnego obserwatora
Aby ustawić technologie pasywnego obserwatora, host może użyć polecenia NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
. To polecenie włącza lub wyłącza tryb obserwacji w przypadku określonych technologii bez konieczności używania RF_DEACTIVATE_CMD
. NFCC musi odpowiedzieć kodem stanu NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
wskazującym powodzenie lub niepowodzenie.
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Maska technologiczna | 1 oktet | Maska bitowa wskazująca, dla których technologii włączyć tryb obserwacji:
|
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Ustawianie polecenia ramki wyjścia pasywnego obserwatora
Aby skonfigurować tabelę ramek wyjścia trybu obserwacji, gospodarz może użyć polecenia NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. To polecenie
określa ramki RF, które powodują wyjście z trybu obserwacji. To polecenie można wysłać tylko w RFST_IDLE
. NFCC musi odpowiedzieć kodem stanu NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
wskazującym powodzenie lub niepowodzenie.
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Więcej | 1 oktet | 0x00 – ostatnia wiadomość 0x01 – kolejne wiadomości |
|||||
Przekroczony limit czasu | 2 oktety | Limit czasu w milisekundach na przywrócenie trybu obserwacji (little endian). | |||||
Liczba wpisów w sekcji RF Frame | 1 oktet | Liczba pól wprowadzania ramek RF do sprawdzenia (n). Wartość 0x00 resetuje tabelę. | |||||
Wpis ramki RF [0..n] | (2+x)*n oktetów | ||||||
Qualifier-Type | 1 oktet | Określa typ ramki i opcje dopasowywania. | |||||
Długość wartości | 1 oktet | Długość „x” pola Wartość. | |||||
Wartość | x oktetów | Stan zasilania (1), dane referencyjne (n), maska (n). 1 <= n <= 16. |
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Pobieranie polecenia klatki wyjściowej pasywnego obserwatora
Aby pobrać bieżącą konfigurację tabeli ramek wyjścia z trybu obserwacji, host może użyć polecenia NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. NFCC musi odpowiedzieć NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
, a następnie NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
.
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Liczba wpisów klatek wyjścia z trybu obserwacji | 1 oktet | Liczba pól wprowadzania klatek wyjścia z trybu obserwacji (n). | |
Wpis [0..n] | x+2 octets | Kwalifikator-Typ (1), Długość (1), Wartość (x). |
Puste polecenie NCI
Aby wyczyścić NCI, host może użyć polecenia NCI_ANDROID_BLANK_NCI_CMD
. NFCC musi odpowiedzieć kodem NCI_ANDROID_BLANK_NCI_RSP
ze statusem wskazującym powodzenie lub niepowodzenie.
NCI_ANDROID_BLANK_NCI_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Długość ramy | 1 oktet | Długość danych klatki | |||||
Dane ramki | n oktetów | Dane klatki |
NCI_ANDROID_BLANK_NCI_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Ustawianie polecenia adnotacji pętli sondowania
Aby ustawić adnotację pętli odpytywania, gospodarz może użyć polecenia NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
, aby wypełnić tabelę niestandardowej ramki odpytywania. Ta tabela definiuje niestandardowe ramki RF, które mają być wstawiane w standardowej pętli wykrywania. To polecenie można wysłać tylko w RFST_IDLE
. NFCC musi odpowiedzieć kodem NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
ze statusem wskazującym powodzenie lub niepowodzenie.
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
Pola ładunku | Rozmiar | Wartość/opis | ||
---|---|---|---|---|
Liczba wpisów klatek RF | 1 oktet | Liczba wpisów do śledzenia (n) z zakresu od 0 do 4. n=0 wyłącza tę funkcję. | ||
Wpis klatki RF [1..n] | 2+x oktetów | |||
Qualifier-Type | 1 oktet | Określa typ ramki, technologię i pozycję w pętli odkrywania. | ||
Długość | 1 oktet | Długość wartości (x). | ||
Wartość | x oktetów | Czas oczekiwania (1 bajt) i ramka RF (1–16 bajtów). |
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Zapytanie o polecenie oszczędzania energii
Aby wysłać zapytanie o tryb oszczędzania energii, host może użyć polecenia NCI_ANDROID_QUERY_POWER_SAVING_CMD
. NFCC musi odpowiedzieć kodem stanu NCI_ANDROID_QUERY_POWER_SAVING_RSP
wskazującym, czy operacja się powiodła, czy nie.
NCI_ANDROID_QUERY_POWER_SAVING_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_QUERY_POWER_SAVING_RSP
Pola ładunku | Rozmiar | Wartość/opis | |
---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. |
Powiadomienie o zawieszeniu pasywnego obserwatora
Gdy zostanie wykryta ramka wyjścia, NFCC musi wysłać NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
powiadomienie
do hosta, co spowoduje zawieszenie trybu obserwacji.
NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Typ | 1 oktet | Typ ramki: 0x00=Typ A, 0x01=Typ B | |||||
Długość | 1 oktet | Długość wartości (n) | |||||
Wartość | n oktetów | Otrzymano ramkę, która pasuje do wpisu ramki wyjściowej. |
Powiadomienie o wznowieniu pasywnego obserwatora
Gdy po upływie limitu czasu lub w innych okolicznościach wznowi się działanie pasywnego obserwatora, NFCC musi wysłać do hosta NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
powiadomienie.
NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
Pobieranie polecenia adnotacji pętli sondowania
Aby odczytać tabelę niestandardowych ramek odpytywania NFCC, host może użyć polecenia NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
. To polecenie można wysłać tylko w RFST_IDLE
. NFCC musi odpowiedzieć NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
z kodem stanu wskazującym powodzenie lub niepowodzenie oraz informacjami o niestandardowej ramce odpytywania.
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
Pola ładunku | Rozmiar | Wartość/opis | |||||
---|---|---|---|---|---|---|---|
Nie dotyczy | 0 oktetów |
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
Pola ładunku | Rozmiar | Wartość/opis | ||
---|---|---|---|---|
Stan | 1 oktet | Kody stanu znajdziesz w tabeli 140 w specyfikacji NCI. | ||
Liczba wpisów klatek RF | 1 oktet | Liczba wpisów do śledzenia (n) z zakresu od 0 do 4. n=0 wyłącza tę funkcję. | ||
Wpis klatki RF [1..n] | 2+x oktetów | Qualifier-Type | 1 oktet | Określa typ ramki, technologię i pozycję w pętli odkrywania. |
Długość | 1 oktet | Długość wartości (x). | ||
Wartość | x oktetów | Czas oczekiwania (1 bajt) i ramka RF (1–16 bajtów). |
Implementacja
Przykłady implementacji znajdziesz w tych materiałach: