Frequently Asked Questions (FAQ)

Introduction

The document provides general frequently asked questions and answers about the Indy ITK Release and the Indy Modules. For examples of how to configure the Indy Modules for different use cases, see the Configuration Examples. For more information about the Indy Modules, see their Datasheets and Hardware User’s Guides, which are included in the Release package under .\Documentation\ , or on Impinj’s support portal here.

Note: The End-of-Life (EOL) process for the Impinj Indy RS2000 and RS1000 reader modules and all reader module development kits was announced on September 4, 2020 (please refer to the EOL Product Notice).

Operational changes to Impinj Indy RS500 reader modules were announced on September 4, 2020 -- this product is available as build-to-order with a minimum order quantity, effective for all purchase orders with a requested ship date after March 31, 2021 (please refer to the Product Notice).

The questions and answers are grouped together by topic:

General IRI and Indy Module Questions

What are the differences between ITK-C and ITK-LT-C?

The primary differences between ITK-C and ITK-LT-C are that the ITK-C implements more of the Indy Module’s functionality, at the cost of more program memory (ROM/FLASH) and RAM consumption. The ITK-LT-C may allow implementation of the Indy Module interface on microcontrollers and microprocessors with memory. ITK-C’s library implements the full capabilities of the Indy Module’s built in firmware, including operations like bulk set and get, and bootloading. ITK-LT-C’s library only implements a limited subset of Indy Module’s built in firmware. ITK-C consumes between 9 and 16 kB of ROM, and ITK-LT-C consumes between 1 and 3 kB of ROM. For more details on the code consumption of each of the libraries, see ITK-C Memory Usage and ITK-LT-C Memory Usage. For more details on the limitations of ITK-LT-C, see the Limitations section of the ITK-LT-C API guide.

ITK-LT-C should only be used if the the standard ITK-C can not be used due to host memory constraints. The ITK-C is extensible, has broader capabilities, and enables future advanced features.

What is the persistence of setting a key value?

Setting a key value will persist until the value is changed again or the device is reset.

Caution should be used when setting one of the various ENABLE keys. This is particularly important when using keys which control the RFID protocol enabling (eg. Select and Tag Access). If one of these modes are enabled (eg. via E_IPJ_KEY_SELECT_ENABLE or E_IPJ_KEY_TAG_OPERATION_ENABLE), they must be set to disabled if they are not desired on next command.

Stored settings can be used to configure the power on default values of writeable key. So for persistent values across reset, see Stored Settings.

How can the application image on the Indy Modules be updated?

The Indy Modules contain both a bootloader and an application image. The bootloader allows updating of the application image, but the bootloader itself cannot be updated. To update the application image, the module must be executing the bootloader, also known as “recovery mode”. This mode can be entered in three ways:

  • Perform a software reset using the IRI host
  • Reset or power up the module with the WKUP pin pulled high (3.3 V)
    • Using a jumper on JP204 and switch SW200 on the RS2000 development kit
    • Using a jumper on J4 and switch SW1 on the RS500 development kit
  • Automatically if the module contains an invalid application image
    • Can be caused by application images that are of an earlier version than the bootloader
    • Can be caused by loading blank or otherwise corrupted application images

With the module in recovery mode, any IRI host can bootload a new application image. There are 3 easy options for IRI hosts:

  1. Using the ITK-C, users can develop a host application can implement bootloading.
  2. Impinj provides the code example IRI_Loader, a host application in C for bootloading application images that has been ported to Windows, Linux, and OS X.
  3. Impinj also provides the Indy Demo Tool , a GUI for Windows which supports bootloading a new application image. For more details on using the Indy Demo Tool to update device application images, see this support article: https://support.impinj.com/hc/en-us/articles/207352470.

What is the behavior of the HEALTH and STATUS pins?

The behavior of the Indy Modules’ HEALTH and STATUS pins is described under Health and Status Pins/LEDs in the Debugging section of the ITK-C documentation.

What low power modes are available in the Indy Modules?

The Indy Module software power management modes available are low latency idle, standard idle, standby, and sleep. For more information on using these software low power modes, see the Power Management example program.

The RS2000 module also has a “shutdown” mode, which is a hardware power mode that can be entered by applying 0 V to the Enable pin. In this mode, the regulators in the RS2000 module are disabled, enabling minimal power consumption.

For details on low power mode current consumption, including current consumption, capabilities, and mode transitions, see the module datasheets and hardware user guides, which are included in the ITK-C Release package under .\Documentation\ , or on Impinj’s support portal here.

