programmier-guide - metratec gmbh · programmier-guide 1. das protokoll die meisten der von...
TRANSCRIPT
Programmier-Guide
Inhaltsverzeichnis
Inhaltsverzeichnis 3
1. Das Protokoll 5
2. Erläuterungen zu den Befehlsfeldern 7
2.1 Befehlslänge-Feld (notwendig bei binärer Codierung) 7
2.2 Flags-Feld (notwendig) 7
2.3 Befehlsfeld (notwendig) 10
2.4 Tag Typ Feld (notwendig für Taganfrage) 11
2.5 RID Feld 11
2.6 TID Feld 11
2.7 AFI Feld 11
2.8 Das Startblock-Feld 12
2.9 Anzahl Blöcke Feld 12
2.10 Daten Feld 12
2.11 CRC Feld 12
3. Das Antwortfeld 14
3.1 Antwortlänge Feld (notwendig bei binärer Codierung) 14
3.2 Antwort Code Feld (notwendig) 15
3.3 RID Feld 15
3.4 Tag Typ Feld 16
3.5 Antwort Daten-Feld 16
3.6 CRC Feld 16
4. Beschreibung der Befehle 17
4.1 Beschreibung der Organisation des Reader-Speichers 17
4.2 Zugriff auf den Laufzeit-Systemparameter-Speicher 18
4.3 Permanenter Zugriff auf Systemparameter-Speicher 21
4.4 Beschreibung der an das Tag gerichteten Befehle 24
5. Beispiele 28
5.1 Auslesen der Tag-Seriennummer (TID) eines Tags 28
5.2 Die Tag IDs aller im Feld befindlichen Tags auslesen 30
3
Programmier-Guide
5.3 Die TID von Tags kontinuierlich auslesen 32
5.4 Die TIDs von allen Tags kontinuierlich auslesen 36
5.5 Einen Tag in den ausgewählten Modus versetzen 38
5.6 Auslesen von Daten eines Tags bei Verwendung der TID 40
5.7 Auslesen von Daten eines Tags im ausgewählten Modus 41
5.8 Lesen vieler Blöcke von Tags im ausgewählten Modus 42
5.9 Daten auf ein Tag schreiben bei Verwendung der TID 44
5.10 Daten auf ein Tag im ausgewählten Modus schreiben 45
5.11 Mehrere Blöcke auf ein ausgewähltes Tag schreiben 47
5.12 Sperren eines Blocks bei Verwendung der TID 48
5.13 Sperren mehrerer Blöcke bei Verwendung der TID 50
5.14 Sperren eines Blocks auf einem ausgewählten Tag 51
5.15 Firmware-Version auslesen 51
5.16 Reader-ID (RID) lesen 53
5.17 Reader-ID (RID) setzen 54
5.18 Baudrate einstellen 56
5.19 Betriebsmodus einstellen 58
5.20 GPIO-Pin-Steuerung 61
5.21 Ansteuerung von metraTec Multiplexern 64
5.22 Startbefehl setzen 66
6. Tag-Typ Beschreibungen 70
6.1 ISO 15693 70
6.2 Tag-It HF 71
6.3 I-Code1 71
6.4 PicoTag 71
6.5 ISO 14443 71
6.6 Technische Daten der Transponder 72
7. Behandlung von Ausnahmesituationen 74
8. Versionsübersicht 75
4
Programmier-Guide
1. Das Protokoll
Die meisten der von metraTec RFID Solutions angebotenen Reader basieren auf dem SkyeTek
AURA Protokoll (Version 2) und sind 100% kompatibel zum diesem. Für die Steuerung dieser
Reader ist diese Anleitung gedacht. Ob Ihr Reader SkyeTeks AURA Plattform verwendet, können
Sie in der Dokumentation Ihres Readers nachlesen. Gleichzeitig können Sie diese Anleitung und
die aufgeführten Programmierbeispiele auch für alle anderen Reader nutzen, die auf dem
genannten Protokoll aufbauen, insbesondere die SkyeTek RFID Module M1, M1 Mini und M0.
Das Protokoll regelt den Datenaustausch zwischen einem Host (z.B. PC) und dem RFID Reader.
Es beschreibt, wie der Host mit dem Reader kommunizieren, ihn konfigurieren und befehligen
kann, um Lese- und Schreibzugriffe auf RFID Tags und Smart Labels zu erhalten.
Dieses Dokument beschreibt das Format der zwischen dem Host und dem RFID Reader
ausgetauschten Befehle. Zum besseren Verständnis sollte dieses Dokument in Verbindung mit
der Bedienungsanleitung des jeweiligen RFID Readers verwendet werden.
Das Protokoll legt ausschließlich die Kommunikation auf Datenebene fest. Kommunikation auf
Hardwarebene ist durch Hardware-Einstellungen und über die Art der Verbindung zum RFID
Reader wählbar. Bitte sehen Sie in der Bedienungsanleitung Ihres Gerätes diesbezüglich nach.
Des Weiteren unterstützt das Protokoll das ASCII- und das Binärformat. Der Host initiiert jegliche
Befehls- oder Antwortsequenz und bestimmt welches der eben genannten Formate genutzt wird.
Tabelle 1 – ASCII-Befehl und –Antwort
• CR entspricht dem ASCII-Code für ein Carriage Return
( CR = CHR$(13) = 0x0D [ENTER-Taste] ).
• LF entspricht dem ASCII-Code für ein Line Feed
( LF = CHR$(10) = 0x0A ).
• Damit ein einfaches Terminalprogram zur Kommunikation mit einem beliebigen RFID Reader
verwendet werden kann, wird jedes Byte des Befehls und der Antwort als zwei ASCII Zeichen mit
zugehörigem HEX-Wert des oberen und unteren Halbbytes gesendet.
• Beispiel: Wenn das single-byte Flags Feld während eines Befehls die Hexadezimalzahl des
Wertes 0x1A besitzt, dann sendet der Host zwei Zeichen: ASCII ‘1’ gefolgt von ASCII ‘A’.
5
Host: CR Befehl CR
RFID Reader: führt Befehl aus LF Antwort CR LF
Programmier-Guide
Tabelle 2 – Binär-Befehl und –Antwort
• STX entspricht dem ASCII-Code des Übertragungsbeginns (STX = CHR$(2) = 0x02).
• Bei binärer Übertragung muss jedes Byte innerhalb 10 ms nach dem vorangegangenen Byte
geschickt werden da eine Verzögerung von 10ms das das Ende der Übertragung anzeigt.
6
Host: STX Befehl
RFID Reader: führt Befehl aus STX Antwort
Programmier-Guide
2. Erläuterungen zu den Befehlsfeldern
obligatorische Felder
optionale Felder
Tabelle 3 – ASCII Befehlsformat
Tabelle 4 – Binäres Befehlsformat
2.1 Befehlslänge-Feld (notwendig bei binärer Codierung)
Das Befehlslänge-Feld gibt an wie viele Byte in der Hostanfrage enthalten sind, abzüglich
derer des <STX> und des Feldlänge-Feldes.
Beispiel: <STX> 0x05 0x20 0x14 0x00 0xF1CA
2.2 Flags-Feld (notwendig)
Die Bits des Flag-Felds legen Protokoll- und Befehlsoptionen fest.
7
Flags Befehl RID Tag
Typ
TID AFI Startblock Anzahl
Blöcke
Daten CRC
8
Bits
8 Bits 8
Bits
8 Bits 64
Bits
8
Bits
8 Bits 8 Bits N*8
Bits
16
Bits
Befehls-
länge
Flags Befehl RID Tag
Typ
TID AFI Start-
block
Anzahl
Blöcke
Daten CRC
8 Bits 8 Bits 8 Bits 8 Bits 8 Bits 64 Bits 8 Bits 8 Bits 8 Bits n*8 Bits 16 Bits
Programmier-Guide
Tabelle 5 – Flag-Feld Optionen
Es muss dabei beachtet werden, dass die vier oberen Bits und die vier unteren Bits als je eine
Hexadezimalzahl codiert werden. Wenn also das TID_F-Bit, das CRC_F-Bit und das INV_F-Bit
gesetzt sind, wird als Flag 62 (4+2; 2) übermittelt. Die acht Flag-Bits müssen also als zweimal
vier Flag-Bits interpretiert werden.
2.2.1 RID_F
RID_F = 1 Das RID Feld wird bei dem jeweiligen Befehl mit übermittelt, um einen speziellen
Reader ansprechen zu können (wenn es mehrere Reader am aktuellen Host gibt).
RID_F = 0 Das RID Feld wird mit dem jeweiligen Befehl nicht gesendet.
2.2.2 TID_F
TID_F = 1 Wenn dieses Flag gesetzt ist, wird das Tag-Seriennummern-Feld (TID-Feld) mit
übermittelt. Da alle vom Reader lesbaren Tags eine eindeutige TID haben, dient dies dazu, nur
das Tag mit der übermittelten TID anzusprechen. Dieses Flag sollte daher auch nur bei Tag-
Befehlen (bei denen das Tag-Bit gesetzt ist, siehe Kapitel 2.3) gesetzt sein.
Wenn mittels SELECT_TAG ein Tag über seine TID angesprochen wird, wird dieses in den
ausgewählten Modus versetzt. Dieser bleibt so lange erhalten bis das Tag das Feld des
Readers verlässt oder ein anderes Tag in den ausgewählten Modus versetzt wird. Solange sich
ein Tag im ausgewählten Modus befindet, müssen weitere Befehle nicht explizit an das Tag
gerichtet werden (es kann also TID_F=0 gesetzt sein), was die Übertragungszeit für die
Adressierung spart. Damit der ausgewählte Modus erhalten bleiben kann, sollte RF_F=1
gesetzt sein (siehe Kapitel 2.2.5), da sonst das Feld des Readers ausgeschaltet wird nach der
Ausführung des Befehls und der ausgewählte Modus damit automatisch aufgehoben wird.
TID_F = 0 Das TID Feld wird bei dem jeweiligen Tag-Befehl nicht übermittelt. Wenn vorher ein
Tag in den ausgewählten Modus versetzt wurde, bleibt dieser erhalten und das ausgewählte
Tag wird angesprochen.
2.2.3 CRC _F
CRC _F = 1 Das CRC Feld wird mit dem jeweiligen Befehl gesendet. Dies erlaubt es, eine
8
RID_
F
TID_F CRC_F AFI_F RF_F LOCK_
F
INV_
F
LOOP_F
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Programmier-Guide
Übertragung auf Vollständigkeit und Richtigkeit zu überprüfen, um Übertragungsfehler
auszuschließen. CRC_F muss bei binärer Codierung und bei der Übermittlung von System-
Schreibbefehlen (0x41 und 0x42) gesetzt sein.
CRC _F = 0 Das CRC Feld wird bei dem jeweiligen Befehl nicht mit gesendet.
2.2.4 AFI_F
AFI_F = 1 Das AFI Feld wird bei dem jeweiligen Befehl verwendet (nur verwendbar beim Select
Tag Befehl).
AFI_F = 0 Das AFI Feld wird bei dem jeweiligen Befehl nicht verwendet.
2.2.5 RF_F
RF_F = 1 Der RF Transmitter bleibt eingeschaltet nachdem der Befehl ausgeführt wurde. Dies
ist wichtig in Fällen, in denen sich die Tags einen aktuellen Status (z.B. “Stay Quiet” oder
ausgewählter Modus) aktiv merken müssen.
RF_F = 0 Schaltet den RF Transmitter ab, nachdem der Befehl ausgeführt wurde.
2.2.6 LOCK_F
LOCK_F = 1 erlaubt es, Speicherblocks auf den Tags zu sperren. Dieses Flag wird
ausschließlich in Verbindung mit dem WRITE_TAG Befehl verwendet, der dann kein Daten-
Feld erhält. Der jeweils angegebene Startblock und Anzahl Blöcke weitere Blöcke werden für
weiteres Schreiben gesperrt.
LOCK_F = 0 Bei allen anderen Befehlen.
2.2.7 INV_F
INV_F = 1 Dieses Bit darf nur beim SELECT_TAG-Befehl gesetzt sein (siehe Kapitel 4.4.1 -
ergibt sonst die Fehlermeldung 0x82, siehe Kapitel 3.2). Wenn dieses Flag gesetzt ist, sendet
der RFID-Reader nach dem Lesen der Tag-Seriennummer (TID) an das jeweilige Tag einen
“Stay Quiet”-Befehl. Wie immer sendet SELECT_TAG dann die gefundene TID als Antwort an
den Host zurück. Dieses als “Anti-Kollision” bezeichnete Feature (der so genannte INVentar-
Modus) erlaubt es daher, nacheinander die TIDs verschiedener im Feld befindlicher Tags
auszulesen. Damit Tags ausgeschaltet bleiben, müssen sie jedoch mit Energie versorgt werden,
was es erforderlich macht, dass das Tag im Feld bleibt und RF_F=1 gesetzt ist. In Verbindung
mit den Loop-Modus (siehe Kapitel 2.2.8) können so alle Tags im Feld automatisch detektiert
und ihre TIDs ausgelesen werden.
INV_F = 0 Setzen Sie dieses Flag um das senden des “Stay Quiet”-Befehls zu verhindern.
9
Programmier-Guide
SELECT_TAG gibt nur die Seriennummer des ersten gefundenen Tags zurück, bei anderen
Befehlen muss INV_F = 0 gesetzt sein, da sonst die Fehlermeldung 0x82, siehe Kapitel 3.2,
zurückgegeben wird.
2.2.8 LOOP_F
LOOP_F = 1 Dieses Bit darf nur beim SELECT_TAG-Befehl gesetzt sein (siehe Kapitel 4.4.1 -
ergibt sonst die Fehlermeldung 0x82, siehe Kapitel 3.2). Wenn es gesetzt ist, wird der
SELECT_TAG-Befehl automatisch so lange wiederholt bis der Loop-Modus beendet wird. Als
Antwort wird zuerst die erfolgreiche Aufnahme des Loop-Modus gesendet (0x1C, siehe Kapitel
3.2). Danach liefert der Befehl in schneller Folge für jede Iteration in der ein oder mehrere
Tag(s) gefunden wurde(n) die TID(s) zurück. Wenn keine Tags gefunden wurden wird nichts
zurückgegeben bis ein Tag in das Feld gelangt.
LOOP_F = 0 Einziger vorgesehener Wert für alle Befehle außer SELECT_TAG, ergibt sonst die
Fehlermeldung 0x82, siehe Kapitel 3.2. Der jeweilige Befehl wird einmalig ausgeführt und gibt
eine Antwort zurück.
2.3 Befehlsfeld (notwendig)
Das Befehlsfeld spezifiziert die Art und das Ziel des Hostbefehls.
Tabelle 6 – Befehlsfeld
Jeder Befehl legt genau einen Befehlstyp und genau ein Ziel des Befehls fest. Demnach
beträgt der Wert des Befehls genau 2 Bit-Sätze – vier Bits im oberen Halbbyte und vier Bits im
unteren Halbbyte.
Nachfolgende Liste zeigt die vom Protokoll unterstützten Befehle.
10
Befehlstyp Ziel des Befehls
Reserviert
(auf 0
setzen)
Schreib_Bit Lese_Bit Sel_Bit Reserviert
(auf 0
setzen)
Tag_Bit Sys_Bi
t
Mem_Bit
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Programmier-Guide
Tabelle 7 – Liste der Befehle
2.4 Tag Typ Feld (notwendig für Taganfrage)
Das optionale Tag Typ Feld wird verwendet im Falle einer Taganfrage (d.h. wenn Tag_Bit=1 im
Befehlsfeld). Das Tag Typ Feld legt den Typ des RFID Tags fest mit dem der RFID Reader zu
kommunizieren versucht.
2.5 RID Feld
Das RID Feld gibt die Reader ID desjenigen Readers an, an den der Host einen Befehl sendet.
Das RID Feld wird nur angegeben im Fall eines Befehls mit RID_F=1.
2.6 TID Feld
TID steht für das Tag ID Feld. Der Host kann festlegen an welches Tag ein Befehl geleitet wird.
Das optionale TID Feld wird im Falle eines Befehls mit TID_F=1 verwendet. TID_F ist nur
zulässig wenn eine Tagbefehl gesendet wird.
2.7 AFI Feld
AFI steht für AnwendungsFeld Identifikation. Dieses Feld kann nur bei einem SELECT_TAG
Befehl verwendet werden. Die ICode1- und ISO15693-Tagtypen unterstützen AFI. Falls ein
Befehl AFI beinhaltet, dann werden nur Tags mit übereinstimmendem AFI den Befehl
beantworten.
11
Wert Name
0x14 SELECT_TAG
0x21 READ_MEM
0x22 READ_SYS
0x24 READ_TAG
0x41 WRITE_MEM
0x42 WRITE_SYS
0x44 WRITE_TAG
Programmier-Guide
2.8 Das Startblock-Feld
Das Startblock-Feld legt die Adresse des Startblocks für Lese- und Schreiboperationen fest.
Das Startblock-Feld wird nicht im Fall von SELECT-Befehlen verwendet. Im Falle des Lese- oder
Schreibzugriffes auf den Speicher des RFID Readers entspricht der Datenblock einem Byte an
Daten. Im Falle von Lese- oder Schreibzugriffen auf den Speicher des Tags hängt die Größe
der Datenblöcke von der Art des Tags ab (eine Übersicht zu den Tagtypen findet sich in
Tabelle 34).
2.9 Anzahl Blöcke Feld
Das Anzahl Blöcke Feld gibt die Anzahl der zu lesenden oder zu schreibenden Datenblöcke auf
dem jeweiligen Tag an.
Das Anzahl Blöcke Feld wird nicht in Fällen von SELECT-Befehlen verwendet. Bei
Systemanfragen wird das Anzahl Blöcke Feld immer mit 0x01 belegt.
2.10Daten Feld
Das Daten Feld enthält den zu schreibenden Wert eines Schreibbefehls. Das optionale Feld
wird nicht von SELECT- und READ-Befehlen verwendet.
2.11CRC Feld
Das CRC (Zyklische Redundanzprüfungs-) Feld ist optional (wird verwendet wenn CRC_F = 1)
falls das ASCII-Format verwendet wird. In Fällen, in denen das Binärformat verwendet wird
oder in denen Systemparameter geschrieben werden (Befehle 0x41 und 0x42), muss CRC
verwendet werden (CRC_F muss gleich 1 gesetzt werden).
Das CRC Feld ist 2 Bytes groß und wird vom Host berechnet abhängig davon, welche
Befehlsfelder gesetzt sind. Es werden bei Befehlen bzw. Antworten jeweils alle verwendeten
Felder mit eingerechnet mit Ausnahme der Start- und Stopbytes (STX, CR, LF, etc.).
Es wird das CRC_CCITT Polynom (x16 + x12 + x5 + 1 = 0x8408) für die Berechnung des CRC
verwendet mit einem Startwert von 0x0000.
12
Programmier-Guide
Abbildung 1 – C Implementation der CRC Berechnung
CRC Berechnungsbeispiel:
Ein einfacher Befehl (ASCII), um die Tag ID eines ISO15693-Tags zu erhalten, wäre:
<CR><001401><CR>, mit Flags=0x00, Befehl=0x14, Tag Typ=0x01.
(ohne CRC)
Falls CRC_F im Flags Feld gesetzt ist, dann wird aus dem Befehl:
<CR><201401E043><CR>, wobei Flags=0x20, Befehl=0x14, Tag Typ=0x01, CRC=0xE043.
Eine mögliche Antwort des RFID Readers könnte sein:
<LF><14E00700000147637A1AA2><CR><LF>, wobei der Antwort Code=0x14, die
Antwort Daten=0xE00700000147637A und CRC=0x1AA2 ist.
13
// *dataP ist ein Zeiger auf ein Bytearray, über diesen wird die CRC errechnet.// n entspricht der Anzahl der Bytes im Array auf das mit *dataP gezeigt wird.//unsigned int crc16( unsigned char * dataP, unsigned char n ){unsigned char i, j; // Bytezaehler, Bitzaehlerunsigned int crc_16; // Berechnungsvariablecrc_16 = 0x0000; // Startwert
for (i = 0; i < n; i++) // Überprüfe jedes Bit im jeweiligen Byte{crc_16 ^= *dataP++; //for (j = 0; j < 8; j++) // Check every bit in the respective byte{
if(crc_16 & 0x0001 ) //{
crc_16 >>= 1;crc_16 ^= 0x8408; // Polynome x^16 + x^12 + x^5 + 1
}else{
crc_16 >>= 1;}
}}return( crc_16 ); // Gibt berechneten CRC-Wert zurück (16 Bit)}
Programmier-Guide
3. Das Antwortfeld
Tabelle 8 – ASCII Antwort
Tabelle 9 – Binäre Antwort
Im ASCII-Fall ist das einzige notwendige Feld das für den Antwort Code, bei binärer Codierung
zusätzlich noch das Antwortlänge-Feld.
Alle anderen Felder sind optional und deren Verwendung hängt vom Wert des Antwort Code
Feldes ab.
3.1 Antwortlänge Feld (notwendig bei binärer Codierung)
Das Antwortlänge-Feld gibt an wie viele Byte in der Antwort enthalten sind, ausschließlich des
Antwortlänge-Bytes und des <STX>-Bytes.
Dieses Feld ist im Binär-Modus notwendig, bei Verwendung des ASCII-Modus nicht
vorgesehen. Siehe Beispiele aus Abschnitt 5.
14
Antwort
Code
RID Tag
Typ
Antwort
Daten
CRC
8 Bits 8
Bits
8 Bits n*8 Bits 16
Bits
Antwortläng
e
Antwort
Code
RID Tag
Typ
Antwort
Daten
CRC
8 Bits 8 Bits 8
Bits
8 Bits n*8 Bits 16
Bits
Programmier-Guide
3.2 Antwort Code Feld (notwendig)
Tabelle 10 – Antwort Code
3.3 RID Feld
Das RID-Feld ist nur vorhanden wenn der zugehörige Befehl mit RID_F = 1 gesendet wurde. Es
enthält die ID des Readers, der die Antwort gesendet hat.
15
Antwort
Code
Beschreibung
0x14 SELECT _TAG Erfolg
0x1C SELECT _TAG LOOP Aktivieren
0x94 SELECT _TAG Misserfolg
0x9C SELECT _TAG LOOP Beenden
0x21 READ_MEM Erfolg
0x22 READ_SYS Erfolg
0x24 READ_TAG Erfolg
0XA1 READ_MEM Misserfolg
0xA2 READ_SYS Misserfolg
0xA4 READ_TAG Misserfolg
0x32 EVENT_Report
0xC2 EVENT_Fehler
0x41 WRITE_MEM Erfolg
0x42 WRITE_SYS Erfolg
0x44 WRITE_TAG Erfolg
0xC1 WRITE_MEM Misserfolg
0xC2 WRITE_SYS Misserfolg
0xC4 WRITE_TAG Misserfolg
0x80 Nicht-ASCII Zeichen in Befehl
0x81 CRC stimmt nicht
0x82 Flags passen nicht zum Befehl
0x83 Flags passen nicht zum Tag Typ
0x84 Unbekannter Befehl
0x85 Unbekannter Tag Typ
0x86 Ungültiger Startblock
0x87 Ungültiger Anzahl an Blocks
0x88 Ungültige Befehlslänge
Programmier-Guide
3.4 Tag Typ Feld
Das Tag Typ Antwortfeld ist nur vorhanden wenn ein Befehl vom Typ SELECT_TAG mit
TAG_TYPE = AUTO (0x00) gestellt wurde. Tabelle 34 in Kapitel 6.6 zeigt die Liste der Codes
der unterschiedlichen Tag Typen.
3.5 Antwort Daten-Feld
Das Antwort Daten-Feld ist in der Antwort vorhanden falls vom Host Daten angefragt wurden
wie z.B. Tag ID, Tag Block-Daten oder Systemparameter-Daten.
3.6 CRC Feld
Das CRC (Zyklische Redundanzprüfungs-) Feld ist in der Antwort auf jeden Befehl vorhanden,
bei dem CRC_F gesetzt ist.
Die Ermittlung der CRC für eine Antwort verwendet den gleichen Algorithmus wie bei einem
Befehl (siehe Abschnitt 2.11). Dort wurde ein Beispiel gezeigt bei dem der Reader mit
<LF><14E00700000147637A1AA2><CR><LF> geantwortet hatte. Der Host hat nun zwei
Wege, die Antwort zu verifizieren.
3.6.1 Abgleichen der CRC
Der Host berechnet den CRC aus den übermittelten Daten (0x14E00700000147637A) und
bekommt den Wert 0x1AA2. Ein positiver Vergleich schließt Übertragungsfehler aus.
3.6.2 Berechnung von 0x0000 aus der Antwort-CRC
Der Host verifiziert die Antwort indem er die CRC berechnet aus
0x14E00700000147637AA21A und dabei den Wert 0x0000 erhält. Man beachte, dass diesmal
die Reihenfolge der CRC Bytes vertauscht ist, da die Antwort MSByte übertragen wurde, sie
aber LSByte verwendet werden muss.
16
Programmier-Guide
4. Beschreibung der Befehle
4.1 Beschreibung der Organisation des Reader-Speichers
Der RFID Reader hat 256 Bytes an EEPROM-Speicher. In einem Teil dieses Systemspeichers
sind Systemparameter abgelegt. Die Systembefehle ermöglichen das Lesen und Setzen von
Systemparametern die der RFID Reader intern verwendet. Systemparameter legen ein
bestimmtes Betriebsverhalten des RFID Readers fest.
Einige dieser Systemparameter können durch entsprechende Befehle an den Reader geändert
werden, um dessen Verhalten entsprechend anzupassen. Dabei können sie entweder im
permanenten Speicher geändert werden (Befehl 0x41 - sie werden dann erst nach einem
Neustart geändert wirksam) oder sie können im Laufzeit-Speicher geändert werden (Befehl
0x42 - wo ihre Änderung sofort wirksam wird, jedoch nach einem Ausschalten verloren geht).
Beispiele für die Verwendung der einzelnen Systemparameter finden sich in Kapiteln 5.15 bis
5.22.
Die folgende Tabelle zeigt die Organisation des System-Parameterspeichers.
17
Programmier-Guide
Tabelle 11 – Organisation des System-Parameterspeichers
Speicherbereiche oberhalb 0x12 sind reserviert und weder schreib- noch lesbar.
4.2 Zugriff auf den Laufzeit-Systemparameter-Speicher
Im Laufzeit-Systemparameter-Speicher speichert der Reader die aktuellen Werte der
Systemparameter. Diese können mit Hilfe des Befehls 0x22 gelesen und in den mit Hilfe des
Befehls 0x42 geschrieben werden. Die Adressierung in diesem Speicher ist der vorherigen
Tabelle 11 angegeben. Änderungen, die mittels WRITE_SYS (0x42) in den Laufzeit-Speicher
geschrieben werden, werden sofort wirksam, gehen jedoch bei einem Neustart des Readers
verloren.
4.2.1 READ_SYS
Der Host liest Daten aus dem Laufzeit-Systemparameter-Speicher des RFID Readers.
Tabelle 12 – Befehl für READ_SYS
18
Name Adresse Wertebereich Fabrikeinstellung Definiert Leserecht Schreibrecht
Seriennummer 0x00 0x00000000-0xFFFFFFFF
individuell Seriennummer individuell
Nein
Firmware-
Version
0x01 0x0000-0xFFFF
Release-abhängig
Firmware-Version
Ja Nein
Reader-ID (RID) 0x02 0x00-0xFF 0xFF (“keine RID”)
Reader-Netzwerk-ID
Ja Ja
Baudrate 0x03 0xFF0x000x010x020x030x04-0xFE
0x0048009600192003840057600reserviert
Nein Ja
Betriebszustand 0x04 0x000x01-0xFF
Nicht Anwendbar
SchlafmodusAktiviert
Nein Ja
Reserviert 0x05-0x06
Nein Nein
I/O-Pin
Richtung
0x07 0x00-0xFF 0x00 Definiert, ob I-oder O-Pin
Ja Ja
I/O Werte 0x08 Schreibt O-Werte, Liest I-Werte
Ja Ja
Reserviert 0x09-0x11
Nein Nein
Startbefehl 0x12 speziell 0x00 speziell Nein Ja
Programmier-Guide
Das Startblock-Feld legt fest bei welcher Startadresse mit dem Lesen angefangen werden soll.
Die Aufschlüsselung finden Sie in Tabelle 11.
Das Anzahl Blöcke-Feld legt die Anzahl der zu lesenden Systemparameter fest.
Das Daten-Feld wird nur im Falle spezieller Systembefehle verwendet.
Tabelle 13 – Flags des READ_SYS-Befehls
Falls RID_F=1, dann ist das optionale RID Feld im Befehl eingebunden. Dies macht nur in
Umgebungen mit mehreren Readern Sinn.
Falls CRC_F=1, dann ist das optionale CRC Feld im Befehl enthalten.
Tabelle 14 – Antwort auf READ_SYS
Falls das Antwort Code-Feld einen erfolgreichen Lesebefehl anzeigt (Antwort Code = 0x22)
dann enthält die Antwort das Antwort Daten-Feld, das Anzahl Blöcke Bytes enthält, die
erfolgreich aus den Systemparametern des Readers gelesen wurden. Die Aufschlüsselung,
welche Daten von dort gelesen werden können, finden Sie in Tabelle 11.
Falls das Antwort Code-Feld einen Fehler ausgibt, ist das Antwort Daten-Feld nicht belegt.
Wenn beim Lesebefehl das CRC_F-Flag gesetzt war, wird das CRC Feld in die Antwort
19
Befehlslänge Flags Befehl RID Startblock Anzahl
Blöcke
Daten CRC
8 Bits 8
Bits
0x22 8
Bits
8 Bits 0x01 n*8
Bits
16
Bits
RID_
F
CRC_F
Bit 7 Bit
6
Bit 5 Bit
4
Bit
3
Bit
2
Bit
1
Bit 0
Antwortläng
e
Antwort
Code
RID Antwort
Daten
CRC
8 Bits 8 Bits 8
Bits
N*8 Bits 16 bits
Programmier-Guide
eingebunden.
Wenn beim Lesebefehl das RID_F-Flag gesetzt war, wir das RID Feld in die Antwort mit
eingebunden.
4.2.2 WRITE_SYS
Der Host schreibt Daten in den Laufzeit-Systemparameter-Speicher des RFID Readers.
Tabelle 15 – Befehl für WRITE_SYS
Der Startblock legt fest, an welcher Stelle mit dem Schreiben in den Laufzeit-Systemparameter-
Speicher des Readers begonnen werden soll. Die Adressaufschlüsselung finden Sie in Tabelle
11. Bitte bedenken Sie, dass das Schreiben in den Laufzeit-Systemparameter-Speicher zwar
sofortige Resultate erzielt, die neuen Werte jedoch nach einem Ausschalten verloren gehen.
Das Anzahl Blöcke-Feld legt die Anzahl der zu schreibenden Systemparameter fest.
Das Daten-Feld bestimmt die Werte, die in den Systemparameter-Speicher geschrieben
werden. Das Daten-Feld muss die im Anzahl Blöcke-Feld festgelegte Byte-Anzahl beinhalten.
Das CRC Feld wird für alle WRITE_SYS Befehle benötigt.
Tabelle 16 – Flags im Befehl für WRITE_SYS
Falls RID_F=1 ist, wird das optionale RID Feld mit in den Befehl eingebunden um einen RFID
Reader für die Schreiboperation zu spezifizieren.
Es ist unbedingt erforderlich, CRC_F=1 zu setzen. Somit wird das CRC Feld in jeden
WRITE_SYS Befehl eingebunden.
20
Befehlslänge
Flags
Befehl RID Startblock Anzahl
Blöcke
Daten CRC
8 Bits 8 Bits 0x42 8
Bits
8 Bits 0x01 n*8
Bits
16
Bits
RID_
F
CRC_F
Bit 7 Bit
6
Bit 5 Bit
4
Bit
3
Bit
2
Bit
1
Bit 0
Programmier-Guide
Tabelle 17 – Antwort auf WRITE_SYS
Ein Antwort Daten-Feld ist im Falles eines WRITE_SYS-Befehls nicht vorgesehen.
Weil das CRC-Feld obligatorisch im Befehl vorkommt, wird es auch immer in der Antwort
enthalten sein.
Falls RID_F im Befehl gesetzt ist, wird das RID Feld in der Antwort eingebettet sein.
4.3 Permanenter Zugriff auf Systemparameter-Speicher
Neben dem Laufzeit-Systemparameter-Speicher besitzt der Reader auch noch einen
permanenten Speicher für Systemparameter, aus dem mit Hilfe des Befehls 0x21 gelesen und
in den mit Hilfe des Befehls 0x41 geschrieben werden kann. Die Adressierung in diesem
Speicher ist analog zu den vorherigen Befehlen in Tabelle 11 angegeben. Änderungen, die
mittels WRITE_MEM (Befehl 0x41) in den permanenten Speicher geschrieben werden, werden
erst nach einem Neustart des Readers wirksam.
4.3.1 READ_MEM
Der Host liest die Daten aus dem Speicher des RFID Readers. Für die Zuordnung von
Speicheradressen und Werten siehe Tabelle 11. Dort ist auch angegeben, welche Werte aus
dem Speicher gelesen werden können.
Tabelle 18 – Befehle für READ_MEM
Das Startblock-Feld legt die Speicheradresse fest, ab der gelesen wird.
Das Anzahl Blöcke-Feld gibt die Anzahl der Speicherblöcke an, die zu lesen sind.
21
Antwortläng
e
Antwort
Code
RID CRC
8 Bits 8 Bits 8
Bits
16
Bits
Befehlslänge Flags Befehl RID Startblock Anzahl
Blöcke
CRC
8 Bits 8
Bits
0x21 8
Bits
8 Bits 0x01 16
Bits
Programmier-Guide
Tabelle 19 – Flags im Befehl READ_MEM
Falls RID_F=1 ist, wird das optionale RID Feld in den Befehl zur Spezifizierung des RFID
Readers eingesetzt. Dies macht in Systemen mit mehreren Readern Sinn.
Falls CRC_F=1 ist, wird das optionale CRC Feld im Befehl verwendet.
Tabelle 20 – Antwort auf READ_MEM
Falls das Antwort Code-Feld eine erfolgreiche READ_MEM Operation anzeigt (Antwort Code =
0x21), beinhaltet die Antwort im Antwort Daten-Feld die Bytes, die erfolgreich aus dem
Speicher gelesen wurden.
Falls das Antwort Code-Feld eine Fehlermeldung enthält, ist das Antwort Daten-Feld in der
Antwort nicht belegt.
Falls CRC_F im Befehl gesetzt ist, wird das CRC Feld in die Antwort eingebunden.
Falls das RID_F im Befehl gesetzt ist, wird das RID Feld in die Antwort eingebunden.
4.3.2 WRITE_MEM
Der Host schreibt Daten in den permanenten Systemparameter-Speicher des RFID Readers.
Für die Zuordnung von Speicheradressen und Werten siehe Tabelle 11. Dort ist auch
angegeben, welche Werte in den Speicher geschrieben werden können.
Tabelle 21 – Der Befehl WRITE_MEM
22
RID_
F
CRC_F
Bit 7 Bit
6
Bit 5 Bit
4
Bit
3
Bit
2
Bit
1
Bit 0
Antwortläng
e
Antwort
Code
RID Antwort
Daten
CRC
8 Bits 8 Bits 8
Bits
n*8 Bits 16
Bits
Programmier-Guide
Das Startblock-Feld legt die Speicheradresse fest ab der in den Speicher geschrieben wird.
Bitte bedenken Sie, dass Änderungen im permanenten Systemparameterspeicher erst nach
einem Neustart des Readers wirksam werden.
Das Anzahl Blöcke-Feld gibt die Anzahl der zu schreibenden Datenblöcke an.
Das Daten-Feld legt den zu schreibenden Inhalt fest. Das Daten-Feld muss die im Anzahl
Blöcke-Feld festgelegte Anzahl an Bytes enthalten.
Das CRC Feld wird für jeglichen WRITE_MEM Befehl benötigt.
Tabelle 22 – Flags für WRITE_MEM
Falls RID_F=1 ist, beinhaltet der Befehl das optionale RID Feld um einen bestimmten Reader in
einem System mit mehreren Readern anzusprechen.
Es ist erforderlich, dass CRC_F=1 ist. Demnach beinhalten alle WRITE_MEM-Befehle das CRC
Feld.
Tabelle 23 – Antwort auf WRITE_MEM
Ein Antwort Daten-Feld ist in der Antwort nicht vorgesehen.
Da CRC bei diesem Befehl obligatorisch ist, wird es jeweils in der Antwort eingebunden.
23
Befehlslänge Flags Befehl RID Startblock Anzahl
Blöcke
Daten CRC
8 Bits 8
Bits
0x41 8
Bits
8 Bits 8 Bits n*8
Bits
16
Bits
RID_
F
CRC_F
Bit 7 Bit
6
Bit 5 Bit
4
Bit
3
Bit
2
Bit
1
Bit 0
Antwortläng
e
Antwort
Code
RID CRC
8 Bits 8 Bits 8
Bits
16
Bits
Programmier-Guide
Falls RID_F im Befehl gesetzt ist, wird das RID Feld in die Antwort eingebunden.
4.4 Beschreibung der an das Tag gerichteten Befehle
Die Tagbefehle wirken auf ein oder mehrere Tags vom eingestellten Tag Typ im RF Feld des RFID Readers.
4.4.1 SELECT_TAG
Der SELECT_TAG Befehl hat sehr unterschiedliche Wirkung je nach Belegung der Bits im Flags
Feld.
Tabelle 24 – Der Befehl SELECT_TAG
Tabelle 25 – Flags für SELECT_TAG
Falls RID_F=1 ist, wird das optionale RID Feld in den Befehl zur Spezifizierung des RFID
Readers eingesetzt. Dies macht in Systemen mit mehreren Readern Sinn.
Falls CRC_F=1 ist, wird das optionale CRC Feld im Befehl verwendet.
24
Befehlslänge Flags Befehl RID Tag
Typ
TID AFI CRC
8 Bits 8
Bits
0x14 8
Bits
8 Bits 64
Bits
8
Bits
16
Bits
RID_
F
TID_F
CRC_F AFI_F
RF_F
INV_
F
LOOP_F
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit
2
Bit 1 Bit 0
Programmier-Guide
Tabelle 26 – Antwort auf SELECT_TAG
Falls das Antwort Code-Feld eine erfolgreiche SELECT_TAG Operation anzeigt, ist das Antwort
Daten-Feld belegt und enthält eine eindeutige TID. Die Größe der TID hängt jeweils vom Tag
Typ und der Version ab.
Falls der Befehl, Tag Typ = AUTO (0x00) enthält, ist das Tag Typ-Feld in der Antwort belegt.
Falls RID_F im Befehl gesetzt ist, wird das RID Feld in den Antwort eingebunden.
4.4.2 WRITE_TAG
Der WRITE_TAG Befehl schreibt Daten auf einen Tag.
Tabelle 27 – Der Befehl WRITE_TAG
Tabelle 28 – Flags für WRITE_TAG
Falls RID_F=1 ist, wird das optionale RID Feld in den Befehl zur Spezifizierung des RFID
Readers eingesetzt. Dies macht in Systemen mit mehreren Readern Sinn.
Falls TID_F=1 ist, ist das optionale TID Feld im Befehl enthalten um festzulegen, welches Tag
beschrieben werden soll.
25
Antwortläng
e
Antwort
Code
RID Tag
Typ
Antwort
Daten
CRC
8 Bits 8 Bits 8
Bits
8 Bits n*8 Bits 16
Bits
Befehlslänge Flags Befehl RID Tag
Typ
TID Startblock Anzahl
Blöcke
Daten CRC
8 Bits 8
Bits
0x44 8
Bits
8 Bits 64
Bits
8 Bits 8 Bits n*8
Bits
16
Bits
RID_
F
TID_F
CRC_F
RF_F
LOCK_
F
Bit 7 Bit 6 Bit 5 Bit
4
Bit 3 Bit 2 Bit
1
Bit 0
Programmier-Guide
Falls LOCK_F=1 ist, wird das Daten-Feld im Befehl nicht verwendet.
Das Startblock-Feld legt die Blockadresse am unteren Ende des zu beschreibenden Tag
Speichers fest.
Das Anzahl Blöcke-Feld gibt die Anzahl der zu beschreibenden Tag Blocks an.
Das Daten-Feld legt den zu schreibenden Inhalt für die zu beschreibenden Tag Blocks fest.
Falls das Anzahl Blöcke-Feld angibt, dass mehr als ein Block zu schreiben ist sind die Daten im
Daten-Feld so organisiert, dass der erste Block als erstes im Daten-Feld steht.
Tabelle 29 – Antwort auf WRITE_TAG
Das Antwort Daten-Feld ist im Falles einer Antwort auf einen Write-Tag Befehl nicht
vorgesehen.
Falls RID_F im Befehl belegt ist, wird das RID Feld in der Antwort enthalten und belegt sein.
4.4.3 READ_TAG
Der Host liest Daten der Tags im RF Feld des RFID Readers.
Tabelle 30 – Der Befehl READ_TAG
Tabelle 31 – Flags für READ_TAG
26
Antwortläng
e
Antwort
Code
RID CRC
8 Bits 8 Bits 8
Bits
16
Bits
Befehls-länge Flags Befehl RID Tag
Typ
TID Startblock Anzahl
Blöcke
CRC
8 Bits 8
Bits
0x24 8
Bits
8 Bits 64
Bits
8 Bits 8 Bits 16
Bits
Programmier-Guide
Falls RID_F=1 ist, wird das optionale RID Feld in den Befehl zur Festlegung des
angesprochenen RFID Readers eingebunden.
Falls TID_F=1 ist, wird das optionale TID Feld in den Befehl zur Festlegung des auszulesenden
Tags eingebunden.
Falls CRC_F=1 ist, wird das CRC Feld in den Befehl eingebunden.
Falls RF_F=1 ist, wird der RF Reader auch nach Ausführung des Read Befehls aktiviert bleiben.
Tabelle 32 – Antwort auf READ_TAG
Falls das Antwort Code-Feld eine erfolgreiche READ_TAG Operation angibt (Antwort
Code=0x24), dann beinhaltet das Antwort Daten-Feld Anzahl Blöcke an Daten welche
erfolgreich aus dem Tag gelesen wurden. Die Größe eines jeden Blockes hängt vom jeweiligen
Tag Typ und -Version ab.
Falls das Antwort Code-Feld einen Fehlercode ausgibt, ist das Antwort Daten-Feld nicht
belegt.
Falls RID_F im Befehl gesetzt ist, wird das RID Feld in der Antwort enthalten sein.
27
RID_
F
TID_F CRC_F RF_F
Bit 7 Bit 6 Bit 5 Bit
4
Bit 3 Bit
2
Bit
1
Bit 0
Antwortläng
e
Antwort
Code
RID Antwort
Daten
CRC
8 Bits 8 Bit 8
Bit
n*8 Bit 16
Bits
Programmier-Guide
5. Beispiele
Nachdem in Kapiteln 2-4 der prinzipielle Aufbau und die Funktionsweise der Befehle erläutert
wurden, sollen in diesem Kapitel einige Beispiele gezeigt werden, Anhand derer die
Vorgehensweise bei der Programmierung eines eigenen Interfaces verdeutlicht werden soll.
5.1 Auslesen der Tag-Seriennummer (TID) eines Tags
Um TIDs auszulesen wird generell der SELECT_TAG-Befehl verwendet (0x14). Um nur ein Tag
anzusprechen, wird INV_F nicht (bzw. auf Null) gesetzt. Unter diesen Voraussetzungen wird nur
eine TID gelesen – sollten sich mehrere Tags im Feld befinden wird nur das zuerst antwortende
gelesen.
5.1.1 TID auslesen unabhängig von Tag-Typ (Auto-Detect)
Wenn der Tag-Typ, der gelesen werden soll, nicht vorgegeben wird (Auto-Detect), dann liefert
der Lesebefehl nach dem Antwortcode den gefundenen Tag-Typ und die Seriennummer
zurück.
5.1.1.1ASCII-Version
Befehl:
Antwort:
In diesem Fall wurde also ein Tag nach ISO 15693 gefunden.
28
Flags Befehl Tag-
Typ
<CR> 00 14 00 <CR>
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 01 E0 07 00 00 01 64 5E
37
<CR><LF>
Programmier-Guide
5.1.1.2Binäre Version
Befehl:
Antwort:
In diesem Fall wurde also ein ICode-SL1-Tag gefunden.
5.1.2 TID Auslesen bei vorgegebenem Tag-Typ
In manchen Fällen möchte man nur Tags eines bestimmten Typs auslesen. In diesem Fall wird statt Auto-Detect
(0x00) der jeweilige zu lesende Tag-Typ (siehe Tabelle 34, Kapitel 6.6) im Befehl übermittelt. Die Antwort enthält
demnach den Tag-Typ nicht mehr, da dieser ja bereits bekannt ist.
5.1.2.1ASCII-Version
Befehl:
Da als Tag-Typ 06 angegeben ist, wird der Reader nur PicoTags auslesen.
29
Befehlslänge Flags Befehl Tag-
Typ
CRC
<STX
>
0x05 0x20 0x14 0x00 0x9F9D
Antwortläng
e
Antwort
Code
Tag-
Typ
Daten (TID) CRC
<STX
>
0x0C 0x14 0x02 0x01000000094B3E5
1
0x2379
Flags Befehl Tag-
Typ
<CR> 00 14 06 <CR>
Programmier-Guide
Antwort:
5.1.2.2Binäre Version
Befehl:
Da als Tag-Typ 04 angegeben ist, wird der Reader nur Tags nach ISO 14443-A auslesen.
Antwort:
5.2 Die Tag IDs aller im Feld befindlichen Tags auslesen
Um alle Tags IDs im Feld auszulesen, muss dass INV_F-Bit gesetzt sein, um den Inventarmodus
zu aktivieren und damit die einzelnen Tags nach dem Auslesen zu deaktivieren, um weitere
Tags lesen zu können (“Anti-Kollision”-Modus).
Da das Protokoll Tags unterschiedlicher Standards unterstützt, können mit der Auto-Detect-
Einstellung des Tag-Typs automatisch auch Tags unterschiedlicher Typen ausgelesen werden,
wenn sie sich im Feld befinden.
5.2.1 Die TID aller im Feld befindlichen Tags auslesen
Wenn der Tag-Typ auf Auto-Detect (0x00) gesetzt ist, enthalten die Antworten auf den Befehl
den jeweiligen Tag-Typ und die zugehörige Seriennummer. Sobald alle Tags gelesen wurden,
antwortet der Reader mit Code 94. Dieses setzt voraus, dass das LOOP_F-Bit nicht gesetzt ist.
30
Antwort
Code
Daten (TID)
<LF> 14 00 0C 00 00 00 2B 5B
A4
<CR><LF>
Befehlslänge Flags Befehl Tag-
Typ
CRC
<STX
>
0x05 0x20 0x14 0x04 0xD9B9
Antwortläng
e
Antwort
Code
Daten (TID) CRC
<STX
>
0x07 0x14 0x7276FB6
9
0x93B3
Programmier-Guide
5.2.1.1ASCII-Modus
Befehl:
Man beachte, dass das INV_F-Bit gesetzt ist.
Antwort:
Es wurden also in diesem Beispiel drei ISO15693 und zwei I-Code SL1-Tags gefunden.
Diese letzte Zeile der Antwort bedeutet, dass keine weiteren Tags gefunden wurden.
5.2.2 Die TID aller Tags eines Typs auslesen
Wenn der Tag-Typ nicht auf Auto-Detect gesetzt ist, enthalten die Antworten auf den Befehl
nur die zugehörige Seriennummern der dazu vom Typ her passenden Tags. Sobald alle Tags
gelesen wurden, antwortet der Reader mit Code 94. Dieses setzt voraus, dass das LOOP_F-Bit
nicht gesetzt ist.
31
Flags Befehl Tag-
Typ
<CR> 02 14 00 <CR>
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 01 E0 07 00 00 01 64 5E 37 <CR><LF>
<LF> 14 01 E0 07 00 00 01 54 65 31 <CR><LF>
<LF> 14 01 E0 07 00 00 01 54 41 32 <CR><LF>
<LF> 14 02 01 00 00 00 33 B1 DF
8E
<CR><LF>
<LF> 14 02 01 00 00 00 02 5D CA
D2
<CR><LF>
Antwort
Code
<LF> 94 <CR><LF>
Programmier-Guide
5.2.2.1ASCII-Modus
Befehl:
Man beachte, dass das INV_F-Bit gesetzt ist. Der Tag-Typ ist so gesetzt, dass nur Tags vom Typ ISO 15693
gesucht werden.
Antwort:
Diese letzte Zeile der Antwort bedeutet, dass keine weiteren, passenden Tags gefunden wurden.
5.3 Die TID von Tags kontinuierlich auslesen
Wenn das LOOP_F-Bit gesetzt ist, antwortet der Reader mit 0x1C um die Aktivierung des
Loopmodus zu bestätigen. Danach gibt der Reader eine Antwort wann immer er eine Tag-ID
gelesen hat.
5.3.1 Die TIDs kontinuierlich auslesen
Wenn der Tag-Typ auf Auto-Detect gesetzt ist, enthalten die Antworten auf den Befehl den
jeweiligen Tag-Typ und die zugehörige Seriennummern der gefundenen Tags. Der
Inventarmodus ist dabei deaktiviert (INV_F-Bit nicht gesetzt) und der Loopmodus gesetzt.
32
Flags Befehl Tag-
Typ
<CR> 02 14 01 <CR>
Antwort
Code
Daten (TID)
<LF> 14 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 E0 07 00 00 01 54 65
31
<CR><LF>
<LF> 14 E0 07 00 00 01 54 41
32
<CR><LF>
<LF> 94 <CR><LF>
Programmier-Guide
5.3.1.1ASCII-Modus
Befehl:
Man beachte, dass das LOOP_F-Bit gesetzt ist. Der Tag-Typ ist auf Auto-Detect gesetzt.
Antwort:
Der erste Teil der Antwort sagt aus, dass der Loopmodus erfolgreich aktiviert wurde.
Sobald sich ein Tag im Feld befindet, sendet der Reader wiederholt dessen Tag-Typ (in diesem Fall ISO 15693)
und Seriennummer. Wenn ein anderer Tag so in das Feld gebracht wird, dass dieser bevorzugt gelesen wird,
wird dessen Seriennummer und Tag-Typ wiederholt als Antwort zurückgegeben:
33
Flags Befehl Tag-
Typ
<CR> 01 14 00 <CR>
Antwort
Code
<LF> 1C <CR><LF>
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 01 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 01 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 01 E0 07 00 00 01 64 5E
37
<CR><LF>
Programmier-Guide
In diesem Fall handelt es sich um einen I-Code SL1-Tag. Wenn nun wiederum ein weiterer Tag ins Feld gebracht
wird und die anderen das Feld verlassen, könnten die weiteren Antworten so aussehen:
In diesem Fall wird ein Tag mit MIFARE® Ultralight® Protokoll detektiert.
Um den Loopmodus zu deaktivieren, muss der Host ein oder mehrere Bytes an den Reader senden.
Beispielsweise könnte dies sein:
Befehl:
Antwort:
Der eigentlich gesendete Befehl wird ignoriert und die Antwort zeigt an, dass der Loopmodus verlassen wurde.
34
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 02 01 00 00 00 02 5D CA
D2
<CR><LF>
<LF> 14 02 01 00 00 00 02 5D CA
D2
<CR><LF>
Flags Befehl Tag-
Typ
<CR> 00 14 00 <CR>
Antwort
Code
<LF> 9C <CR><LF>
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 0A 04 A6 8D 11 12 7A
00
<CR><LF>
<LF> 14 0A 04 A6 8D 11 12 7A
00
<CR><LF>
Programmier-Guide
5.3.2 Die TIDs eines Tag-Typs kontinuierlich auslesen
Wenn der Tag-Typ nicht auf Auto-Detect gesetzt ist, enthalten die Antworten auf den Befehl
nur die zugehörige Seriennummern der dazu vom Typ her passenden Tags. Der Inventarmodus
ist dabei deaktiviert (INV_F-Bit nicht gesetzt) und der Loopmodus gesetzt.
5.3.2.1ASCII-Modus
Befehl:
Man beachte, dass das LOOP_F-Bit gesetzt ist. Der Tag-Typ ist auf ISO 15693 gesetzt.
Antwort:
Der erste Teil der Antwort sagt aus, dass der Loopmodus erfolgreich aktiviert wurde.
Sobald sich ein Tag im Feld befindet, sendet der Reader wiederholt dessen Seriennummer. Wenn kein Tag im
Feld ist hört der Reader auf, Antworten zu senden. Wenn ein anderer Tag dann in das Feld gebracht wird, wird
dessen Seriennummer wiederholt als Antwort zurückgegeben:
35
Flags Befehl Tag-
Typ
<CR> 01 14 01 <CR>
Antwort
Code
<LF> 1C <CR><LF>
Antwort
Code
Daten (TID)
<LF> 14 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 E0 07 00 00 01 64 5E
37
<CR><LF>
Programmier-Guide
Um den Loopmodus zu deaktivieren, muss der Host ein oder mehrere Bytes an den Reader senden.
Beispielsweise könnte dies sein:
Befehl:
Antwort:
Der eigentlich gesendete Befehl wird ignoriert und die Antwort zeigt an, dass der Loopmodus verlassen wurde.
5.4 Die TIDs von allen Tags kontinuierlich auslesen
Um die TID aller sich im Reader-Feld befindlichen Tags auszulesen, wird sowohl das LOOP_F-
als auch das INV_F-Bit gesetzt. Der Reader liest so die TID eines gefundenen Tags aus und
schaltet diesen danach stumm, um die TID des nächsten Tags lesen zu können. Solange die
Tags im Feld bleiben, werden ihre TIDs nur einmal pro Antwort mitgeteilt. Wenn ein Tag aus
dem Feld entfernt und dann wieder hineingebracht wird, wird seine TID ein weiteres Mal
übermittelt. Um alle Tag-Typen zu erfassen, wird der Tag-Typ auf Auto-Detect (0x00) gesetzt.
36
Antwort
Code
Daten (TID)
<LF> 14 E0 07 00 00 01 54 65
31
<CR><LF>
<LF> 14 E0 07 00 00 01 54 65
31
<CR><LF>
Flags Befehl Tag-
Typ
<CR> 00 14 01 <CR>
Antwort
Code
<LF> 9C <CR><LF>
Programmier-Guide
5.4.1 ASCII-Modus
Befehl:
Man beachte, dass das LOOP_F- und das INV_F-Bit gesetzt sind. Der Tag-Typ ist auf Auto-
Detect (0x00) gesetzt.
Antwort:
Der erste Teil der Antwort sagt aus, dass der Loopmodus erfolgreich aktiviert wurde.
Die TIDs der beiden im Feld befindlichen ISO 15693-Tags werden jeweils einmal als Antwort
zurückgegeben. Wenn weitere Tags in das Feld gebracht werden, werden deren TIDs jeweils
einmal als Antwort zurückgegeben:
Wenn nun ein bereits bekanntes Tag aus dem Feld entfernt und wieder ins Feld hineingebracht
37
Flags Befehl Tag-
Typ
<CR> 03 14 00 <CR>
Antwort
Code
<LF> 1C <CR><LF>
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 01 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 01 E0 07 00 00 01 64 3D
21
<CR><LF>
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 02 01 00 00 00 05 CA 5D
E2
<CR><LF>
<LF> 14 03 01 32 1F A7 <CR><LF>
Programmier-Guide
wird, wird dessen TID ein weiteres Mal als Antwort zurückgegeben:
Um den Loopmodus zu deaktivieren, muss der Host ein oder mehrere Bytes an den Reader
senden. Beispielsweise könnte dies sein:
Befehl:
Antwort:
Der eigentlich gesendete Befehl wird ignoriert und die Antwort zeigt an, dass der Loopmodus
verlassen wurde.
5.5 Einen Tag in den ausgewählten Modus versetzen
In diesem Beispiel wird ein Tag in de ausgewählten Modus versetzt, um bei den eventuell
folgenden Lese- und Schreiboperationen nicht jedes Mal die TID mit übermitteln zu müssen.
Um diesen Modus zu aktivieren wird ein SELECT_TAG-Befehl an das Tag gesendet bei dem
das TID_F-Bit gesetzt ist und die TID des auszuwählenden Tags eingetragen ist. Wenn sich ein
Tag mit der entsprechenden TID im Feld befindet antwortet der Reader mit Code 0x14 (Select
Tag Erfolg), ansonsten mit Code 0x94 (Select Tag Misserfolg).
Damit der ausgewählte Modus erhalten bleibt, darf das Feld des Readers nicht abgeschaltet
werden. Dies wird erreicht indem das RF_F-Bit gesetzt wird.
38
Antwort
Code
Tag-
Typ
Daten (TID)
<LF> 14 01 E0 07 00 00 01 64 5E
37
<CR><LF>
Flags Befehl Tag-
Typ
<CR> 00 14 00 <CR>
Antwort
Code
<LF> 9C <CR><LF>
Programmier-Guide
5.5.1 ASCII-Version
Befehl:
In diesem Fall antwortet der Reader mit Code 0x14 falls sich ein I-Code SL1-Tag mit der
angegebenen TID im Feld befindet.
Antwort:
In diesem Fall wurde das Tag gefunden und in den ausgewählten Modus versetzt.
5.5.2 Binäre Version
Befehl:
In diesem Fall antwortet der Reader mit einem Code 0x14 (Select Tag Erfolg) wenn sich ein ISO
15693-Tag mit der passenden TID im Feld befindet.
Antwort:
39
Flags Befehl Tag-
Typ
TID
<CR> 48 14 02 01 00 00 00 05 CA 5D
E2
<CR>
Antwort
Code
<LF> 14 <CR><LF>
Befehlslänge Flags Befehl Tag-
Typ
TID CRC
<STX
>
0x0D 0x68 0x14 0x01 0xE00401000EE68E7
B
0x7356
Programmier-Guide
Das Tag wurde gefunden und in den ausgewählten Modus versetzt.
5.6 Auslesen von Daten eines Tags bei Verwendung der TID
In diesem Beispiel wird von einem Tag, dessen TID vorher mittels SELECT_TAG ermittelt
wurde, ein Block an Daten gelesen. Der Host muss dazu eine zulässige Startblock-Nummer und
eine gültige Anzahl Blöcke übermitteln. Die Anzahl Blöcke wird vorerst auf 1 gesetzt.
5.6.1 ASCII-Version
Befehl:
In diesem Fall wird ein Block eines ISO 15693-Tags ab Startadresse 00 gelesen.
Antwort:
Der Befehl war erfolgreich und die Daten wurden an den Host übermittelt.
40
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x14 0x7CCD
Flags Befehl Tag-
Typ
TID Startblock Anzahl
Blöcke
<CR> 40 24 01 E0 07 00 00 01 64 5E
37
00 01 <CR>
Antwort
Code
Daten
<LF> 24 11 22 33
44
<CR><LF>
Programmier-Guide
5.6.2 Binäre Version
Befehl:
In diesem Fall wird ein Block eines I-CODE SL1-Tags ab Startadresse 0x05 gelesen.
Antwort:
Der Befehl war erfolgreich und die Daten wurden an den Host übermittelt.
5.7 Auslesen von Daten eines Tags im ausgewählten Modus
In diesem Beispiel wird von einem Tag ein Block Daten gelesen, das mit einem SELECT_TAG-
Befehl in den ausgewählten Modus versetzt wurde. Daher muss die TID nicht mit übermittelt
werden. Damit der ausgewählte Modus erhalten bleibt, wurde das RF_F-Bit beim
SELECT_TAG-Befehl gesetzt. Der Host muss dazu eine zulässige Startblock-Nummer und eine
gültige Anzahl Blöcke übermitteln. Die Anzahl Blöcke wird vorerst auf 1 gesetzt.
5.7.1 ASCII-Version
Befehl:
In diesem Fall wird ein Block eines Tag-It HF-Tags ab Startadresse 05 gelesen.
41
Befehlslänge Flags Befehl Tag-
Typ
TID Startblock Anzahl
Blöcke
CRC
<STX
>
0x0F 0x68 0x24 0x0
2
0x01000000095B3E5
1
0x05 0x01 0x8EFD
Antwortläng
e
Antwort
Code
Daten CRC
<STX
>
0x07 0x24 0x6969696
9
0xE40E
Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
<CR> 08 24 03 05 01 <CR>
Programmier-Guide
Antwort:
Der Befehl war erfolgreich und die Daten wurden an den Host übermittelt.
5.7.2 Binäre Version
Befehl:
In diesem Fall wird ein Block eines Tags mit MIFARE Ultralight Protokoll ab Startadresse 0x07
gelesen.
Antwort:
Der Befehl war erfolgreich und die Daten wurden an den Host übermittelt.
5.8 Lesen vieler Blöcke von Tags im ausgewählten Modus
In diesem Beispiel wird von einem Tag mehrere Blöcke Daten gelesen, das mit einem
SELECT_TAG-Befehl in den ausgewählten Modus versetzt wurde. Daher muss die TID nicht mit
übermittelt werden. Damit der ausgewählte Modus erhalten bleibt, wurde das RF_F-Bit beim
SELECT_TAG-Befehl gesetzt. Der Host muss dazu eine zulässige Startblock-Nummer und eine
gültige Anzahl Blöcke übermitteln.
42
Antwort
Code
Daten
<LF> 24 BA DF AC
E0
<CR><LF>
Antwortläng
e
Antwort
Code
Daten CRC
<STX
>
0x07 0x24 0xDEADDEA
D
0x4C06
Befehlslänge Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
CRC
<STX
>
0x07 0x28 0x24 0x0A 0x07 0x01 0xF424
Programmier-Guide
5.8.1 ASCII-Version
Befehl:
In diesem Fall werden drei Blöcke ISO 15693-Tags ab Startadresse 0x03 gelesen.
Antwort:
Der Befehl war erfolgreich und die Daten wurden an den Host übermittelt.
5.8.2 Binäre Version
Befehl:
In diesem Fall werden zwei Blöcke eines PicoTags ab Startadresse 0x05 gelesen.
43
Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
<CR> 08 24 01 03 03 <CR>
Antwort
Code
Daten
<LF> 24 99 99 99 99 AA AA AA AA BB BB BB
BB
<CR><LF>
Befehlslänge Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
CRC
<STX
>
0x07 0x28 0x24 0x06 0x05 0x02 0x50AC
Programmier-Guide
Antwort:
Der Befehl war erfolgreich und die Daten wurden an den Host übermittelt.
5.9 Daten auf ein Tag schreiben bei Verwendung der TID
In diesem Beispiel wird auf ein Tag, dessen TID vorher mittels SELECT_TAG ermittelt wurde,
ein Block an Daten geschrieben. Der Host muss dazu eine zulässige Startblock-Nummer und
eine gültige Anzahl Blöcke sowie eine dazu passende Anzahl an Daten übermitteln. Die Anzahl
Blöcke wird vorerst auf 1 gesetzt. Zulässige Werte für den Startblock und die Anzahl Blöcke
hängen vom jeweiligen Tag-Typ ab (siehe Tabelle 34).
5.9.1 ASCII-Version
Befehl:
In diesem Fall wird ein Block eines I-Code SL1-Tags ab Startadresse 0x05 geschrieben.
Antwort:
Der Befehl war erfolgreich und die Daten wurden auf das Tag geschrieben.
44
Antwortläng
e
Antwort
Code
Daten CRC
<STX
>
0x13 0x24 0x11111111222222223333333344444
444
0x5362
Flags Befehl Tag-
Typ
TID Startblock Anzahl
Blöcke
Daten
<CR> 40 44 02 01 00 00 00 05
CA 5D E2
05 01 00 11 22
33
<CR>
Antwort
Code
<LF> 44 <CR><LF>
Programmier-Guide
5.9.2 Binäre Version
Befehl:
In diesem Fall wird ein Block Daten auf ein ISO 15693-Tag ab Startadresse 0x00 geschrieben.
Antwort:
Der Befehl war erfolgreich und die Daten wurden auf das Tag geschrieben.
5.10Daten auf ein Tag im ausgewählten Modus schreiben
In diesem Beispiel wird auf ein Tag ein Block Daten geschrieben, das mit einem SELECT_TAG-
Befehl in den ausgewählten Modus versetzt wurde. Daher muss die TID nicht mit übermittelt
werden. Damit der ausgewählte Modus erhalten bleibt, wurde das RF_F-Bit beim
SELECT_TAG-Befehl gesetzt. Der Host muss dazu eine zulässige Startblock-Nummer, eine
gültige Anzahl Blöcke-Zahl und eine dazu passende Menge Daten übermitteln. Die zulässigen
Daten für Startblock-Nummer und Anzahl Blöcke hängen vom Tag-Typ ab (siehe Tabelle 34).
Die Anzahl Blöcke wird vorerst auf 1 gesetzt.
45
Befehls-
länge
Flags Befehl Tag-
Typ
TID Start-
block
Anzahl
Blöcke
Daten CRC
<STX
>
0x13 0x60 0x44 0x0
1
0xE007000006E5D3A
7
0x00 0x01 0x1234567
8
0x3538
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x44 0x2E48
Programmier-Guide
5.10.1 ASCII-Version
Befehl:
In diesem Fall wird ein Block Daten auf ein Tag mit MIFARE Ultralight Protokoll ab Startadresse
0x07 geschrieben.
Antwort:
Der Befehl war erfolgreich und die Daten wurden auf das Tag geschrieben.
5.10.2 Binäre Version
Befehl:
In diesem Fall wird ein Block Daten auf ein PicoTag ab Startadresse 0x06 geschrieben.
46
Antwort
Code
<LF> 44 <CR><LF>
Befehlslänge Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x0F 0x28 0x44 0x0
6
0x06 0x01 0x1234567890ABCDE
F
0x5694
Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
Daten
<CR> 08 44 0A 07 01 51 52 53
54
<CR>
Programmier-Guide
Antwort:
Der Befehl war erfolgreich und die Daten wurden auf das Tag geschrieben.
5.11Mehrere Blöcke auf ein ausgewähltes Tag schreiben
In diesem Beispiel werden auf ein Tag mehrere Blöcke Daten geschrieben, das mit einem
SELECT_TAG-Befehl in den ausgewählten Modus versetzt wurde. Daher muss die TID nicht mit
übermittelt werden. Damit der ausgewählte Modus erhalten bleibt, wurde das RF_F-Bit beim
SELECT_TAG-Befehl gesetzt. Der Host muss dazu eine zulässige Startblock-Nummer, eine
gültige Anzahl Blöcke-Zahl und eine dazu passende Menge Daten übermitteln. Die zulässigen
Daten für Startblock-Nummer und Anzahl Blöcke hängen vom Tag-Typ ab (siehe Tabelle 34).
5.11.1 ASCII-Version
Befehl:
In diesem Fall werden zwei Blöcke Daten auf ein ISO 15693-Tag ab Startadresse 0x03
geschrieben.
Antwort:
Der Befehl war erfolgreich und die Daten wurden auf das Tag geschrieben.
47
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x44 0x2E48
Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
Daten
<CR> 08 44 01 08 02 01 02 03 04 05 06 07
08
<CR>
Antwort
Code
<LF> 44 <CR><LF>
Programmier-Guide
5.11.2 Binäre Version
Befehl:
In diesem Fall werden zwei Blöcke Daten auf ein Tag-It HF-Tag ab Startadresse 0x06
geschrieben.
Antwort:
Der Befehl war erfolgreich und die Daten wurden auf das Tag geschrieben.
5.12Sperren eines Blocks bei Verwendung der TID
In diesem Beispiel wird auf ein Tag, dessen TID vorher mittels SELECT_TAG ermittelt wurde,
ein Block gesperrt. Dazu wird der WRITE_TAG-Befehl verwendet, bei dem das LOCK_F-Bit
gesetzt wird und KEINE Daten übermittelt werden. Der Host muss dazu eine zulässige
Startblock-Nummer und eine gültige Anzahl Blöcke übermitteln. Die Anzahl Blöcke wird vorerst
auf 1 gesetzt. Zulässige Werte für den Startblock und die Anzahl Blöcke hängen vom jeweiligen
Tag-Typ ab. Bei bestimmten Tags können gewisse Bereiche auch gar nicht gesperrt werden.
Bitte schauen Sie diesbezüglich in Kapitel 6 bei den Tagbeschreibungen nach.
48
Befehlslänge Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x0F 0x28 0x44 0x0
3
0x06 0x02 0xBADFACE0DEADDEA
D
0xB2B8
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x44 0x2E48
Programmier-Guide
5.12.1 ASCII-Version
Befehl:
In diesem Fall wird Block 0x04 eines Tags mit MIFARE Ultralight Protokoll gesperrt.
Antwort:
Der Befehl war erfolgreich und die Erfolgsmeldung wird an den Host zurückgegeben.
5.12.2 Binäre Version
Befehl:
In diesem Fall wird Block 0x00 eines ISO 15693-Tags gesperrt.
49
Antwort
Code
<LF> 44 <CR><LF>
Befehlslänge Flags Befehl Tag-
Typ
TID Startblock Anzahl
Blöcke
CRC
<STX
>
0x0F 0x64 0x44 0x0
1
0xE007000006E5D3A
7
0x00 0x01 0xB45A
Flags Befehl Tag-
Typ
TID Startblock Anzahl
Blöcke
<CR> 44 44 0A 04 A9 1D 11 12 7A
10
04 01 <CR>
Programmier-Guide
Antwort:
Der Befehl war erfolgreich und die Erfolgsmeldung wird an den Host zurückgegeben.
5.13Sperren mehrerer Blöcke bei Verwendung der TID
In diesem Beispiel werden auf einem Tag, dessen TID vorher mittels SELECT_TAG ermittelt
wurde, mehrere Blöcke gesperrt. Dazu wird der WRITE_TAG-Befehl verwendet, bei dem das
LOCK_F-Bit gesetzt wird und KEINE Daten übermittelt werden. Der Host muss dazu eine
zulässige Startblock-Nummer und eine gültige Anzahl Blöcke übermitteln. Zulässige Werte für
den Startblock und die Anzahl Blöcke hängen vom jeweiligen Tag-Typ ab. Bei bestimmten
Tags können gewisse Bereiche auch gar nicht gesperrt werden. Bitte schauen Sie
diesbezüglich in Kapitel 6 bei den Tagbeschreibungen nach.
5.13.1 ASCII-Version
Befehl:
In diesem Fall werden Blöcke 4, 5 und 6 eines Tag-It HF-Tags gesperrt.
Antwort:
Der Befehl war erfolgreich und die Erfolgsmeldung wird an den Host zurückgegeben.
50
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x44 0x2E48
Flags Befehl Tag-
Typ
TID Startblock Anzahl
Blöcke
<CR> 44 44 03 01 32 1F
A7
04 03 <CR>
Antwort
Code
<LF> 44 <CR><LF>
Programmier-Guide
5.14Sperren eines Blocks auf einem ausgewählten Tag
In diesem Beispiel wird auf ein Tag, der vorher mittels SELECT_TAG in den ausgewählten
Modus versetzt wurde, ein Block gesperrt. Daher muss die TID nicht mit übermittelt werden.
Damit der ausgewählte Modus erhalten bleibt, wurde das RF_F-Bit beim SELECT_TAG-Befehl
gesetzt. Zum Sperren wird der WRITE_TAG-Befehl verwendet, bei dem das LOCK_F-Bit
gesetzt wird und KEINE Daten übermittelt werden. Der Host muss dazu eine zulässige
Startblock-Nummer und eine gültige Anzahl Blöcke übermitteln. Die Anzahl Blöcke wird vorerst
auf 1 gesetzt. Zulässige Werte für den Startblock und die Anzahl Blöcke hängen vom jeweiligen
Tag-Typ ab. Bei bestimmten Tags können gewisse Bereiche auch gar nicht gesperrt werden.
Bitte schauen Sie diesbezüglich in Kapitel 6 bei den Tagbeschreibungen nach.
5.14.1 Binäre Version
Befehl:
In diesem Fall wird Block 0x05 eines I-Code SL1-Tags gesperrt.
Antwort:
Der Befehl war erfolgreich und die Erfolgsmeldung wird an den Host zurückgegeben.
5.15Firmware-Version auslesen
Die Firmware-Version ist eine zwei Bytes lange Zahl, die ausschließlich gelesen werden kann
und nur mittels Firmware-Update geändert wird. Die Firmware-Version wird mittels READ_SYS-
Befehl ausgelesen.
51
Befehlslänge Flags Befehl Tag-
Typ
Startblock Anzahl
Blöcke
CRC
<STX
>
0x07 0x2C 0x44 0x02 0x05 0x01 0xB5A2
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x44 0x2E48
Programmier-Guide
5.15.1 ASCII-Version
Befehl:
In diesem Fall wird Block 0x01 ausgelesen, in dem laut Tabelle 11 die Firmware-Version
abgelegt ist.
Antwort:
Der Befehl war erfolgreich. Wie man sieht, ist der zurückgegebene Datenblock 2 Bytes groß
und enthält die aktuelle Firmware-Version, die im Beispiel 0x1002 ist.
5.15.2 Binäre Version
Befehl:
In diesem Fall wird Block 01 ausgelesen, in dem laut Tabelle 11 die Firmware-Version abgelegt
ist. Man beachte die zusätzlich benötigten Felder CRC und Befehlslänge. Der andere Flags-
Wert beruht auf die Anwesenheit des CRC-Feldes.
Antwort:
52
Flags Befehl Startblock Anzahl
Blöcke
<CR> 00 22 01 01 <CR>
Antwort
Code
Daten
<LF> 22 10 02 <CR><LF>
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
CRC
<STX
>
0x06 0x20 0x22 0x01 0x01 0x0A19
Programmier-Guide
Der Befehl war erfolgreich. Wie man sieht, ist der zurückgegebene Datenblock 2 Bytes groß
und enthält die aktuelle Firmware-Version, die im Beispiel 0xF002 ist. Auch hier werden
kommen gegenüber der ASCII-Version zwingend die Längen- und CRC-Felder hinzu.
5.16Reader-ID (RID) lesen
Die Reader-ID (RID) ist sowohl im Laufzeit- als auch im permanenten Systemparameter-
Speicher abgelegt. Daher kann Sie von beiden Orten gelesen werden. Es ist dabei zu
beachten, dass die gelesenen Werte sich je nach Speicherort unterscheiden können falls in
einem der beiden Speicher vorher Änderungen gemacht wurden. Beim Einschalten des
Readers wird aus dem permanenten Speicher eine Kopie in den Laufzeitspeicher geschrieben,
so dass die RIDs dann übereinstimmen.
5.16.1 ASCII-Version
Befehl:
In diesem Fall wird Block 0x02 des permanenten Systemparameter-Speichers ausgelesen, in
dem laut Tabelle 11 die RID abgelegt ist.
Antwort:
Der Befehl war erfolgreich. Wie man sieht, ist der zurückgegebene Datenblock ein Byte groß
und enthält die aktuelle RID, die im Beispiel 0xFF ist. Dies ist die RID, bei der der Reader auch
53
Antwortläng
e
Antwort
Code
Daten CRC
<STX
>
0x05 0x22 0xF00
2
0x87CE
Flags Befehl Startblock Anzahl
Blöcke
<CR> 00 21 02 01 <CR>
Antwort
Code
Daten
<LF> 21 FF <CR><LF>
Programmier-Guide
auf Anfragen ohne Angabe einer RID antwortet und dies ist gleichzeitig auch die
Standardeinstellung.
5.16.2 Binäre Version
Befehl:
In diesem Fall wird Block 0x02 des Laufzeit-Systemparameter-Speichers ausgelesen, in dem
laut Tabelle 11 die RID abgelegt ist. Man beachte die zusätzlich benötigten Felder CRC und
Befehlslänge. Der andere Flags-Wert beruht auf die Anwesenheit des CRC-Feldes.
Antwort:
Der Befehl war erfolgreich. Wie man sieht, ist der zurückgegebene Datenblock ein Byte groß
und enthält die aktuelle RID, die im Beispiel 0xFF ist. Dies ist die RID, bei der der Reader auch
auf Anfragen ohne Angabe einer RID antwortet und dies ist gleichzeitig auch die
Standardeinstellung. Auch hier werden kommen gegenüber der ASCII-Version zwingend die
Längen- und CRC-Felder hinzu.
5.17Reader-ID (RID) setzen
Die Reader-ID (RID) ist sowohl im Laufzeit- als auch im permanenten Systemparameter-
Speicher abgelegt. Daher kann Sie an beiden Orten auch geschrieben werden. Wenn die RID
im permanenten Systemparameter-Speicher geändert wird, wird sie erst aktuell, wenn beim
Einschalten des Readers aus dem permanenten Speicher eine Kopie in den Laufzeitspeicher
geschrieben wird. Die im Laufzeit-Systemparameter-Speicher hingegen geht beim Ausschalten
des Readers verloren.
54
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
CRC
<STX
>
0x06 0x20 0x22 0x02 0x01 0x2071
Antwortläng
e
Antwort
Code
Daten CRC
<STX
>
0x04 0x22 0xFF 0x7C9A
Programmier-Guide
5.17.1 ASCII-Version
Befehl:
In diesem Fall wird Block 0x02 des permanenten Systemparameter-Speichers der Wert 0xFF
geschrieben, in dem laut Tabelle 11 die RID abgelegt ist. Bitte beachten Sie, dass das CRC-
Feld für diesen Befehl erforderlich ist.
Antwort:
Der Befehl war erfolgreich.
5.17.2 Binäre Version
Befehl:
In diesem Fall wird Block 0x02 des Laufzeit-Systemparameter-Speichers mit 0xFF beschrieben,
in dem laut Tabelle 11 die RID abgelegt ist. Man beachte das zusätzlich benötigte
Befehlslänge-Feld.
55
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 41 02 01 FF C98
5
<CR>
Antwort
Code
CRC
<LF> 41 538
D
<CR><LF>
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x07 0x20 0x42 0x02 0x01 0xFF 0xF099
Programmier-Guide
Antwort:
Der Befehl war erfolgreich.
5.18Baudrate einstellen
Der Baudrate-Systemparameter legt die Geschwindigkeit der seriellen Schnittstelle über
RS232, USB232 oder Ethernet232 fest. Damit zwischen dem Host und dem Reader eine
Kommunikation stattfinden kann, muss die Baudrate auf beiden Systemen gleich eingestellt
sein. Die möglichen Einstellungen für die Baudrate sowie die dafür zu setzenden Werte können
Tabelle 11 entnommen werden.
5.18.1 ASCII-Version
Befehl:
In diesem Fall wird in Block 0x03 des permanenten Systemparameter-Speichers, in dem laut
Tabelle 11 die Baudrate abgelegt ist, der Wert 0x00 eingetragen, was die Baudrate auf 9600
setzt.
56
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x42 0x4B7E
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 41 03 01 00 9C2
1
<CR>
Programmier-Guide
Antwort:
Der Befehl war erfolgreich.
5.18.2 Binäre Version
Befehl:
In diesem Fall wird Block 0x03 des Laufzeit-Systemparameter-Speichers mit 0x00 beschrieben,
womit laut Tabelle 11 die Baudrate auf 9600 gesetzt wurde.
Antwort:
Der Befehl war erfolgreich.
Beide Beispiele ändern die Baudrate auf 9600. Die Antwort wird auf jeden Fall in der
ursprünglichen Baudrate übermittelt. Wenn die neue Baudrate in den Laufzeit-Speicher
geschrieben wurde, wie im zweiten Beispiel, dann erfolgt alle weitere Kommunikation danach
bei 9600 Baud. Im Fall, dass der permanente Speicher beschrieben wurde, erfolgt die
Änderung der Baudrate erst nach dem Wiedereinschalten.
Gelesen werden kann die Baudrate nicht. Dies ist auch nicht nötig, da es zum Lesen
erforderlich wäre, mit dem Reader zu kommunizieren, was die Kenntnis der Baudrate bereits
voraussetzt.
57
Antwort
Code
CRC
<LF> 41 538
D
<CR><LF>
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x07 0x20 0x42 0x03 0x01 0x00 0xA53D
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x42 0x4B7E
Programmier-Guide
5.19Betriebsmodus einstellen
Der RFID Reader hat drei Betriebszustände: Loopmodus, aktiviert und schlafend. Um Energie
zu sparen – insbesondere bei Batteriebetrieb – sollte der Reader also wenn er nicht gebraucht
wird in den Schlafmodus versetzt werden. Wenn der Fokus auf Energiesparen gelegt wird, ist
es jedoch noch wichtiger, das RF_F-Flag möglichst nur für kurze Zeit zu setzen. Dies kann bei
stärkeren Readern den wesentlich kräftigeren Effekt bewirken, da ein wesentlich größerer
Strombedarf für den Aufbau des HF-Feldes benötigt wird als für den Betrieb des restlichen
Teils des Readers. So lange das RF_F-Flag gesetzt ist, wird das Feld mit Energie versorgt.
Wenn in den Laufzeit-Systemparameter-Speicher in das Betriebsmodus-Byte 0x04 (siehe
Tabelle 11) eine 0x00 geschrieben wird (mittels WRITE_SYS), dann geht der Reader in den
Schlafmodus über nachdem er den Empfang bestätigt hat. Das Senden eines beliebigen
weiteren Bytes weckt ihn wieder aus dem Schlafmodus, was er mit der gleichen Meldung
bestätigt. Das gesendete Byte wird ansonsten ignoriert. Es ist nicht möglich, direkt aus dem
Schlafmodus in den Loopmodus zu wechseln.
Wenn hingegen in den permanenten Systemparameter-Speicher (mittels WRITE_MEM)
geschrieben wird, wird das Startverhalten des Readers gesteuert. Die hier vorgenommenen
Einstellungen werden ausgeführt solange das Startbefehl-Feld nicht aktiv ist (siehe Kapitel
5.22). Der Reader kann dabei direkt nach dem Einschalten in alle drei Modi versetzt werden.
Was dazu mittels WRITE_MEM gesendet werden muss, kann der folgenden Tabelle
entnommen werden:
Tabelle 33 – Codierung d. Betriebsmodus beim Einschalten
Als Beispiele der genannten Codierung seien hier 0x00 für Schlafmodus, 0x40 für den
aktivierten Modus, 0x81 für den Loopmodus für ISO15693-Tags.
58
Bit
7
Bit
6
Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Schlafmodus 0 0 0 0 0 0 0 0
Loopmodus 1 0 MIFARE
Ultralight
PicoTag MIFARE
Classic
Tag-It
HF
ICode
1
ISO 15693
Aktiver
Modus
0 1 0 0 0 0 0 0
Programmier-Guide
5.19.1 ASCII-Version: Schlafmodus zur Laufzeit
Befehl:
In diesem Fall würde der Reader in den Schlafmodus versetzt, wenn er vorher im aktiven
Modus war und umgekehrt.
Antwort:
Der Befehl war in beiden Fällen erfolgreich.
5.19.2 Binäre Version: Schlafmodus zur Laufzeit
Befehl:
In diesem Fall würde der Reader in den Schlafmodus versetzt, wenn er vorher im aktiven
Modus war und umgekehrt.
Antwort:
59
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 42 04 01 00 35E
9
<CR>
Antwort
Code
CRC
<LF> 42 611
6
<CR><LF>
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x07 0x20 0x42 0x04 0x01 0x00 0x35E9
Programmier-Guide
Der Befehl war in beiden Fällen erfolgreich.
5.19.3 ASCII-Version: Schlafmodus nach Einschalten
Befehl:
In diesem Fall würde der Reader nach der Inbetriebnahme automatisch in den Schlafmodus
versetzt, wenn das Startbefehl-Feld nicht gesetzt ist.
Antwort:
Der Befehl war erfolgreich.
60
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x42 0x4B7E
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 41 04 01 00 102
4
<CR>
Antwort
Code
CRC
<LF> 41 538
D
<CR><LF>
Programmier-Guide
5.19.4 Binäre Version: Loopmodus nach Einschalten
Befehl:
In diesem Fall würde der Reader nach der Inbetriebnahme in den Loopmodus versetzt und
nach ISO15693 Tags suchen, wenn das Startbefehl-Feld nicht gesetzt ist.
Antwort:
Der Befehl war erfolgreich.
5.20GPIO-Pin-Steuerung
Der Reader hat acht Kontakte, die für allgemeine Anwendungen als Ein- oder Ausgänge
verwendet werden können (General Purpose Input / Output Pins). Der Host kann jeden dieser
Kontakte als Ein- oder Ausgang konfigurieren. Je nachdem, ob ein Kontakt als Ein- oder
Ausgang konfiguriert ist, können Werte davon gelesen werden oder dahin geschrieben
werden.
Die Systemparameter “I/O Pin Richtung” (0x07) und “I/O Pin Werte” (0x08) legen fest, ob es
sich um eine Ein- oder Ausgang handelt und welche Werte anliegen.
Insgesamt können die GPIO-Kontakte mit 25mA belastet werden, jeder einzelne Kontakt mit
bis zu 15 mA.
Die Werte, die im Systemparameter “I/O Pin Richtung” gespeichert sind, legen fest, ob es sich
bei dem jeweiligen Kontakt um einen Ein- oder Ausgang handelt. Mit Hilfe der WRITE_SYS-
und WRITE_MEM-Befehle können diese Werte gesetzt werden.
Die Werte, die im Systemparameter “I/O Pin Werte” gespeichert sind, erlauben es, die an den
Kontakten anliegenden Werte zu lesen bzw. schreiben. Um die Werte, die an den Eingängen
61
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x07 0x20 0x41 0x04 0x01 0x81 0x9974
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x41 0x79E5
Programmier-Guide
anliegen, auszulesen, muss der READ_SYS-Befehl verwendet werden. Die Werte an den
Ausgängen können hingegen mittels WRITE_SYS- bzw. WRITE_MEM-Befehl gesetzt werden. Es
können nur die Werte der Ausgänge festgelegt werden.
5.20.1 Richtung der Kontakte zur Laufzeit schreiben
Befehl:
Dieser Befehl legt Kontakte 1-4 als Eingänge und Kontakte 5-8 als Ausgänge fest. Der Befehl
schreibt in Block 0x07 (“I/O Pin Richtung”) den Wert 0x0F, der binär als 0000 1111
geschrieben wird. Ein gesetztes Bit legt den jeweiligen Kontakt also als Eingang fest, ein nicht
gesetztes legt ihn als Ausgang fest. Diese Festlegung erlischt mit dem Ausschalten des
Readers, da nur in den Laufzeitspeicher geschrieben wurde (Befehl 0x42).
Antwort:
Der Befehl war erfolgreich.
62
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 42 07 01 0F 227
A
<CR>
Antwort
Code
CRC
<LF> 42 611
6
<CR><LF>
Programmier-Guide
5.20.2 Werte an die Ausgangskontakte schreiben
Befehl:
Mit diesem Befehl werden die aus dem vorherigen Beispiel festgelegten Ausgangskontakte
jeweils mit dem Wert eins belegt. Das Daten-Byte sieht binär geschrieben wie 1111 0000 aus –
es werden den vier oberen Kontakten also der Wert eins zugewiesen. Die unteren vier
Kontakte sind als Eingänge definiert – der geschriebene Wert hat hier keinen Effekt. Bei einem
direkt nachfolgenden Lesezugriff können diese also durchaus mit anderen Werten belegt sein.
Diese Festlegung erlischt mit dem Ausschalten des Readers, da nur in den Laufzeitspeicher
geschrieben wurde (Befehl 0x42).
Antwort:
Der Befehl war erfolgreich.
5.20.3 Auslesen der Werte an den Eingangskontakten
Befehl:
Es werden mit diesem Befehl die Werte ausgelesen, die an den Eingangskontakten anliegen.
Auch in diesem Beispiel wird davon ausgegangen, dass die Festlegung der Kontakt-Richtung
gemäß des Beispiels 5.20.1 vorliegt. Es wird stets aus dem Laufzeit-Speicher gelesen (Befehl
63
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 42 08 01 F0 67C
5
<CR>
Antwort
Code
CRC
<LF> 42 611
6
<CR><LF>
Flags Befehl Startblock Anzahl
Blöcke
<CR> 00 22 08 01 <CR>
Programmier-Guide
22).
Antwort:
Der Befehl war erfolgreich, es wurden Daten aus den als Eingänge konfigurierten Kontakten
gelesen. An allen vier Eingängen liegt demnach der Wert Eins an, wie man an der binären
Codierung der Antwort ersehen kann: 0000 1111. Die vier oberen Kontakte waren als
Ausgänge konfiguriert und liefern daher hier keine sinnvollen Werte zurück. Sie könnten
durchaus mit dem Wert Eins beschrieben worden sein und trotzdem hier Null zurückgeben. Es
sollte daher darauf geachtet werden, welche Kontakte als Eingänge definiert sind und nur die
dort ankommenden Werte verwendet werden.
5.21Ansteuerung von metraTec Multiplexern
Die im vorherigen Kapitel 5.20 beispielhaft vorgestellte Programmierung der Ein- und
Ausgangskontakte kann in idealer Weise dazu verwendet werden, einen der vielen metraTec
Multiplexer anzusteuern. Es soll im Folgenden angenommen werden, dass hier ein System mit
der maximalen Anzahl an Antennenports gesteuert werden soll. Dazu wurde der primäre 16-
fach Multiplexer mit seinen vier Steuerungsleitungen an Kontakte 5-8 angeschlossen
(Steuerleitung 1 an Kontakt 5, etc.), bei den 16 sekundären Multiplexern (deren Reader-Port
mit den Antennen-Ports des primären Multiplexers verbunden sind) wurden die jeweils
gleichfarbigen Adern der Steuerleitungen zusammen an Kontakte 1-4 in der gleichen
Reihenfolge wie beim primären Multiplexer angeschlossen. Nach Einschalten der
Stromversorgung der Multiplexer wurde auch der Reader in Betrieb genommen. Da vorerst
noch keine Einstellungen vorgenommen wurden, schalten primärer und sekundäre Multiplexer
auf Antennenport Eins, was insgesamt Antenne 1 mit dem Reader verbindet.
Nun sollen in der geplanten Anwendung alle Antennen nacheinander ausgelesen werden und
es sollen jeweils alle vorhandenen ISO15693-Tags gefunden werden.
1. Dazu muss zuerst die Multiplexer-Ansteuerung eingerichtet werden. Es werden als
erstes alle acht GPIO-Pins als Ausgänge konfiguriert (siehe auch Kapitel 5.20.1):
64
Antwort
Code
Daten
<LF> 22 0F <CR><LF>
Programmier-Guide
Befehl:
Antwort:
Der Befehl war erfolgreich, es wurden alle acht GPIO-Kontakte als Ausgänge konfiguriert. Man
beachte, dass in diesem Fall in den permanenten Systemparameter-Speicher geschrieben
wurde. Damit diese Änderung wirksam wird, muss der Reader aus- und wieder eingeschaltet
werden.
2. Als nächstes werden nun die Ausgänge mit Werten belegt. Da zuerst Antenne 1
angesteuert werden soll ergibt sich folgende Sequenz (siehe auch Kapitel 5.20.2):
Befehl:
Antwort:
Es wurden damit alle Kontakte ausgeschaltet, was zu der bereits geschilderten Durchschaltung
zu Antenne 1 führt. Diesmal wurde in den Laufzeit-Speicher geschrieben, da diese Werte sich
ständig ändern werden und auch nach einem Ausschalten nicht weiter bestehen müssen.
65
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 41 07 01 00 FF4
0
<CR>
Antwort
Code
CRC
<LF> 41 538
D
<CR><LF>
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 42 08 01 00 904
A
<CR>
Antwort
Code
CRC
<LF> 42 611
6
<CR><LF>
Programmier-Guide
3. Nun müssen alle in Reichweite von Antenne 1 befindlichen ISO 15693-Tags gefunden
werden (siehe auch Kapitel 5.2.2):
Befehl:
Antwort:
4. Nachdem als Antwort 0x94 erhalten wurde (es sind keine weiteren Tags im Feld
vorhanden), kann nun auf Antenne 2 geschaltet werden. Dies geschieht indem man in Schritt
zwei den Befehl modifiziert indem man das Datenfeld auf 0x01 hochzählt. Diese Schleife aus
Schritten zwei bis vier wird so lange wiederholt, bis im Datenfeld 0xFF steht – Antenne 256 ist
dann angeschlossen. Eventuell kann dann wieder mit 0x00 begonnen werden.
5.22Startbefehl setzen
Der Reader hat die Möglichkeit, automatisch einen Befehl bei der Inbetriebnahme auszuführen.
Diese Befehl wird vorher mittels WRITE_SYS-Befehl gespeichert in Block 0x12 des Laufzeit-
Systemparameter-Speichers geschrieben. Der Reader führt den Befehl dann nach dem
Einschalten aus und antwortet entweder binär oder in ASCII-Notation je nachdem in welcher
Notation der Befehl übergeben wurde.
Der übertragene Befehl muss dabei vollständig sein. Je nachdem welche Flags gesetzt sind,
müssen die TID-, RID- und CRC-Felder Teil des Befehls sein. Bei binärer Übertragung auch das
Befehlslänge-Feld. Die Steuerzeichen zu Beginn und Ende (z.B. <CR>) sind hingegen nicht Teil
66
Flags Befehl Tag-
Typ
<CR> 02 14 01 <CR>
Antwort
Code
Daten (TID)
<LF> 14 E0 07 00 00 01 64 5E
37
<CR><LF>
<LF> 14 E0 07 00 00 01 54 65
31
<CR><LF>
<LF> 14 E0 07 00 00 01 54 41
32
<CR><LF>
<LF> 94 <CR><LF>
Programmier-Guide
eines solchen Befehls.
Für den Fall, dass der Reader beim Einschalten keinen Befehl ausführen soll, sollte einfach ein
beliebiges Byte gesetzt werden, das dieses Feature abschaltet. Ist dieses Feature abgeschaltet,
kann stattdessen die Betriebsmodus-Einstellung gemäß Kapitel 5.19, insbesondere
Unterkapitel 5.19.1 und 5.19.4, verwendet werden.
5.22.1 ASCII-Version: SELECT_TAG beim Einschalten
Befehl:
In diesem Fall wird automatisch der SELECT_TAG-Befehl beim Einschalten ausgeführt, der
nach Tags vom Typ ISO 15693 (0x01) sucht. Da der Befehl im ASCII-Modus übermittelt wurde,
wird nach dem Einschalten die Antwort auch im ASCII-Modus übertragen. Wie bei allen
WRITE_SYSTEM-Befehlen ist das CRC-Feld erforderlich.
Antwort:
Der Befehl war erfolgreich.
67
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 42 12 01 00 14
01
340
F
<CR>
Antwort
Code
CRC
<LF> 42 611
6
<CR><LF>
Programmier-Guide
5.22.2 Binäre Version: SELECT_TAG beim Einschalten
Befehl:
In diesem Fall geht der Reader in den Loopmodus nach dem Einschalten und überträgt die
Daten inklusive CRC-Feld (Flags-Feld ist 0x21), er führt dabei den SELECT_TAG-Befehl (0x14)
mit Auto-Detect (0x00) aus.
Antwort:
Der Befehl war erfolgreich.
5.22.3 ASCII-Version: Startbefehl deaktivieren
Befehl:
Dieser Befehl deaktiviert das Startbefehl-Feature.
68
Befehlslänge Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<STX
>
0x0C 0x20 0x42 0x12 0x01 0x05211400C54
1
0xD591
Antwortläng
e
Antwort
Code
CRC
<STX
>
0x03 0x42 0x4B7E
Flags Befehl Startblock Anzahl
Blöcke
Daten CRC
<CR> 20 42 12 01 00 66A
5
<CR>
Programmier-Guide
6. Tag-Typ Beschreibungen
6.1 ISO 15693
Der ISO/IEC 15693 Standard wurde für “Kontaktlose Nahfeld-Karten” entwickelt.
Herausgegeben im Jahr 1998, war der Standard maßgeblich für die weltweite Akzeptanz von
RFID-Lösungen bei 13,56 MHz. Der Standard basiert auf technischen Entwicklungen von Texas
Instruments und Philips und ist im Prinzip eine Obermenge der Features und Spezifikationen
der Tag-It HF und I-Code1 Transponder.
ISO 15693-1 definiert die physikalischen Charakteristiken des Kreditkarten-Transponders
ISO 15693-2 definiert das Übertragungsinterface bei 13,56 MHz und die
Modulationsmethoden, die im Einklang mit den weltweiten Regelwerken stehen
ISO 15693-3 spezifiziert das Befehlsprotokoll und die Anti-Kollisionsmethode für den
Datenaustausch zwischen Tags und Readern.
Der ISO 15693-Standard erlaubt es den Herstellern, Tags herzustellen, die weitere, optionale
und kundenspezifische Befehle unterstützen und die spezielle Speicherstrukturen, -größen und
–architekturen besitzen. Die verwendete Firmware und das beschriebene Protokoll unterstützt
alle entsprechend normkompatiblen Transponder der vier IC-Hersteller.
6.1.1 Tag-It HF-I ISO 15693 (Texas Instruments)
Die komplette Tag-It HF-I-Spezifikation kann im Datenblatt von Texas Instruments mit dem
Namen “Tag-It HF-I Transponder Inlays Reference Guide” nachgelesen werden.
6.1.2 I-Code SLI ISO 15693 (Philips)
Die komplette I-Code SLI-Spezifikation kann im Datenblatt von Philips mit dem Namen “I-
Code SLI Smart Label IC SL2 ICS20 Functional Specification” nachgelesen werden.
6.1.3 my-d SRF55VxxP ISO 15693 (Infineon)
Die komplette Dokumentation des my-d SRF55VxxP kann von Infineon angefordert werden.
6.1.4 LRI512 ISO 15693 (ST Microelectronics)
Die komplette LRI512-Spezifikation kann im Datenblatt von ST Microelectronics mit dem
Namen “LRI512 Memory TAG IC 512 bit High Endurance EEPROM 13.56 MHz, ISO 15693
Standard Compliant with E.A.S..” nachgelesen werden.
70
Programmier-Guide
6.2 Tag-It HF
Der erste 13,56 MHz Transponder, den Texas Instruments entwickelte, war Tag-It HF. Bis heute
wird dieser Transponderchip in großen Stückzahlen hergestellt und wird weltweit in vielen
Anwendungen verwendet. Die Anzahl installierter Tags geht in die Millionen. Die Tag-It HF
Transponder verwenden ein proprietäres Übertragungsinterface von Texas Instruments.
Im Gegensatz dazu ist Tag-It HF-I ein von Texas Instruments im Jahr 2001 herausgebrachter
Transpondertyp, der voll ISO 15693 (Teile 2 und 3) -kompatibel ist. Dem
Anwendungsentwickler sollte dieser Unterschied zwischen Tag-It HF und Tag-It HF-I bewusst
sein. Die komplette Dokumentation zu Tag-It HF kann von Texas Instruments angefordert
werden.
6.3 I-Code1
Der I-Code1 (SL1) war der erste 13,56 MHz RFID IC für größere Übertragungsreichweiten den
Philips herausgebracht hat. Immer noch in der Großproduktion, wird der I-Code1 (SL1)
weltweit weiterhin in vielen Anwendungen eingesetzt und hat einen Verbreitungsgrad von
mehreren Millionen erreicht. Die I-Code1 (SL1) Transponder verwenden ein proprietäres
Übertragungsinterface von Philips.
Im Gegensatz dazu ist I-Code SLI (SL2) ein von Philips im Jahr 2002 herausgebrachter
Transpondertyp, der voll ISO 15693 (Teile 2 und 3) -kompatibel ist. Dem
Anwendungsentwickler sollte dieser Unterschied zwischen I-Code1 (SL1) und I-Code SLI (SL2)
bewusst sein. Die komplette Dokumentation zu I-Code1 (SL1) kann von Philips angefordert
werden.
6.4 PicoTag
Inside Contactless (früher Inside Technologies) stellt eine RFID Transponderserie unter dem
Namen PicoTag her. Es gibt die Transponder mit zwei unterschiedlichen Speichergrößen (2K
und 16 K) und mit zwei verschiedenen Betriebsmodi (normal und sicher).
6.5 ISO 14443
ISO/ IEC 14443 ist ein vierteiliger RFID-Standard für “kontaktlose Nahbereichskarten” mit
kurzer Reichweite. Eingeführt in den Jahren 1999 und 2000 wurde ISO 14443 zum weltweiten
Standard für bargeldloses Bezahlen.
ISO 14443-1 definiert die physikalischen Eigenschaften einer RFID-Karte
ISO 14443-2 definiert zwei Typen (A und B) von 13,56 MHz Übertragungs- und
71
Programmier-Guide
Modulationsverfahren für die Kommunikation zwischen Tag und Reader.
ISO 14443-3 definiert die Anti-Kollisionsmethode um einen Tag unter vielen auszuwählen
ISO 14443-4 legt die obere Protokollebene und –methode fest nach der Daten zwischen Tags
und Readern ausgetauscht werden
6.5.1 14443-A MIFARE Classic 4K (NXP)
Die MIFARE® Classic 4K-Technologie wird in Millionen von sicheren, kontaktlosen
Anwendungen verwendet seit sie 1995 eingeführt wurde. Die komplette Spezifikation kann im
Datenblatt von NXP mit dem Namen “MF1S70yyX - MIFARE Classic 4K - Mainstream
contactless smart card IC for fast and easy solution development” (Stand Mai 2011)
nachgelesen werden.
6.5.2 MIFARE Ultralight (NXP)
Die komplette Spezifikation der MIFARE Ultralight®-Technologie kann im Datenblatt von NXP
mit dem Namen “MF0ICU1 - MIFARE Ultralight contactless single-ticket IC” (Stand Dezember
2010) nachgelesen werden.
6.6 Technische Daten der Transponder
Im Folgenden soll eine kurze Übersicht über die technischen Spezifikationen der jeweiligen
Transponder gegeben werden. Aus dieser Übersicht kann insbesondere abgelesen werden,
welche Speicherbereiche geschrieben und gesperrt werden können und welche Tag-Typ-
Nummern welchen Tag-Typen zugeordnet sind.
72
Programmier-Guide
Tabelle 34: Tag-Typen, -Eigenschaften und -Adressierung
Diese Tabelle zeigt nur einen Ausschnitt der derzeit verfügbaren Transpondertypen. Für
weitere Transpondertypen (insbesondere die Speicheraddressierung bei ISO-konformen
Produkten) siehe die jeweiligen technischen Datenblätter der Hersteller.
73
Tag Name Tag
Typ
User Daten
Speichergröße
Schreibbarer
Adressraum
Sperrbar
Tag-It HF-I 01 256 Bytes 0x00-0x3F
Je 4 Bytes
Ja, blockweise
Nicht entsperrbar
I-Code SLI 01 112 Bytes 0x00-0x1B
Je 4 Bytes
Ja, blockweise
Nicht entsperrbar
my-d SRF55V02P 01 232 Bytes 0x03-0x1F
Je 8 Bytes
Ja, blockweise
Nicht entsperrbar
my-d SRF55V10P 01 1000 Bytes 0x03-0x7F
Je 8 Bytes
Ja, blockweise
Nicht entsperrbar
LRI512 01 64 Bytes 0x03-0x0F
Je 4 Bytes
Ja, blockweise
Nicht entsperrbar
Tag-It HF 03 32 Bytes 0x00-0x07
Je 4 Bytes
Ja, blockweise
Nicht entsperrbar
I-Code1 02 64 Bytes 0x03-0x0F
Je 4 Bytes
Ja, blockweise
Nicht entsperrbar
PicoTag 2K 06 232 Bytes 0x03-0x1F
Je 8 Bytes
Ja, blockweise
Nicht entsperrbar
MIFARE Classic 4K 04 Ca. 1000 Bytes 16 Sektoren zu 4 Blöcken zu
16 Bytes, beschreibbar sind
im ersten Sektor Blöcke 0x01,
0x02, in den anderen
Sektoren jeweils die ersten 3
Blöcke
Ja, sektorweise
Letzter Block im
Sektor enthält
Zugriffs-
steuerungsdaten
MIFARE Ultralight 0A 48 Bytes 0x04-0x0F
Je 4 Bytes
Ja, blockweise, nicht
entsperrbar; 32 One-
Time-Programmable
Bits (Block 0x03)
Gemwave C210 08 Read Only Read Only Alles gesperrt
Programmier-Guide
7. Behandlung von Ausnahmesituationen
Im Rahmen der Anwendungsentwicklung sollten Ausnahmesituationen bedacht und abgefangen
werden, um die entwickelte Anwendung möglichst robust auszuführen. Insbesondere die
fehlerhafte Übertragung eines einzelnen Bits in den Flags kann zu unerwarteten Ergebnissen
führen, die abgefangen werden sollten.
Ein Bitfehler beim LOOP_F-Bit kann zum Aktivieren des Loopmodus führen, was zu einem 1C
(bzw. 1C1189 bei aktivem CRC) als Antwort führt. Im Weiteren werden dann die Seriennummern
der Tags im Feld übermittelt.
Fall der Loopmodus bereits (absichtlich) aktiv ist, kann jedes vom Host gesendete Byte zum
Abbruch des Modus führen, was mit 9C übertragen wird (bzw. 9C9DC1 bei aktivem CRC).
Ein Bitfehler bei CRC_F führt dazu, dass plötzlich der Antwort die CRC angefügt wird in Fällen in
denen dies nicht erwartet wird oder umgekehrt. Es wird empfohlen, CRC stets aktiviert zu haben,
da solche Bitfehler dann detektiert werden können.
Ein Bitfehler beim RID_F-Bit führt zu keiner Antwort oder zu einer Antwort vom falschen Reader.
Ein Bitfehler beim TID_F-Bit oder im TID-Feld führt zu einem Fehlercode oder zu einer Antwort
vom falschen Tag.
74
Programmier-Guide
8. Versionsübersicht
Version Änderung Bearbeitet durch Datum
1.0 erstellt KD 01.09.2007
1.1 kleinere Korrekturen CS 24.02.2015
Kontakt
metraTec GmbH
Werner-Heisenberg-Str. 1
D-39106 Magdeburg
Tel.: +49 (0)391 251906-00
Fax: +49 (0)391 251906-01
Email: [email protected]
Web: www.metratec.com
Copyright
© 2007 metraTec GmbH
Nachdruck, Vervielfältigung oder Übersetzung dieser Benutzeranleitung, auch auszugsweise, sind ohne
schriftliche Genehmigung der metraTec GmbH nicht gestattet.
SkyeTek und SkyeTek AURA sind eingetragene Markenzeichen der SkyeTek Inc., Westminster, CO, USA.
MIFARE® Classic und MIFARE Ultralight® sind gesetzlich geschützte Marken der NXP B. V. und unterliegen der
Lizensierung.
Alle Marken sind Eigentum ihrer jeweiligen Inhaber.
Alle Rechte vorbehalten.
Wir arbeiten ständig an der Weiterentwicklung unserer Produkte. Änderungen in Form, Ausstattung und der
Konstruktion dieses Produktes behalten wir uns ausdrücklich vor!
75