[PN532] comment lire du NFC Type B ?

Salut à toutes et à tous ! :slight_smile:

Dans le cadre d'un projet, je dois lire des cartes de membres en NFC, avec la particularité que ces cartes sont au format NFC Type B (ISO 14443-3B) alors que la majorité des tags NFC sont habituellement de Type A (ISO 14443-3A)

Si j'ai bien pigé, le NFC Type B est un dérivé du Type A spécifique aux pays francophone (bah oui, pourquoi faire simple quand on peut se compliquer la vie ??) qui est très proche mais je ne connais pas assez les normes NFC/RFID pour saisir vraiment la différence.

J'ai donc acheté un PN532 chez Elechouse, sous la dénomination "NFC MODULE V3", puisqu'il est précisé que ça lit les cartes aux normes ISO/IEC 14443-4, et donc par extension les cartes 3A et 3B.

J'ai donc utilisé leur doc officielle ainsi que leur librairie Github pour faire mes essais.

Avec la carte relié à un Arduino UNO en I2C, je lance leur exemple "iso14443a_uid", qui lit sans aucun souci des cartes en NFC Type A, mais si j'approche mon Type B alors rien ne se passe du tout, il n'est absolument pas détecté.

Ca me parait logique vu le titre du fichier de démo, mais le souci c'est que je ne trouve nul part comment faire pour lire du Type B ! :frowning:

Tout ce que j'ai trouvé, c'est qu'à un endroit il est défini #define PN532_MIFARE_ISO14443A (0x00), et une personne au fin fond du web disait que le Type B utilisait (0x03), mais sans aucune autre explication, et si je change juste cette valeur, mon script semble juste tourner en "accéléré" sans jamais lire aucune carte.

Je suis hélas beaucoup trop néophyte en Arduino et encore plus en NFC/RFID pour comprendre le détail de ce problème :confused: et c'est pour ça que je viens solliciter votre aide !

Mon problème parle t'il à quelqu'un ?

le PN532 semble compatible avec les 2 types de modulation A&B mais la lib semble ne pas prendre en compte le type B (typiquement Français)
il y avait un article intéressant "NFC&RFID" sur HACKABLE MAG 10 Jan/Fev 2016

Salut rjnc38, et merci pour ta réponse rapide !

J'ai pu trouver le magazine en question, et il y a effectivement un article très intéressant (à partir de la page 32) pour comprendre un peu le RFID et la NFC en général et les différentes normes, mais hélas il n'offre pas de solution à mon problème... :frowning:

Effectivement le hardware du PN532 semble prévu pour lire le NFC Type B, et c'est donc un souci de librairie qui n'est pas prévu pour le comprendre... et c'est du coup là que je bloque !

Je n'ai vraiment aucune piste ni aucune idée de quoi modifier et comment dans le code pour attendre mon objectif.

Bon à savoir, ce projet est réalisé pour un client dans le cadre de ma boite, et que donc au besoin, si quelqu'un de plus expert que moi pouvait nous apporter la solution rapidement, nous pourrions le rémunérer pour ça sans problème.

Apres du mal.. ISO14443B est a 848 kbps et ISO14443A est a 424 kbps

j'ai reussi a trouver quelque chose sur le type B dans la d atasheet du PN532

http://www.nxp.com/documents/user_manual/141520.pdf

Page 105 Analog settings for the type B et page 107

tu as

000: 106 kbps
001: 212 kbps
010: 424 kbps
011: 848 kbps

Dans le PN532.h tu as

#define PN532_COMMAND_SETSERIALBAUDRATE (0x10) ==> soit configuré pour le 424kbps soit iso de type A

Donc toi tu veux du type B soit #define PN532_COMMAND_SETSERIALBAUDRATE (0x11)

Salut hazerty565,

Ta réponse m'a semblé très prometteuse, mais hélas, faire cette modification dans PN532.h n'a rien changé, ça détecte toujours ma carte de type NFC A mais rien quand j'approche ma carte de type NFC B. :confused:

Edit: j'ai quelqu'un ici qui semble avoir le même type de souci sur un autre lecteur, il y a une réponse que je ne comprends pas bien mais qui parlera peut-être à quelqu'un d'autre pour la porter sur mon souci : tags - Arduino NFC Module (DFRobot) not reading Whiztags - Stack Overflow

je penses que ce n'est pas le seul changement a faire.. mais j'ai rien trouvé d'autre pourtant j'ai cherché...

meme si je penses qu'un chip du genre RF430CL330H serai mieux.

mais dans la commande du pn532

dans le fichier iso14443a_uid.pde

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);

faut changer PN532_MIFARE_ISO14443A par je ne sais pas quoi...

vla une autre source, j'ai chercher j'ai rien trouver, mais peut etre que sa peut marcher...

hazerty565:
je penses que ce n'est pas le seul changement a faire.. mais j'ai rien trouvé d'autre pourtant j'ai cherché...

