Skip to content

ODRFID (CDC Firmware)

The device appears as a virtual serial port (COM port) by implementing the USB Communications Device Class, Abstract Control Model (CDC/ACM) specification. All major operating systems, including Windows, Linux, and macOs support such devices out-of-the-box.

Differences in the device revisions are described in the Hardware Revisions section.

An AT command set is provided to query tags, read and write data, and configure the device itself.

Port settings

The device represents itself as a virtual COM port. As such, port settings, like communication speed, parity or stop bit settings will be ignored. No specific configuration is necessary and the port can be operated at any settings.

General Frame Format

  • Host-to-Device data must start with an AT keyword and end with a carriage-return character (ASCII code 13 decimal, 0x0d hexadecimal, "\r" as C string literal)
  • Device-to-Host frames start and end with a carriage-return character followed by a line-feed character (ASCII codes 13,10 decimal, 0x0d,0x0a hexadecimal, "\r\n" as C string literal).
  • Device-to-Host response to a Host-to-Device request consists of one or more frames, the last one being \r\nOK\r\n or \r\nERROR\r\n, depending on whether the request/command has been completed successfully or failed.
  • Do not add any unnecessary white space characters (space, back-space, tab, carriage-return, line-feed, etc.) to the request data, they will not be removed by the command-line parser leading to the "ERROR" response.

Device modes

RFID device can be in two modes: scanning (SCAN1) and application controlled mode (SCAN0). The default mode (i.e. the device mode after POR) is selected via the device settings. Factory defaults set it to scanning mode (SCAN1).

SCAN1 mode is obsolete since v 1.5. See the details below

  • SCAN1 - the device continuously scans whether an RFID tag is present or not (actually it queries the tag presence once every N ms - refer to the device settings) and reports it to the PC:
    • \r\nSCAN:+<HEX DATA>\r\n when a new tag is detected
    • \r\nSCAN:-<HEX DATA>\r\n when a tag is no longer present
  • SCAN0 - the device does not scan for RFID tags on its own, only when a corresponding request arrives.

    All commands except LED control, BUZZ control, settings related, and device reboot will fail with ERROR while the device is in the SCAN1 mode.

  • (v. 1.3F Dec 17 2018 and above) An extra SCAN2 mode is added. In this mode the device continuously scans for an RFID tag and, once a tag has been identified, prints the data read from it using the specified format: \r\n[formatted data]\r\n. Unlike the SCAN1 mode when the tag is removed, no data is printed. Refer to the FMT command for the format description. All commands except LED control, BUZZ control, settings related, and device reboot will fail with ERROR while the device is in the SCAN2 mode.

  • (v. 1.0F Apr 3 2018 and above) DATA is determined by the UID and Block Number settings. If DATA is the UID, SAK is optionally appended based on the corresponding device setting.
  • (prior to v. 1.0F Apr 3 2018) DATA is the UID + SAK
  • Since v1.5 the SCAN1 mode is effectively the same as the SCAN2 (formatted output), the 1 char in the mode is kept for compatibility reasons.

Error codes

When a tag reports an error, an additional frame describing the error can be returned before the ERROR frame. This additional frame has the following format:

+CME ERROR: <code>

where code is the last error reported by RFID IC. It is a 32bit unsigned integer in decimal format with the following bit fields:

  • 0x00000001 - Protocol error
  • 0x00000002 - Parity error
  • 0x00000004 - Checksum error
  • 0x00000008 - Collision
  • 0x00000010 - Buffer overflow
  • 0x00000020 - Tear event
  • 0x00000040 - IC overheated
  • 0x00000080 - FIFO write error
  • 0x00000100 - Operation timed out
  • 0x00000200 - Mifare NAK
  • 0x00000400 - Authentication failure
  • 0x00000800 - Generic communication error
  • 0x00001000 - The TAG returned more data than expected (v1.5+)
  • 0x00002000 - The TAG reply integrity error (v1.5+)

Bits 16-31 are reserved for internal purposes and must be ignored.

CDC/ACM AT Command Set. API Reference.

Device Information

This command queries the product information and firmware version of the device.

Bug

please consult the p.1 of the Errata

Syntax:

Request ATI\r
Response <product description> <firmware version/build date>
S/N <serial number>

