Lire une étiquette Mifare en utilisant Windows Phone 8 NFC?
Windows Phone 8 NFC prend-il en charge les balises Ultralight/Classic? J'utilise ce code pour accéder au périphérique NFC sur Nokia Lumia 920 (exemple de code a été pris de NDEF Tag Reader-NFC NDEF Tag Reader)
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
ProximityDevice device = ProximityDevice.GetDefault();
device.DeviceArrived += DeviceArrived;
device.DeviceDeparted += DeviceDeparted;
device.SubscribeForMessage("NDEF", MessageReceived);
}
private void DeviceArrived(ProximityDevice sender)
{
// this event occurs when I am tapping any of my tags (tried 5 different Mifare Ultralight/Classic)
}
private void DeviceDeparted(ProximityDevice sender)
{
// this event occurs when I am moving away any tag
}
private void MessageReceived(ProximityDevice sender, ProximityMessage message)
{
// this event is never fired!!! :(
}
}
le code NFC sur WP8 est-il défectueux ou ce code est-il erroné?
mise à Jour: À partir de ce document NFC Forum Type Tags vous pouvez trouver que L'Ultra-Léger Mifare est compatible avec le NDEF. Les appareils Android peuvent lire des étiquettes de ce type facilement.
4 réponses
Mifrare est supporté sur WP8 et sur Lumia 920. Je devine ici, mais il est probable que votre étiquette NFC Mifare n'est pas formatée/initialisée en NDEF. Vous pouvez demander à vos tags NFC d'être formatés NDEF lorsque vous achetez des tags NFC.
la puce Lumia 920 (famille NXP PN544) supporte les types d'étiquettes suivants (au moins):
- Type 1: Famille Topaze
- Type 2: Mifare Ultralight famille, mon-d-déplacer, NTag
- Type 3: Famille Felica
- Type 4: Famille Desfire
- Non standardisé: Mifare Standard
concernant les tags NFC NDEF formating:
- WP8 supporte uniquement L'accès au niveau NDEF à ces balises, ce qui signifie que la balise doit être formatée NDEF ou avoir un message NDEF sortant (peut être un message vide). Si vous essayez d'utiliser les API sur des balises NFC non formatées, elles ne fonctionneront pas (étant donné que WP8 ne supporte pas les commandes/accès spécifiques aux Tag de bas niveau)
- Si vous voulez NDEF formater vos tags Vous avez les options suivantes: lors de la commande de tags demander qu'ils soient formatés NDEF (ou / et contiennent un message NDEF vide et l'étiquette à Déverrouiller), Utiliser un lecteur USB NFC / écrivain HW pour PC ou utiliser un périphérique NFC Symbian / MeeGo / Android avec une NFC écriture app
Cordialement,
-- Justin Angel!--25-->
Ingénieur Principal pour Windows Phone Developer Expérience chez Nokia
Le code que vous avez posté est censé lire NDEF messages d'une balise NFC.
alors que Mifare est aussi utilisé avec les tags NFC, c'est là que la similitude se termine: c'est un protocole complètement différent avec son propre format de données (propriétaire).
donc, ce code n'est pas vraiment erroné (NFC sur WP8 n'est pas non plus généralement "défectueux"), mais si vous vous attendez à ce qu'il lise les balises Mifare, cette approche ne fonctionnera pas pour vous.
je ne sais pas si c'est possible lire les tags Mifare avec WP8: cela dépend du matériel (car Mifare utilise des cadres non-ISO) ainsi que du support de L'API. Une recherche rapide sur Google suggère que le SDK Java pour les téléphones Nokia plus anciens supporte Mifare, donc le support matériel peut être là. Je n'ai rien trouvé pour WP8, cependant, donc cela nécessitera probablement un codage étendu, si cela fonctionne à tous.
pour vous donner une idée de ce qui est nécessaire: après que vous obtenez votre événement DeviceArrived (ce qui signifie que le lecteur détecté une étiquette ISO NFC), vous devez obtenir l'UID de la carte. Cela devrait être assez facile, car c'est la fonctionnalité ISO standard.
ensuite, vous avez besoin de la capacité d'envoyer directement l'authentification Mifare et les commandes de secteur de lecture/écriture à la balise. Puisque ces commandes ne sont pas ISO-standard, c'est là que les choses deviennent plus délicates et dépendantes du lecteur. Pour franchir cette étape, il fallait vraiment de la documentation sur le protocole et un outil de test Mifare fonctionnel pour votre téléphone. Enfin, la plupart des cartes Mifare sont complètement illisibles à moins que vous ne connaissez au moins une clé de secteur, et le format de données d'application est propriétaire (spécifique à l'émetteur de la carte) ainsi, même après tout ce travail, il n'est pas garanti que vous pouvez obtenir des informations utiles sur la carte...
les applications Windows Phone 8 n'ont accès qu'aux bibliothèques de très haut niveau, et ne peuvent pas lire les balises qui ne sont pas formatées par NDEF.
les balises UL de MIFARE doivent utiliser la norme NDEF Type 2 du Forum NFC, ce qui est simpliste en raison de la petite mémoire utilisateur de 48 octets de la balise.
si vous avez un lecteur/écrivain de bas niveau, vous pouvez rendre votre UL tag NDEF conforme sans modifier la majorité de vos données, mais vous devrez sacrifier:
- les 4 octets de OTP de mémoire, à la page 3 (pour le NDEF Capacité Conteneur)
- les 6 premiers octets de la mémoire programmable de l'utilisateur (6 au minimum, pourrait vouloir pad à 8 pour remplir proprement les deux premières pages).
la balise est formatée comme suit: (référence - www.nfc-forum.org/specs/spec_list/#tagtypes)
- PAGE 3, BYTES 0-3: CC [MAGIC NUMBER, VERSION, USER MEM SIZE, READ/WRITE]
- PAGE 4, BYTES 0-1: NDEF message TLV HEADER [Type, Longueur] (Recommend type ExternalRtd)
- PAGE 4 OCTETS 2-3: ENREGISTREMENT DESCRIPTEUR (Comprend une chaîne qui spécifie le type d'enregistrement, suggèrent de 1 octet de long pour économiser de l'espace, ou 3 octets de long pour neat rembourrage)
- PAGE 5, BYTES 0-1 or 3: RECORD DESCRIPTOR
- LE RESTE DES PAGES / OCTETS SONT DES ENREGISTREMENTS / DONNÉES
exemple: Tag A le type de message ExternalRtd, et le type d'enregistrement "abc" (le type d'enregistrement doit techniquement être du format "urn:nfc:ext: companyname.com: typename" to be fully NDEF conforme, mais nous ne pouvons pas nous permettre d'utiliser autant d'espace)
[N ° De Page., Byte No.] , La Valeur , Le Commentaire
- [3, 0] , 0xE1 , Le nombre magique
- [3, 1] , 0x10 , le NDEF le numéro de Version majeur de la version 1, version mineur 0.
- [3, 2] , 0x06 , l'utilisateur taille de la mémoire de la balise / 8. Dans ce cas 6, puisque 6 * 8=48
- [3, 3] , 0x00 , lecture/écriture autorisée. 0x00 = écrire permis, 0x0F = lecture seule
- [4, 0] , 0x03 , La T dans la TLV, type. Dans ce cas, un message NDEF.
- [4, 1], 0x2E, le L dans le TLV, la longueur. Dans ce cas, le reste de la balise, 46 octets.
- [4, 2], 0xD4, Record MB_ME_CF_SR_IL_TNF. Dans ce cas, 11010100 (Est le premier enregistrement, est le dernier enregistrement, n'est pas un morceau, est un message court, pas d'identité, en-tête, est de type "Externe Type")
- [4, 3], 0x03, Longueur Du Type D'enregistrement. Dans ce cas 3 (taper "abc" est 3 long)
- [5, 0] , 0x28 , Charge utile Longueur, la reste de la balise. Dans ce cas 40.
- [5, 1] , 0x61 , le Premier octet de type, 0x61 = 97 = 'a'
- [5, 2] , 0x61 , Deuxième octet de type, 0x62 = 98 = 'b'
[5, 3] , 0x61 , Troisième octet de type, 0x63 = 99 = 'c'
les 40 octets restants de la balise, pages 6 à 11, sont votre charge utile.
si vous voulez simplement initialiser la balise pour que le téléphone puisse la lire et faire le reste, il suffit d'écrire le CC, et seulement le TLV avec un L de zéro et aucun V. (4,0 = 0x03 et 4,1 =0x00).
j'ai eu un problème similaire, j'ai acheté un paquet d'étiquettes NFC sur eBay, mais elles n'étaient pas formatées NDEF. WP8 ne peut utiliser que les tags formatés par NDEF, donc j'ai dû trouver un moyen de les formater. J'ai trouvé sur Twitter un gars avec un téléphone Android équipé de NFC et il a formaté ces étiquettes pour moi. Dommage que Windows Phone 8 ne puisse pas faire cela aussi bien.
vous pouvez voter ici sur la page officielle Wpdev Uservoice pour la fonctionnalité de bas niveau de L'API NFC:
fournir une API NFC de bas niveau pour le NDEF formatage et (un)verrouillage des étiquettes