I'm developing an app for Android wich uses the NTAG NFC module in the passthrough mode. It is necessary to read out the session registers of the module to realize proper handshaking between smartphone and mikrocontroller. The microcontroller is attached by I2C to the NTAG NFC module.
On some smartphones we have the problem that the app isn't working. We found out that there is a problem with the passive ACK in the SECTOR SELECT command. The sector selection is needed because the session registers are located in sector 3. Our sources strictly comply with the NXP demonstration app, so there will be no difference.
command = new byte[4];
command[0] = (byte) sector;
command[1] = (byte) 0x00;
command[2] = (byte) 0x00;
command[3] = (byte) 0x00;
nfca.setTimeout(sector_select_timout);
// catch exception, passive ack
try {
nfca.transceive(command);
} catch (IOException e) { }
We found out that on all smartphone the transceive() function always throws an TagLostException which is definitly OK. But there are some smartphones which throw the TagLostException again at all following transceive() functions. Normally the behavior should be that they go on without any problems.
The Problem can be reproduced with your demo app, too. May see the attached screenshot of such a phone. It is not possible to read out the session registers in this case. The microcontroller is physically disconnected from the TAG.
My questions are:
1) Is this behavior known by NXP?
2) Is the reason known by NXP?
3) Are there suggested workarrounds or solutions?
App is working on:
Samsung Galaxy S3 (Android 4.3)
App is not working on:
HTC One X (Android 4.2)
Blackberry Priv (Android 6.0)
I can confirm that the Moto X Pure/Style handset has this problem too.