2012-07-04 4 views
5

J'écris une application en Java qui envoie des commandes à une carte à puce et analyse les réponses sur une interface NFC. Cette application peut être utilisée à la fois sur Android et sur PC.Détermination des exigences d'alimentation pour une carte à puce sans contact en Java.

En utilisant un lecteur de carte sans contact USB via le PC, je n'ai aucun problème pour me connecter et communiquer avec n'importe quelle carte que je lui lance.

Android est une autre affaire cependant. L'utilisation de l'application via un Nexus S produit des résultats moins souhaitables, en fonction de la carte.

Certaines cartes se connecteront et communiqueront avec un taux de réussite de 100%. La plupart des cartes que j'ai essayé d'utiliser ont été très difficiles à établir même une connexion, laissez seul communiquer avec lui.

Le service NFC sur le Nexus S tente de se connecter aux cartes. Il émet un son continu et faible, indiquant qu'il ne peut pas établir une connexion solide (pour autant que je sache). Mon processus de pensée actuel est que le Nexus S possède une puce NFC moins puissante que le lecteur USB que j'utilise. D'autres articles que j'ai lus, il semble que différentes cartes ont des besoins en énergie différents afin de les utiliser.

Comment puis-je déterminer le niveau de puissance nécessaire pour alimenter une carte? Est-ce caché quelque part dans l'ATR?

Comment puis-je déterminer le niveau de puissance d'une puce NFC particulière? Est-ce documenté quelque part?

+0

pour la première question, vous devriez lire l'ISO 7816 – Blackbelt

+0

Je suppose que vous devriez savoir quel est le modèle exact de la puce NFC, de sorte que vous pouvez télécharger la fiche technique avec ce genre d'information –

Répondre

4

Ce type de problème est généralement causé par (une combinaison de) un des éléments suivants:

  1. antenne mal réglée dans la carte
  2. carte micro-contrôleur exigeant beaucoup de puissance
  3. faible champ RF généré par le téléphone NFC

Ceci entraîne un mauvais couplage d'antenne entre le téléphone et la carte, ce qui entraîne une mauvaise communication ou aucune communication. Un lecteur de bureau n'a généralement pas ce genre de problème car il génère un champ beaucoup plus puissant. NFC dans un téléphone est assez faible et le champ RF qu'il génère est souvent à la limite de ce qui est encore permis par ISO 14443. La puce NFC du Nexus S, le NXP PN544, génère un champ RF faible. Cependant, ceci est une fonction à la fois de la puce NFC et de l'antenne NFC du téléphone. D'après mon expérience, les cartes de type B posent souvent des problèmes (la rumeur dit qu'elles nécessitent souvent plus de puissance). Les passeports électroniques sont un autre exemple: les antennes sont souvent moins performantes.

Niveau de puissance minimum requis pour une carte: il ne se trouve pas dans l'ATR. La carte ISO 14443 n'a pas d'ATR (ils peuvent avoir un fichier EF.ATR, mais je n'en ai jamais vu). La réponse ATS (Answer To Select) n'indique pas les niveaux de puissance requis. Les cartes ont la possibilité d'indiquer si le niveau de puissance est suffisant dans le champ CID des blocs S ISO 14443-4 (lorsqu'ils sont présents et supportés par la carte). Je n'ai jamais vu de cartes qui le font, cependant.

Pour déterminer le niveau de puissance d'une puce NFC particulière combinée à une antenne particulière (et un circuit d'accord), vous pouvez utiliser un analyseur de spectre pour effectuer les mesures. J'ai mesuré plusieurs téléphones Android NFC (Galaxy Nexus, Nexus S, Galaxy S3, One X) qui contiennent tous un PN544. Les résultats diffèrent entre les téléphones, assez pour faire la différence dans certains cas (S3 générant le plus de puissance).

+0

Je vous ai beaucoup vu sur SO . :) Merci pour votre réponse. – Brad

+0

De rien. J'ai regardé quelques cartes coréennes de type B que j'ai (EZ-Link et T-Money), qui ne fonctionnent pas avec le Nexus S et le Galaxy Nexus. J'ai trouvé qu'ils travaillent réellement avec le S3. –

Questions connexes