Archives par mot-clé : nfc

Etat d’avancement du projet NFC au 19 Septembre 2013

Après avoir travaillé de manière intense sur ma fraiseuse numérique pour pouvoir la présenter au salon des Associations de ma ville, j’ai repris du temps pour faire avancer mon projet NFC. Voici ce qui a été réalisé.

J’ai implémenté les codes nécessaires pour piloter le bus SPI depuis le chip ARM de commande. Ce n’était pas très complexe. J’ai pu vérifier avec un analyseur logique que les signaux étaient corrects. Le Tiva a plein de registres qu’il faut configurer correctement, mais il met à disposition une doc assez complète qui décrit les séquences d’initialisation. Quand on les suit sans se tromper, ça marche!

Les choses sont plus compliquées du côté du front end NFC. Pour commencer, j’ai réussi à obtenir de nouveaux samples de Texas, que j’ai soudé correctement cette fois: Pas d’apport supplémentaire de pâte à braser, mais utilisation de flux et chauffage rapide. Le soudage est très nettement amélioré, l’étain déjà présent sur la carte suffit à assurer la soudure sans débordements.

Il me manque encore tous les composants de la partie analogique et les condensateurs de découplage, mais j’avais envie d’essayer quand même. Effectivement, le chip réagit, puisque le passage de sa ligne “Enable” dans le bon état produit le démarrage de toutes les alimentations secondaires produites par le chip. Au moins, j’ai la preuve que certaines pattes sont correctement soudées et que le chip n’est pas totalement grillé 😀

Par contre, il m’a été pour l’instant impossible de lire par SPI la moindre valeur de registre depuis le chip. Et c’est là que j’ai commencé à découvrir pas mal de défauts du circuit.

Pour commencer, sa documentation n’est absolument pas claire. Elle répète certaines informations dans des paragraphes différents, se contredit, et contient des manques et des erreurs. On ne s’en rend pas compte en première lecture, mais le nombre de messages d’incompréhension sur leur forum “E2E” en dit long.

Le circuit n’est pas non plus exempt de bugs “silicium”. Il réagit de manière non documentée, ou imprévue, quand son pilotage est réalisé comme dans la datasheet. Par exemple, le chip dispose de trois modes de pilotage:

  • un mode parallèle (on pilote 8 fils de données, puis on valide une horloge)
  • un mode SPI sans signal CS : dans ce cas ils ont “inventé” un genre de start condition ressemblant à de l’I2C, mais qui n’est pas de l’I2C, et qui n’est pas supporté par le Tiva, ce qui demanderait un pilotage manuel par bit banging
  • un mode SPI avec signal CS : dans ce cas l’assertion de la ligne CS démarre la transaction SPI, et la désassertion la termine. Sauf que, lors de cette déassertion, il n’y a pas de nouveau signal d’horloge généré,ce qui est normal pour du SPI. Eh bien dans certains cas, ceci empêche le circuit de prendre en compte la commande envoyée. Pour corriger cela, il faut générer une unique pulse d’horloge supplémentaire pour valider la commande. Pas 8, sinon le chip croit qu’une autre commande lui est addressée. Ceci demande de reconfigurer terporairement le bus SPI en GPIO normales, puis d’envoyer la pulse, puis de reconfigurer le bus SPI.

Vous voyez le genre de techniques tordues qu’il faut appliquer… Et qui ne sont pas documentées clairement, malgré leur bizarrerie. Et on n’en est encore qu’à la couche transport, je n’imagine même pas encore tous les bugs fonctionnels que je vais trouver! Je trouve ça assez peu sérieux de la part d’un grand fabricant de circuits intégrés, surtout quand on essaye de concurrencer NXP et Broadcom sur le marché du front end NFC.

Exemple de documentation: dans une version précédente, les données SPI envoyées au chip étaient valides sur le front descendant de SCLK, et les données retournées juste après étaient disponibles sur le front montant de l’horloge… Pas très pratique. Mais bon. Dans la dernière révision du chip, ceci a été corrigé. Toutes les données (MOSI et MISO) sont valides au front descendant de SCLK. Mais la datasheet n’a pas été mise à jour, jusqu’à ce que quelqu’un se plaigne sur le forum!

J’avoue que tous ces problèmes m’ont été signalés par un ami qui avait déja travaillé avec ce circuit, sinon j’en serais encore à savoir pourquoi ça ne marche pas. D’un autre coté, pour DIY qui se voulait électroniquement simple, ces bugs m’agacent, car ils vont complexifier le projet. Je n’attendais pas de me heurter à des problèmes techniques aussi basiques à un stade aussi peu avancé.

Donc pour le moment, je mets ce projet de côté et je repars sur mon autre projet: la fraiseuse.

En attendant, j’ai mis à disposition de tous le code de démarrage que j’utilise pour faire fonctionner le cpu ARM Tiva. J’ai fait un projet github avec tous les codes communs qui évitent de ‘réinventer la roue’. J’ai choisi la licence WTFPL pour son coté humoristique et très proche du domaine public. En effet, je trouve indécent de vouloir mettre des licences restrictives (dites libres ou non) sur un code aussi basique et aussi nécessaire. Ca se passe sur github:

http://www.github.com/f4grx/freestella

 

[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?

Revue de presse – 21 Janvier 2013

Raspberry Pi

Cette semaine, le Raspberry Pi sert à piloter un capteur CCD pour faire de l’astrophotographie sérieuse à grâce à la carte Pixi-200. Mais la liste des fonctionnalités est tellement longue qu’on s’y perd! En résumé, c’est une carte à entrées/sorties rapides et très nombreuses qui peut avoir de nombreuses applications. Elle est équipée d’un FPGA Spartan3.

Carte E/S Pixi-200
Carte E/S Pixi-200

Arduino

Un nuage sans fil qui change de couleur. L’arduino est décidément le microcontrôleur des artistes!

Nuage sans fil Arduino
Nuage sans fil Arduino

Et un dirigeable radiocommandé rempli à hydrogène, encore piloté par Arduino. Ca change des quadrirotors, mais attention à l’effet Hindenburg 🙂 Vous noterez la fabrication de l’hydrogène à la maison grâce à une réaction de soude sur de l’aluminum métallique.

Ce dirigeable est piloté par un arduino
Ce dirigeable est piloté par un arduino

 

ARM Embarqué

La carte STM32F4DISCOVERY peut enfin fonctionner facilement sur un Mac. Mitchell Johnson a fait un article pour tout expliquer. Il se base sur les outils standard openocd et gcc-arm, et explique comment les intégrer dans un environnement Mac.

Radio

Kukata86 nous présente un émulateur de carte RFID pour la technologie 125 kHz (et non 13.56 MHz, utilisée pour le NFC) qui apprend automatiquement le numéro de la carte de série à émuler!

L'émulateur RFID de Kukata
L’émulateur RFID de Kukata

Technologies

Encore le WR-703n… Il va falloir lui dédier une catégorie!

Ce projet ajoute un écran LCD au WR-703n pour s’en servir comme un véritable ordinateur portable. L’écran est piloté par un ARM STM32, il se présente comme un périphérique USB implémentant une carte vidéo. Le support vidéo d’OpenWRT, une fois intégré à la distribution, a pu facilement prendre en charge l’écran externe.

Le projet est en russe mais hackaday fournit des liens vers des traductions en anglais.

Un écran pour le WR703
Un écran pour le WR703