Hello,
We have deployed the PN7150 and the PN7150X (separate units) paired with a custom antenna solution and custom C++ library for reading UIDs from MiFare and SLIX tags and through secure NFC with Apple and Android phones.
Somewhere around every 5,000 scans we will have a unit fail. The failure presents in one of two ways:
- The field is absent.
- The field is a "solid wall" as if a tag was detected and the chip is attempting to activate the tag.
A couple observations made concerning what I think could be going on:
- Users may approach with wearables containing NFC technology which may not be handled properly in my code. Attempts at a "catch-all" don't seem to help if this is the case.
- Noise in the system might be triggering the PN7150 to enter a new state
- Tags may enter the the very edge of the detectable field and then exit leaving the PN7150 trying to activate indefinitely
One thing that works is to consistently reset the chip at a fixed interval. But this is not desirable as it negatively impacts user experience due to >1sec initialization routine.
In these failed states the StopDiscovery command does not work, so I cannot use the quick turnaround of Stop then Start at a fixed interval.
I attempted to detect the failed state to only reset the chip when necessary but the only method I could think to do this was to reissue the StartDiscovery command. Unfortunately the PN7150 returns 41-03-01-a0 (Discovery Already Started) regardless of whether the system is stable and ready, no field is present, or the "solid wall" field is present.
Currently I think the best thing I could do is try and detect what it is actually happening to recover more cleanly if not diagnose the root cause.
What is a possible explanation for why it would return 41-03-01-a0 when the field is not present?
Is there a method for querying the current state of the PN7150's FSM?