Example:

Request ATI\r
Response Open-Development RFID Reader (CDC-AT) 1.0F Jan 17 2018
S/N 220333635434B431500280010
OK

Flush buffers

(from v1.6)

This command forces the device to flush the internal buffer, holding the data to be sent to the PC.

Syntax:

Request ATH\r
Response OK

LED Control

This command controls the state of the light-emitting diode (LED). Some -e/-m/-n device revisions do not have any LEDs, therefore this command is not supported. The device will answer with an ERROR to any AT+D.... command

  • 0 = off,
  • 1 = on
  • 2 = blinking

If no state is specified (i.e. nil1), the application relinquishes control to the firmware

Syntax:

Request AT+D1=[0/1/2/nil]\r
Response OK

Example:

Request AT+D1=1\r Turn the LED on
Response OK
Request AT+D1=\r Return control to the firmware
Response OK
Request AT+D1?\r Query LED state
Response +D1=1
OK
LED is on

Buzzer Control

This command controls the state of the buzzer.

  • 0 = off
  • 1 = on

If no state is specified (i.e. nil1), the application relinquishes control to the firmware.

Syntax:

Request AT+B=[0/1/nil]\r
Response OK

Example:

Request AT+B=1\r Turn the buzzer on
Response OK
Request AT+B=\r Return control to the firmware
Response OK
Request AT+B?\r Query the buzzer state
Response +B=1
OK
Buzzer is on

RFID Mode Control

This command switches the device mode.

Syntax:

Request AT+SCAN[0/1/2]\r
Response OK

Example:

Request AT+SCAN0\r
Response OK Scanning disabled
Request AT+SCAN?\r supported since v1.4F2
Response +SCAN=0 Current mode: 0
OK

Enable/Disable RF Field

This command switches on / off the RF field, generated by the IC.

Note 1
  • For the multi-protocol readers (i.e. 13.56MHz + 125kHz), the command switches both fields on / off, but only if the corresponding field is enabled (ref. AT+h and AT+m respectively), the query command is not reliable and should not be used.

  • For the single protocol readers (only 13.56MHz, or only 125kHz), the command switches the corresponding field on / off, the multi-protocol commands (ref. AT+h or AT+m) are not available.

Note 2

The field state query command (+RF?) is not reliable while the scanning process is running (i.e. the SCAN1 mode is active) and has been disabled while this mode is active for the 13.56MHz-enabled readers in the firmware versions 2.2 and above. For the multi-protocol readers the query command is meaningless and has been disabled in the firmware versions 2.2 and above.

Syntax:

Request AT+RF=[0/1]\r 1 - switch on, 0 - switch off
Response OK

Example:

Request AT+RF=0\r
Response OK RF field is off
Request AT+RF?\r Query the RF field state (ref. note 2 above)
Response +RF=0
OK
RF field is currently off

Inventory scan (all tags)

Requests an inventory scan. Returns a list of UIDs (may be empty) of the tags in the field range. All the discovered tags are scanned and reset after the enumeration completes.

It may take the device some time to query all the tags. Do not issue a new command before getting the reply for the previous one.

Syntax:

Request AT+I\r
Response +UID=<HEX UID><SAK>
OK
possibly repeated or absent

Example:

Request AT+I\r
Response +UID=EC6D140708
+UID=343D7091725D8600
OK

Inventory Scan (the first tag)

Requests an inventory scan, selects and returns the first detected tag, if any, according to the anti-collision procedure. The tag (if present) will be set as the current one and halted.

If a tag is not present, the device returns an empty success message (i.e OK)

Syntax:

Request AT+i\r
Response +UID=<HEX UID><SAK>
OK
possibly absent

Example:

Request AT+i\r
Response +UID=EC6D140708
OK

Inventory Scan (select the next tag)

Halts the currently selected tag and selects the next 13.56MHz tag (if any) according to the anti-collision procedure. The new tag will be set as the current one and halted. Note, that if a tag is not present, the device returns an empty success message (i.e OK).

The '-e' revision of the device does not support this command and returns an ERROR.

Syntax:

Request AT+n\r
Response +UID=<HEX UID><SAK>
OK
possibly absent

Example:

Request AT+n\r
Response +UID=343D7091725D8600
OK

Select Tag

Select a single 13.56MHz tag by UID for further processing. The tag access commands (read/write block) address the current tag. current means either the first one according to the anti-collision procedure, or the one selected by this command. Passing an empty UID will deselect the current tag (if any).

Attention

Starting from version 1.6, current should read: 'the tag, selected by the last AT+i, AT+n or AT+SELECT=... command' (not the first one selected by the anti-collision procedure)

The '-e' revision of the device does not support this command and returns an ERROR.

Syntax:

Request AT+SELECT=<HEX UID>\r
Response OK
ERROR
Tag selected
Tag is not present

Example:

Request AT+SELECT=343D7091725D86\r
Response OK Tag selected
Request AT+SELECT=343D7091725D87\r
Response ERROR Tag is not present

Check Tag Presence

Check whether a tag with the specified UID is currently present. Unlike the AT+SELECT=... command this one just checks the tag presence, it does not select the tag and does not make it the current one. The tag being checked will be halted (if present).

The '-e' revision of the device does not support this command and returns an ERROR.

Syntax:

Request AT+C=<HEX UID>\r
Response OK
ERROR
Tag is present
Tag is not present

Example:

Request AT+C=343D7091725D86\r
Response OK Tag is present
The current UID has not changed!
Request AT+C=343D7091725D87\r
Response ERROR Tag is not present

Get Current Tag Information

Request detailed information about the current tag: UID+SAK, block size, block count, type. UID and SAK are returned in hexadecimal format, BS (block size), BC (block count), T (type) in decimal format.

Recognized tag types: ref. Tag Types

Syntax:

Request AT+S\r
Response +UID=<HEX UID><SAK>,BC=<bc>,BS=<bs>,T=<t>
OK
success
ERROR tag did not respond
or SCAN1 mode is enabled

Example:

Request AT+S\r
Response +UID=EC6D140708,BC=64,BS=16,T=0
OK

Read Data Block

(only for Classic, Plus S/X (SL1), Ultralight and NTAGs)

Read data block from tag memory. The block number must be within the range supported by the tag (ref. the BC field in the AT+S\r request), and passed in decimal format. Returns the block number, followed by the actual data in hexadecimal format. Number of bytes in the data equals the tag block size (ref. the BS field in the AT+S\r request). A tag must be selected prior to executing this command (either by calling AT+i, AT+n, or AT+SELECT)

The '-e' revision of the device does not support this command and returns an ERROR.

Starting with firmware v3.2 the block number may be passed in the hexadecimal format: AT+R10 or AT+R0x0a. The reply still always contains the block number in the decimal format.

Syntax:

Request AT+R<block number>\r
Response +DATA <block number>:<hex data>
OK
success
+CME ERROR: <code>
ERROR
the tag did not respond, reported an error
or SCAN1 mode is enabled

Example:

Request AT+R0\r
Response +DATA 0:EC6D1407920804009944314230353913
OK

Write Data Block

(only for Classic, Plus S/X (SL1), Ultralight and NTAGs)

Write data block to tag memory. The block number must be within the range supported by the tag (ref. the BC field in the AT+S\r request), and passed in decimal format. The data must be passed in hexadecimal format. The length of the data must match the size of a data block as returned in the BS parameter (i.e. pass 2*BS hexadecimal characters).

The '-e' revision of the device does not support this command and returns an ERROR.

Starting with firmware v3.2 the block number may be passed in the hexadecimal format: AT+W10:... or AT+W0x0a:....

Syntax:

Request AT+W<block number>:<HEX DATA>
Response OK
+CME ERROR: <code>
ERROR
write or authentication error (if +CME... is reported)
syntax error or SCAN1 mode is enabled (if no +CME...)

Example:

Request AT+W1:000102030405060708090A0B0C0D0E0F\r
Response OK

Value block

(supported since v1.6, only for Classic, Plus S/X (SL1))

Increment / decrement the value of a "value block" of a Mifare Classic or Plus S/X tag.

The '-e' revision of the device does not support this command and returns an ERROR.

Starting with firmware v3.2 the block number may be passed in the hexadecimal format: AT+V<I/D>10:... or AT+V<I/D>0x0a:....

Syntax

