NfcA transceive commands documentation NFC-A (ISO 14443-3A)

时光总嘲笑我的痴心妄想 提交于 2019-12-05 11:03:42

问题


Edit: Please read both answers submitted by henrycjc and me for a full explaination

Where do I find the documentation to use in android.nfc.tech.NfcA?

/**
 * Provides access to NFC-A (ISO 14443-3A) properties and I/O operations on a {@link Tag}.
 *
 * <p>Acquire a {@link NfcA} object using {@link #get}.
 * <p>The primary NFC-A I/O operation is {@link #transceive}. Applications must
 * implement their own protocol stack on top of {@link #transceive}.
 *
 * <p class="note"><strong>Note:</strong> Methods that perform I/O operations
 * require the {@link android.Manifest.permission#NFC} permission.
 */
public byte[] transceive(byte[] data) throws IOException

I am not quite sure how the tranceive syntax works, my current understanding is that the first byte in byte[] is a command and I'd like to find where to find a list of those. I tried to look it up myself but came up empty handed.

The card I'm trying to interact with: (Image of dump)

(Detailed dump)

<?xml version="1.0" encoding="UTF-8"?>
    <scan>
        <version>4.21.171</version>
        <date>2017-03-15 20:12:20</date>
        <title>NXP Semiconductors NTAG213 tag as Type 2 Tag</title>
        <uid nxp="true">04:39:F5:B2:95:3C:81</uid>
        <hasndef>true</hasndef>
        <ndef>D00000</ndef>
        <section>
            <subsection title="IC manufacturer">
                <block type="text">
        <content>NXP Semiconductors</content>
    </block>
            </subsection>
            <subsection title="IC type">
                <block type="text">
        <content>NTAG213</content>
    </block>
            </subsection>
            <subsection title="NFC Forum NDEF-compliant tag">
                <block type="text">
        <content>Type 2 Tag</content>
    </block>
            </subsection>
        </section>
        <section>
            <subsection title="NFC data set information">
                <block type="text">
        <content>NDEF message containing 1 record
    Current message size: 3 bytes
    Maximum message size: 137 bytes
    NFC data set access: Read &amp; Write
    Can be made Read-Only</content>
    </block>
            </subsection>
            <subsection title="Record #1: Empty record">
                <block type="text">
        <content><size size="12">Type Name Format: Empty<hexoutput> (0)</hexoutput>
    Short Record</size></content>
    </block><block type="text">
        <content><mono>type: [NULL]
    </mono></content>
    </block>
    <block type="text">
        <content>Payload length: 0 bytes</content>
    </block>
            </subsection>
            <subsection title="NDEF message">
                <block type="File">
        <address>0</address>
        <data>D0 00 00</data>
    </block>
            </subsection>
            <subsection title="NDEF Capability Container (CC)">
                <block type="text">
        <content>Mapping version: 1.0
    Maximum NDEF data size: 144 bytes<hexoutput> (0x12)</hexoutput>
    NDEF access: Read &amp; Write<hexoutput> (0x00)</hexoutput></content>
    </block><block type="File">
        <address>-1</address>
        <data>E1 10 12 00</data>
    </block>
            </subsection>
            <subsection title="Control TLVs">
                <block type="text">
        <content>Lock Control TLV at address 0x04, offset 0
    ‣ Dynamic lock bytes at address 0x28, offset 0
        • 12 lock bits<hexoutput> (0x0C)</hexoutput>
        • 8 bytes locked per lock bit<hexoutput> (0x3)
        • Address calculation:
            ◦ page address: 0xA
            ◦ byte offset: 0x0
            ◦ 16 bytes per page (1&lt;&lt;0x4)</hexoutput></content>
    </block>
    <block type="File">
        <address>-1</address>
        <data>01 03 A0 0C 34</data>
    </block>
            </subsection>
        </section>
        <section>
            <subsection title="Memory size">
                <block type="text">
        <content>144 bytes user memory
    ‣ 36 pages, with 4 bytes per page</content>
    </block>
            </subsection>
            <subsection title="IC detailed information">
                <block type="text">
        <content>Full product name: NT2H1311G0DUx
    Capacitance: 50 pF</content>
    </block>
            </subsection>
            <subsection title="Version information">
                <block type="text">
        <content>Vendor ID: NXP<hexoutput> (0x04)</hexoutput>
    Type: NTAG<hexoutput> (0x04)</hexoutput>
    Subtype: 50 pF<hexoutput> (0x02)</hexoutput>
    Major version: 1<hexoutput> (0x01)</hexoutput>
    Minor version: V0<hexoutput> (0x00)</hexoutput>
    Storage size: 144 bytes<hexoutput> (0x0F)</hexoutput>
    Protocol: ISO/IEC 14443-3<hexoutput> (0x03)</hexoutput></content>
    </block>
            </subsection>
            <subsection title="Configuration information">
                <block type="text">
        <content>ASCII mirror disabled
    NFC counter: disabled
    No limit on wrong password attempts
    Strong load modulation enabled</content>
    </block>
            </subsection>
            <subsection title="Originality check">
                <block type="text">
        <content>Signature verified with NXP public key<hexoutput>
    Public key:
    ‣ 0x04494E1A386D3D3CFE3DC10E5DE68A499B1C202DB5B132393E89ED19FE5BE8BC61
    </hexoutput><hexoutput>ECDSA signature:
    ‣ r: 0xDBD6E5FD688FA25BDF05B508911743E2
    ‣ s: 0x8271C6D1D7110F0350E191ED2C3FAE85</hexoutput></content>
    </block>
            </subsection>
        </section>
        <section>
            <subsection title="Technologies supported">
                <block type="text">
        <content>ISO/IEC 14443-3 (Type A) compatible
    ISO/IEC 14443-2 (Type A) compatible</content>
    </block>
            </subsection>
            <subsection title="Android technology information">
                <block type="text">
        <content>Tag description:
    ‣ TAG: Tech [android.nfc.tech.NfcA, android.nfc.tech.MifareUltralight, android.nfc.tech.Ndef]
    android.nfc.tech.Ndef
    android.nfc.tech.MifareUltralight
    android.nfc.tech.NfcA
    ‣ Maximum transceive length: 253 bytes
    ‣ Default maximum transceive time-out: 618 ms
    <hexoutput>No MIFARE Classic support present in Android</hexoutput></content>
    </block>
            </subsection>
            <subsection title="Detailed protocol information">
                <block type="text">
        <content>ID: 04:39:F5:B2:95:3C:81
    ATQA: 0x4400
    SAK: 0x00</content>
    </block>
            </subsection>
            <subsection title="Memory content">
                <block type="Ultralight">
        <address>0</address>
        <data access="* " comment="(UID0-UID2, BCC0)">04 39 F5 40</data>
    </block>
    <block type="Ultralight">
        <address>1</address>
        <data access="* " comment="(UID3-UID6)">B2 95 3C 81</data>
    </block>
    <block type="Ultralight">
        <address>2</address>
        <data access=". " comment="(BCC1, INT, LOCK0-LOCK1)">9A 48 00 00</data>
    </block>
    <block type="Ultralight">
        <address>3</address>
        <data access=". " comment="(OTP0-OTP3)">E1 10 12 00</data>
    </block>
    <block type="Ultralight">
        <address>4</address>
        <data access=". ">01 03 A0 0C</data>
    </block>
    <block type="Ultralight">
        <address>5</address>
        <data access=". ">34 03 03 D0</data>
    </block>
    <block type="Ultralight">
        <address>6</address>
        <data access=". ">00 00 FE 00</data>
    </block>
    <block type="Ultralight">
        <address>7</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>8</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>9</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>10</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>11</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>12</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>13</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>14</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>15</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>16</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>17</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>18</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>19</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>20</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>21</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>22</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>23</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>24</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>25</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>26</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>27</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>28</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>29</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>30</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>31</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>32</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>33</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>34</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>35</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>36</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>37</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>38</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>39</address>
        <data access=". ">00 00 00 00</data>
    </block>
    <block type="Ultralight">
        <address>40</address>
        <data access=". " comment="(LOCK2-LOCK4, CHK)">00 00 00 BD</data>
    </block>
    <block type="Ultralight">
        <address>41</address>
        <data access=". " comment="(CFG, MIRROR, AUTH0)">04 00 00 FF</data>
    </block>
    <block type="Ultralight">
        <address>42</address>
        <data access=". " comment="(ACCESS)" length="2">00 05</data>
    </block>
    <block type="Ultralight">
        <address>43</address>
        <data access="+P" comment="(PWD0-PWD3)">FF FF FF FF</data>
    </block>
    <block type="Ultralight">
        <address>44</address>
        <data access="+P" comment="(PACK0-PACK1)" length="2">00 00</data>
    </block>
    <block type="text">
        <content>
      *:locked &amp; blocked, x:locked,
      +:blocked, .:un(b)locked, ?:unknown
      r:readable (write-protected),
      p:password protected, -:write-only
      P:password protected write-only</content>
    </block>
            </subsection>
        </section>
    </scan>

Thanks in advance.

Edit: Please read both answers submitted by henrycjc and me for a full explaination


回答1:


The documentation can be found in the official Android docs. Specifically, transceive is here:

https://developer.android.com/reference/android/nfc/tech/NfcA.html#transceive(byte[])

As for your other queries, I would look at these previous SO questions:

Android nfcA.connect(), nfcA.transceive(), nfcA.setTimeout() and nfcA.getMaxTransceiveLength()

How send NfcA command to the MIFARE card?




回答2:


For someone who's specifically looking for the NFC commands (because those are hard to find)

I did some digging for you (with a pointer in the right direction by henrycjc)

Source: http://www.nxp.com/documents/data_sheet/NTAG213_215_216.pdf



来源:https://stackoverflow.com/questions/42819027/nfca-transceive-commands-documentation-nfc-a-iso-14443-3a

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!