[Projet] Module NFC

Le NFC, c’est une technique de communication sans contact, qui est utilisée pour les cartes de transport et autres cartes CB sans contact. Le signal est modulé à une fréquence de 13,56 MHz, ce qui est une bande “ISM” comme le 2.4 GHz ou le 433.92 MHz. En dehors du NFC, cette bande sert aux machines à plasma en physique, semiconducteurs, etc.

J’ai remarqué qu’il existait peu de lecteurs NFC hackables et abordables.

Le seul que je connaisse est le OpenPCD, basé sur un chip lecteur NFC de NXP. Ce projet implémente un lecteur de cartes sans contact dont le micrologiciel est fait pour expérimenter.

Je suis récemment tombé sur le circuit de Texas Instruments TRF7970A, qui, non seulement, est capable de fonctionner comme le circuit de NXP (lecteur de carte, ou “initiator” en langage NFC), mais également en mode “peer to peer” et “target” (émulation de carte). C’est un composant ridiculement petit (QFN) mais facilement disponible. Malgré sa petite taille pénible à souder, il mérite qu’on s’y intéresse. Un kit d’évaluation est disponible auprès de TI, mais 1) j’aime pas les kits d’évaluation et 2) c’est cher (49 ou 99 dollars). Donc je vais faire ma propre carte.

En suivant toutes les docs de référence fournies par TI, j’ai été capable de développer ma propre carte d’évaluation, au format 5×5 cm.

La première carte est une antenne adaptée munie de son circuit d’adaptation d’impédance: Les valeurs des composants seront à calculer selon des formules (magiques pour les débutants) après avoir caractérisé l’inductance de l’antenne. Je reviendrai sur ces calculs plus tard.

Schéma antenne
Schéma antenne

Le dessin de l’antenne est basé sur un design NXP à plusieurs tours qui permet d’avoir les deux fils de sortie de l’antenne du même côté.

Circuit de l'antenne
Circuit de l’antenne

La deuxième carte est le “lecteur” proprement dit, qui porte un autre circuit d’adaptation d’impédance, le circuit TRF, et une connexion SPI vers un microcontroleur Tiva C, le successeur du Stellaris qui se trouve sur la carte Stellaris Launchpad. Voici quelques caractéristiques techniques:

  • Front-end NFC Texas Instruments TRF7970A
  • Connecteur coaxial UFL pour l’antenne
  • Microcontroleur ARM Cortex M4 Tiva C Series TM4F123
  • 256k de flash
  • 32k de RAM
  • Port USB (OTG non câblé, donc seulement device)
  • Port I2C
  • UART
  • Port JTAG sur header 10 points (pinout ARM standard)
  • 20 GPIO disponibles sur header au pas de 2.54mm
  • Alimentation 5V, par USB ou externe
Schéma frontend NFC
Schéma frontend NFC

Et le circuit:

PCB Frontend NFC
PCB Frontend NFC

J’ai réussi à me débrouiller pour avoir très peu de pistes coté cuivre, du coup le plan recouvre tout le dessous du circuit. La majorité des pistes vertes que vous voyez relient tous les points de masse, pour m’assurer que je n’en oublie aucun. En réalité, toutes ces pistes seront noyées dans le plan de masse. J’utilise cette technique pour m’assurer que mon plan de masse est en un seul morceau.

Dans la semaine qui vient, je vais envoyer ces deux circuits chez SeeedStudio, je pense en faire au moins dix, peut être plus. Si avoir ces circuits vous intéresse, signalez vous, je n’utiliserai pas les 10 donc contre une petite obole, je pourrai vous envoyer un jeu de circuits. Mais je ne les donnerai pas, je connais trop de projets qui finissent par prendre la poussière sur l’étagère…

Niveau réalisation, il y a un TQFP (pas trop dur) et un QFN. Il vaut mieux souder ça à l’air chaud, mais ça doit aussi être possible au fer très fin.

Niveau logiciel, c’est complexe. Avant d’avoir un lecteur de cartes fonctionnel, il faudra du temps. Mais c’est possible, je n’ai aucun doute, surtout si je suis pas tout seul. On peut imaginer de la communication avec les téléphones NFC du moment. Les possibilités sont infinies, Internet est vaste, et plein de docs.

Pour les libs bas niveau, je pense partir de ce que j’ai déja développé pour la carte Stellaris Launchpad, ma librairie FreeStella, qui permet d’initialiser le CPU et de faire fonctionner l’uart. Cette lib n’a aucune dépendance, elle permet le développement “bare metal” à partir du vecteur de boot de l’ARM. Elle ne se base pas sur le TivaWare / StellarisWare, et elle est publiée avec une licence très permissive.

Je vous tiens au courant, et en attendant, parlez moi de vos idées. Qu’est ce qu’on va bien pouvoir faire de cool avec ce projet?