Befehlsatz

Alle nachfolgenden Angaben enthalten nur die Befehls-/ Antwortkennung. Die für das jeweilige Protokoll verwendeten Längenangaben, Adressen und Checksummen sind hier nicht mit enthalten. Im Anhang ist eine komplette, vollständige Übersicht aller Kommandos für jedes Protokoll enthalten.

!!! Von einigen Varianten des ICR wird nur ein Teil der Kommandos unterstützt. Der ICR antwortet auf einen nicht unterstützten Befehl mit einem CNS (Kommando nicht unterstützt).

Systemkommandos

ResetSystem

'R'

Dieses Kommando initialisiert den ICR neu. Es kann ebenfalls zum Test der seriellen Schnittstelle verwendet werden. Als Antwort wird ein Acknowlege (siehe Statusmeldungen) gesendet.

!!! Bei der Slave Version des ICR40 werden die Ausgänge durch ein ResetSystem ebenfalls zurückgesetzt.

ResetHFSystem

'H'

Dieses Kommando schaltet das HF-Feld des ICR kurzzeitig (100ms) ab, um einen sich im Feld befindlichen Transponder neu zu initialisieren (Power on Reset). Als Antwort wird ein Acknowlege (siehe Statusmeldungen) gesendet.

SetPowerDown

'D'

Mode

Mode:

0x00 Standby

 

0x01 Power On

Dieses Kommando setzt den ICR in den Standby-Betrieb. Im Standby-Mode wird das HF-Feld abgeschaltet, wodurch der Stromverbrauch des Lesers auf ein Minimum reduziert wird. Zur Aktivierung des Lesers aus dem Standby-Mode sollte die Funktion ResetSystem verwendet werden. Der Status der LED´s bleibt durch SetPowerDown unverändert. Um den Stromverbrauch bei der Slave-Version zu minnimieren sollten alle Ausgänge mit SetOutput zurückgesetzt werden.

SetOutput

Mit der Funktion SetOutput werden die Ausgänge / Signale des Readers gesetzt bzw. zurückgesetzt.

'S'

Mask

Mask:

Bit

Funktion

0

LED 1

1

LED 2

2

LED 3 bzw. Relais (je nach Bestückung)

3

akustischer Signalgeber

Eine 1 schaltet die entsprechende Funktion ein und eine 0 die entsprechende Funktion aus. Als Antwort wird ein Acknowlege (siehe Statusmeldungen) gesendet.

!!! Diese Funktion ist nur bei der Slave Version vorhanden.

GetInput

Liefert den aktuellen Status des digitalen Einganges des ICR zurück.

'I'

Antwort:

Status

Input

Ist der Eingang geschlossen (Pin gegen Masse), ist Input=1, sonst 0.

!!! Diese Funktion ist nur bei der Slave Version vorhanden.

SetProtokollMode

'M'

Mode

Mode:

0x00 ohne Adressbyte

 

0x01 mit Adressbyte

Dieses Kommando legt das Protokoll für die Datenübertragung zwischen Host und ICR fest. Ist das Byte Mode =0x00, erfolgt die Datenübertragung ohne Adressbyte. Bei 0x01 wird das Adressbyte zur Adressierung des ICR verwendet. Als Antwort wird ein Acknowlege (siehe Statusmeldungen) in dem durch das Byte Mode festgelegten Modus gesendet.

SetAdr

'N'

ADR

Die Adresse des Readers wird auf ADR (0..255) gesetzt. Wurde die Funktion ausgeführt, wird ein ACK (siehe Statusmeldungen) gesendet. Wird der Protokollmodus mit Adresse verwendet, wird das Adressierungsbyte nicht ausgewertet. Im Protokollmodus mit Adresse hat dieser Befehl keine Auswirkung auf die Funktionen des Lesers.

!!! Die Funktion sollte nicht aufgerufen werden, wenn sich mehrere Leser am RS485-Bus befinden, da sonst die Adressen aller Leser auf den gleichen Wert gesetzt werden.

SetDateTime

'D'

t

m

j

h

min

sec

t

Tag (1..31)

wt

Wochentag (0=Mo. .. 6=Sa)

m

Monat (1..12)

j

