Search code examples
androidnfcrfid

How to change ISO 14443 bit rate via the NFC API?


As NFC/ISO 14443 support various communication speeds from 106kbps to at least 424 (e.g. see here), I am wondering how to switch between these bit rates through the Android API in order to shorten the time it takes to read out the entire memory of ISO 14443A tags.

I looked at the Android NFC Basics and Advanced NFC documentation as well as various tag technology pages (some of which IMHO should theoretically support some of the higher speeds), but I couldn't find any hints of changing the bit rates.

I also had a look at some tag datasheets and many of them support the ISO14443-4 mechanisms to change the bit rate through the ATS response and PPS command, which I suppose could be manually used through the generic transceive(byte[] data) method, but I don't think that would actually change the bit rate of the Android device's NFC chipset... in which case I'd lose the connection to the tag when it switches to a higher speed than the default 106kbps I guess.


Solution

  • ISO14443 supports from 106 to 848 using PPS command defined in ISO14443-4, but NFC (using 14443 protocol) defines only 106kb/s and PPS procedure is out of the scope (PPS command is not described in NFC Forum Digital spec).

    The definition that NFC supports from 106kb/s to 424 is because:

    • ISO14443 part supports 106kb/s
    • Felica part supports 212kb/s and 424kb/s

    Therefore I think it is not possible to change the bit rate using Android API.

    EDIT 1:

    Incorporating additional information from the comments below: