NFC Communication Issues on iPhone 12–15 with NXP NTAG 5 (ISO15693 Pass-Through Mode)

We are developing an iOS app that communicates with a device using an NXP NTAG 5 chip in ISO15693 pass-through mode. While the app works flawlessly on older iPhone models (iPhone 8, SE, X) and most Android devices, we are experiencing severe reliability issues on iPhone 12, 13, 14, and 15.

Issue Summary

  • On newer iPhones (12–15), 90% of communication attempts fail.

  • Retry strategies do not work, as the NFC session is unexpectedly canceled while handling CoreNFC custom commands.

  • The issue is not consistent—sometimes all requests fail immediately, while other times, a batch of reads might succeed unexpectedly before failing again.

Technical Details

The failure occurs while executing the following request, which should return 256 bytes:

tag.customCommand(requestFlags: .highDataRate, customCommandCode: commandCode, customRequestParameters: Data(byteArray)) { (responseData, error) in
}

The returned error is:

-[NFCTagReaderSession transceive:tagUpdate:error:]:897 Error Domain=NFCError Code=100 "Tag connection lost" UserInfo={NSLocalizedDescription=Tag connection lost}

For reference, we tested a comparable STM ST25 chip in ISO15693 and NDEF mode, and the exact same issue occurs.

Observations and Debugging Attempts

  • Positioning of the NFC antenna has been tested extensively.
  • Disabling Bluetooth and Wi-Fi does not improve reliability.
  • Rebooting the device or waiting between attempts sometimes improves success rates but does not provide a structural fix.
  • When reading multiple blocks (e.g., 15 blocks of 256 bytes each):
  • The process often fails within the first three blocks.
  • After multiple failures, it may suddenly succeed in reading all blocks in one go before returning to a series of failures.

The nfcd logs suggest issues at the low-level NFC and SPMI layers, indicating potential hardware or firmware-related problems:

error	17:36:18.289099+0100	nfcd	phOsalNfc_LogStr:65 NCI DATA RSP : Timer expired before data is received!
error	17:36:18.292936+0100	nfcd	NFHardwareSerialQuerySPMIError:1339 "Invalid argument" errno=22 setsockopt: SYSPROTO_CONTROL:IO_STOCKHOLM_SPMIERRORS
error	17:36:18.293036+0100	nfcd	phTmlNfc_SpmiDrvErrorStatus:1157 "Invalid argument" errno=22 Failed to query SPMI error registers
error	17:36:18.293235+0100	nfcd	phOsalNfc_LogStr:65 phLibNfc_SpmiStsRegInfoNtfHandler: Read Spmi Status Failed - pInfo set to NULL
error	17:36:18.293313+0100	nfcd	_Callback_NFDriverNotifyGeneral:2353 Unknown notification: 0x5b
error	17:36:18.294163+0100	nfcd	phOsalNfc_LogStr:65 Target Lost!!

error	17:36:18.294678+0100	nfcd	-[_NFReaderSession handleSecureElementTransactionData:appletIdentifier:]:164 Unimplemented
error	17:36:18.294760+0100	nfcd	-[_NFReaderSession handleSecureElementTransactionData:appletIdentifier:]:164 Unimplemented
error	17:36:18.320132+0100	nfcd	phOsalNfc_LogStr:65  ISO15693 XchgData,PH_NCINFC_STATUS_RF_FRAME_CORRUPTED Detected by NFCC during Data Exchange
error	17:36:18.320291+0100	nfcd	phOsalNfc_LogU32:74 phNciNfc_ChkDataRetransmission: Re-transmitting Data pkt Attempt..=1
error	17:36:18.622050+0100	nfcd	phOsalNfc_LogStr:65 NCI DATA RSP : Timer expired before data is received!
error	17:36:18.625857+0100	nfcd	NFHardwareSerialQuerySPMIError:1339 "Invalid argument" errno=22 setsockopt: SYSPROTO_CONTROL:IO_STOCKHOLM_SPMIERRORS
error	17:36:18.625919+0100	nfcd	phTmlNfc_SpmiDrvErrorStatus:1157 "Invalid argument" errno=22 Failed to query SPMI error registers
error	17:36:18.626132+0100	nfcd	phOsalNfc_LogStr:65 phLibNfc_SpmiStsRegInfoNtfHandler: Read Spmi Status Failed - pInfo set to NULL
error	17:36:18.626182+0100	nfcd	_Callback_NFDriverNotifyGeneral:2353 Unknown notification: 0x5b
error	17:36:18.626899+0100	nfcd	phOsalNfc_LogStr:65 Target Lost!!

error	17:36:18.627482+0100	nfcd	-[_NFReaderSession handleSecureElementTransactionData:appletIdentifier:]:164 Unimplemented
error	17:36:18.627568+0100	nfcd	-[_NFReaderSession handleSecureElementTransactionData:appletIdentifier:]:164 Unimplemented
error	17:36:18.833174+0100	nfcd	-[_NFReaderSession handleSecureElementTransactionData:appletIdentifier:]:164 Unimplemented
error	17:36:19.145289+0100	nfcd	phOsalNfc_LogStr:65 NCI DATA RSP : Timer expired before data is received!
error	17:36:19.149233+0100	nfcd	NFHardwareSerialQuerySPMIError:1339 "Invalid argument" errno=22 setsockopt: SYSPROTO_CONTROL:IO_STOCKHOLM_SPMIERRORS
error	17:36:19.149353+0100	nfcd	phTmlNfc_SpmiDrvErrorStatus:1157 "Invalid argument" errno=22 Failed to query SPMI error registers
error	17:36:19.149730+0100	nfcd	phOsalNfc_LogStr:65 phLibNfc_SpmiStsRegInfoNtfHandler: Read Spmi Status Failed - pInfo set to NULL
error	17:36:19.149797+0100	nfcd	_Callback_NFDriverNotifyGeneral:2353 Unknown notification: 0x5b
error	17:36:19.150463+0100	nfcd	phOsalNfc_LogStr:65 Target Lost!!

Any solutions?

Has anyone else encountered similar behavior with CoreNFC on iPhone 12–15? Could this be related to changes in NFC hardware or power management in newer iPhone models? Any suggestions on possible workarounds or alternative approaches would be greatly appreciated.

As you are observing different behaviors on different iPhone models, this is best looked at by our NFC team.

Filing a Feedback report with some logging will be the best way for us to investigate the issue further.

First, please go to https://developer.apple.com/bug-reporting/profiles-and-logs/ and follow the instructions for Wallet for iOS to install a logging profile on your device.

Once that is installed, then reproduce the issue. Once reproduced, then follow the instructions at the above link to create a sysdiagnose

Then use the Feedback Assistant. to create a report and include a detailed description of the issue, details of the tags/devices you are using, and the sysdiagnose from the above step.

Also include the following info:

  • What is the setup on the device. Including apple wallet settings
  • Please provide sample app if you have one, or can create one
  • Video capture of the failure scenario so we can confirm the positioning of the NFC antenna
  • the Bundle ID of the app you have tested this with

Then please post the FB number here for my reference.

If you have any questions about filing a bug report, take a look at Bug Reporting: How and Why?


Argun Tekant /  DTS Engineer / Core Technologies

Hi, we sent feedback nr FB16641226 for this issue.

Thx.

NFC Communication Issues on iPhone 12–15 with NXP NTAG 5 (ISO15693 Pass-Through Mode)
 
 
Q