Android通过NFC IsoDep(ISO14443-4)与芯片的FIFO缓存区域通信,无法超过12个字节

时间:2017-12-12 08:59:36

标签: android caching nfc fifo

我对Android NFC与芯片的FIFO缓存区进行交易非常困扰。另一方(B)和android app(A):B通电芯片,B通过C语言将数据写入芯片的FIFO缓存区。芯片的FIFO缓存区域在中断后无法保存数据,当芯片的FIFO缓存区域发送所有数据时,芯片的FIFO缓存区域将清除。

情况是,A接近芯片,发送APDU命令,现在芯片接收命令并产生信号。然后,B检测到芯片的信号,并抓取命令,然后,B得到命令的第一个字节(fb),然后,B写[fb+data+9000]到芯片's'。 FIFO缓存区域。最后,将数据发送回A管理芯片自我,我们不知道芯片如何管理回送。

问题是,当B写[fb+data+9000]小于15个字节(意味着数据只有12个字节)时,A可以从芯片接收[fb+data+9000]。但是[fb+data+9000]超过15个字节,A抛出TagLostException

芯片使用ISO14443-4协议。

命令:enter image description here

交易代码: `

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应用(A)尝试各种命令,包含以下格式:enter image description here

另一方(B)只获得命令中的第一个字节并将[fb+data+9000]写入芯片的FIFO高速缓存区域。这不是超时原因,除了setTimeOut(1200),还要尝试setTimeOut(5000)或不setTimeOut。其他,A和B没有指定APDU命令的具体含义。其他,通过不同的APDU命令,A可以很好地读取公共交通卡(可能是这个读取到块区域,现在使用缓存区域,两种工作方式不一样)。另外,芯片的配置基本默认。另外,通过其他读卡器测试,芯片发送数据成功。

我去谷歌,Bing,百度,Android办公室问题,stackoverflow等搜索答案,但找不到。这个问题非常困扰我们。抱歉我的英语不好。请帮忙,非常感谢你。

(芯片是FM11NC08。)

新进展,我们发现,放弃使用APDU命令,如果A发送1个字节,A可以接收最多16个字节。如果A发送2个字节,A可以接收最多15个字节。如果A发送15个字节,A可以接收最多2个字节。芯片的FIFO缓存区有32个字节的空间。 B接收A数据后,B将清除FIFO缓存区,然后将数据写入FIFO缓存区。 提前致谢。

1 个答案:

答案 0 :(得分:0)

今天,B改变了芯片的通信速率(从1M到2M)和部分代码。然后A与芯片一起工作!因此,我们发现通信速率对NFC通信有影响。如果您在NFC通信方面遇到同样的问题,可以尝试一下!

感谢那些在未解决的日子里考虑这个问题的人。

相关问题