Comprendre la boucle anti-collision ISO14443
La boucle anti-collision est décrite dans la couche 3 de la norme ISO/IEC 14443. Elle permet au PCD d’établir la communication avec le ou les récepteurs présents.
De cette boucle sont issues des informations cruciales comme l’ID, le SAK et l’ATS. Comprendre ce procédé permet d’avoir les idées plus claires par la suite.
Petit rappel
Dans l’article sur la norme ISO/IEC 14443, la séquence d’activation suivante est décrite.
La boucle anti-collision a pour objectif de lister les récepteurs présents dans le champ magnétique et d’activer ces récepteurs l’un après l’autre.
En effet, si plusieurs récepteurs étaient actifs en même temps, le lecteur ne pourrait pas savoir à qui adresser les commandes ou de qui viennent les réponses.
Anti-collision ou pas ?
La première étape est d’identifier si le récepteur gère l’anti-collision. Pour cela on analyse la valeur ATQA ou ATQB. Cette valeur, sur 2 octets contient plusieurs informations dont la taille de l’ID et la gestion ou non de l’anti-collision.
A noter que tous les récepteurs conforment à la norme ISO/IEC 14443 doivent gérer l’anti-collision.
Les bits (en colonne des tableaux) sont affichés du poids fort (16) vers le poids faible (1).
Tableau de bit de ATQA
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
Taille ID |
Type d’anti-collision |
Si l’un des bits 1 à 5 est à “1”, alors l’anti-collision est gérée.
Valeur des bits 7 et 8 de ATQA
b8 |
b7 |
Taille de l’ID |
0 |
0 |
4 octets (ID Simple) |
0 |
1 |
7 octets (ID Double) |
1 |
1 |
10 octets (ID triple) |
1 |
1 |
Pas d’utilisation actuelle |
Exemples de valeur “ATQA”
MIFARE Classic : “00h 04h“
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
L’anti-collision est gérée et l’ID sera de 4 octets.
MIFARE DESFire : “03h 44h“
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
L’anti-collision est gérée et l’ID sera de 7 octets.
Étapes de l’anti-collision Type A
Ce schéma illustre une boucle anti-collision sans collision (un seul récepteur dans le champ).
L’obtention de l’ID complet peut prendre 1, 2 ou 3 “tours”.
Le “CT” (Cascade Tag) indique que l’ID n’est pas complet et qu’il faudra une boucle supplémentaire. Il vaut “88h“.
Et avec plusieurs PICC ?
Avec plusieurs récepteurs dans le champ, l’anti-collision est jouée jusqu’à ce que chaque récepteur soit connu. Les “ATQ” et “SAK” de chaque récepteur sont stockés dans une pile en mémoire du PCD.
A la suite de la boucle anti-collision, un seul récepteur sera activé avec une commande de sélection “SEL”.
Quand le PCD en aura terminé avec ce récepteur, il pourra envoyer une commande “HALT” qui le déconnectera. Il pourra sélectionner un autre récepteur avec une autre commande de sélection.
La règle est qu’il ne peut y avoir plus d’un récepteur actif pour le PCD.
Quelques exemples de séquence
MIFARE Classic 1k
Ce type de PICC à un ID sur 4 octets. Son ATQA vaut “00h 04h” et son SAK “08h”. Elle n’est pas conforme ISO/IEC 14443-4.
1 2 3 4 5 6 7 8 9 |
>> 26 (REQA) << 04 00 (ATQA) >> 93 20 (Anti Collision CL1) << BA FD 92 9D 48 (ID + CRC) >> 93 70 BA FD 92 9D 48 BC 6C (Select CL1) << 08 B6 DD (SAK + CRC) ID : BA FD 92 9D ATQA: 00 04 SAK: 08 |
MIFARE Classic 4k
Ce type de PICC à un ID sur 4 octets. Son ATQA vaut “00h 02h” et son SAK “18h”. Elle n’est pas conforme ISO/IEC 14443-4.
1 2 3 4 5 6 7 8 9 |
>> 26 (REQA) << 02 00 (ATQA) >> 93 20 (Anti Collision CL1) << 76 13 D0 C1 74 (ID + CRC) >> 93 70 76 13 D0 C1 74 45 78 (Select CL1) << 18 37 CD (SAK + CRC) ID : 76 13 D0 C1 ATQA: 00 02 SAK: 18 |
MIFARE Ultralight
Ce type de PICC à un ID sur 7 octets. Son ATQA vaut “00h 44h” et son SAK “00h”. Elle n’est pas conforme ISO/IEC 14443-4.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>> 26 (REQA) << 44 00 (ATQA) >> 93 20 (Anti Collision CL1) << 88 04 85 13 1A (CT + ID0 + ID1 + ID2 + CRC) >> 93 70 88 04 85 13 1A 76 4E (Select CL1) << 04 DA 17 (SAK + CRC) >> 95 20 (Anti Collision CL2) << 7A 83 34 84 49 (ID3, ID4, ID5, ID6 + CRC) >> 95 70 7A 83 34 84 49 0F 01 (Select CL2) << 00 FE 51 (SAK + CRC) ID : 04 85 13 7A 83 34 84 ATQA: 00 44 SAK: 00 |
NTAG 2013
Ce type de PICC à un ID sur 7 octets. Son ATQA vaut “00h 44h” et son SAK “00h”. Elle n’est pas conforme ISO/IEC 14443-4.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>> 26 (REQA) << 44 00 (ATQA) >> 93 20 (Anti Collision CL1) << 88 04 AF 65 46 (CT + ID0 + ID1 + ID2 + CRC) >> 93 70 88 04 AF 65 46 CA 02 (Select CL1) << 04 DA 17 (SAK + CRC) >> 95 20 (Anti Collision CL2) << 62 A4 48 80 0E (ID3, ID4, ID5, ID6 + CRC) >> 95 70 62 A4 48 80 0E BD 43 (Select CL2) << 00 FE 51 (SAK + CRC) ID : 04 AF 65 62 A4 48 80 ATQA: 00 44 SAK: 00 |
MIFARE DESFire
Ce type de PICC à un ID sur 7 octets. Son ATQA vaut “03h 44h” et son SAK “20h”. Elle est conforme ISO/IEC 14443-4 et partiellement ISO7816-4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>> 26 (REQA) << 44 03 (ATQA) >> 93 20 (Anti Collision CL1) << 88 04 44 87 4F (CT + ID0 + ID1 + ID2 + CRC) >> 93 70 88 04 44 87 4F 25 65 (Select CL1) << 24 D8 36 (SAK + CRC) >> 95 20 (Anti Collision CL2) << DA 3C 2A 80 4C (ID3, ID4, ID5, ID6 + CRC) >> 95 70 DA 3C 2A 80 4C ED 9D (Select CL2) << 20 FC 70 (SAK + CRC) >> E0 50 BC A5 (RATS) << 06 75 77 81 02 80 02 F0 (ATS) ID : 04 44 87 DA 3C 2A 80 ATQA: 00 44 SAK: 00 ATS: 06 75 77 81 02 80 02 F0 |
Smartphone Android
Ce type de récepteur à un ID aléatoire sur 4 octets. Son ATQA vaut “00h 04h” et son SAK “60h”. Il est conforme ISO/IEC 14443-4 et ISO7816-4.
1 2 3 4 5 6 7 8 9 10 11 12 |
>> 26 (REQA) << 04 00 (ATQA) >> 93 20 (Anti Collision CL1) << 08 C1 3E 43 B4 (ID0 + ID1 + ID2 + ID3 + CRC) >> 93 70 08 C1 3E 43 B4 CA AD (Select CL1) << 60 F8 32 (SAK + CRC) >> E0 50 BC A5 (RATS) << 05 75 80 70 02 2A CD (ATS) ID : 08 C1 3E 43 ATQA: 00 04 SAK: 60 ATS: 05 75 80 70 02 2A CD |
Étapes de l’anti-collision Type B
La grande différence avec les récepteurs de type B est que ces récepteurs doivent aussi répondre au type d’application attendu par le PCD.
En effet, lorsque la commande REQB est envoyée, le PCD ajoute un code “AFI” qui permet de filtrer les récepteurs en fonction d’un domaine fonctionnel (transport, identification, médical etc.).
Bien que la valeur “ATQB” et quelques autres commandes diffèrent, c’est là la seule grosse différence.
Conclusion
Sous le terme de “boucle anti-collision” se cache l’un des processus les plus importants de la norme NFC ISO/IEC 14443. C’est cette étape qui permet de traiter la nouvelle problématique que pose le sans contact, par rapport au contact, avoir plusieurs récepteurs dans le même lecteur.
Bonjour, merci pour vos explications. Je suis en ce moment sur un projet où je souhaite (à travers un lecteur NFC, composant PN532) identifier le tag NFC (l’UID si j’ai bien compris) des smartphones qui passent devant ce lecteur. Mais je suis un peu perdu avec tous les termes SAK, ATS, ATQ etc je n’ai pas bien compris ce que représente le SAK ?