Request AT+V<I/D><block number>:<value>
Response OK
+CME ERROR: <code>
ERROR
RW or authentication error (if +CME... is reported)
syntax error or SCAN1 mode is enabled (if no +CME...)

Pass I for increment, D for decrement, block number and value are passed as decimal values. Value must be non-negative.

Example

Request AT+VI1:42\r
Response OK

Change Tag UID

!!! warning

This function is supported starting from *v 1.5*. Not all tags have a re-writable block 0. This is a potentially dangerous operation. The best case scenario - it just won't work. The worst case - you can brick your tag. Proceed at your own risk.

The '-e' revision of the device does not support this command and returns an ERROR.

Syntax:

Request AT+~<HEX UID> (*)
Response OK Success

* UID size must match the size of the current UID. UID size changing is not supported! All tags except Mifare Classic are not supported!

Mifare Plus specific commands

(supported since v1.6)

All the '-e' revisions and some '-m' revisions of the device do not support these commands and return an ERROR.

Authentication

Perform Mifare Plus authentication for the specified block.

Syntax:

Request AT+N<block>
Response OK Success
+CME ERROR: <code>
ERROR
Authentication or syntax error

<block> must be specified as a decimal number, pass 0 to reset the authentication.

Bug

please consult the p.4 of the Errata

Starting with firmware v3.2 the block number may be passed in the hexadecimal format: AT+N10 or AT+N0x0a.

Read Block

Read a block of a Mifare Plus tag (assumes a successful authentication procedure for the corresponding block has been performed)

Syntax:

Request AT+M<block number>\r
Response +DATA <block number>:<hex data>
OK
+CME ERROR: <code>
ERROR
the tag did not respond, reported an error
or SCAN1 mode is enabled

Example:

Request AT+M1\r
Response +DATA 1:EC6D1407920804009944314230353913
OK

The block number must be in a decimal format.

Starting with firmware v3.2 the block number may be passed in the hexadecimal format: AT+M10 or AT+M0x0a. The reply still always contains the block number in the decimal format.

Write Block

Write data block to tag memory (assumes a successful authentication procedure for the corresponding block has been performed). The block number must be within the range supported by the tag and passed in decimal format. The data must be passed in hexadecimal format. The length of the data must match the size of a data block.

Starting with firmware v3.2 the block number may be passed in the hexadecimal format: AT+W10:... or AT+W0x0a:....

Syntax:

Request AT+E<block number>:<HEX DATA>
Response OK success
+CME ERROR: <code>
ERROR
write or authentication error (if +CME... is reported)
syntax error or SCAN1 mode is enabled (if no +CME...)

Example:

Request AT+E1:000102030405060708090A0B0C0D0E0F\r
Response OK

Security Level Switch

Switch the security level of a Mifare Plus tag. The level must be passed as a decimal number.

Bug

please consult the p.2 of the Errata

Syntax

Request AT+J<level>
Response OK success
+CME ERROR: <code>
ERROR
write or authentication error (if +CME... is reported)
syntax error or SCAN1 mode is enabled (if no +CME...)

125kHz Tags Commands

Supported by -e/-m revisions only.

Program T55x7

The device can program T55x7 (T5557/67/... and binary-compatible) tags in Em-Marine emulation mode. The tag will be identified by Em-marine compatible readers as a EM4100 tag with the specified UID.

Bi-phase encoding

The e5555-compatibility mode (default for the T5577 IC) biphase coding is reversed compared to the EM4100 standard (mid-bit transition is one, not zero.) Therefore, if the biphase encoding is used, the device will therefore try to program the T5577 in extended mode, where a compatible biphase coding is available. This may fail, therefore for compatibility reasons Manchester coding choice is preferable.

Syntax:

Request AT+@HHHHHHHHHH\r HH..HH - 5 digits (10 hex characters) of the Customer ID (1 byte) + UID (4 bytes)
Response OK

If an inventory scan command has been performed prior to issuing this command and an EM-Marine tag has been detected, the 10 hex characters can be omitted in order to perform a tag clone operation.

Example:

Request AT+@4201020304\r
Response OK Tag write sequence has been performed

Example 2