Jahr ab 2000(0..255)

h

Stunde(0..23)

min

Minute (0..59)

sec

Sekunde (0..59)

Die aktuelle Uhrzeit wird in der Real-Time Clock des ICR40 gespeichert. Ist keine Real-Time Clock auf dem ICR integriert, antwortet er mit der Statusmeldung CNS (Kommando nicht unterstützt).

GetDateTime

'd'

Liefert die aktuelle Uhrzeit und das Datum des ICR zurück.

Antwort:

Status

t

wt

m

j

h

min

sec

t

Tag (1..31)

wt

Wochentag (0=Mo. .. 6=Sa)

m

Monat (1..12)

j

Jahr ab 2000(0..255)

h

Stunde(0..23)

min

Minute (0..59)

sec

Sekunde (0..59)

- Status = 0, wenn kein Fehler

ReadEEPROM

'e'
Adrh
Adrl

Liest Daten aus dem EEPROM des ICR aus.

Antwort:
D0
..
D15

Write EEPROM

'E'
Adrh
Adrl
D0
..
D15

Schreibt Daten in den EEPROM des ICR. Nach erfolgreichem Prüflesen der Daten wird ein ACK gesendet. Sollte es nicht möglich sein die Daten auf dem EEPROM zu speichern, wird die Statusmeldung EEPROM-Programmierfehler zurückgegeben.

SetPRGMode

0x9A

Dieser Befehl versetzt den ICR40-STA200 in den Programmiermodus. Das heißt, der ICR40 reagiert nur noch auf Befehle von der seriellen Schnittstelle. Das automatische Lesen von Transpondern wird in diesem Modus nicht durchgeführt. Hintergrund ist, das der Lesevorgang relativ viel Zeit in Anspruch nimmt. dabei kann es vorkommen, das der ICR40 auf einen Befehl nicht antwortet, da er nicht komplett empfangen wurde. Der Programmiermodus wird durch ständiges Leuchten von LED1 (rot) angezeigt. Der ICR40 sendet ein ACK, wenn der Befehl ausgeführt wurde.

!!! Der Befehl SetPRGMode muß evtl. mehrmals gesendet werden.

Befehlsübersicht für HT1

SelectTag

'S'

Das Kommando SelectTag selektiert einen sich im Feld befindlichen HT1 Transponder für nachfolgende Schreib- Lesebefehle. Es muss mindestens einmal ausgeführt werden, um den Datentransfer mit dem Transponder zu ermöglichen. Zwischen einzelnen Schreib- Leseoperationen kann dieses Kommando verwendet werden, um zu testen, ob sich der Transponder noch im Feld des Readers befindet. Wurde ein Authent durchgeführt, beendet dieses Kommando den Crypto-Mode.

Antwort:

Status

OTP0

OTP1

OTP2

OTP3

Snr3

Snr2

Snr1

Snr0

Befindet sich kein Transponder im Feld, wird als Antwort die Statusmeldung NoTag gesendet.

- Status = 0, wenn kein Fehler

Die Datenbytes OTP0..OTP3 enthalten die Daten der Configuration Page (Page1) und Snr0..Snr3 die Seriennummer des HT1-Transponders.

ReadPage

'q'

0

Adresse

Mit dem Kommando ReadPage wird die in Adresse spezifizierte Datenpage eines HT1-Transponders gelesen.

Antwort:

Status

D0

D1

D2

D3

- Status = 0, wenn kein Fehler

Befindet sich kein Transponder im Feld, wird als Antwort die Statusmeldung NoTag gesendet.

ReadBlock

'b'

0

Adresse

Mit dem Kommando ReadBlock wird ein kompletter Datenblock des HT1 Transponders ab Adresse gelesen.

Antwort:

Status

D0 .... D(x-1)

Befindet sich kein Transponder im Feld, wird als Antwort die Statusmeldung NoTag gesendet. Die Anzahl Datenbytes x hängt von der Adresse der ersten zu lesenden Page ab. Sie kann 4, 8, 12 oder 16 betragen, da der aktuelle Block ab der Startadresse bis zum Ende gelesen wird.

- Status = 0, wenn kein Fehler

!!! Zugriffe auf Block 1 (Logdata) können nur mit dem Kommando ReadPage erfolgen.

WritePage

'p'

0

adr

D0

D1

D2

D3

Die Datenbytes D0..D3 werden in den Transponderspeicher auf die Datenpage mit der Adresse adr geschrieben. Nach erfolgreichem Prüflesen der geschriebenen Daten wird die Statusmeldung ACK gesendet. Wird ein Fehler festgestellt oder befindet sich kein Transponder im Feld, wird die Statusmeldung NoTag gesendet.

!!! Page 2 und 3 (KeyA und KeyB) sind Write-Only Bereiche. Es erfolgt daher kein Prüflesen der geschriebenen Daten. Eine Kontrolle der Richtigkeit kann aber durch ein nachfolgendes Authent erfolgen.

WriteBlock

'B'

0

adr

D0 .. D(x-1)

Die Datenbytes D0..D(x-1) werden in den Transponderspeicher ab der Datenpage mit der Adresse adr geschrieben. Die Anzahl x der Datenbyte hängt von der Adresse der ersten zu schreibenden Datenpage ab. Ein Block muss immer komplett ab adr bis zum Blockende geschrieben werden. Nach erfolgreichem Prüflesen der geschriebenen Daten wird die Statusmeldung ACK gesendet. Wird ein Fehler festgestellt oder befindet sich kein Transponder im Feld, wird die Statusmeldung NoTag gesendet.

!!! Zugriffe auf Block 0 und Block1 können nur mit dem Kommando WritePage erfolgen.

Aufbau des Datenblockes (ReadPage, WritePage, ReadBlock, WriteBlock)

Das höchstwertige Bit der Daten-Page bzw. des Datenblockes wird immer zuerst gesendet. Eine Daten-Page ist folgendermaßen aufgebaut:

Datenbyte 0

Datenbyte 1

Datenbyte 2

Datenbyte 3

Bit 31 .. Bit 24

Bit 23 .. Bit 16

Bit 15 .. Bit 8

Bit 7 .. Bit 0

Ein Datenblock ist identisch aufgebaut, kann jedoch in Abhängigkeit von der Adresse 4..16 Datenbyte enthalten.

HT1Authent

'A'

Keys

Keys:

0x00 KeyA/LogdataA

 

0x01 KeyB/LogDataB

Dieses Kommando bereitet einen selektierten HT1 Transponder zur verschlüsselten Datenübertragung vor. Je nach dem Byte Keys werden dazu KeyA/LogdataA oder KeyB/LogdataB verwendet. Nach erfolgreicher Ausführung wird die Statusmeldung ACK gesendet. Tritt ein Fehler auf, so wird die Statusmeldung Fehler bei Authent gesendet. Nach erfolgreicher Ausführung erfolgt die Kommunikation zwischen Transponder und Leser verschlüsselt. Jetzt kann auf alle, als ‚secret' definierte Bereiche zugegriffen werden. Um wieder Zugriff auf die als ‚public' definierten Bereiche zu erhalten, muss dieser Modus durch die Funktion SelectTag beendet werden.

WritePersData

'C'

72 Byte Keys+LogData

Mit diesem Kommando werden die für das Kommando Authent erforderlichen Keys und Logdata zum Leser gesendet und im EEPROM des optional installierten Crypto-Coprozessors gespeichert.
Der Datenblock hat folgenden Aufbau:

Pos.

Inhalt

Pos.

Inhalt

0x00

KeyA alt

0x24

Logdata 1A neu

0x04

KeyA neu

0x28

Logdata 1B alt

0x08

KeyB alt

0x2B

Logdata 1B neu

0x0B

KeyB neu

0x30

HT2 Key16 alt

0x10

Logdata 0A alt

0x34

HT2 Key16 neu

0x14

Logdata 0A neu

0x38

HT2 Key32 alt

0x18

Logdata 0B alt

0x3B

HT2 Key32 neu

0x1B

Logdata 0B neu

0x40

HT2 Password alt

0x20

Logdata 1A alt

0x44

HT2 Password neu

Vor Auslieferung werden alle Werte auf 0x00 gesetzt. Bei erfolgreicher Ausführung wird die Statusmeldung ACK gesendet.

!!! Vorsicht diese Daten können nur geschrieben, aber nicht wieder gelesen werden. Um die Daten ändern zu können müssen die alten (aktuellen) Werte bekannt sein. Falsche Daten können den Leser für Kryptografie unbrauchbar machen. Es müssen bei jeder Parametrierung alle Daten (für HT1 und HT2) gesendet werden.

Reihenfolge der Funktionsaufrufe

Befindet sich ein HT1 im Feld des ICR, so ist dieser vorerst inaktiv. Das heißt er sendet selbständig keine Daten. Er muss für nachfolgende Schreib- Leseaktionen selektiert werden. Daher muss als erstes immer die Funktion SelectTag aufgerufen werden, bevor Daten vom Transponder gelesen oder Daten auf den Transponder geschrieben werden können. Der Aufruf der Funktion ist nur einmal notwendig, solange sich der Transponder im HF-Feld des ICR befindet. Sie sollte jedoch aufgerufen werden, wenn beim Schreiben oder Lesen von Daten, Fehler aufgetreten sind (Statusmeldung NoTag). Um sicherzustellen, dass der Transponder richtig initialisiert ist, sollte bei aufgetretenen Fehlern vor erneutem Selektieren die Funktion ResetHFSystem aufgerufen werden.

Datensicherheit (Standart Protokoll Mode)

Der ICR40 nutzt zum Lesen und Schreiben des HT1 Transponders aus Kompatibilitätsgründen zu den älteren HT1 Chips den Standart Protokoll Mode. Der HT1 sendet in diesem Modus die gespeicherten Daten ohne Paritätsbits und Checksummen. Daher ist die Überprüfung der empfangenen Daten auf Gültigkeit nicht bzw. nur durch mehrfaches Lesen und nachfolgenden Vergleich möglich. Die Routinen des ICR wurden unter anderem auf Geschwindigkeit optimiert. Die Überprüfung der empfangenen Daten muss daher vom angeschlossenen Endgerät erfolgen. Empfehlenswert ist die Abspeicherung einer Checksumme für jeden Datenblock auf dem Transponder. Ist die empfangene Checksumme ungleich der berechneten, sollte das Lesen des entsprechenden Blocks bzw. der entsprechenden Page wiederholt werden. Die Wahrscheinlichkeit, dass die empfangenen Daten fehlerhaft sind, steigt mit wachsender Entfernung des Transponders zum ICR. Fehlerhafte Daten können bei folgenden Funktionen zurückgeliefert werden:

SelectTag

Sendet der ICR einen gültigen Datensatz als Antwort, ist die Seriennummer des Transponders auf jeden Fall richtig. Die gesendeten Daten der OTP-Page könnten jedoch fehlerbehaftet sein

ReadPage, ReadBlock

Die Überprüfung der empfangenen Daten muss vom Endgerät entweder durch Generierung von Checksummen und Speicherung dieser auf dem Transponder, oder durch mehrfaches Lesen erfolgen.

WriteBlock, WritePage

Die Funktionen WriteBlock und WritePage liefern nur nach erfolgreichem Prüflesen (nicht bei Page2 und Page3) ein ACK zurück. Daher sind Datenfehler fast ausgeschlossen, wenn der ICR mit ACK antwortet.

HT2 Schreib- Lesebefehle

GetHT2SerNr

0x91
Mode

Mode:

Bit 0 0 - Password Mode
1 - Crypto Mode
Bit 1 0 - Manchester Codierung
1- Biphase

Selektiert einen HT2 Transponder im Crypto oder Password Mode und liefert die Seriennummer sowie das Konfigurationsbyte zurück. Diese Funktion muss erfolgreich ausgeführt werden, um den Transponder lesen und schreiben zu können. Voraussetzung für den Erfolg des Kommandos ist, das das im ICR gespeicherte Passsword mit dem des Transponders (Password Mode) bzw. die Keys des Crypto Co-Prozessors mit denen des Transponders (Crypto Mode) übereinstimmen.

Im Crypto Mode erfolgt die Selektion des Transponders ohne Vergleich des im Transponder gespeicherten Passwords (Password Tag). Optional kann die Überprüfung mit implementiert werden.

Achtung: Im Password Mode muss die Hostanwendung wissen, ob der Transponder die Daten mit Manchester Codierung oder mit Biphase Codierung sendet. Wird ein Transponder mit dem falschen Protokoll selektiert, liefert die Funktion zwar Daten zurück, diese sind allerdings falsch decodiert. Eine Prüfung ist im ICR nicht möglich, da der HT2 keine Checksummen bzw. Paritätsinformationen liefert.

Dieses Kommando braucht nur einmal zur Selektion ausgeführt werden. Der HT2 antwortet nur jedes zweite mal auf diesen Befehl. Wird das Kommando zweimal hintereinander ausgeführt, meldet der ICR beim zweiten Kommando NoTag.

Antwort:
Status
SerNr 31..24
SerNr 23..16
SerNr 15..8
SerNr 7..0
Konfig

GetHT2PSerNr

0x92
0

Mode:

Bit 0 0 - Password Mode
1 - Crypto Mode
Bit 1 0 - Manchester Codierung
1- Biphase

Identisch mit GetHT2SerNr. Vor Ausführung der Funktion wird jedoch kurzzeitig das HF-Feld des ICR ausgeschaltet, um den Transponder zurückzusetzen. Mit dieser Funktion muss verwendet werden, um HT2 Transponder, welche sich in einem der Public Modes (RO-Emulation) befindet, für Schreib- Leseoperationen zu selektieren.

Antwort:
Status
SerNr 7..0
SerNr 15..8
SerNr 23..16
SerNr 31..24
Konfig

ReadHT2Page

0x93
0
PageNr

Liest die Daten der Datenpage PageNr aus, und sendet diese zurück. Der Transponder muss vorher selektiert werden. Wird versucht, einen nicht selektierten HT2 zu lesen, wird die Statusmeldung NoTag gesendet.

Antwort:
Status
D3
D2
D1
D0

WriteHT2Page

0x94
0
PageNr
D0
D1
D2
D3

Schreibt die Datenbytes D0..D3 werden auf die Datenpage PageNr geschrieben. Als Antwort liefert der ICR eine Standard Statusmeldung zurück. Ein ACK wird nur nach einem erfolgreichen Prüflesen der Daten gesendet. Befindet sich kein HT2 im Feld des Lesers, wird die Statusmeldung NoTag gesendet.

SetHT2PW

0x99
PW3
PW2
PW1
PW0

Speicher das Password PW3..PW0 im EEPROM des Transponders. Dieses Password wird für die nachfolgende Selektion von HT2 Transpondern verwendet. Der ICR antwortet mit einem ACK.

Reihenfolge der Funktionsaufrufe

Befindet sich ein HT2 im Feld des ICR, so ist dieser vorerst inaktiv. Das heißt er sendet selbständig keine Daten. Er muss für nachfolgende Schreib- Leseaktionen selektiert werden. Daher muss als erstes immer die Funktion GetHT2SerNr oder GetHT2PSerNr aufgerufen werden, bevor Daten vom Transponder gelesen oder Daten auf den Transponder geschrieben werden können. Der Aufruf der Funktion ist nur einmal notwendig, solange sich der Transponder im HF-Feld des ICR befindet. Sie sollte jedoch aufgerufen werden, wenn beim Schreiben oder Lesen von Daten, Fehler aufgetreten sind (Statusmeldung NoTag). Um sicherzustellen, dass der Transponder richtig initialisiert ist, kann generell die Funktion GetHT2PSerNr verwendet werden.

Datensicherheit HT2

Der HT2 sendet die gespeicherten Daten ohne Paritätsbits und Checksummen. Daher ist die Überprüfung der empfangenen Daten auf Gültigkeit nicht bzw. nur durch mehrfaches Lesen und nachfolgenden Vergleich möglich. Die Routinen des ICR wurden unter anderem auf Geschwindigkeit optimiert. Die Überprüfung der empfangenen Daten muss daher vom angeschlossenen Endgerät erfolgen. Empfehlenswert ist die Abspeicherung einer Checksumme für jeden Datenblock auf dem Transponder. Ist die empfangene Checksumme ungleich der berechneten, sollte das Lesen des entsprechenden Blocks bzw. der entsprechenden Page wiederholt werden. Die Wahrscheinlichkeit, dass die empfangenen Daten fehlerhaft sind, steigt mit wachsender Entfernung des Transponders zum ICR. Fehlerhafte Daten können bei folgenden Funktionen zurückgeliefert werden:

SelectTag

Vom ICR kann nicht ausgewertet werden, ob die Datenübertragung im Password Mode Manchester oder Biphanse codiert ist. Die Hostanwendung (Endgerät) muss wissen, in welchem Modus der Transponder arbeitet. Im Crypto Mode wird die empfangene Seriennummer zur Bildung des Datenübertragungsschlüssels verwendet. In diesem Modus sind die Daten bei erfolgreicher Ausführung auf jeden Fall richtig.

ReadPage

Die Überprüfung der empfangenen Daten muss vom Endgerät entweder durch Generierung von Checksummen und Speicherung dieser auf dem Transponder, oder durch mehrfaches Lesen erfolgen.

Achtung: Wenn der Codierungstyp der Daten nicht stimmt liefert mehrfaches Lesen immer die gleichen, falschen Daten.

WritePage

Die Funktion WritePage liefert nur nach erfolgreichem Prüflesen ein ACK zurück. Daher sind Datenfehler fast ausgeschlossen, wenn der ICR mit ACK antwortet.

Unique/Titan Schreib- Lesebefehle

ReadWord

'P'

0

Adresse

Mit dem Kommando ReadWord wird das in Adresse spezifizierte Datenword eines Titan-Transponders gelesen.

Antwort:

Status

D0

D1

D2

D3

Befindet sich kein Transponder im Feld, wird als Antwort die Statusmeldung NoTag gesendet.

- Status = 0, wenn kein Fehler

WriteWord

'p'

0

adr

D0

D1

D2

D3

Das Datenword D0..D3 wird in den Transponderspeicher auf Adresse adr geschrieben. Nach erfolgreichem Prüflesen der geschriebenen Daten wird die Statusmeldung ACK gesendet. Wird ein Fehler festgestellt oder befindet sich kein Transponder im Feld, wird die Statusmeldung NoTag gesendet.

!!! Der Versuch auf eine schreibgeschützte Adresse bzw. eine durch Password geschützte Adresse ohne vorheriges Login zu schreiben, ergibt ebenfalls die Statusmeldung NoTag.

Login

'L'

PW0

PW1

PW2

PW3

Mit diesem Kommando wird das Password an einen Titan Transponder gesendet. Bei erfolgreichem Login wird die Statusmeldung ACK gesendet. Jetzt kann auf passwortgeschützte Bereiche zugegriffen werden. Ist das Password falsch oder befindet sich kein Transponder im Feld, wird die Statusmeldung NoTag gesendet.

WritePassword

'W'

PW00

PW01

PW02

PW03

PW10

PW11

PW12

PW13

Mit dem Kommando WritePassword wird das Password des Transponders auf PW10..PW13 gesetzt. PW00..PW03 enthalten das alte Password des Transponders. Standardmäßig werden die Transponder mit dem Password 00 00 00 00 geliefert. Als Antwort wird ein ACK gesendet, wenn die Datenübertragung zum Transponder fehlerfrei abgelaufen ist. Andernfalls wird die Statusmeldung NoTag gesendet.

!!! Nach dem Schreiben des Passwords erfolgt kein Prüflesen, da es generell gegen Lesen geschützt ist. Eine Kontrolle ist jedoch durch Senden des Kommandos Login möglich.

ReadUnique

'U'

Mit diesem Kommando wird ein Transponder vom Typ Unique gelesen.

Antwort:

Status

D0

D1

D2

D3

D4

Wird kein Transponder erkannt, sendet der Leser die Statusmeldung NoTag.

- Status = 0, wenn keine Fehler

Statusmeldungen

Status

Status:

0

keine Fehler (ACK)

-1

Fehler (NAK)

-3

kein Transponder

-4

Fehler bei Authent (HT1)

-5

falsches RWD Password (HT2)

-6

falsches Tag Password (HT2)

-14

Kommando nicht unterstützt (CNS)