2017-12-12 27 views
-1

저는 칩의 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 프로토콜을 사용합니다.


명령은 : enter image description here


은 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 이 형식은 enter image description here입니다.

또 다른면 (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 캐시 영역에 데이터를 씁니다. 미리 감사드립니다.

답변

0

오늘날 B는 칩의 통신 속도 (1M에서 2M)와 일부 코드를 변경합니다. 그럼 A 칩으로 잘 작동합니다!그래서 우리는 통신 속도가 NFC 통신에 영향을 준다는 것을 발견했습니다. NFC 통신에 동일한 문제가 발생한다면 자신의 방법을 시도해보십시오!

해결되지 않은 날에이 문제를 고려해 주신 분께 감사드립니다.