Request AT+i\r
Response +UID=1011121314FF
OK
EM-Marine tag has been identified
--- --- Remove the EM-Marine tag and prepare the tag to be written
Request AT+@\r
Response OK Tag write sequence has been performed

The device will not verify by itself that the write operation succeeded (or even that a compatible tag is present). The success or failure of the write command has to be verified by a following inventory scan command.

Program T55x7 with a password

The same as the previous command, but the tag is password-protected against unauthorized access.

Syntax:

Request AT+xPPPPPPPP,HHHHHHHHHH\r PP..PP - 32 bit big-endian unsigned integer.
Response OK

Comma and the 10 hex digits are optional if a EM-Marine tag has been previously identified (i.e. a clone operation should be performed). Both the password and the data must be passed as hexadecimals.

Clear the password protection of a T55x7 tag

Security risk

Only the password protection bit will be lifted. The password itself will be left in the tag's memory in plain text, anyone will be able to read it.

The device has no means to verify that the password protection has been disabled, or even that the password was correct.

Syntax:

Request AT+uPPPPPPPP\r PP..PP - 32 bit big-endian unsigned integer.
Response OK

Device Settings

The following commands change various device settings. They are executed regardless of the device mode. Individual commands change only in-RAM settings. In order to save the current settings to ROM, execute the AT+P command.

Enable/Disable the LED

This command enables/disables the LED. This setting only affects whether the firmware switches the LED when a tag is detected/lost. Regardless of this setting, you can switch the LED on and off using AT+D1... command.

Syntax:

Request AT+L[0/1/?]\r ? - query the current value
0 - do not switch LED on/off
1 - switch LED on/off
Response OK

Example:

Request AT+L?\r
Response +L1
OK
LED will be switched on/off

Enable/Disable the Buzzer

This command enables/disables the buzzer. This setting only affects whether the firmware will make a beep when a tag is detected or not. Regardless of this setting, you can switch the buzzer on and off using AT+B... command.

Syntax:

Request AT+Z[0/1/?]\r ? - query the current value
0 - do not make a beep
1 - make a beep
Response OK

Example:

Request AT+Z?\r
Response +Z1
OK
The device will beep when a tag is detected

RFID Receiver Gain

The receiver gain is measured in dBm. The valid range is [18;48]dBm. The default value is 33dBm. This setting is only for the 13.56MHz receiver. The 125kHz receiver is not affected.

The valid gain values are

  • 18dBm
  • 23dBm
  • 33dBm
  • 38dBm
  • 43dBm
  • 48dBm

If any other value is passed, it will be rounded (to the nearest available value greater than the one passed).

Syntax:

Request AT+G=[18-48]\r ? - query the current value
+G= - revert to default (33)
Response OK

Example:

Request AT+G=24\r
Response OK The value will be rounded
The value will not be applied immediately
Request AT+G?\r
Response +G=33
OK
The value (24) has been rounded.

Tag Presence Query Frequency

When in SCAN1 (or SCAN2) mode, the device queries the tag presence every N ms. This command controls the query frequency (i.e. the interval N). Valid range is [100-65535] ms. Values smaller than the minimum one will be accepted and silently increased to fit in the range. Values greater then the maximum one will result in an error.

The default value is:

  • prior to v1.4: 1000 ms
  • starting v1.4: 200 ms.

Syntax:

Request AT+T[?/<value>]\r ? - query the current value
Response OK

Example:

Request AT+T?\r
Response +T1000
OK
The current interval value is 1000ms
Request AT+T1500\r
Response OK The current interval value set to 1500ms

Authentication Keys

Mifare Classic/Plus tags need an authentication key to be read/written. The following command sets the key (the key type and 6 bytes long key itself), which will be used to authenticate the connected Mifare Classic tags. The default value is FF

Danger

The keys are written / read via this protocol in plain text. If the settings are persisted, the keys are stored in the device and will be available for later readout using this protocol. If a custom key is set and should not be persisted, revert it to the default one before issuing the AT+P command.

Syntax:

Request AT+K<type><hex data>\r type can be
A or B
Response OK

Starting from v 1.5:

Set the Ultralight EV1 and NTAG's authentication password and query the current tag's PACK

Set the password:

Request AT+KU<hex data>\r 4 bytes (8 hex digits)
Response OK

