2014-09-11 4 views
0

Добрый вечер,Как NDEF формат NFC-тегов?

Ваша страница уже много помогла, но я обнаружил проблемы при форматировании тега NFC, и я не мог найти тему, связанную с тегом NDEF-формата.

Прежде всего, я должен сказать, что я новичок в технологии NFC.

Я купил следующий тег: http://www.ti.com/product/RI-I16-112A-03/description

Эта микросхема испытывается на заводе, и поэтому каждый байт был записан в 0х00.

А теперь начинаются проблемы: Я скачал записку приложение к тегу: http://www.ti.com/lit/an/sloa166a/sloa166a.pdf и создал приложение для Android (исходный код ниже), чтобы записать память, как показано на figure12. Когда я читаю содержимое тега с приложением NXP-TagInfo, память выглядит так, как должна. Проблема по-прежнему заключается в том, что в NXP-TagInfo указано, что существует «Нет хранилища данных NFC», и, кроме того, она обнаруживается как NFC_TECH. Скажите мне, если я ошибаюсь, но это показывает, что тег определенно не отформатирован в формате NDEF.

Для написания тега я провел некоторое исследование, потому что оно не задокументировано в примечании к применению/таблице данных, и это меня больше смущает. Существуют ли какие-либо документы, указывающие, какие флаги байтов могут использоваться или существуют? Я использовал 0x42, потому что я видел его на этом форуме - если вы хотите, чтобы источник, пожалуйста, попросите его.

Мое оборудование: Sony Xperia S - Android 4.1.2 (Build-номер: 6.2.B.1.96)
Составлено с Eclipse, - цель SDK = мин SDK = API уровня 16

И, наконец, код :

