Near Field Communication
NFC, Le software
Les couches protocolaire
Comme précisé en introduction, le NFC n'est pas une nouvelle technologie à part entière. Il s'appuie sur des normes existantes. Le NFC apporte réellement 3 couches protocolaires qui vont venir en surcouches des normes ISO sur lesquelles il se base.
Si nous partons du bas de l'architecture logicielle, nous trouvons dans un premier temps les couches ISO-14443 et Felica. Ces couches sont les normes sur lesquelles s'appuie le NFC. Elles permettent de piloter directement le hardware (gestion du champ magnétique, fréquence des ondes émises, émissions des données dans l'air...). Nous retrouvons ensuite les 3 couches protocolaires amenées par le NFC: DEP, LLCP, SNEP,
Data exchange protocol
Le NFC-DEP est un protocole d'échange de données bas niveau. Il peut s'appuyer soit sur la couche physique NFC-A (ISO 14 443 - A) ou bien sur la couche NFC-F (Felica). Dans le protocole DEP, l'équipement qui initie la connexion est appelé Initiator tandis que l'équipement cible est appelé Target. Les messages respectant DEP suivent le format suivant :
Start of Data (SOD) : Dans ce protocole, le début d'un message doit indiquer la taille totale du message. La taille des données doit être comprise entre 3 et 255 octets. Payload : Le champ Payload contient la commande DEP à effectuer suivi du corps du message à envoyer au périphérique distant. End of Data (EOD) : Le champ End of Data contient des octets de contrôle permettant de vérifier qu'il n'y a pas eu d'erreurs de transmission.
Commandes | Descriptions |
---|---|
Atr_Req | La commande Attribute Request permet d'activer une connexion DEP entre deux périphériques. Elle permet également de définir les paramètres de communication tels que la vitesse de communication, la taille maximale d'un message etc. Sans cette activation, il est impossible d'échanger des messages à travers le Protocol DEP. |
Pls_Req | La commande Parameter Selection Request permet de changer les paramètres de connexion définis lors de la commande ATR_REQ. Cette commande est notamment utilisée lorsqu'un Initiator effectue une demande de connexion avec un périphérique et que celui-ci ne supporte pas les paramètres de connexion demandés. L'Initiator effectue alors un PLS_REQ pour redéfinir les paramètres si cela est possible. |
Dep_Req | La commande Data exchange protocol request est la commande permettant d'échanger des données avec un périphérique distant. |
Dsl_Req | La commande Deselect Request est la commande permettant de désélectionner un périphérique NFC précédemment activé. Une fois désélectionné, il reste en attente de reconnexion. |
Rls_Req | La commande Release Request est la commande permettant de fermer une connexion avec un périphérique NFC précédemment activé. Une fois la connexion fermée, le périphérique distant n'est plus en attente d'aucun message. |
En résumé, le couche DEP permet de paramétrer un lien entre deux périphériques et ainsi de définir la façon de communiquer (vitesses, temps de réponse...).
Logical link control protocol
La couche LLCP est un protocole d'échange de données offrant différents services de contrôle et permet l'utilisation d'un mode connecté ou non connecté. L'utilisation du protocole SNEP nécessite d'utiliser LLCP en mode connecté uniquement. C'est donc ce mode que est générallement implémenté. Dans ce mode, LLCP utilise un mode de communication half duplex (Question/Réponse). On ne peut envoyer qu'une trame à la fois, celle-ci devant être suivie obligatoirement d'une trame réponse dans les délais impartis. L'échange de trames doit être permanant même lorsqu'il n'y a pas de données utiles à envoyer. Cet échange permanant permet de détecter les pertes de connexions. Un message Llcp suit le format suivant :
Dsap : Destination Service Access Point. Sur un même équipement, plusieurs applications peuvent utiliser Llcp simultanément. Le champ dsap est un numéro d'identification attribué à un service (une application) utilisant llcp. Il permet de déterminer à qui le message est destiné. Type : PDU type. Ce champ représente la commande LLCP à effectuer. Ssap : Source Service Access Point. Le champ dsap est un numéro d'identification attribué à un service (une application) utilisant llcp. Il permet de déterminer de qui le message provient. Sequence : Sequence number. Un numéro de séquence est attribué à chaque message envoyé. Il permet d'effectuer un contrôle afin de vérifier qu'aucun message n'a été perdu en route. Information : Le champ information contient le corps du message en lui même.
Commandes | Descriptions |
---|---|
Symmetry Pdu | Cette commande permet de respecter le balancement 1 trame envoyé, 1 trame reçue ... Elle doit être utilisé lorsqu'aucune autre commande ne peut être envoyé en réponse d'une trame reçue. |
Connect | Cette commande permet d'effectuer une demande de connexion d'un service local vers un service distant à travers un lien llcp . La commande Connect permet d'échanger également différents paramètres tels que la version de la librairie, les services supportés, le timeout de la connexion . . . |
Disconnect | Cette commande permet de terminer une connexion ou de désactiver un lien llcp. |
Connection Complete | Commande en réponse à la commande Connect confirmant que la connexion à bien été établie. |
Information | Cette commande permet d'échanger des données à travers la connexion établie. Elle permet également d'acquitter des messages reçues grâce au champ Séquence. |
En résumé, la couche LLCP permet de maintenir une connexion entre deux périphériques et de détecter lorsque l'un des deux ne répond plus. Elle fournit également du contrôle de données grâce aux numéros de séquences attribués aux messages permettant de vérifier qu'ils ont bien tous été reçus.
Simple NDEF exchange protocol
Le protocole SNEP permet d'échanger des messages dans un format particulier (NDEF). Il est notamment utilisé en surcouche de LLCP par le BEAM des smartphone Android. Ce protocole est assez simple.
Version: Ce champ correspond à la version de SNEP utilisée. Request: Ce champ correspond à la commande SNEP à effectuer. Length: Ce champ correspond à la taille du message à transmettre Information : Le champ information contient le corps du message en lui même.
Commandes | Descriptions |
---|---|
Continue | Cette commande est utilisée après avoir reçu un PUT ou un GET. Elle doit être utilisée lorsque la commande reçue ne tient pas en une seule trame pour confirmer la capacité à recevoir le reste du message. |
Get | Cette commande permet de demander à un périphérique de nous envoyer un Ndef message en particulier. |
Put | Cette commande permet d'envoyer à un périphérique un Ndef message. |
Reject | Cette commande est utilisée après avoir reçu un PUT ou un GET. Elle doit être utilisée lorsque la commande reçue ne tient pas en une seule trame pour préciser que l'on ne peut pas recevoir la suite du message. |
En résumé, SNEP fournit une interface de programmation pour envoyer des messages en NFC simple à utiliser pour les développeurs. Elle permet une fois toutes les couches implémentées de profiter de tous leurs avantages (contrôle de données, paramétrage de connexions etc) sans avoir à se soucier de quoi que ce soit, le travail étant effectué par les couches inférieurs à SNEP.