Query the PACK and perform the authentication:

Request AT+KP\r
Response +P<hex data>
OK
2 bytes (4 hex digits)

Starting from v 1.6:

Set the Mifare Plus key

Request AT+KX<hex data>\r 16 bytes (32 hex digits)
Response OK

Example:

Request AT+KA000102030405\r
Response OK Key set to 00..05 type A
Request AT+K?
Response +A000102030405\r
+UFFFFFFFF
+XFF..FF
OK
returns current key type and value.
(from v1.5) returns the UL. password
(from v1.6) returns the MF Plus key

Virtual Keyboard Control

Attention

This section is only applicable to the 3rd generation devices (ODRFID-N/M/E with the firmware versions 3.0 and above).

The 3rd generation devices have a dual USB interface - CDC (to which the current protocol description relates) and HID (seen by the PC as a keyboard). Unlike the 1st and the 2nd generation devices, the HID interface is keyboard-only (i.e. no protocol commands via this interface).

The keyboard may be switched on (the default) and off. Please note, that even when the keyboard is switched off only from the protocol point of view. The device will always present itself as a dual interface device, the PC will always see the keyboard, but no data will be "printed" when the keyboard is switched off.

When the keyboard is switched on, the SCAN2 mode "prints" the data to the keyboard according to the format string. The data is not duplicated to the CDC interface.

When the keyboard is switched off, the SCAN2 mode sends the data via the CDC interface according to the format string.

Note

When printing on the virtual keyboard if, for example the D symbol needs to be sent, it will be as if the D key on the keyboard has been pressed. Whether D or something other (ex. a symbol from the other locale) will be printed and where it will be sent is entirely up to the operating system. The device has no control over it whatsoever.

Syntax:

Request AT+H[0/1/?]\r ? - query the current value
0 - disable the keyboard
1 - enable the keyboard
Response OK

Example:

Request AT+H?\r
Response +H1
OK
The keyboard is enabled
Request AT+H0\r
Response OK The keyboard is now disabled

13.56MHz frequency transceiver control

(for the "-M" revision only) Enable/Disable the high-frequency (13.56MHz) transceiver. Default: enabled.

Note

The 125kHz tags are always scanned first unless the low-frequency transceiver is disabled.

Bug

please consult the p.3 of the Errata

Syntax:

Request AT+h[0/1/?]\r ? - query the current value
0 - disable
1 - enable
Response OK

Example:

Request AT+h?\r
Response +h1
OK
13.56 transceiver is enabled

125kHz frequency transceiver control

(for the "-M" revision only) Enable/Disable the low-frequency (125kHz) transceiver. Default: enabled.

Note

The 125kHz tags are always scanned first unless the low-frequency transceiver is disabled.

Syntax:

Request AT+m[0/1/?]\r ? - query the current value
0 - disable
1 - enable
Response OK

Example:

Request AT+m?\r
Response +m1
OK
125 transceiver is disabled

125kHz Tag Mode Control

(for the "-M/-E" revisions only). This parameter defines how the T55x7 tags will be programmed (i.e. the coding (Manchester/BiPhase) and the speed (32 or 64 transitions per bit))

Syntax:

Request AT+c[0/1],[0/1]\r ? - query the coding (0 - Manchester, 1 - BiPhase) and the speed (0 - 64tpb, 1 - 32tpb)
Response OK

Example:

Request AT+c?\r Query the current state
Response +c0,1
OK
Manchester coding with 32 transitions per bit is selected

SAK

(for version 1.0F Apr 3 2018 and above, not supported since 1.5F)

By default Mifare SAK (Select Acknowledge Code) is appended to the UID in the scanning mode. This can be disabled/enabled using the +A command.

Syntax:

Request AT+A[0/1/?]\r ? - query the current value
0 - do not append SAK
1 - append SAK
Response OK

Example:

Request AT+A?\r
Response +A=1
OK
SAK will be appended

Data selection (scanning mode)

(for version 1.0F Apr 3 2018 and above, not supported since 1.5F)

This setting controls data (UID or block) printed when a new tag is detected. 1 - UID, 0 - block, determined by the Block Number setting

Syntax:

Request AT+U[0/1/?]\r ? - query the current value
0 - print block
1 - print UID (the default)
Response OK

