M24LR64 STMicroelectronics의 IC는 안드로이드 NFC에서 NfcV라고도하는 ISO 15693 프로토콜을 지원합니다. 내 프로토 타입 태그 보드 근처에 내 넥서스 S 전화 (안드로이드 4.0.4)을 배치 할 때, 나는 삐 소리와 로그 캣에 의해 트리거 메시지를 본 수 : 안드로이드가 ACTION_TAG_DISCOVERED을 파견 이유가 궁금안드로이드 NFC로 NDEF 메시지로 ST M24LR64를 읽을 수없는 이유
no tag fallback activity found for Intent { act = android.nfc.action.TAG_DISCOVERED}
을 ST 응용 프로그램 노트 다음에 ndef 형식 메시지를 구성했기 때문에 ACTION_NDEF_DISCOVERED가 아닌 int입니다. NfcV-Reader라는 자체 독자 소프트웨어 인 ST로 NDEF 메시지를 읽을 수 있습니다.
그런 다음 문제를 확인하기 위해 Android에서 데모 프로그램을 작곡했습니다. 이 AndroidManifest.xml에 의도를 등록한 경우
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
NFC 메시지를받을 수 없습니다. 나는이
로 수정 때 나는 안드로이드 시스템에서 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 소스를 다운로드하는 방법 : http://source.android.com/source/downloading.html –
LRiS64K는 ISO15693 명령 세트를 완전히 지원합니다. 대부분의 안드로이드 폰에서 작동하는 소프트웨어는 NXP 칩을 지원하지 않는다. 소프트웨어는 NXP에 의해 작성 되었기 때문에. –