2011-04-14 3 views
11

Comment faire en sorte que le lecteur sans contact NFC ACR122U se comporte comme une étiquette (mode d'émulation de carte)? Le prospectus prétend que l'appareil peut effectuer une émulation de carte, mais le SDK ne semble pas fournir d'exemple ou de documentation pour cette fonctionnalité.ACR122 - Émulation de carte

Est-ce que quelqu'un sait comment faire cela? Des logiciels supplémentaires sont-ils nécessaires? Veuillez noter que ma plate-forme cible est MS Windows.

Merci à l'avance

+0

Vous pouvez utiliser le modèle p2p de l'ACR122U pour le définir comme modèle d'initiateur. J'ai vu votre autre question "Android 2.3.3 communication NFC peer-to-peer avec lecteur NFC basé sur PC", vous voulez nexus s parler avec une autre application basée sur PC. L'avez-vous mis en place? Ou vous utilisez ACR122U pour l'implémenter? – user556615

+0

Salut user556615, j'ai essayé d'utiliser p2p pour que le Nexus et l'ACR122U puissent communiquer, mais je n'ai jamais réussi à aller quelque part. – chalad

+0

Salut, je suis également essayer d'utiliser p2p communiquer Nexus et acr122u, je veux utiliser libnfc pour l'implémenter, mais n'ont pas géré, Nous avons le même problème, Si vous avez quelque chose de nouveau, Pouvez-vous me dire? Mon email: [email protected] – user556615

Répondre

5

Pour « Emulation Card » ou en d'autres termes, « Configurer comme cible et attendre initiateurs », s'il vous plaît se référer ici: http://code.google.com/p/nfcip-java/source/browse/trunk/nfcip-java/doc/ACR122_PN53x.txt

 
** Command to PN532 ** 
0xd4 0x8c TgInitAsTarget instruction code 
0x00 Acceptable modes 
(0x00 = allow all, 0x01 = only allow to be 
initialized as passive, 0x02 = allow DEP only) 

_6 bytes (_MIFARE_)_: 
0x08 0x00 SENS_RES 
0x12 0x34 0x56 NFCID1 
0x40 SEL_RES 

_18 bytes (_Felica_)_: 
0x01 0xfe 0xa2 0xa3 0xa4 0xa5 0xa6 0xa7 
NFCID2 
0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 
? 
0xff 0xff System parameters? 
0xaa 0x99 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11 
NFCID3 
0x00 ? 
0x00 ? 

C'est la réponse lorsqu'un initiateur activé cette cible:

 
** Response from PN532 ** 
0xd5 0x8d TgInitAsTarget response code 
0x04 Mode 
(0x04 = DEP, 106kbps) 

Faites-moi savoir si cela fonctionne!

+0

merci pour votre réponse - j'ai essayé mais ça n'a pas marché. Je vais essayer de nouveau et vous faire part de mes progrès. – chalad

+1

Cela semble prometteur. Quelqu'un a-t-il réussi à faire fonctionner cela? – conor

+0

FF 00 00 00 02 D4 56 a renvoyé une erreur (63) pour moi: -/ – Momro

1

Vous pouvez également essayer d'envoyer la ADPU suivante HEX pour mettre le lecteur en mode "émulation de carte":

FF 00 00 00 27 D4 8C 00 08 00 12 34 56 40 01 FE A2 A3 A4 A5 A6 A7 C0 C1 C2 C3 C4 C5 C6 C7 FF FF AA 99 88 77 66 55 44 33 22 11 00 00

+0

Salut Marko, j'ai récupéré la réponse suivante: D5 8D 26 1E D4 01 FE A2 A3 A4 A5 A6 A7 32 46 66 6D 01 01 10 03 02 01 04 01 96 90 – chalad

+0

Je ne sais pas ce que ça veut dire, mais je n'ai jamais réussi à obtenir une identification ou lire les secteurs de la carte émulée. – chalad

+0

Quelqu'un a-t-il compris cela? J'ai essayé le ci-dessus - obtenu la même réponse que chalad (en utilisant javax.smartcardio à l'ACR122U). La réponse vient quand vous mettez le NEXUS S sur le lecteur ACR122U. Dans les journaux NEXUS S, il apparaît comme la découverte d'une cible P2P mais obtient un échec NFCSTATUS. Je suppose que la compréhension des composants de TgInitAsTarget sera nécessaire pour aller plus loin. – gamozzii

0

Vous pouvez utiliser LibNFC. Il a un exemple de code pour cela.

Malheureusement, je n'ai toujours pas fonctionné correctement dans Windows. Vous devrez probablement compiler libnfc pour des pilotes spécifiques.

En outre, l'ACR122u semble être très mal supporté par de nombreuses bibliothèques. Apparemment, ce n'est pas vraiment conçu pour cet usage. Il y a aussi des problèmes particuliers pour l'émulation de cartes (comme le timeout). Nous avons vraiment tous besoin d'arrêter par l'ACR122u. Je viens d'acheter ce qui était populaire et facile à trouver, mais je le regrette maintenant.

Pour les futurs navigateurs/chercheurs rencontrant ceci: s'il vous plaît vérifier la section compatibilité sur le site libnfc et acheter quelque chose qu'ils recommandent!

1

Pour obtenir le ACR122 (ou plutôt la puce du contrôleur PN532 NFC à l'intérieur) en mode d'émulation de carte, vous le feriez sur les points suivants:

  1. ReadRegister:

    > FF000000 08 D406 6305 630D 6338 
    < D507 xx yy zz 9000 
    
  2. registre de mise à jour valeurs:

    xx = xx | 0x004; // CIU_TxAuto |= InitialRFOn 
    yy = yy & 0x0EF; // CIU_ManualRCV &= ~ParityDisable 
    zz = zz & 0x0F7; // CIU_Status2 &= ~MFCrypto1On 
    
  3. WriteRegister:

    > FF000000 11 D408 6302 80 6303 80 6305 xx 630D yy 6338 zz 
    < D509 9000 
    
  4. setParameters:

    > FF000000 03 D412 30 
    < D513 9000 
    
  5. TgInitAsTarget

    > FF000000 27 D48C 05 0400 123456 20 000000000000000000000000000000000000 00000000000000000000 00 00 
    < D58D xx ... 9000 
    

    xx doit être égale à 0x08.

  6. communiquer en utilisant une séquence de commandes TgGetData et TgSetData:

    > FF000000 02 D486 
    < D587 xx <C-APDU> 9000 
    

    Lorsque xx est le code d'état (devrait être 0x00 de succès) et C-APDU est l'ordre envoyé par le lecteur.

    > FF000000 yy D48E <R-APDU> 
    < D587 xx 9000 
    

    Lorsque yy 2 + est la longueur de la R-APDU (réponse) et xx est le code d'état (devrait être 0x00 de succès).

+0

Quand j'envoie le 'TgInitAsTarget' je n'obtiens aucune réponse. La réponse est vide. Savez-vous quelle est la cause? J'envoie ceci: '{(octet) 0xFF, 0x00, 0x00, 0x00, 0x27, (octet) 0xD4, (octet) 0x8C, 0x05, 0x04, 0x00, 0x12, 0x34, 0x56, 0x20, 0x00, 0x00, 0x00, 0x00 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00} ' –

+0

Il ressemble à ceci ne fonctionne que lorsque je mets mon téléphone sur le lecteur .. Une idée? –