Example:

Request AT+U?\r
Response +U=1
OK
UID will be printed

Block number selection (scanning mode)

(for version 1.0F Apr 3 2018 and above, not supported since 1.5F)

In scanning mode the device continuously scans whether an RFID tag is present and prints UID or the selected block. This setting controls the block number being printed:

If the block does not exist or cannot be read (ex. due to an authorization failure) nothing is printed.

Syntax:

Request AT+b[?/<value>]\r ? - query the current value
Response OK

Example:

Request AT+b?\r
Response +b=0
OK
Block 0 contents will be printed
Request AT+b1\r
Response OK Block 1 contents will be printed

SCAN2 mode output format

(for version 1.3F Dec 17 2018 and above)

The format string syntax is the same for CDC and HID versions. Refer to the format description for the details. The default format is HU*\n. The default mode (i.e. before the first occurrence of a, d, h, or H switch) is the upper-case hexadecimal.

Attention

All occurrences of the "\r" and "\n" sequences (i.e. 2 characters: '\' and 'r' or 'n') will be accepted and printed by the AT+F=... and AT+F? commands respectively, however, all occurrences of \r and \n symbols in the output string during tag scanning will be silently removed due to conflict with the general frame format. The ';' character is reserved for the multi-command separator and if present in the format input will lead to an error or undefined behavior.

(starting from v3.2) When setting the format string &#HH occurrences will be converted to a symbol with the ASCII code 0xHH. For example instead of forbidden ; symbol pass &#3B.

Syntax:

Request AT+F[?/=<format>]\r ? - query the current format string
Response OK

Example:

Request AT+F?\r
Response +F=HU*\n
OK
UID will be printed as upper-case hexadecimal symbols
Request AT+F=hB1%*\r
Response OK Block 1 contents will be printed as lower-case hexadecimal symbols

Write settings to ROM

This command saves the current in-RAM setting to ROM, i.e. makes them permanent

Syntax:

Request AT+P\r
Response OK

Device Control

The following commands manage the RFID reader device itself:

Device Reboot

Reboot the device

Syntax:

Request AT+Q\r
Response OK

Firmware Update

Reboot the device and start the bootloader (this command may not be supported by some devices. If not supported, acts as AT+Q\r).

Syntax:

Request AT+X\r
Response OK

Errata

P.1 Device Information

Firmware versions affected up to and including v3.1
Action Reading the reply to the 'ATI' command
Expected data 3 frames
the 'product description' frame
the 'serial number' frame
the 'OK' frame
Data received 2 frames
the 'product description' + 'serial number' frame, the 'OK' frame
there is only one \r\n between the product description and the serial number instead of two
Workaround 1. Do not issue the 'ATI' command.
2. Configure the parser to divide frames by \r\n skipping the empty data between the two consecutive \r\n-s (i.e. the end of the previous frame and the start of the next frame) - currently all the devices have other means of data integrity control (USB, RS-485), there should not be extra characters between frames
3. Configure the parser to look for \r\nS/N bytes and amend them to \r\n\r\nS/N

P.2 Security Level Switch

Firmware versions affected from v3.0 to v3.1
Action Switching level 1 to level 3 with the 'AT+J3' command
Expected result The tag is switched from level 1 to level 3
Actual result The tag is left in level 1, the reader becomes unresponsive until rebooted
Workaround None. Please upgrade the firmware to the latest version available

The switch from level 0 to level 1 works as expected.

P.3 Enable/Disable the 13.56MHz transceiver

Firmware versions affected from 2.0 to 2.1
Action Enable/Disable the 13.56MHz transceiver
Expected result The action has been performed
Actual results The action may have not been performed
Workaround Check the transceiver state (AT+h?) and issue the enable/disable command the second time if the first one did not work

P.4 Mifare Plus Authentication

Firmware versions affected up to v3.1 (inclusive)
Action Reseting the authentication (AT+N0)
Expected result The action has been performed, authentication has been reset
Actual result The authentication has not been reset, ERROR received
Workaround None. Please upgrade the firmware to the latest version available

  1. nil means no data transmitted (ex. AT+D1=). 

  2. mode 2 supported since v1.3F, mode 1 obsolete since v1.5F.