RFID 13.56MHZ con modulo RDM880

Stanco degli insicuri e "statici" tag a 125KHz, ho acquistato dal sempre valido seeedstudio un modulo per gestire tag a 13.56MHz.

Il modulo si pilota tranquillamente con una seriale (9600 8N1).
Peccato che non riuscissi ad aver risposta a nessun pacchetto quando l'ho provato con un convertitore USB-seriale... Poi, ricercando un po' in rete ho trovato un post che mi ha "illuminato": semplicemente lasciavo flottante il reset invece di collegarlo a massa! Pio pio pio... Anche se, a dire il vero, la documentazione dice che si può lasciare flottante... E dopo un po' ha ripreso a funzionare anche col reset flottante...

Vabbè, almeno lo "scheletro" del codice è funzionante... I comandi vengono incapsulati correttamente.

Sono quindi riuscito a farmi restituire il codice di un tag.

> 0xaa 0x00 0x03 0x25 0x52 0x01 0x75 0xbb
< aa 00 06 00 00 e2 c4 77 33 64 bb
| Status = 00
| flag = 0
| sn=e2c47733

Status=00 vuol dire OK, flag=0 significa che c'è un solo tag. sn ovviamente è il codice statico del tag (analogo a quello a 125KHz).

Peccato però che se c'è più di un tag, riesco a leggerne solo uno...

Ora ne aggiungo un altro:

> 0xaa 0x00 0x03 0x25 0x52 0x01 0x75 0xbb
< aa 00 06 00 00 e2 c4 77 33 64 bb
| Status = 00
| flag = 0
| sn=e2c47733

Ops... Stessa risposta quando invece dovrebbe rispondere con flag = 0x01.
Stando alla documentazione che ho trovato, 0x25 è il comando per ottenere il seriale di un tag, il parametro 0x52 dice di risvegliarli tutti e 0x01 di mettere in halt quello che ha risposto. Per completezza ho anche provato ad inviare il comando di halt manualmente, ma senza risultato:

> 0xaa 0x00 0x03 0x25 0x26 0x01 0x01 0xbb
< 0xaa 0x00 0x06 0x00 0x00 0xc2 0x8c 0xf8 0x26 0x96 0xbb
| Status = 00 OK
| flag = 0 (single tag)
| sn=c28cf826
> 0xaa 0x00 0x01 0x06 0x07 0xbb
< 0xaa 0x00 0x02 0x00 0x80 0x82 0xbb
> 0xaa 0x00 0x03 0x25 0x26 0x01 0x01 0xbb
< 0xaa 0x00 0x06 0x00 0x00 0xc2 0x8c 0xf8 0x26 0x96 0xbb
| Status = 00 OK
| flag = 0 (single tag)
| sn=c28cf826
> 0xaa 0x00 0x01 0x06 0x07 0xbb
< 0xaa 0x00 0x02 0x00 0x80 0x82 0xbb
> 0xaa 0x00 0x03 0x25 0x26 0x01 0x01 0xbb
< 0xaa 0x00 0x06 0x00 0x00 0xc2 0x8c 0xf8 0x26 0x96 0xbb
| Status = 00 OK
| flag = 0 (single tag)
| sn=c28cf826
> 0xaa 0x00 0x01 0x06 0x07 0xbb
< 0xaa 0x00 0x02 0x00 0x80 0x82 0xbb

Qui ho ripetuto 3 volte il ciclo di interrogazione, con un solo tag nel campo.
Mi sarei aspettato una lettura sola e poi errore, invece viene riletto lo stesso tag! Malgrado l'halt (0x06) esplicito!

Ho quindi provveduto a cercare il produttore del modulo (che Seeedstudio non indicava...) e a contattarlo.
Ho così scoperto che, semplicemente non hanno implementato l'anticollisione per i tag Mifare. Ma sarebbero disponibili ad implementarlo se gli ordinassi almeno 300 pezzi!
Vabbè, lascio perdere (beh... rinvio) un'applicazione che avrebbe richiesto la presenza contemporanea di due tag e mi concentrerò su altro. Tanto, i tag Mifare sono solo marginalmente più sicuri (o "meno insicuri") di quelli a 125KHz. Per applicazioni sicure conviene rivolgersi a card crittografiche, come per esempio le MyEID Dual di Aventra.

0
Il tuo voto: Nessuna
Realizzato con Drupal, un sistema open source per la gestione dei contenuti