저는 칩의 FIFO 캐시 영역으로 안드로이드 NFC를 처리하는 데 어려움을 겪고 있습니다. 또 다른 측면 (B) 및 안드로이드 애플 리케이션 (A) : B는 칩에 전기가 통하고 B는 C 언어로 칩의 FIFO 캐시 영역에 데이터를 씁니다. 칩의 FIFO 캐시 영역은 정전 후 데이터를 저장할 수 없으며 칩의 FIFO 캐시 영역이 모든 데이터를 전송하면 칩의 FIFO 캐시 영역이 지워집니다.NFC를 통한 안드로이드 IsoDep (ISO14443-4) 칩의 FIFO 캐시 영역과의 통신이 12 바이트를 초과하지 않습니다.
상황이 A 칩에 가까워지면 APDU 명령을 보내면 칩이 명령을 받아 신호를 생성합니다. 그런 다음 B가 칩의 신호를 감지하고 명령을 받으면 B가 명령의 첫 번째 바이트 (fb)를 가져오고 그 다음 B는 [fb+data+9000]
을 칩의 FIFO 캐시 영역에 씁니다. 마지막으로, A로 데이터를 보내는 트랜잭션은 칩 자체로 관리하고 칩을 어떻게 돌려 보내 관리할지 모릅니다. B의 기록 [fb+data+9000]
보다 적은 15 바이트 (수단의 데이터는 12 바이트)와, 칩의 [fb+data+9000]
나타날 수있는 문제가
. 그러나 [fb+data+9000]
은 15 바이트 이상이고 A는 TagLostException
을 던집니다.
칩은 ISO14443-4
프로토콜을 사용합니다.
명령은 :
은 Transact 코드 : `
try {
isoDep.close();
isoDep.connect();
}catch (IOException e){
errorfound = true;
onMessageReceived.onError(e);
}
if (!errorfound) {
if (isoDep.isConnected()) {
try {
isoDep.setTimeout(1200);
response = isoDep.transceive(newtest1_apdu);
int status = ((0xff & response[response.length - 2]) << 8) | (0xff & response[response.length - 1]);
if (status != 0x9000) {
log.error("retrieve data ,read failure");
}else {
log.info("retrieve data, result=" + numeralParse.toReversedHex(response));
}
onMessageReceived.onMessage(response);
}
catch (TagLostException e) {
log.info("catch tag lost exception, tag isConnected=" + isoDep.isConnected());
onMessageReceived.onError(e);
}
catch (IOException e) {
log.info("catch IOException, isoDep isConnected=" + isoDep.isConnected());
onMessageReceived.onError(e);
}
}else {
log.error("isoDep not connect");
}
}
`
안드로이드 응용 프로그램 (A)이 명령의 다양한 시도 , conta 이 형식은 입니다.
또 다른면 (B)은 명령에서 첫 번째 바이트 만 가져오고 칩의 FIFO 캐시 영역에 [fb+data+9000]
을 작성합니다. 이는 setTimeOut(1200)
을 제외한 시간 초과 사유가 아니며 setTimeOut(5000)
또는 setTimeOut
도 시도하십시오. 기타, A와 B는 APDU 명령 특정 의미를 지정하지 않았습니다. 다른, 다른 APDU 명령에 의해, 잘 읽기 대중 교통 카드 (지역을 차단하기 위해 읽을 수 있으며, 이제는 캐시 영역에서 작동합니다. 둘 다 작동 방식이 동일하지 않습니다). 기타, 칩의 구성은 기본 기본값입니다. 기타, 다른 카드 판독기 테스트와 함께, 칩의 성공 데이터를 보낼 수 있습니다.
나는 구글, 빙, 바이두, 안드로이드 사무실 문제, 유래로 이동 등등 답을 검색 할 수 있지만 찾을 수 없습니다. 이 문제는 우리를 괴롭혔습니다. 나의 가난한 영어로 사과. 제발 도와 줘서 고마워.
(칩이 FM11NC08입니다.)
새로운 진보, 우리가 전송 한 바이트의 경우, A는 최대 16 바이트를받을 수 APDU 명령을 사용하여 포기, 발견
. A가 2 바이트를 전송하면 A는 최대 15 바이트를 수신 할 수 있습니다. 그리고 A가 15 바이트를 전송하면 A는 최대 2 바이트를 수신 할 수 있습니다. 칩의 FIFO 캐시 영역에는 32 바이트 공간이 있습니다. B가 A의 데이터를받은 후에 B는 FIFO 캐시 영역을 지우고 FIFO 캐시 영역에 데이터를 씁니다. 미리 감사드립니다.