NFC Card Writer Mifare

Da ich für unsere Events eine neue Feedback Anwendung baue, entstand der Wunsch die NFC Karten zu beschreiben. Dafür kommt wieder der ACR 122 U Reader zum Einsatz wie im Blog Post beschrieben. Auch ein Großteil des Codes wird wieder verwendet. Konkret wird das CardAdded Event des SmartCardReader Objektes verwendet um gleich die Karte bzw den NFC Tag zu beschreiben. Der VB.NET Code ist exakt auf die Mifare UltraLight Tags ausgelegt.

Wie schon im vorigen Artikel beschrieben und per reverse enegineering eruiert, ist der Speicher in 4 Byte größe Blöcke organisiert. Block 8-15 sind reine Daten in die wir Buchstaben als Hex Werte schreiben können.

 image

Da die NDEF Spezifikation recht umfangreich sind, habe ich nur Teile herausgenommen.

Block 7 enthält in 2 Bytes die Sprache (de) und der Rest sind die ersten Daten Bytes.

Block 6 enthält 01 dann die Länge, gefolgt vom Buchstaben T und 02

Block 5 scheint an Stelle 2 einen Abweichenden Wert zu haben. Im NFC Sample haben ich diesen ignoriert.

Um die Aufgabe einfacher zu machen, wurde die Länge auf komplett gelegt, was 34 Bytes entspricht. Warum das ein Hex 25, also 37 Bytes sind, bleibt offen. Es sind immer 34 Zeichen im Notfall mit Spaces aufgefüllt.

 

Letztendlich noch mein etwas wackeliger VB.NET Code um eine NFC Karte im NDEF Format zu beschreiben.

   1:   Private Async Sub CardAdded(sender As SmartCardReader, args As CardAddedEventArgs)
   2:          Dim card = args.SmartCard
   3:          Using connection As SmartCardConnection = Await card.ConnectAsync()
   4:              Dim cardIdentification = New IccDetection(card, connection)
   5:              Await cardIdentification.DetectCardTypeAync()
   6:              Dim mifareULAccess As MifareUltralight.AccessHandler = New MifareUltralight.AccessHandler(connection)
   7:              Dim lang = "de"
   8:              Dim daten = "AAAAAAAAAAAAAAAAAAAAAAA"
   9:              'Block 5 03 ?? d1 01 
  10:              'Block 6 01 Länge T 02
  11:              Dim ib() As Byte = {&H1, &H25, &H54, &H2}
  12:              mifareULAccess.WriteAsync(6, ib)
  13:              Dim b = Encoding.UTF8.GetBytes((lang + daten).PadRight(36)) '34 Nutzlast = 36/9 Blöcke
  14:              For i = 7 To 15
  15:                  mifareULAccess.WriteAsync(i, b.Skip((i - 7) * 4).Take(4).ToArray)
  16:                  Debug.WriteLine(b.Skip((i - 7) * 4).Take(4).ToArray)
  17:              Next
Kommentare sind geschlossen