How can the Indy Modules be woken up from Sleep Mode?

Set WKUP pin high to wake up the Indy Module. Set WKUP low to continue with normal operation. Customers can leave WKUP disconnected if they do not intend on using sleep mode. The WKUP pin can also be used to wake from from standby.

Can the IRI UART baud rate be changed?

Yes, the IRI UART baud rate can be changed. Refer to the IRI_Change_Baudrate configuration example for details.

What are the host processor recommendations?

When selecting a host processor, we recommend the following set of guidelines:

  • 32 bit microcontroller running at at least 8MHz
  • 32k bytes of NVM
  • 10k bytes RAM
  • A USART capable of 115200 baud
  • Ability to address 8 bit bytes i.e.: sizeof(uint8_t) == 1, sizeof(uint32_t) == 4. (Other word/byte widths are possible, but not fully supported).

Note that these are not minimums, but will ensure your ability to exercise 100% of the Indy Modules’ capabilities.

Contact us at support.impinj.com for assistance if you have a host processor with capabilities lower than the recommended guidelines.

How can each individual Indy Module be uniquely identified?

The identifier printed on the label of the device is a combination of the SKU, Lot Date Code, and Serial Number from a lot, and is unique for each individual Indy Module.

SERIAL #: XXZZWWYYAAAA

  • XX is the SKU (1 = GX, 2 = EU)
  • ZZ is the Lot Number
  • WW is the Work Week produced
  • YY is the Year Produced
  • AAAA is the Serial number within the lot

Each individual value can be retrieved via the following keys:

Alternatively, the combined unique identifier can be retrieved via the following key (which has 2 32-bit values):

For example, with a SERIAL #: 010151130247

  • SKU = 01
  • LOT_DATE_CODE = 015113
  • SERIAL_NUMBER = 0247
  • UNIQUE_ID[0] = 0x5D0DF487
  • UNIQUE_ID[1] = 0x00000002

Which version of Linux has the ITK-C been tested with?

The ITK-C is compatible with a wide variety of linux distributions. It has been tested with Ubuntu 14.04 and Centos 6. Any distribution with support for the termios serial port API should be compatible.

Indy Module RFID Questions

How can a disconnected antenna be detected?

If the RFID antenna is disconnected from a reader, it will result in a very high reflection of transmitted power. This can be measured by the Indy Modules as reverse power. The Indy Modules measure both forward and reverse power every time the radio is turned on, which happens every time a new inventory is initiated, and also every time the radio hops from channel to channel. These forward and reverse power measurements can be included in the status reports if desired.

To enable the channel activity in the status reports, set flag E_IPJ_STATUS_FLAG_BIT_CHANNEL_ACTIVITY in key E_IPJ_KEY_REPORT_CONTROL_STATUS. Then, to read the forward and reverse power out of the packets, simply examine the status_report data[0] and data[1] members inside the ipj_util_status_report_handler(...) function in the ipj_util.c source file, as shown in the following code snippet.

printf("Forward power 0x%X, %d\n", status_report->data[0], status_report->data[0]);
printf("Reverse power 0x%X, %d\n", status_report->data[1], status_report->data[1]);

For more information on how to measure forward and reverse power, see the Measuring Reverse Power example in the Configuration Examples.

What do the RSSI and Phase fields in the Tag Report mean?

The Indy reader modules measure the backscattered power from read tags, which indicates the strength of the link between the reader and the tags. This measurement is also known as Received Signal Strength Indicator (RSSI). The measured power is referenced to the reader RF port, and will be affected by any losses or gains in the signal path, including PCB trace resistance, cabling loss, and antenna gain.

The Indy reader modules also measure the phase of the link between the reader and tags, which can be useful to indicate relative changes in the physical arrangements between them. Phase measurements use the phase angle between the reader’s transmit signal to a tag and the corresponding receive signal from the tag.

The communication of these measurements may be enabled by setting the E_IPJ_TAG_FLAG_BIT_RSSI and E_IPJ_TAG_FLAG_BIT_PHASE flags in the key E_IPJ_KEY_REPORT_CONTROL_TAG.

When enabled, the measurements are included as the rssi and phase members of the tag struct, which is a member of each ipj_tag_operation_report. These RSSI and phase values can easily be read in the ipj_util_tag_operation_report_handler(...) function in the ipj_util.c source file.

Note

