Data from tagged objects drives business solutions and the quality of data is the result of how reliably a tag can be read and written to. It depends on multiple factors in the supply chain - manufacturing variability, die attach, IC damage due to mechanical stress and lateral forces, tag antenna tuning, tag encoding, tag storage, etc.
Tag encoding is critical and important for the longevity and data reliability of the tag itself. A proper encoding pipeline can help ensure data is written correctly. During the process of encoding tags, especially at high speeds, it is possible for tags to be encoded improperly. Improper encoding comes from tags not receiving sufficient power to complete a write operation.
Weakly written tags (not fully charged) may read as if they have the correct information but will have unknown retention times.
Figure 1. Reading tags with varying charge states (not written, weakly written and strongly written from left to right)
A fully charged memory cell will retain data for a long period of time. Specifically the Monza 6 tag is expected to retain data for up to 50 years. But how can you determine if a tag has been written with sufficient margin to retain data for a long period of time?
With MarginRead, part of the Integra technology suite, Monza 6 non-volatile memory (NVM) can be checked to determine if that memory was strongly written. This diagnostics feature ensures consistently accurate data delivery that business can depend on. This command can be used to determine when tags are not fully charged (or weakly written).
Figure 2. MarginRead results for weakly written and strongly written tags (from left to right)
MarginRead is an EPC Gen2 complaint custom command supported by tag chips with Integra. This command allows a reader to explicitly verify that the non-volatile memory (NVM) in the tag chip is not weakly written, guaranteeing a minimum margin on NVM. It is used for quality control to ensure data integrity and for failure analysis.
There are several ways that the MarginRead command could be used with Monza 6. A recommended use of MarginRead is independent verification of the encoding quality, either on a sample basis or for diagnosis during failure analysis.
A basic understanding of MarginRead:
- When data is written to a tag using the Gen2 protocol, charge is built up in the memory cells until they reach the appropriate level. Once that happens, the tag returns a "done" signal telling the interrogator (reader) or encoding system that the write operation has completed successfully.
- It is a known field issue that not all encoding systems properly wait for the "done" signal and instead issue a read operation to check if the data is correct. A read operation may return correct data even if the write operation did not complete successfully.
- A partially charged memory cell might retain data for a limited time but then it will lose data integrity over time. Data retention could be for an unpredictable amount of time from a few minutes to several years.
- A fully charged memory cell will retain data for a long period of time. Specifically, the Monza 6 tag is expected to retain data for up to 50 years.
- The MarginRead command allows customers to check if Monza 6 tag chip memory cells are fully charged.
If a customer encounters a data integrity issue in the field, MarginRead may be used for diagnostics. If MarginRead indicates an issue, then the encoding method should be investigated.
Octane SDK MarginRead Example
The MarginRead sample code is available in in the Octane SDK for .NET and Java (version 2.24.1 or newer for .NET or version 1.24.1 or newer for Java, available here). This feature requires a Speedway Revolution reader running Octane 5.8 firmware or newer (available here) and a Monza 6 tag (Monza R6, Monza R6-P or Monza R6-A). This example uses the example "MarginRead" from the .NET (C#) Octane SDK with a Monza R6 tag chip, setting the ReaderHostName in "SolutionConstraints.cs" to the reader that is being used.
When issuing MarginRead to a tag chip with Integra, there are three possible responses from the tag chip:
- Success: the bits tested in have sufficient margin.
- Insufficient Power error code: power is too low to execute MarginRead. This does not tell if the tag has sufficient margin.
- Failure: the margin is bad for at least one bit in the mask or a nonmatching bit was sent by the reader.
For a factory default Monza R6 tag chip, the EPC memory starts with the following two words: E280 1160h. This example by default filters on tags with the first word of EPC set to E280h and executes a MarginRead command on word 2 of memory, checking to see if the value of 1160h was strongly written. This value will pass for a factory default tag because 1160h is strongly written to word 2 of EPC memory. Here is the expected result from executing this code:
Figure 3. MarginRead Result - Success
The MarginRead command will fail when the value being checked does not have sufficient margin for the value given. This could happen when 1) the memory is weakly written or 2) the mask used for the mask in the MarginRead command does not match the value at the given memory location. To force MarginRead to fail and see the command working, change the mask value from "1160" to "1161" (which is not the value stored in word 2 of EPC memory).
Here is the expected result:
Figure 4. MarginRead Result - Failure
Note that the MarginRead may fail due to insufficient power - this is similar to a tag chip having insufficient power to complete a write operation. If this happens, move the tag closer to the reader antenna or increase the transmit power from the reader.
To use MarginRead to test the margin of a tag in the field (ie with a unique EPC), read the tag's memory to test (ie, the EPC), set that value to the MarginRead mask and run the MarginRead command.
For complete details on the MarginRead command, please refer to the Monza 6 tag chip datasheets found on http://support.impinj.com.