Programmier-Guide - metraTec GmbH · Programmier-Guide 1. Das Protokoll Die meisten der von...

74
Programmier-Guide für metraTec QuasarMR1 Stand: Februar 2015 Version: 1.1

Transcript of Programmier-Guide - metraTec GmbH · Programmier-Guide 1. Das Protokoll Die meisten der von...

Programmier-Guide

für metraTec QuasarMR1

Stand: Februar 2015

Version: 1.1

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

Antwort:

Der Befehl war erfolgreich.

69

Antwort

Code

CRC

<LF> 42 611

6

<CR><LF>

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