2017-12-12 9 views
-1

Ich bin ziemlich beunruhigt mit Android NFC Transaktionen mit Chip-FIFO-Cache-Bereich. Eine andere Seite (B) und eine Android-App (A): B wurde mit dem Chip elektrifiziert, und B schreibt Daten in den FIFO-Cache-Bereich des Chips nach C-Sprache. Der FIFO-Cache-Bereich des Chips kann nach einem Ausfall keine Daten speichern, und wenn der FIFO-Cache-Bereich des Chips alle Daten sendet, wird der FIFO-Cache-Bereich des Chips gelöscht.Android über NFC IsoDep (ISO14443-4) Kommunikation mit Chip FIFO-Cache-Bereich keine Möglichkeit, mehr als 12 Bytes

Die Situation ist, ein Chip in der Nähe, senden Sie einen APDU-Befehl, jetzt Chip empfängt den Befehl und erzeugt ein Signal. Dann erkennt das B das Chip-Signal und ergreift den Befehl, dann erhält B das erste Byte (fb) des Befehls, mehr als B schreibt [fb+data+9000] in den FIFO-Cache-Bereich des Chips. Schließlich, die Transaktion von senden Daten zurück zu A verwalten mit Chip selbst und wir kennen nicht den Chip, wie man die Rücksendung verwalten.


Das Problem ist, wenn B der Schreib [fb+data+9000] weniger als 15 Bytes (Daten Mittel nur 12 Bytes), A die von [fb+data+9000] Chip aufnehmen kann. Aber die [fb+data+9000] mehr als 15 Bytes, wirft A TagLostException.

Der Chip verwenden ISO14443-4 Protokoll.


Der Befehl: enter image description here


Die transact Code: `

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"); 
    } 
} 

`


Android App (A) versuchen, auf eine Vielzahl von Befehlen , cont ins Format: enter image description here.

Und eine andere Seite (B) erhält nur das erste Byte im Befehl und schreibt [fb+data+9000] in den FIFO-Cache-Bereich des Chips. Dies ist kein Timeout-Grund, außer setTimeOut(1200), versuchen Sie auch setTimeOut(5000) oder nicht setTimeOut. Andere, A und B, ernennen die APDU-spezifische Bedeutung nicht. Andere, durch verschiedene APDU-Befehl, eine gute Arbeit mit Lesen der öffentlichen Transport-Karte (kann dies gelesen werden, um Bereich zu blockieren, und arbeiten jetzt mit Cache-Bereich, beide Weg nicht gleich). Andere, die Konfiguration von Chip ist Grundeinstellung. Andere, mit anderen Kartenleser Test, Chip senden Daten aus Erfolg.


Ich gehe zu Google, Bing, Baidu, Android Büroausgaben, Stackoverflow usw. Antwort zu suchen, aber nicht finden können. Dieses Problem hat uns sehr gestört. Entschuldigend mit meinem armen Englisch. Bitte helfen Sie, ich danke Ihnen sehr.

(der Chip FM11NC08.)

neue Fortschritte, Wir fanden, APDU-Befehl Aufgeben, wenn ein Send 1 Byte, A 16 Bytes maximal aufnehmen kann. Und wenn A 2 Bytes sendet, kann A maximal 15 Bytes empfangen. Und wenn A 15 Bytes sendet, kann A maximal 2 Bytes empfangen. Der FIFO-Cache-Bereich des Chips hat 32 Bytes Speicherplatz. Nachdem B die Daten von A erhalten hat, wird B den FIFO-Cache-Bereich löschen und dann Daten in den FIFO-Cache-Bereich schreiben. Vielen Dank im Voraus.

Antwort

0

Heute ändert B die Kommunikationsrate des Chips (von 1M auf 2M) und einen Teil der Codes. Dann arbeite ich gut mit Chip!Daher haben wir herausgefunden, dass die Kommunikationsrate einen Einfluss auf die NFC-Kommunikation hat. Wenn Sie die gleichen Probleme mit der NFC-Kommunikation haben, könnten Sie es versuchen!

Vielen Dank für Leute, die dieses Problem in Nicht-Lösung Tagen betrachten.

Verwandte Themen