Das Kommunikationsprotokoll der Legic-RFID-Baugruppe unterliegt der Geheimhaltung. Daher wird hier nur das Kommando zum Erfassen der UID beschrieben, damit Sie die Funktionsfähigkeit des RFID-Geräts prüfen können. 



Um die UID zu erfassen ist das Legic-Kommando SEARCH_TXP richtig.


0x04 01 02 CRC_H CRC_L würde nach einem ISO 14443A-Transponder suchen

0x04 = Länge des Länge
0x01 = Kommandokode
0x02 = Transpondertyp, ISO 14443A
CRC_H = 0x00 als Testwert erlaubt
CRC_L = 0x00 als Testwert erlaubt

Transpondertypen:
0x00 = LEGIC RF standard
0x01 = ISO 15693
0x02 = ISO 14443 A
0x03 = ISO 14443 B
0x04 = INSIDE Secure
0x05 = SONY FeliCa subset

…

Die Prüfsumme ist lt. Beschreibung des Kommunikationsprotokolls CRC-CCITT (CRC-16) mit diesem Generatorpolynom x^16 + x^12 + x^5 + 1 und dem Startwert 0xFFFF, Big Endian, Reversed 0x8408

Es ist aber lt. Unterlagen erlaubt einfach 0x0000 zu senden.

Online-Berechnung: http://crccalc.com => CRC-16/MCRF4XX

…

Beispielkommandos mit korrekter Prüfsumme in Hex-Werten:

04 01 00 43 8A = SEARCH_TXP für Legic
04 01 01 52 03 = SEARCH_TXP für ISO 15693 (I-Code SLI, μD, etc.)
04 01 02 60 98 = SEARCH_TXP für ISO 14443 A (Mifare, Ultralight, etc.)
04 01 03 71 11 = SEARCH_TXP für ISO 14443 B
04 01 04 05 AE = SEARCH_TXP für INSIDE Secure
04 01 05 14 27 = SEARCH_TXP für SONY FeliCa subset

…

Beispielcode:

unsigned int CRC16(unsigned char * p, int n)
{
int i;
int k;
unsigned int polynom = 0x8408; // CCITT
unsigned int crc = 0xFFFF; // inital value
for (i = 0; i < n; i++)
{
crc ^= p[i];
for (k = 0; k < 8; k++)
{
if (crc & 1) crc = (crc >> 1) ^ polynom;
else crc = crc >> 1;
}
}
return crc;
}
