Comment écrire les pages de configuration sans perdre le tag ?
En lisant d'abord la carte mémoire de la puce, en écrivant chaque page entière après l'avoir lue, en posant le mot de passe avant le réglage qui enclenche la protection, et en gardant pour la fin chaque bit à sens unique. Puis en déroulant toute la séquence sur un tag qu'on peut perdre.
La carte appartient à la puce
Les pages de configuration portent les réglages que liste la page de la configuration : mot de passe, conditions d'accès, compteurs, miroir et bits de verrouillage. Aucun type du NFC Forum ne les définit, donc leurs positions changent d'une puce à l'autre. Un NTAG213 garde ses bits de verrouillage dynamiques en page 40 et sa configuration en pages 41 à 44, selon sa fiche sur wakdev.com ; un NTAG215 emploie les pages 130 à 134, selon la sienne.
Un numéro de page ne vaut donc que pour une référence. Le code identifie la puce avant d'écrire, comme le décrit du côté de l'acheteur la page de l'identification de la puce, et refuse de dérouler sa séquence sur autre chose : la page 41 d'un NTAG213 est de la mémoire utilisateur ordinaire sur un NTAG215.
Une page s'écrit entière
WRITE pose quatre octets d'un coup, et la référence de MifareUltralight documente writePage() comme écrivant une page. Les octets de configuration partagent des pages, donc changer l'un d'eux veut dire lire la page, changer cet octet, et réécrire les quatre.
Réécrivez ce que vous avez lu pour les octets que vous ne voulez pas changer. Un octet écrit à zéro parce que le code ignorait son sens est un réglage changé sans que personne l'ait décidé, et certains réglages ne reviennent pas.
Toutes les pages ne se relisent pas telles qu'elles ont été écrites. La page qui porte le mot de passe n'est normalement pas lisible, comme le note la page du mot de passe, donc le code garde la valeur qu'il a écrite au lieu de s'attendre à la relire.
Un ordre qui ne vous enferme pas dehors
Écrivez le mot de passe avant le réglage qui enclenche la protection. La page du mot de passe décrit les deux étapes, la clé et sa portée ; dans l'autre ordre, la protection démarre avec le mot de passe que la puce portait auparavant, et les écritures ultérieures dans la plage protégée demandent celui-là.
Gardez les réglages à sens unique pour la fin. Les bits de verrouillage, un compteur qu'on ne peut plus désactiver une fois activé, et un bit qui fige la configuration elle-même sont définitifs sur les puces qui les ont, comme le rappelle la page de la configuration, et chacun posé trop tôt transforme une erreur plus loin dans la séquence en tag perdu.
Relisez chaque page après l'avoir écrite, hors celles qui ne sont pas lisibles, et arrêtez-vous à la première différence. Une séquence qui continue après une écriture ratée construit sur un état que personne ne connaît.
Un tag à perdre d'abord
Déroulez la séquence complète sur un tag avant la série, puis vérifiez-le depuis un second appareil qui ne détient pas le mot de passe : une écriture qui réussit là veut dire que la portée est mauvaise, l'essai que recommande la page du mot de passe. Sur le même tag, essayez aussi un mauvais mot de passe là où la puce limite les tentatives ratées, puisque la limite part en production avec tout le reste.
Gardez ce tag, étiqueté avec la séquence et la date. C'est la référence quand une série se comporte autrement, le même raisonnement que le tag mort que la page du tag corrompu propose de garder pour tester une étape de vérification.
Écrivez ensuite la série avec le même code, pas avec une variante. La page de l'écriture en série couvre le côté production.
Questions fréquentes
L'API NDEF peut-elle écrire les pages de configuration ?
Non. La configuration est hors du NDEF, donc elle demande des commandes WRITE brutes sur les pages que nomme la fiche technique de la puce.
Pourquoi mon écriture de configuration a-t-elle atterri dans le contenu ?
Le numéro de page appartenait à une autre puce. La page 41 porte de la configuration sur un NTAG213 et de la mémoire utilisateur sur un NTAG215.
Une mauvaise configuration peut-elle être défaite ?
Un mot de passe peut être changé avec le mot de passe courant. Les bits de verrouillage et une configuration figée ne le peuvent pas, sur aucune puce qui les a.
Le mot de passe s'écrit-il avant ou après le réglage de protection ?
Avant. Sinon la protection démarre avec le mot de passe que la puce détenait déjà, et les écritures ultérieures dans la plage protégée demandent celui-là.