A few customers have been reporting rare and very intermittent issues where sometimes the TRF7970 was reporting 0 bytes in the FIFO Status Control Register, upon and Receive Complete IRQ. This most commonly presents itself during a 15693 Inventory command, by a return of 0 bytes in the FIFO Status Control Register (0x1C). Until now, they only fix customers have been reporting is to fully power cycle the part.
We recently got our hands on some of these known "bad" parts and have been able to re-create this issue. We're still doing some final testing and we'll be officially adding this to the Errata soon.
Upon power-up, there appears to be random values loaded into the NFC Target Detection Level Register (0x18). The default value for this register should be 0x00. When this register is loaded with random values, it sometimes (depending on the value) interferes with the TRF7970A's reader functionality.
NFC Target Detection Level Register (0x18) being read upon power-up. Showing Random Values:
NFC Target Detection Level Register (0x18) being read upon power-up. Showing Correct Value (0x00):
Clear the NFC Target Detection Level Register (0x18) upon power-up by writing a 0x00.
We've tested this on TRF7970's that were currently in this state or returning 0 bytes in the FIFO Status Register, and were able to get the to operate correctly with out having to power cycle.
I recommend making this small modification to your firmware at power-up initialization to avoid and fix this issue.
unsigned char command; command = NFCTargetLevel; command = 0x00; WriteSingle(command, 2);