Effectivement..; et moi aussi, pendant plusieurs heures... j'ai trouvé plein de gens qui avaient le même souci que moi, mais pas une seule réponse ! Seul les admins d'Adafruit qui développent en vendent des PF532 réponde, mais systématiquement en disant que dans un souci de place dans la RAM ils ont dû faire des choix et n'ont donc implémenté que la lecture du Type A (plus répandu) dans leur librairie... pour le Type B faut se démerder.

Beaucoup de gens entre 2009 et aujourd'hui qui se sont plain du problème et ont posé des questions mais aucun qui par la suite a posté une réponse ! J'ai essayé d'envoyer des messages en déterrant des topics pour demander comment ça s'était terminé.

hazerty565:
meme si je penses qu'un chip du genre RF430CL330H serai mieux.

Je connais pas du tout ce chip... et mon principal souci c'est que je suis très pressé par le temps, ayant un client qui attend. :confused:

hazerty565:
mais dans la commande du pn532

dans le fichier iso14443a_uid.pde

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);

faut changer PN532_MIFARE_ISO14443A par je ne sais pas quoi...

J'ai remplacé par PN532_MIFARE_ISO14443B et je défini cette variable dans la librairie à (0x03) qui semble être ce qu'il faut pour le Type B, le Type A étant sur (0x00), mais ça ne suffit pas apparemment.

hazerty565:
vla une autre source, j'ai chercher j'ai rien trouver, mais peut etre que sa peut marcher...

GitHub - elechouse/NFC_Module_DEV: PN532 library using NFC Shield from Seeed Studio to exchange NDEF message with Android

Ces librairies et exemples ne sont fait que pour travailler sur la communication directe avec un smartphone Android, donc pas utile ici... :frowning:

Je commence à désespéré, et pourtant il faut VRAIMENT que je trouve une solution, quitte à la payer.

Le hardware du P532 est compatible Type B, il y a forcément quelqu'un quelque part qui a codé une librairie qui peut le faire aussi, ou bien qui a les capacités de le coder !

j'ai trouver un code qui pourrait t'aider et comprendre comment sa marche...

packet-rfid-pn532.c (20.8 KB)

Ca a effectivement l'air de prendre en compte le NFC Type 2 sur un PN532, mais je dis "a l'air" parce qu'hélas je ne connais absolument pas le C et je serais bien incapable de faire le lien avec Arduino !

Je n'ai déjà que les bases en Arduino, étant à la base dev PHP/JS... :confused:

il faut juste rajouter mes librairie adequat trouver sur internet et une librairie arduino.h
mais bon un structure php resemble fortement a une structure C

malheureusement je ne peux pas t'aider plus..

j'ai essayé de suivre ce tuto pour utiliser du C dans un Ardhuino mais il est incomplet et à la fin je ne sais pas depuis Eclipe comment compiler et transférer vers Ardhuino.

De plus, je vous que le code C commence par #include "config.h" et je n'ai pas eu de fichier de ce nom avec la pièce jointe de ton précédent message... aurais-tu le lien de l'endroit où tu as trouvé "packet-rfid-pn532.c" pour que je vois s'il y a d'autres fichiers avec ?

Je suis vraiment perdu là... :-[

Bonjour,

Je relance ce topic. Confronté au problème, je n'ai pu trouver encore de réponse.

1/
J'ai évidemment testé différents paramétrages de InListPassiveTarget (03, 03 01, ...), sans succès.

Je ne crois pas à l'argument de manque de place, évoqué par Adafruit. Les commandes sont simples pour piloter le composant, et seules les fonctions utilisées sont prises en compte? ...

Sinon, une librairie sous Unix existe, ...

J'ai l'impression qu'on positionne des paramètres directement dans les registres du composant (via la commande Writeregister 0x08) :
Adresses : 0x6302 (CIU_TxMode) et 0x6303 (CIU_RxMode).
Si quelqu'un a des lumières.

2/
Sinon, n'y a t'il pas une particularité française, avec un Iso14443B', ... qui ne serait pas supporté par le PN532.
Il m'avait semblé que les différences se situaient au niveau du protocole de lecture d'information, mais que le InListPassiveTarget devait fonctionner, ...

C'est quand même frustrant de ne pouvoir lire des Tag, reconnus par les modules NFC de téléphones NFC Android (via NFC tools par exemple).

Bonjour,
J'ai trouvé un fork de la librairie qui tente de lire le type B.
Je l'ai testé mais sans succès : Add ISO14443B support by zhongfu · Pull Request #43 · adafruit/Adafruit-PN532 · GitHub

cbelpaire:
Bonjour,
J'ai trouvé un fork de la librairie qui tente de lire le type B.
Je l'ai testé mais sans succès : Add ISO14443B support by zhongfu · Pull Request #43 · adafruit/Adafruit-PN532 · GitHub

Hello !

Pour notre part on a jamais réussi à lires les badges qu'on avait, il s'est avéré aussi que leur protocole était (projet SNCF), au final on a utilisé des smartphones Android qui avaient un lecteur NFC et arrivaient à les lire.

Désolé de ne pas pouvoir aider plus :frowning: