Date | Description |
15/03/2004 | Initial release |
25/05/2004 | Error regarding functions codes for read / write functions corrected |
19/06/2006 | Type B, T=CL, and low level RF interface parts added |
22/03/2007 | Error codes added |
28/02/2008 | ISO 15693 & ICODE1 functions (specific for Pro-Active K632 OEM) added |
All transmissions with the SpringProx/CSB/K531 reader are handled by three protocol layers :
The commands layer handles and interprets the SpringProx commands. It consists of the command code, data, and parameters.
The transport layer handles message addressing, specifies the transmission type, and validate each transmission. The transport layer can use one out of four protocols.
The physical layer handles the data transmission itself. The physical layer uses an asynchronous serial protocol. Depending on the product, it can either be serial TTL (K531), RS485 (K531 + RS485 interface), RS232 (CSB-4S), serial tunneling over USB 1.1 (CSB-4U).
The command layer handles and interprets the K531 commands. It consists of the command code, data, and parameters.
You send commands in the following format :
Command|DataInLen|DataIn
Command | is the command code identifier |
DataInLen | is the length of the data |
DataIn | is the data accompanying the command, when appropriate |
The K531 Interface Commands section describes the Command, DataInLen, and DataIn values for each command.
The K531 replies to every command it receives with a status code formatted as follows :
Status|DataOutLen|DataOut
Status | is the status code identifier |
DataOutLen | is the length of the data |
DataOut | is the data accompanying the status, where appropriate |
The transport layer handles the message addressing, specifies the transmission type, and validate each transmission.
The K531 transport layer can use one of those four protocols :
Depending on the product, some of those protocols are not implemented. For example, the multi-point protocol is not available with computer based readers (CSB / SpringProx), whence the "fast" serial protocol is not available on the OEM readers (K531).
This is a point to point protocol allowing easy handling of the reader under a terminal program (HyperTerminal for example). The transmission is made in ASCII Hexadecimal (0x12|0x34|0x56 becomes "123456").
Content | Explanation |
---|---|
'$' | Ascii $ ("dollar") character used as start marker |
Command|DataInLen|DataIn | Actual frame transmission |
CR and/or LF | Carriage return and/or Line feed ("enter" or "return" on the keyboard) |
Content | Explanation |
---|---|
'+' | Ascii + ("plus") character used as start marker |
Status|DataOutLen|DataOut | Actual frame transmission |
CR|LF | Carriage return + Line feed |
There is no inter-byte timeout and no checksum in this mode.
The only valid characters are CR (0x0D), LF (0x0A), '0' to '9' and 'A' to 'F' (or 'a' to 'f'). Any other character should be silently discarded.
By default, the reader echoes back the received characters. This feature can be turned off in the reader settings.
When the reader detects a length error in the received frame, it signals it to the host with '-'|0x0A instead of '+'.
This protocol is designed for high-speed communication on a reliable physical layer (short RS232 wire, or USB serial tunneling). It is a peer to peer protocol, with frame synchronization and checking, but without software flow control. Each peer is alternatively initiator (I) then target (T), with the same transmission scheme :
Way | Content | Explanation |
---|---|---|
H => R | SYN | Synchronization byte |
H => R | Sequence | Sequence identifier |
H => R | Command|DataLen|Data | Actual frame transmission |
H => R | Checksum | XOR(Sequence|Command|DataLen|Data) |
Way | Content | Explanation |
---|---|---|
R => H | SYN | Synchronization byte |
R => H | Sequence | Sequence identifier |
R => H | Status|DataLen|Data | Actual frame transmission |
R => H | Checksum | XOR(Sequence|Command|DataLen|Data) |
SYN | is the ASCII synchronization character (0x16) |
The timeout between each byte (I => T) is 5ms. When the target detects a timeout error, it signals it to the initiator by sending a NAK character alone.
The checksum is used to detect transmission errors. It is calculated by XORing each byte of the transmission frame excluding the SYN character.
Checksum = Sequence XOR Command XOR DataLen XOR Data0 XOR Data1 ... XOR DataN
When the target detects a checksum error, it signals it to the initiator with NAK character alone.
To accept longest card transactions, host application must allow a timeout of 1.2s between end of transmission and start of reply, and loop as long as frame status is 80 (time extension).
This protocol is designed for high-speed communication on a RS485 physical layer (short RS232 wire, or USB serial tunneling). It is a multi-point protocol, with frame synchronization and checking, but without software flow control. Each peer is alternatively initiator (I) then target (T), with the same transmission scheme :
Way | Content | Explanation |
---|---|---|
H => R | SOH | "Start of header" marker |
H => R | Address | Address of target (= reader address or broadcast) |
H => R | ACK | End of header |
H => R | Sequence | Sequence identifier |
H => R | Command|DataLen|Data | Actual frame transmission |
H => R | Checksum | XOR(Sequence|Command|DataLen|Data) |
Way | Content | Explanation |
---|---|---|
H => R | SOH | "Start of header" marker |
H => R | Address | Address of target (= host address) |
H => R | ACK | End of header |
R => H | Sequence | Sequence identifier |
R => H | Command|DataLen|Data | Actual frame transmission |
R => H | Checksum | XOR(Sequence|Command|DataLen|Data) |
SOH | is the ASCII start of header character (0x01) |
Address |
can take one of the following values :
|
The timeout between each byte (I => T) is 5ms. When the target detects a timeout error, it signals it to the initiator by sending a SOH|Address|NAK sequence.
The checksum is used to detect transmission errors. It is calculated by XORing each byte of the transmission frame excluding the SOH|Address|ACK header.
Checksum = Sequence XOR Command XOR DataLen XOR Data0 XOR Data1 ... XOR DataN
When the target detects a checksum error, it signals it to the initiator with a SOH|Address|NAK sequence.
This protocol is designed for industrial application with flow control, synchronization and frame checking. It is a peer to peer protocol. Each peer is alternatively initiator (I) then target (T), with the same transmission scheme :
Way | Content | Explanation |
---|---|---|
H => R | STX | "Start of frame" marker |
R => H | DLE | Initial acknowledge |
H => R | Sequence | Sequence identifier |
H => R | Command|DataLen|Data | Actual frame transmission |
H => R | Checksum | XOR(Sequence|Command|DataLen|Data) |
H => R | DLE|ETX | "End of frame" marker |
R => H | DLE | Final acknowledge |
Way | Content | Explanation |
---|---|---|
R => H | STX | "Start of frame" marker |
H => R | DLE | Initial acknowledge |
R => H | Sequence | Sequence identifier |
R => H | Command|DataLen|Data | Actual frame transmission |
R => H | Checksum | XOR(Sequence|Command|DataLen|Data) |
R => H | DLE|ETX | "End of frame" marker |
H => R | DLE | Final acknowledge |
STX | is the ASCII "Start of Text" character (0x02) |
ETX | is the ASCII "End of Text" character (0x03) |
DLE | is the ASCII "DataLink Escape" character (0x10) |
NAK | is the ASCII "N-AcKnowledge" character (0x15) |
The timeout between each byte (I => T) is 5ms. When the target detects a timeout error, it signals it to the initiator with NAK|0x0E instead of DLE.
The timeout between (I => T) STX and (T => I) DLE is 20ms. When the initiator detects a timeout error (no response from target), it shoul'd cancel the transmission.
The timeout between (T => I) ETX and (I => T) DLE (or NAK) is 20ms. When the initiator detects a timeout error (no response from target), it shoul'd retry the transmission.
The checksum is used to detect transmission errors. It is calculated by XORing each byte of the transmission frame excluding the STX, DLE and ETX characters.
Checksum = Sequence XOR Command XOR DataLen XOR Data0 XOR Data1 ... XOR DataN
When the target detects a checksum error, it signals it to the initiator with NAK|0x0B instead of DLE.
When the target detects a length error in the received frame, it signals it to the initiator with NAK|0x0A instead of DLE.
Since DLE is a reserved character, a regular value of 0x10 must always be transmitted twice.
To accept longest card transactions, host application must allow a timeout of 5s between DLE and STX.
The physical layer handles the data transmission itself. The physical layer uses an asynchronous serial protocol on top of the reader hardware interface (TTL, RS232, RS485, USB tunneling...).
The serial configuration is 38400 bauds, 8 bits, no parity, 1 stop bit. There is no hardware flow control.
Depending on the reader hardware, a higher baudrate (115200 bauds) can be enabled in the reader settings.
Every response from K531 starts with a status code. There are three different kinds of status codes :
Other values are RFU.
Correct execution of the command, returned data (if some) are valid.
If command execution took more than 1000ms, K531 would send this code periodically to inform host that it is still processing. This is particulary usefull when working with slow T=CL cards, having a FWT (frame wait time) of 4s or more. Receiving status 80 at least every second, host knows that K531 is still alive and request more time to achieve the transaction with the card.
NOTE : status 80 is only provided when using "Fast" binary or "Bus" binary protocol. In ASCII mode, this status code is replaced by a repetition of the '+' ("plus") start marker. In OSI mode, nothing is sent, host response timeout must be at least 5s.
Status | Symbolic name | Meaning |
---|---|---|
63 | MI_BREAK | Command execution has been interrupted by another input |
64 | MI_NY_IMPLEMENTED | Unknown or un-implemented command |
7B | MI_WRONG_VALUE | An invalid value has been specified in command input |
7D | MI_WRONG_LENGTH | Length of input command is invalid |
Status | Symbolic name | Meaning |
---|---|---|
01 | MI_NOTAGERR | No answer received (no card in the field, or card is mute) |
02 | MI_CRCERR | CRC error in card's answer |
05 | MI_PARITYERR | Parity error in card's answer |
08 | MI_SERNRERR | CRC error in card's serial number |
0B | MI_BITCOUNTERR | Wrong number of bits in card's answer |
0C | MI_BYTECOUNTERR | Wrong number of bytes in card's answer |
13 | MI_OVFLERR | RC5xx's FIFO overflow |
15 | MI_FRAMINGERR | Framing error in card's answer |
17 | MI_UNKNOWN_COMMAND | RC5xx's reported unknown opcode |
18 | MI_COLLERR | A collision between 2 (or more) cards has occured |
1D | MI_NOBITWISEANTICOLL | 2 (or more) cards have been found, anticollision not supported |
34 | MI_CASCLEVEX | Card serial number longer than specified |
36 | MI_BAUDRATE_NOT_SUPPORTED | RC5xx doesn't support this baudrate |
Status | Symbolic name | Meaning |
---|---|---|
1A | MI_INITERR | RC5xx not detected |
1B | MI_INTERFACEERR | Invalid RC5xx status |
1C | MI_ACCESSTIMEOUT | Timeout on RC5xx interface |
3C | MI_WRONG_PARAMETER_VALUE | Invalid value specified in internal function call |
70 | MI_RECBUF_OVERFLOW | Internal receive buffer overflow |
Status | Symbolic name | Meaning |
---|---|---|
04 | MI_AUTHERR | Authentication failed (bad key ?) |
06 | MI_CODEERR | Invalid card's response code |
0A | MI_NOTAUTHERR | Please get authenticated first |
0F | MI_WRITEERR | Card reported write error |
1F | MI_CODINGERR | Card reported another error |
6E | MI_WRONG_ADDR | Invalid sector or block number |
Status | Symbolic name | Meaning |
---|---|---|
3D | TCL_NOTAGERR | A card has been found, but it isn't T=CL compliant |
47 | TCL_CID_NOT_ACTIVE | The specified CID isn't assigned yet |
4B | TCL_ATSLEN | Invalid length for card's ATS |
4D | TCL_ATS_ERROR | Invalid data in card's ATS |
4E | TCL_FATAL_PROTOCOL | Card's answer doesn't meet T=CL specifications |
4F | TCL_RECBUF_OVERFLOW | Card's answer is longer than our receive buffer |
52 | TCL_TRANSMERR_NOTAG | Card not answering anymore (maybe it has been removed) |
53 | TCL_BAUDRATE_NOT_SUPPORTED_PICC | Card doesn't support the specified baudrate |
57 | TCL_PPS_FORMAT | Card's answer to our PPS request is invalid |
58 | TCL_PPS_ERROR | Card didn't accepted our PPS request |
6C | TCL_CID_ACTIVE | The specified CID is already in use |
NOTE : specific for Pro-Active K632 OEM
Status | Symbolic name | Meaning |
---|---|---|
28 | VIC_CUSTOMERR | Custom command error codes not implemented |
2A | VIC_ERR | Error with no information given |
2B | VIC_BLOCK_NOT_EXIST | The specified block is not available (doesn’t exist) |
2C | VIC_BLOCK_ALREADY_LOCKED | The specified block is already locked and thus cannot be locked again |
2D | VIC_BLOCK_LOCKED | The specified block is locked and its content cannot be changed |
2E | VIC_BLOCK_PROGRAMERR | The specified block was not successfully programmed |
2F | VIC_BLOCK_LOCKERR | The specified block was not successfully locked |
This command returns the current version of the reader module.
0x4F 0x00
0x00 0x10 Product0 ... Product3 Major Minor Build RcPid0 ... RcPid4 RcSnr0 ... RcSnr3
ProductX | is the 4-byte product ID of the reader (for instance, 0x43 0x53 0x42 0x34 for "CSB4") |
Major Minor Build | is the product version and build identifier (for instance, 0x01 0x19 0x02 for "1.19 build 2") |
RcPidX | is the 5-byte product ID of the embedded Philips RC chipset |
RcSnrX | is the 4-byte serial number of the embedded Philips RC chipset |
Get the unique device address, to be used in multi-point protocols.
0x58 0x01 0xF0
0x00 0x01 Address
Address | is the device current address |
If address is 0x00 or 0xFF, the multi-point protocol is disabled and the point-to-point protocol is enabled. If address is between 0x01 and 0xFE, the multi-point protocol is enabled, and the point-to-point protocol is disabled. |
Set the unique device address, to be used in multi-point protocols.
0x58 0x02 0xF0 Address
Address | is the device address to be set |
If address is 0x00 or 0xFF, the multi-point protocol is disabled and the point-to-point protocol is enabled. If address is between 0x01 and 0xFE, the multi-point protocol is enabled, and the point-to-point protocol is disabled. |
0x00 0x00
This commands resets the RC531 chipset. Reader is back in startup conditions.
0x9F 0x00
0x00 0x00
This commands execute a power on (software) reset. New configuration settings will be loaded.
0x9F 0x04 DE AD DE AD
Nothing. The device resets, so host software will receive its startup string ("K531" or "CSB4" or whatever...) at default speed.
Puts reader back in the same status as it is after power-up.
0x58 0x02 0x0C 0x00
0x00 0x00
NOTE : this is reader's default mode. This command must be called only after "Enter ISO/IEC 14443-B mode" to go back to default mode.
0x58 0x02 0x0C 0x01
0x00 0x00
0x58 0x02 0x0C 0x02
0x00 0x00
0x58 0x02 0x0A 0x01
0x00 0x00
0x58 0x02 0x0A 0x00
0x00 0x00
0x58 0x02 0x0A StopMs
StopMs | is the duration (milliseconds) of the OFF state |
A typical value of 5 ms is enough to reset all the cards. |
0x00 0x00
0x58 0x03 0x1E RedLed GreenLed
RedLed | is the mode for the Red LED |
GreenLed | is the mode for the Green LED |
Allowed values are 0 (LED is OFF), 1 (LED is ON),2 (LED is blinking), 3 (LED is under control of reader's firmware). |
0x00 0x00
Configure the USER I/O pin as an output, and defines its value.
0x58 0x02 0x1F Value
Value | is the value for the USER pin output |
Allowed values are 0 (LOW level) or 1 (HIGH level). |
0x00 0x00
Configure the USER I/O pin as an input, and returns its value.
0x58 0x01 0x1F
Value | is the value for the USER pin input |
Relevant values are 0 (LOW level) or 1 (HIGH level). |
Configure the MODE I/O pin as an output, and defines its value.
0x58 0x02 0x1D Value
Value | is the value for the MODE pin output |
Allowed values are 0 (LOW level) or 1 (HIGH level). |
0x00 0x00
Configure the MODE I/O pin as an input, and returns its value.
0x58 0x01 0x1D
Value | is the value for the MODE pin input |
Relevant values are 0 (LOW level) or 1 (HIGH level). |
Reader must be in ISO/IEC 14443-A mode. Use the "Enter ISO/IEC 14443-A" command to ensure this.
Select the first available tag that is in the IDLE or HALTed state.
0x40 0x00
0x00 3+TagSnrLen TagSnr0 TagSnr1 ... TagSnrN TagAtq0 TagAtq1 TagSak
TagSnrLen | is the length of TagSnr (4, 7 or 12 bytes) |
TagSnrX | is the selected tag serial number or unique identifier |
TagAtqX | is the 2-byte value of the tag "answer to query" |
TagSak | is the 1-byte value of the tag "select acknowledge" |
Select the first available tag that is in the IDLE state.
0x4D 0x00
Same as "Select any"
Select "again" the last selected tag (if still available).
0x44 0x00
0x00 0x00
Halt the currently selected tag.
0x92 0x00
0x00 0x00
This establish a T=CL channel between currently selected tag and host application.
0x81 0x02 0x10 CID
CID | is the card identifier (use value 0xFF if you don't need the CID feature) |
0x00 0x00
Mifare 1k and 4k tags must be selected with ISO/IEC 14443-A "Select Any" or "Select Idle" command before read and write functions may be used.
Read a 16-byte block of data on the currently selected Mifare tag. Authentication is performed with every keys available in reader's EEPROM.
0x49 0x01 BlockNum
BlockNum | is the number of the block to be read (0 to 63 on a Mifare Classic 1k tag) |
0x00 0x10 Data0 Data1 ... Data15
DataX | is the block data buffer |
Write a 16-byte block of data on the currently selected Mifare tag. Authentication is performed with every key available in reader's EEPROM.
0x4B 0x11 BlockNum Data0 Data1 ... Data15
BlockNum | is the number of the block to be written (0 to 63 on a Mifare Classic 1k tag) |
DataX | is the block data buffer |
0x00 0x00
Read a 16-byte block of data on the currently selected Mifare tag. Authentication is performed with the supplied key.
0x49 0x07 BlockNum Key0 Key1 ... Key5
BlockNum | is the number of the block to be read (0 to 63 on a Mifare Classic 1k tag) |
KeyX | is the 6-byte-value of the Mifare access key |
0x00 0x10 Data0 Data1 ... Data15
DataX | is the block data buffer |
Write a 16-byte block of data on the currently selected Mifare tag. Authentication is performed with the supplied key.
0x4B 0x17 BlockNum Data0 Data1 ... Data15 Key0 Key1 ... Key5
BlockNum | is the number of the block to be written (0 to 63 on a Mifare Classic 1k tag) |
DataX | is the block data buffer |
KeyX | is the 6-byte-value of the Mifare access key |
0x00 0x00
Read a 48-byte block of data on the currently selected Mifare tag. Authentication is performed with every keys available in reader's EEPROM.
0x48 0x01 SectorNum
SectorNum | is the number of the sector to be read (0 to 15 on a Mifare Classic 1k tag) |
0x00 0x30 Data0 Data1 ... Data47
DataX | is the sector data buffer |
Write a 48-byte sector of data on the currently selected Mifare tag. Authentication is performed with every keys available in reader's EEPROM.
0x4A 0x31 BlockNum Data0 Data1 ... Data47
SectorNum | is the number of the sector to be written (0 to 15 on a Mifare Classic 1k tag) |
DataX | is the sector data buffer |
0x00 0x00
Read a 48-byte sector of data on the currently selected Mifare tag. Authentication is performed with the supplied key.
0x48 0x07 SectorNum Key0 Key1 ... Key5
SectorNum | is the number of the sector to be read (0 to 15 on a Mifare Classic 1k tag) |
KeyX | is the 6-byte-value of the Mifare access key |
0x00 0x30 Data0 Data1 ... Data47
DataX | is the sector data buffer |
Write a 48-byte sector of data on the currently selected Mifare tag. Authentication is performed with the supplied key.
0x4A 0x37 BlockNum Data0 Data1 ... Data47 Key0 Key1 ... Key5
SectorNum | is the number of the sector to be written (0 to 15 on a Mifare Classic 1k tag) |
DataX | is the sector data buffer |
KeyX | is the 6-byte-value of the Mifare access key |
0x00 0x00
Load a Mifare access key in reader's non-volatile memory (RC's EEPROM).
0xA8 0x08 KeyType KeyNum Key0 Key1 ... Key5
KeyType | can be either 0x60 for an 'A' key, or 0x61 for a 'B' key |
KeyNum | is the key number between 0x00 and 0x0F |
KeyX | is the 6-byte-value of the Mifare access key |
0x00 0x00
Mifare UltraLight tags must be selected with ISO/IEC 14443-A "Select Any" or "Select Idle" command before read and write functions may be used.
Read a 16-byte buffer (4 pages) from the currently selected Mifare UL tag. No authentication is performed.
0x8E 0x03 0x30 PageNum 0x10
PageNum | is the number of the first page to be read (0 to 15 on a Mifare UltraLight tag) |
0x00 0x10 Data0 Data1 ... Data15
DataX | is the data buffer (4 pages x 4 bytes) |
Write a 4-byte buffer (1 page) on the currently selected Mifare UL tag. No authentication is performed.
0x8F 0x07 0xA2 PageNum 0x04 Data0 ... Data3
PageNum | is the number of the page to be written (0 to 15 on a Mifare UltraLight tag) |
DataX | is the page data buffer |
0x00 0x00
Reader must be in ISO/IEC 14443-B mode. Use the "Enter ISO/IEC 14443-B" command to ensure this.
Select the first available tag that is in the IDLE or HALTed state.
0x40 0x00
0x00 0x0B TagAtq0 TagAtq1 ... TagAtq10
TagAtqX | is the 11-byte value of the tag "answer to query" |
Select the first available tag that is in the IDLE state.
0x4D 0x00
Same as "Select any"
Halt the currently selected tag.
0x92 0x00
0x00 0x00
This establish a T=CL channel between currently selected tag and host application.
0x81 0x02 0x20 CID
CID | is the card identifier (use value 0xFF if you don't need the CID feature) |
0x00 0x00
Those functions are common to type-A and type-B cards, once they have been activated (Get ATS for type-A, Attrib for type-B).
This is the basic T=CL exchange function (analog to SCardTransmit in PC/SC)
The reader handles the whole T=CL protocol internally.
0x82 SendLen+1 0xFF Send0 Send1 ... SendN
SendLen+1 | is the size of the frame to send, plus 1 for the CID |
CID | is the card identifier (use value 0xFF if you don't need the CID feature) |
SendX | are the data to send to the card |
0x00 RecvLen Recv0 Recv1 ... RecvN
RecvLen | is the size of the frame answered by the card |
RecvX | are the data returned by the card |
0x81 0x02 0x12 CID
CID | is the card identifier (use value 0xFF if you don't need the CID feature) |
0x00 0x00
Retrieve current value of a register. See Philips RC documentation for information on registers.
0xAB 0x01 RegAddr
RegAddr | is the address of the register |
0x00 0x01 RegValue
RegValue | is the value of the register |
Set new current value for a register. See Philips RC documentation for information on registers.
0xAC 0x02 RegAddr RegValue
RegAddr | is the address of the register |
RegValue | is the value of the register |
0x00 0x00
Send a frame using current ISO/IEC 14443-A parameters and CRC A.
Reader must be in ISO/IEC 14443-A mode. Use the "Enter ISO/IEC 14443-A" command to ensure this.
0x94 SendLen+9 0x00 SendLen+2 0x00 MaxRecvLen 0x01 TimeoutH TimeoutL Send0 Send1 ... SendN 0xCC 0xCC
SendLen+2 | is the size of the frame to send, including 2 CRC bytes |
MaxRecvLen | is the maximum size of the frame to accept in reply (including 2 CRC bytes) |
TimeoutH TimeoutL | is the 16-bit timeout value (in ETU, see ISO/IEC 14443 for details ; if you don't know, try 0x02 0x00, 0x10 0x00 or 0x40 0x00 until it works...) |
SendX | are the data to send to the card |
The reader will replace the last 2 bytes of the frame by the CRC A before sending the frame to the card.
0x00 RecvLen+2 Recv0 Recv1 ... RecvN CrcH CrcL
RecvLen+2 | is the size of the frame answered by the card, + 2 reserved for CRC |
RecvX | are the data returned by the card |
The reader will check that the last 2 bytes are a valid CRC A, before forwarding the frame from the card to the host.
Send a frame using current ISO/IEC 14443-B parameters and CRC B.
Reader must be in ISO/IEC 14443-B mode. Use the "Enter ISO/IEC 14443-B" command to ensure this.
0x97 SendLen+9 0x00 SendLen+2 0x00 MaxRecvLen 0x01 TimeoutH TimeoutL Send0 Send1 ... SendN 0xCC 0xCC
SendLen+2 | is the size of the frame to send, including 2 CRC bytes |
MaxRecvLen | is the maximum size of the frame to accept in reply (including 2 CRC bytes) |
TimeoutH TimeoutL | is the 16-bit timeout value (in ETU, see ISO/IEC 14443 for details ; if you don't know, try 0x02 0x00, 0x10 0x00 or 0x40 0x00 until it works...) |
SendX | are the data to send to the card |
The reader will replace the last 2 bytes of the frame by the CRC B before sending the frame to the card.
0x00 RecvLen+2 Recv0 Recv1 ... RecvN CrcH CrcL
RecvLen+2 | is the size of the frame answered by the card, + 2 reserved for CRC |
RecvX | are the data returned by the card |
The reader will check that the last 2 bytes are a valid CRC B, before forwarding the frame from the card to the host.
NOTE : specific for Pro-Active K632 OEM
Reader must be in ISO/IEC 15693 standard or fast mode. Use the "Enter ISO/IEC 15693" command to ensure this.
Select the first available tag.
0x40 0x00
0x00 0x08 TagSnr0 TagSnr1 ... TagSnr7
TagSnrX | is the 8-byte value of the tag serial number or unique identifier |
Select "again" the last selected tag (if still available).
0x44 0x00
0x00 0x00
Halt the currently selected tag.
0x45 0x00
0x00 0x00
ISO 15693 tags must be selected with ISO/IEC 15693 "Select Any" or "Select again" command before read and write functions may be used.
Read a 4-byte block of data on the currently selected ISO 15693 tag.
0x49 0x01 BlockNum
BlockNum | is the number of the block to be read |
0x00 0x04 Data0 Data1 ... Data3
DataX | is the block data buffer |
Write a 4-byte block of data on the currently selected ISO 15693 tag.
0x4B 0x05 BlockNum Data0 Data1 ... Data3
BlockNum | is the number of the block to be written |
DataX | is the block data buffer |
0x00 0x00
Lock permanently 4-byte block of data on the currently selected ISO 15693 tag.
0x59 0x01 BlockNum
BlockNum | is the number of the block to be locked |
0x00 0x00
NOTE : specific for Pro-Active K632 OEM
Reader must be in ICODE1 standard or fast mode. Use the "Enter ICODE1" command to ensure this.
Select the first available tag that is in the field.
0x40 0x00
0x00 0x08 TagSnr0 TagSnr1 ... TagSnr7
TagSnrX | is the 8-byte value of the tag serial number or unique identifier |