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でデータをフォーマットするにはどうすればよいですか?
どこでAndroid NFC実装スタックの詳細を見つけることができますか? – yee
Androidソースツリー:オープンソースです。 Androidソースをダウンロードする方法:http://source.android.com/source/downloading.html –
LRiS64KはISO15693コマンドセットを完全にサポートしています。ほとんどのAndroid搭載携帯電話で動作するソフトウェアは、NXP以外のチップをサポートする気にはならない。ソフトウェアはNXPによって書かれているからだ。 –