The units of RSSI are centi-dB-mW (cdBm), and the value is signed. The units of phase are 2*Pi/128 radians, with the variable expressing a range of 0 to Pi radians, equivalent to a 0-180 degree angle range. When the phase measurement passes Pi radians, or 180 degrees, it rolls over to 0 radians/degrees.

For more information on how to measure RSSI and Phase, see the Measuring RSSI example in the Configuration Examples.

What are the RF Profile operating parameters of the Indy Modules?

The Indy reader modules have multiple RF Profiles or “RF Modes” that are enabled using the key E_IPJ_KEY_RF_MODE. The default key value and RF parameters are listed at the key definition.

RS500 and RS1000 Specific Questions

This section contains answers to common questions about the Indy RS500 and RS1000 embedded reader modules, which share a common pinout, form factor, and PCB footprint. For an introduction to the RS500 and RS1000, see their datasheets, on Impinj’s support portal here.

Note

RS500 support in this release is limited.

This release does not contain an application image for RS500. RS500 application image development was halted after release 1.6.8.240. Version 1.6.8.240 of the documentation can be found at http://developer.impinj.com/indy/01.06.08.240/itk/ , and the ITK-C release can be found at https://support.impinj.com/hc/en-us/articles/115001968724 (requires login).

Future releases may contain bug fixes for RS500, but new features added to firmware for the other modules will likely not be supported by RS500. Any module features that are not mentioned in release 1.6.8.240 are likely not supported by RS500. Newer versions of the host library will maintain compatibility with the RS500, but some configurations may result in errors. For example, if the users attempts to set a key that was not implemented on the RS500, the E_IPJ_ERROR_SET_KEY_INVALID error code may be returned.

What are the differences and similarities between the RS500 and RS1000?

Generally speaking, the RS500 and RS1000 are functionally equivalent in most ways, except that the RS1000 has a higher transmit power maximum, and a lower (better) receive sensitivity.

Similarities:

  • Form Factor: The RS500 and RS1000 share a common form factor.
  • Footprint: The RS500 and RS1000 share the same PCB footprint. Their PCB footprint is described in the device datasheets.
  • Package Dimensions: The RS500 and RS1000 packages are the same dimensions. Their dimensions are described in the device datasheets.

Differences:

  • Electrical Specifications: The RS500 and RS1000 differ in their electrical specifications in numerous ways.
  • Transmit Power: The RS500 and RS1000 have different maximum transmit power values, set using the E_IPJ_KEY_ANTENNA_TX_POWER key.
  • Receive Sensitivity: The RS500 and RS1000 have different receive sensitivity values, as described in the device datasheets. The RS1000 is more sensitive than the RS500.
  • Current Consumption: The RS500 and RS1000 have different current consumption values, as described in the device datasheets.
  • Self heating: The RS500 and RS1000 will self-heat differently due to their different current consumptions.
  • Product ID key: the RS500 and RS1000 have different E_IPJ_KEY_PRODUCT_ID key values.
  • FCC/IC ID: The RS500 and RS1000 have different modular certification FCC and IC IDs.
  • Package markings: The RS500 and RS1000 have different package markings, as described in the device datasheets.
  • Application Image Versions: As described in the note above, the RS500 application image development was halted at 1.6.8.240, whereas RS1000 application image development continues.

What are the typical latency times to enter the Idle state for the RS500 and RS1000?

Time To Idle Latency
Mode Latency Time
Hard Reset 200 ms
Soft Reset 200 ms
Standby 50 ms
Sleep 200 ms

How should the pins of the RS500 and RS1000 be connected?

The details below are provided for reference. For more details on RS500 pin recommendations, see the Indy RS500 Hardware User’s Guide, which is included in the ITK-C Release package under .\Documentation\ , or on Impinj’s support portal here.

Required connections:

  • VDC_IN and GND are required to power the RS500.
  • RF is required to connect to the UHF RFID antenna.
  • UART1 Tx and Rx are required to communicate with the system host.

Recommended connections:

  • nRST is used to reset the RS500 if UART communication is not available. This connection is highly recommended. This pin is sometimes internally driven strong low, so it should be driven by an open drain signal. It must not be driven strong high.
  • UART2 Tx and Rx may be used to examine debug information.
  • HEALTH indicates successful operation of the RS500. Connection to an LED provides a visual indication of whether or not an error condition exists.
  • STATUS provides an indication when the RS500 is in active mode (for example, inventorying tags). Connection to an LED provides a visual indicator of the device’s activity.

Optional connections:

  • GPIOs allow interaction with the RS500 as both digital inputs and outputs. They may be used to trigger inventory, generate events based on inventory activity, or provide general-purpose user-controlled digital I/O.
  • WKUP provides a mechanism to wake up the RS500 from the low power Sleep mode on a rising edge. The pin must go low for the device to fully wakeup. WKUP is also used to force entry into the Impinj firmware bootstrap. If unused, this pin should be tied to logic low.
  • UC_ADC allows use of an ADC to convert an analog input voltage into a digital value.
  • UC_DAC allows use of a DAC to generate an analog output voltage from a digital value.
  • BOOT0 provides access to the built-in bootloader for factory programming by Impinj. It is not intended for use after initial programming and calibration of the module.

No connect:

  • SWCLK and SWD connections are reserved for Impinj use only.

RS2000 Specific Questions

This section contains answers to common questions about the Indy RS2000 embedded reader module. For an introduction to the RS2000, see its datasheet, included in the ITK-C Release package under .\Documentation\ , or on Impinj’s support portal here.

How are the antennas pins of the RS2000 switched?

RS2000’s built-in antenna switching is configured using the E_IPJ_KEY_ANTENNA_SEQUENCE key.

For the antenna values, see ipj_antenna_rs2000.

For more details, see the configuration example Antenna Switching.

How is RS2000’s temperature monitored and controlled?

RS2000, with its 31.5 dBm maximum power output, can easily self-heat above its maximum operating temperature under certain thermal conditions. It may be necessary to monitor and control operating parameters to ensure reliable operation.

RS2000’s internal temperatures can be measured by reading the following keys:

Note

Reading these keys prompts a temperature measurement, which can take up to 2 ms to complete.

There is an example on how to read RS2000’s internal temperatures in the configuration example Get Temperature.

RS2000’s firmware monitors the power amplifier (PA) temperature, and automatically stops RFID operations if it exceeds 85 degrees Celsius. When this occurs, a stop report is sent with error code E_IPJ_ERROR_LIMIT_PA_TEMPERATURE_MAX which indicates that the PA has exceeded this temperature. Start commands may be sent again immediately, but may be stopped automatically by subsequent over-temperature conditions. It is advisable to monitor for over-temperature events, and add some activity hold-off or decrease in self-heating via transmit power reduction.

Future versions of RS2000 firmware will include an on-board control system that will automatically keep the device operating at decreased activity or power levels.

How should the pins of the RS2000 be connected?

The details below are provided for reference. For more details on RS2000 pin recommendations, see the Indy RS2000 Hardware User’s Guide, which is included in the Release package under .\Documentation\ , or on Impinj’s support portal here.

Required connections:

  • VDC_IN and GND are required to power the RS2000.
  • ANT1, ANT2, ANT3, or ANT4 are required to connect to UHF RFID antennas. Only one is required for RFID activity, but up to four may be used.
  • UART1 Tx and Rx are required to communicate with the system host.
  • ENABLE is used to enable or disable operation of the part. If this pin is driven low, the power supplies in the part will be disabled. RS2000 may be reset by toggling this pin. This pin must be driven high to enable the part.

Recommended connections:

  • UART2 Tx and Rx may be used to examine debug information. This information can prove extremely useful when attempting to solve technical difficulties.
  • HEALTH toggles to indicate successful operation of the RS2000. Connection to an LED provides a visual indication of whether or not an error condition exists.
  • STATUS toggles to provide an indication when the RS2000 is in active mode (for example, inventorying tags). Connection to an LED provides a visual indicator of the device’s activity.

Optional connections:

  • GPIOs allow interaction with the RS2000 as both digital inputs and outputs. They may be used to trigger inventory, generate events based on inventory activity, or provide general-purpose user-controlled digital I/O.
  • WKUP provides a mechanism to wake up the RS2000 from the low power Sleep mode. WKUP is also used to force entry into the Impinj firmware bootstrap. If unused, this pin should be tied to logic low.

No connect:

  • CLK_OUT, DTEST0 and DTEST1 connections are reserved for Impinj use only.

What is the drive strength of the RS2000 GPIO pins?

The GPIO pins can sink and source 2 mA at 3.3V.

For detailed electrical specs and GPIO behaviour, see the Indy RS2000 Datasheet and Indy RS2000 Hardware User’s Guide, which are included in the Release package under .\Documentation\ , or on Impinj’s support portal here.