public class Nfc_activity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    TextView textView = new TextView(this); 
    String result = ""; 
    textView.setTextSize(40); 

    Intent intent = getIntent(); 
    Tag receivedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

    byte[] block0 = new byte[] {0x42,0x21,(byte)0x00,(byte)0xe1,0x40,0x20,0x01}; 
    byte[] block1 = new byte[] {0x42,0x21,(byte)0x01,0x03,0x0b,(byte)0xd1,0x01}; 

    byte[] block2 = new byte[] {0x42,0x21,(byte)0x02,0x07,0x55,0x01,0x74}; 
    byte[] block3 = new byte[] {0x42,0x21,(byte)0x03,0x69,0x2e,0x63,0x6f}; 
    byte[] block4 = new byte[] {0x42,0x21,(byte)0x04,0x6d,(byte)0xfe,(byte)0x00,(byte)0x00}; 

    for(int i=0; i<receivedTag.getId().length; i++) { 
     result+= Integer.toHexString(receivedTag.getId()[i]&0xff)+':'; 
    } 


    textView.setText(result); 
    setContentView(textView); 

    NfcV nvcv = NfcV.get(receivedTag); 

    try { 
     nvcv.connect(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     nvcv.transceive(block0); 
    } catch (IOException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } 

    try { 
     nvcv.transceive(block1); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 
     nvcv.transceive(block2); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    try { 
     nvcv.transceive(block3); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    try { 
     nvcv.transceive(block4); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    try { 
     nvcv.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


EDIT: и здесь вы можете увидеть taginfo от NXP:

<?xml version="1.0" encoding="UTF-8"?> 
<scan> 
    <version>3.0</version> 
    <date>2014-09-20 14:19:38</date> 
    <title>Texas Instruments Tag-it HF-I Plus (inlay) tag</title> 
    <uid nxp="false">3C:A7:4C:2B:00:00:07:E0</uid> 
    <hasndef>false</hasndef> 
    <section> 
     <subsection title="IC manufacturer"> 
      <block type="text"> 
    <content>Texas Instruments</content> 
</block> 
     </subsection> 
     <subsection title="IC type"> 
      <block type="text"> 
    <content>Tag-it HF-I Plus (inlay)</content> 
</block> 
     </subsection> 
    </section> 
    <section> 
     <subsection title="No NFC data set storage"> 
      <block type="text"> 
    <content></content> 
</block> 
     </subsection> 
    </section> 
    <section> 
     <subsection title="Memory size"> 
      <block type="text"> 
    <content>256 bytes 
► 64 blocks, with 4 bytes per block</content> 
</block> 
     </subsection> 
     <subsection title="IC detailed information"> 
      <block type="text"> 
    <content>Supported read commands: 
► Single Block Read 
► Multiple Block Read 
► Get System Information 
AFI supported 
DSFID supported 
IC reference value: 0x8B</content> 
</block> 
     </subsection> 
    </section> 
    <section> 
     <subsection title="Technologies supported"> 
      <block type="text"> 
    <content>ISO/IEC 15693-3 compatible 
ISO/IEC 15693-2 compatible</content> 
</block> 
     </subsection> 
     <subsection title="Android technology information"> 
      <block type="text"> 
    <content>Tag description: 
► TAG: Tech [android.nfc.tech.NfcV] 
android.nfc.tech.NfcV 
► Maximum transceive length: 253 bytes 
<hexoutput>MIFARE Classic support present in Android</hexoutput></content> 
</block> 
     </subsection> 
     <subsection title="Detailed protocol information"> 
      <block type="text"> 
    <content>ID: E0:07:00:00:2B:4C:A7:3C 
AFI: 0x00 
DSFID: 0x00</content> 
</block> 
     </subsection> 
     <subsection title="Memory content"> 
      <block> 
    <address>0</address> 
    <data access=".">E1 40 20 01</data> 
</block> 
<block> 
    <address>1</address> 
    <data access=".">03 0B D1 01</data> 
</block> 
<block> 
    <address>2</address> 
    <data access=".">07 55 01 74</data> 
</block> 
<block> 
    <address>3</address> 
    <data access=".">69 2E 63 6F</data> 
</block> 
<block> 
    <address>4</address> 
    <data access=".">6D FE 00 00</data> 
</block> 
<block> 
    <address>5</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>6</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>7</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>8</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>9</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>10</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>11</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>12</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>13</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>14</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>15</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>16</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>17</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>18</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>19</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>20</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>21</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>22</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>23</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>24</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>25</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>26</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>27</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>28</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>29</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>30</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>31</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>32</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>33</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>34</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>35</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>36</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>37</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>38</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>39</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>40</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>41</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>42</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>43</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>44</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>45</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>46</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>47</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>48</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>49</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>50</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>51</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>52</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>53</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>54</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>55</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>56</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>57</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>58</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>59</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>60</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>61</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>62</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block> 
    <address>63</address> 
    <data access=".">00 00 00 00</data> 
</block> 
<block type="text"> 
    <content> 
    x:user locked, *:factory locked, .:unlocked</content> 
</block> 
     </subsection> 
    </section> 
</scan> 

Благодарим за ответы.
Michael

+0

Любые подсказки приветствуются! Michael – michi099

ответ

0

Использование тегов NfcV (ISO/IEC 15693) в качестве меток NDEF по-прежнему не стандартизировано. Следовательно, производители устройств должны интегрировать поддержку собственных определений производителей тегов (пока они похожи или идентичны в большинстве частей) в свои версии Android.

Устройство, которое вы используете (в сочетании с этой версией для Android), не имеет имеет поддержку NDEF для тегов NfcV. Поэтому вы не можете отформатировать тег таким образом, чтобы сообщение NDEF было обнаружено на вашем устройстве Android.


) На самом деле это не совсем верно. Это устройство, вероятно, поддерживает NDEF в тегах ICODE NXP (используя тот же формат, который вы использовали в теге TI). К сожалению, эта поддержка была ограничена тегами NXP путем тестирования, если указание производителя в серийном номере метки равно 0x04 (= NXP).

+0

Большое спасибо за ваш ответ! – michi099

+0

Приятно знать, что автоматическое распознавание не будет работать, но есть возможность взаимодействовать с пользовательским приложением. Однако большая гибкость теряется. Michael – michi099

Смежные вопросы