La interfaz del controlador NFC (NCI) se usa para interactuar con un controlador NFC (NFCC). En esta página, se describen las especificaciones de los comandos de NCI propietarios de Android.
Definiciones del NCI
Los comandos de NCI propietarios de Android usan el ID de grupo (GID) propietario 0xF
y el espacio de código del identificador de opcode (OID) de Android 0xC
.
Formato de paquete común
El formato de paquetes de la NCI de Android sigue la especificación de la NCI para los paquetes de control con los elementos Group_ID 0xF
y Opcode_ID 0x0C
propietarios. Para cada mensaje propietario de Android, el primer byte de la carga útil del paquete debe establecerse en el código de operación de Android (0x0C
). Los paquetes de control de Android usan Message_Type
y PBF
para identificar comandos, respuestas y notificaciones de manera similar a los comandos estándar.
El formato de paquetes de Android se muestra en la siguiente tabla:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Message_Type
|
PBF
|
Group_ID = 0xF (PROPRIETARY)
|
|||||
reservado para uso futuro (RFU) | Opcode_ID = 0x0C (ANDROID)
|
||||||
Payload_Length
|
|||||||
Android_Opcode_ID
|
|||||||
Android_Payload
|
|||||||
En la siguiente tabla, se indican los identificadores de opcode de Android asignados. La especificación de cada paquete se incluye en las siguientes secciones.
Comando Get capabilities
El host usa NCI_ANDROID_GET_CAPS_CMD
para consultar la lista de funciones exclusivas de Android compatibles con el NFCC. El comando NCI_ANDROID_GET_CAPS_CMD
no toma ningún parámetro.
El NFCC debe responder con la respuesta NCI_ANDROID_GET_CAPS_RSP
con un estado de STATUS_OK
y la lista de capacidades y funciones compatibles.
Si el NFCC no admite NCI_ANDROID_GET_CAPS_CMD
, el host debe suponer que cada capacidad toma el valor predeterminado especificado. Si el NFCC no devuelve una capacidad especificada en la respuesta, el host debe suponer que la capacidad tiene el valor predeterminado especificado.
NCI_ANDROID_GET_CAPS_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_CAPS_RSP
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. | |||||
Android_Version
|
2 octetos | Identifica la versión de los requisitos de Android que implementa el NFCC. | |||||
0x0000 | Android 15 | ||||||
Cantidad de funciones | 1 octeto | Cantidad (n) de capacidades admitidas | |||||
Capabilities[0..n] | (m + 2) * n octetos | Funciones compatibles | |||||
Tipo | 1 octeto | Es el identificador de la capacidad. | |||||
Len | 1 octeto | Longitud (m) del valor | |||||
Valor | m octetos | El valor de la capacidad |
Capacidades exclusivas de Android
Nombre de la capacidad | ID | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|---|
Modo de observación | 0x00 | 1 octeto | Se agregó compatibilidad con el modo de observación.
0x00 (valor predeterminado): No admite esta función. 0x01: Admite la función con desactivación de RF desde el host (obligatorio para Android 15). 0x02: Admite la función sin desactivación de RF desde el host (obligatorio para Android 16 y versiones posteriores). Todos los demás valores son RFU. |
|||||
Notificación de fotograma de votación | 0x01 | 1 octeto | Se agregó compatibilidad con las notificaciones de marcos de sondeo. 0x01 si se admite, 0x00 (predeterminado) si no se admite. Todos los demás valores son RFU. | |||||
Modo de ahorro de energía | 0x02 | 1 octeto | Se agregó compatibilidad con el modo de ahorro de energía. 0x01 si se admite, 0x00 (predeterminado) si no se admite. Todos los demás valores son RFU. | |||||
Filtro de bucle de sondeo de Autotransact | 0x03 | 1 octeto | Se agregó compatibilidad con los filtros de bucle de sondeo en el firmware para omitir el modo de observación en patrones específicos cuando el modo de observación está habilitado de forma global.
0x00 (predeterminado): No admite esta función 0x01: Admite filtros de bucle de sondeo Todos los demás valores son RFU |
|||||
Cantidad de entradas de fotogramas de salida admitidas | 0x04 | 1 octeto | Cantidad de entradas de fotogramas de salida admitidas. Se requiere un mínimo de cinco entradas de fotograma de salida. | |||||
Anotación del modo de lectura | 0x05 | 1 octeto | Se agregó compatibilidad con la anotación del modo de lectura.
0x00 (valor predeterminado): No admite esta función. 0x01: Admite esta función. Todos los demás valores son RFU. |
|||||
0x06 a 0xFF | 0 octetos | Reservado para uso futuro |
Comando de ahorro de energía
Para que el NFCC pase al modo de ahorro de energía, el host puede usar el comando NCI_ANDROID_POWER_SAVING_CMD
. El NFCC debe responder con NCI_ANDROID_POWER_SAVING_RSP
y un código de estado que indique éxito o falla.
Mientras está en modo de ahorro de energía, el host no debe enviar ningún comando al NFCC, y el NFCC no debe enviar ninguna notificación ni respuesta al host. El NFCC o el elemento seguro integrado (eSE) pueden aceptar automáticamente las solicitudes de pago entrantes según la configuración de enrutamiento establecida antes de habilitar el modo de ahorro de energía.
Para volver al modo de máxima potencia, el host puede restablecer o reinicializar el NFCC.
NCI_ANDROID_POWER_SAVING_CMD
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Modo de ahorro de energía | 1 octeto | 0x00 | Inhabilita el modo de ahorro de energía |
0x01 | Cómo habilitar el modo de ahorro de energía |
NCI_ANDROID_POWER_SAVING_RSP
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Comando para establecer el modo de observación
Para activar o desactivar el modo de observación, el organizador puede usar el comando NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
. El NFCC debe responder con NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
y un código de estado que indique éxito o falla.
Cuando el modo de observación está inhabilitado, el NFCC debe implementar la actividad del modo de escucha estándar según la Especificación Técnica de Actividad.
Cuando el modo de observación está activo, el NFCC no debe responder a ninguna solicitud de sondeo durante el bucle de sondeo en el modo de escucha, hasta que el host lo autorice de forma explícita.
El NFCC debe enviar la notificación RF_FIELD_INFO_NTF
(según se define en la sección 5.3 de la especificación de NCI) cuando detecte la activación del campo. Si la detección del modo de sondeo está activa, el NFCC debe implementar la actividad del modo de sondeo según la Especificación Técnica de Actividad.
El NFCC puede almacenar en caché la información de la sondeo para proceder de inmediato con la activación del dispositivo en cuanto se desactiva el modo de observación.
El NFCC debe desactivar el modo de observación si el host se apaga por algún motivo (por ejemplo, si se agota la batería o el usuario inicia el apagado) para que se puedan realizar las transacciones con SE.
NCI_ANDROID_PASSIVE_OBSERVE_MODE_CMD
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Modo de observación | 1 octeto | 0x00 | Inhabilita el modo de observación (opción predeterminada) |
0x01 | Cómo habilitar el modo de observación |
NCI_ANDROID_PASSIVE_OBSERVE_MODE_RSP
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Notificación de bucle de sondeo
El NFCC debe enviar la notificación NCI_ANDROID_POLLING_FRAME_NTF
al host después de cada fotograma del bucle de sondeo. Cuando se generan las notificaciones de RF_FIELD_INFO_NTF
y NCI_ANDROID_POLLING_FRAME_NTF
, el NFCC debe enviar NCI_ANDROID_POLLING_FRAME_NTF
después de RF_FIELD_INFO_NTF
.
La notificación NCI_ANDROID_POLLING_FRAME_NTF
es independiente de si el modo de observación está activo o no. Cuando el modo de observación está activo, el NFCC siempre debe enviar una notificación de NCI_ANDROID_POLLING_FRAME_NTF
antes de continuar con la transacción.
NCI_ANDROID_POLLING_FRAME_NTF
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Polling Data[0..n] | (m + 3) * n octetos | Es la lista de solicitudes de sondeo recibidas desde la última notificación. Cada resultado proporciona el tipo (tecnología) de las solicitudes recibidas y los datos identificables de la solicitud según la tecnología. | |||||
Tipo | 1 octeto | Consulta los tipos de marcos. | |||||
Marcas | 1 octeto | Consulta byte de marcas. | |||||
Longitud | 1 octeto | Longitud (m) del informe de datos de sondeo, incluidos los campos de marca de tiempo y ganancia. | |||||
Marca de tiempo | 4 octetos | Es la marca de tiempo medida en milisegundos de la recepción de las solicitudes de sondeo, big endian. | |||||
Ganancia | 1 octeto | Es la intensidad de la solicitud de sondeo.
0xFF indica que el valor no está disponible. |
|||||
Datos | m - 5 octetos | Devuelve los datos identificables presentes en la solicitud de sondeo. |
Tipos de fotogramas
Marco de sondeo | Tipo | Tamaño | Valor/Descripción | |
---|---|---|---|---|
Campo remoto | 0x00 | 1 octeto | 0x00 | Campo desactivado |
0x01 | Campo activado | |||
0x02 a 0xFF | RFU | |||
NFC-A | 0x01 | n octetos | El valor debe incluir un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
NFC-B | 0x02 | n octetos | El valor debe incluir un byte de AIF y un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
NFC-F | 0x03 | n octetos | El valor debe incluir un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
NFC-V | 0x04 | n octetos | El valor debe incluir un comando ISO 14443-3 (por ejemplo, REQ o WUP). | |
Desconocido | 0x07 | n octetos | Datos de fotogramas sin procesar |
Definición de byte de marcas
Marcas | ||||||||
---|---|---|---|---|---|---|---|---|
b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | |
0 | Soporte corto | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
1 | Marco largo |
Comando de estado del modo de observación de la consulta
Para recuperar el estado actual del modo de pedido pasivo, el host puede usar el comando NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
. El NFCC debe responder con NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
y un código de estado que indique si la operación se realizó correctamente o no.
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_QUERY_PASSIVE_OBSERVER_STATUS_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. | |
Máscara de tecnología | 1 octeto | Máscara de bits que indica para qué tecnologías está habilitado el modo de observación:
|
Comando para establecer tecnologías de observador pasivo
Para establecer tecnologías de observación pasiva, el host puede usar el comando NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
. Este comando habilita o inhabilita el modo de observación para las tecnologías especificadas sin necesidad de RF_DEACTIVATE_CMD
. El NFCC debe responder con NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
y un código de estado que indique éxito o falla.
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Máscara de tecnología | 1 octeto | Máscara de bits que indica para qué tecnologías se debe habilitar el modo de observación:
|
NCI_ANDROID_SET_PASSIVE_OBSERVER_TECH_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Establece el comando de fotograma de salida del observador pasivo
Para configurar la tabla de fotogramas de salida del modo de observación, el host puede usar el comando NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. Este comando especifica los fotogramas de RF que activan la salida del modo de observación. Este comando solo se puede enviar en RFST_IDLE
. La NFCC debe responder con NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
y un código de estado que indique éxito o falla.
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Más | 1 octeto | 0x00: Último mensaje 0x01: Habrá más mensajes |
|||||
Se agotó el tiempo de espera | 2 octetos | Es el tiempo de espera en ms para restablecer el modo de observación (little endian). | |||||
Cantidad de entradas de RF Frame | 1 octeto | Cantidad de campos de entrada de RF Frame que se deben seguir (n). 0x00 restablece la tabla. | |||||
Entrada de trama de RF [0..n] | (2 + x) octetos | ||||||
Qualifier-Type | 1 octeto | Define el tipo de fotograma y las opciones de coincidencia. | |||||
Longitud del valor | 1 octeto | Longitud "x" del campo Value. | |||||
Valor | Octetos de X | Estado de energía (1), datos de referencia (n), máscara (n). 1 <= n <= 16 |
NCI_ANDROID_SET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Obtén el comando de fotograma de salida del observador pasivo
Para recuperar la configuración actual de la tabla de fotogramas de salida del modo de observación, el host puede usar el comando NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
. El NFCC debe responder con NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
, seguido de NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
.
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
NCI_ANDROID_GET_PASSIVE_OBSERVER_EXIT_FRAME_NTF
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Cantidad de entradas de fotogramas de salida del modo de observación | 1 octeto | Es la cantidad de campos de entrada de fotogramas de salida del modo de observación que se deben seguir (n). | |
Entrada [0..n] | x + 2 octetos | Qualifier-Type (1), Length (1), Value (x). |
Comando de NCI en blanco
Para dejar en blanco la NCI, el host puede usar el comando NCI_ANDROID_BLANK_NCI_CMD
. El NFCC debe responder con NCI_ANDROID_BLANK_NCI_RSP
y un código de estado que indique si la operación se realizó correctamente o no.
NCI_ANDROID_BLANK_NCI_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Longitud del armazón | 1 octeto | Longitud de los datos del fotograma | |||||
Datos de fotogramas | n octetos | Datos de fotogramas |
NCI_ANDROID_BLANK_NCI_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Establece el comando de anotación del bucle de sondeo
Para configurar la anotación de bucle de sondeo, el host puede usar el comando NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
para completar la tabla de fotogramas de sondeo personalizados. En esta tabla, se definen los marcos de RF personalizados que se insertarán dentro de un bucle de detección estándar. Este comando solo se puede enviar en RFST_IDLE
. El NFCC debe responder con NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
y un código de estado que indique si la operación se realizó correctamente o no.
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_CMD
Campos de carga útil | Tamaño | Valor o descripción | ||
---|---|---|---|---|
Cantidad de entradas de fotogramas de RF | 1 octeto | Cantidad de entradas a seguir (n), entre 0 y 4. Si n=0, se inhabilita la función. | ||
Entrada de fotograma de RF [1..n] | De 2 a X octetos | |||
Qualifier-Type | 1 octeto | Define el tipo de frame, la tecnología y la posición en el bucle de descubrimiento. | ||
Longitud | 1 octeto | Longitud del valor (X). | ||
Valor | Octetos de X | Tiempo de espera (1 byte) y trama de RF (1 a 16 bytes). |
NCI_ANDROID_SET_POLLING_LOOP_ANNOTATION_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Consulta el comando de ahorro de energía
Para consultar el modo de ahorro de energía, el host puede usar el comando NCI_ANDROID_QUERY_POWER_SAVING_CMD
. El NFCC debe responder con NCI_ANDROID_QUERY_POWER_SAVING_RSP
y un código de estado que indique si la operación se realizó correctamente o no.
NCI_ANDROID_QUERY_POWER_SAVING_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_QUERY_POWER_SAVING_RSP
Campos de carga útil | Tamaño | Valor o descripción | |
---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. |
Notificación de suspensión del observador pasivo
El NFCC debe enviar la notificación NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
al host cuando se detecta un fotograma de salida, lo que provoca que se suspenda el modo de observación.
NCI_ANDROID_PASSIVE_OBSERVER_SUSPENDED_NTF
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
Tipo | 1 octeto | Tipo de fotograma: 0x00=Tipo A, 0x01=Tipo B | |||||
Longitud | 1 octeto | Longitud del valor (n) | |||||
Valor | n octetos | Se recibió un fotograma que coincidió con una entrada de fotograma de salida. |
Notificación de reanudación del observador pasivo
El NFCC debe enviar la notificación NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
al host cuando se reanude el observador pasivo después de un tiempo de espera o de otras condiciones.
NCI_ANDROID_PASSIVE_OBSERVER_RESUMED_NTF
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
Obtén el comando de anotación del bucle de sondeo
Para leer la tabla de tramas de sondeo personalizadas de la NFCC, el host puede usar el comando NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
. Este comando solo se puede enviar en RFST_IDLE
. El NFCC debe responder con NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
con un código de estado que indique éxito o falla, y la información del marco de sondeo personalizado.
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_CMD
Campos de carga útil | Tamaño | Valor o descripción | |||||
---|---|---|---|---|---|---|---|
N/A | 0 octetos |
NCI_ANDROID_GET_POLLING_LOOP_ANNOTATION_RSP
Campos de carga útil | Tamaño | Valor o descripción | ||
---|---|---|---|---|
Estado | 1 octeto | Consulta los códigos de estado en la tabla 140 de la Especificación de NCI. | ||
Cantidad de entradas de fotogramas de RF | 1 octeto | Cantidad de entradas a seguir (n), entre 0 y 4. Si n=0, se inhabilita la función. | ||
Entrada de fotograma de RF [1..n] | De 2 a X octetos | Qualifier-Type | 1 octeto | Define el tipo de frame, la tecnología y la posición en el bucle de descubrimiento. |
Longitud | 1 octeto | Longitud del valor (X). | ||
Valor | Octetos de X | Tiempo de espera (1 byte) y trama de RF (1 a 16 bytes). |
Implementación
Para ver las implementaciones de referencia, consulta lo siguiente: