Hi,
I have an issue that I have observed when I try to do a 16-slotted 15693 inventory. It normally works so this issue only happen for a percentage of the attempts.
The normal operation is that I get either RX done where I read the tag or RX No Response. For either of those I send a EOF if it is not the last slot. The issue is that sometimes I do not get an event at all and the sequence totally freezes (at least until my timeout kicks in). Why is this no response suddenly missing. And I have only seen it after a successfully have read a tag, then I for some reason do not get a No Response IRQ after the sent EOF.
Sequence:
CHIP_STATUS_CTRL = 0x20
ISO_CTRL = 0x02
MOD_SYS_CLK_CTRL = 0x01
COLLISION_POS_IRQ_MASK = 0x3F
clear IRQ (internally and reading the IRQ reg)
then I send an inventory request (same as TI reference)
IRQ handling:
RX Done:
Read FIFO_STATUS and then a read from REG_FIFO_IO to get the buffer
rfid_handle_next_slot();
RX No Response:
rfid_handle_next_slot();
And the rfid_handle_next_slot(); is defined as:
CMD_RESET
CMD_BLOCK_RECEIVER // why are block and enable needed? They are part of the reference code but it seems to work without.
CMD_ENABLE_RECEIVER // why?
CMD_END_OF_FRAME
When the timeout hits I also checks a few registers:
32,2, 0, 0, 193, 187, 0, 20, 31, 1, 64, 7 (reg 0 -> reg 0x0b, IRQ reg was 0 and IRQ mask still have all interrupts enabled.
As said before, it happens in 16-slot mode, and only sometimes. I noticed that the reference code setup a 20ms timer to handle timeout. Is this necessary, i.e. that I cannot trust that there will be a correct IRQ?
BR