How do I read multiple NFC tags at the same time
Issue:
When I attempt to read multiple NFC tags at the same time, the inventory command returns UIDs that don't exist and it returns with no error.
Details:
I am writing an NFC tag reader application in C++, using the CR95HF demonstration board from the M24LR-Discovery kit as my transceiver, and ISO15693 communications protocol.
Hardware Rev: MB1054x
Firmware Rev: 3.6.0
CR95HF Driver Rev: 0.9
For NFC tags, I am using a number of different products, all of which have the M24LR04E-R EEPROM on it:
M24LR-Discovery
ANT7-T-M24LR04E
X-Nucleo-NFC02A1
When there is only a single NFC tag within range of the transceiver, all functionality works flawlessly (ie. inventory, stay quiet, read, write, read-multiple, reset to ready). Now I am attempting to read multiple NFC tags at the same time.
In the initial scanning phase, I simply call the inventory command, get the returned UID, tell that UID to "stay quiet", and then repeat until there is no response from the inventory command. Then I read and write using the UIDs and finally reset them all to ready once I'm done.
Again, this works great when there is only one NFC tag within range, but once there is more than one, the inventory command returns UIDs that don't exist. As an example, I placed 2 NFC tags within range of the transceiver
The actual UIDs were
E00259C186C95D5F
E00259C186C95830
The UID returned by the inventory command was
E00259C186C95D7F
No other NFC devices are near the transceiver. I verified that it is not a rogue NFC device because when I change the combination of actual NFC tags, the non-existent UID changes as well.
My application will send a maximum of 20 inventory commands when scanning for devices. In the example above, it would sometimes eventually get the correct UIDs, but usually it would return the same non-existent UID over and over until 20 inventory commands were sent and my application gave up.
Question:
How do I read multiple NFC tags at the same time? Is my thought process for scanning incorrect? (Inventory -> stay quiet -> repeat).
Do I just need to loop it over and over until it finally finds the right UIDs? That seems like a somewhat weak solution and I suspect the problem will get exponentially worse as I add more tags
