2012-04-23 8 views
2

M24LR64 STMicroelectronicsのICは、Android NFCでNfcVとも呼ばれるISO 15693プロトコルをサポートしています。私は私のプロトタイプタグボードの近くに私のネクサスS携帯電話(アンドロイド4.0.4)を置いたとき、私はビープ音を聞くことができる、とlogcatで解雇メッセージを見た:ST M24LR64をAndroid NFCでNDEFメッセージとして読み取ることができない理由

no tag fallback activity found for Intent { act = android.nfc.action.TAG_DISCOVERED} 

をアンドロイドがACTION_TAG_DISCOVEREDを派遣し、なぜ私が疑問に思いましたACTION_NDEF_DISCOVEREDではなく、STアプリケーションノートに従ってndef形式のメッセージを作成していたためです。そして、NEFCV-Readerと呼ばれるST独自の読者ソフトウェアでNDEFメッセージを読むことができます。

次に、問題を確認するためにアンドロイドでデモプログラムを作成しました。私はこのAndroidManifest.xmlを

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

と意図を登録すると、私はNFCメッセージを受信することはできません。私はこの

で変性したとき、私はAndroidのシステムからNFCメッセージを受け取ることができます。私は表現

Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 

でNDEFメッセージを確認するとき しかしrawMsgs変数はnullです! 私はST NfcV-Readerのソースコードを見直し、M24LR64 EEPROMのすべてのデータを読み取りブロックで処理していることがわかりました。これは、生のデータを読み込み、Android NFCやNDEFから市販のユーティリティを使用しないことを意味します。

protected Void doInBackground(Void... params) 
{ 
    DataDevice dataDevice = (DataDevice)getApplication(); 
    fullNdefMessage = null; 
    byte[] resultBlock0 = new byte[4]; 
    byte[] resultBlock1 = new byte[8]; 
    cpt = 0; 

    resultBlock0 = null; 
    while ((resultBlock0 == null || resultBlock0[0] == 1)&& cpt<1500) 
    { 
     resultBlock0 = NFCCommand.SendReadSingleBlockCommand(dataDevice.getCurrentTag(), new byte[]{0x00,0x00}, dataDevice); 
     cpt ++; 
     Log.v("CPT ", " CPT Read Block 0 ===> " + String.valueOf(cpt)); 
    } 

    //if CC0 = E1h & CC1 = right version 
    if(resultBlock0[0]==(byte)0x00 && resultBlock0[1]==(byte)0xE1 && resultBlock0[2]==(byte)0x40) 
    { 
     //NDEF TAG Format valid 
     cpt = 0; 
     resultBlock1 = null; 

     while ((resultBlock1 == null || resultBlock1[0] == 1) && cpt < 10) 
     { 
      resultBlock1 = NFCCommand.SendReadMultipleBlockCommand(dataDevice.getCurrentTag(),new byte[]{0x00,0x01}, (byte)0x02, dataDevice); 
     } 
     if(resultBlock1[1]==(byte)0x03 && resultBlock1[6]==(byte)0x54) // Text message 
     { 
      if(resultBlock1[5]<0) 
       numberOfBlockToRead = ((resultBlock1[5] + 256 + 14)/4); 
      else 
       numberOfBlockToRead = ((resultBlock1[5] + 14)/4); 
     } 
     else if(resultBlock1[1]==(byte)0x03 && resultBlock1[6]==(byte)0x55) // URL message 
     { 
      if(resultBlock1[1]<0) 
       numberOfBlockToRead = ((resultBlock1[2] + 256 + 12)/4); 
      else 
       numberOfBlockToRead = ((resultBlock1[2] + 12)/4); 
     } 
    } 
    else 
    { 
     //Not NDEF TAG Format 
     numberOfBlockToRead = 0; 
    } 

    bNumberOfBlock = Helper.ConvertIntTo2bytesHexaFormat(numberOfBlockToRead); 

    cpt = 0; 
    if(numberOfBlockToRead <32) 
    { 
     while ((fullNdefMessage == null || fullNdefMessage[0] == 1) && cpt < 10 && numberOfBlockToRead != 0) 
     { 
      fullNdefMessage = NFCCommand.SendReadMultipleBlockCommandCustom(dataDevice.getCurrentTag(),new byte[]{0x00,0x00}, bNumberOfBlock[1], dataDevice); 
      cpt++; 
     } 
    } 
    else 
    { 
     while ((fullNdefMessage == null || fullNdefMessage[0] == 1) && cpt < 10 && numberOfBlockToRead != 0) 
     { 
      fullNdefMessage = NFCCommand.SendReadMultipleBlockCommandCustom2(dataDevice.getCurrentTag(),new byte[]{0x00,0x00}, bNumberOfBlock, dataDevice); 
      cpt++; 
      Log.i("CPT ", "***** " + String.valueOf(cpt)); 
     } 
    } 

    return null; 
} 

私の質問は、私はアンドロイドNDEF機能を使用しなく生のブロックを読み込み、ISO 15693と私のNFCタグを処理するために書くことができるかどうか? M24LR64 EEPROMでデータをフォーマットするにはどうすればよいですか?

答えて

1

M24LR64チップおよび類似のLRiS64Kチップは、標準のISO 15693リードコマンドをサポートしていません。 STはこのようなタグにNDEFメッセージを格納する方法を最近定義したpublishedです。これは、NXPのICODE SLIタグでどのように行われているのか、Androidがサポートを提供するのと全く同じように行われます。しかし、現在のところ、AndroidのNFCソフトウェアスタックは、ST NfcVタグでNDEFをサポートしていません。

UPDATE:

ネクサス4は今NXP ICODE以外のNfcVタグのNDEFストレージをサポートしています。現在、TI Tag-it HF-IタグとLRi2KのようなSTタグにNDEFストレージがサポートされています。

+0

どこでAndroid NFC実装スタックの詳細を見つけることができますか? – yee

+0

Androidソースツリー:オープンソースです。 Androidソースをダウンロードする方法:http://source.android.com/source/downloading.html –

+0

LRiS64KはISO15693コマンドセットを完全にサポートしています。ほとんどのAndroid搭載携帯電話で動作するソフトウェアは、NXP以外のチップをサポートする気にはならない。ソフトウェアはNXPによって書かれているからだ。 –

0

ああ。 ISO15693。

多くのISO15693タグがあり、メモリの読み書き方法が異なります(1バイト対2バイトのアドレッシングと共通の違い)。標準がありますが、野生ではさまざまなバリエーションがたくさんあります。 M24LR64チップでは2バイトのアドレス指定が必要です。

残念ながら、このようなタグにはどのような変種があるかを尋ねる方法はないので、NFCソフトウェアがそれを識別する唯一の方法は、NFCソフトウェアに既知のタグとその特徴のリストを持たせることです。

そして、次のように推測します。通常、アンドロイドに付属するNFCスタックは、M24LR64タグについて認識していないため、NDEFデータを読み書きできません。

これは、生の読み取り/書き込みコマンドを使用する必要がある理由です。このおとぎ話は完璧に機能します。

0

標準はありますが、互換性がありません...生データは、すぐにそれに固執してください。また、STリファレンスのAndroidコードでアイデアをチェックすることもできます。私はそれが多くを明確にすると思う。

関連する問題