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

Android via NFC IsoDep(ISO14443-4) communication with chip's FIFO cache area no way to more than 12 bytes

我对 android NFC 与芯片的 FIFO 高速缓存区域进行交易感到非常困扰。另一边(B)和android app(A):B给芯片上电,B用C语言写数据到芯片的FIFO缓存区。芯片的FIFO缓存区断电后不能保存数据,当芯片的FIFO缓存区发送完所有数据后,芯片的FIFO缓存区会清空。


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


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

芯片使用ISO14443-4协议


命令:


交易代码: `

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) 尝试多种命令,包含这种格式:.

而另一端(B)只获取命令中的第一个字节并将[fb+data+9000]写入芯片的FIFO缓存区。这不是超时原因,除了 setTimeOut(1200),也尝试 setTimeOut(5000) 或不尝试 setTimeOut。另外,A和B分别没有指定APDU命令的具体含义。另外,通过不同的APDU命令,A可以很好的读取Public交通卡(可能是这次读取到block area,现在读取cache area,两者的工作方式不一样)。其他,芯片配置基本默认。其他,用其他卡reader测试,芯片发送数据成功


我去Google、Bing、百度、Androidoffice issues、Whosebug等搜索答案,都找不到。这个问题非常困扰我们。为我糟糕的英语道歉。请帮忙,万分感谢

(芯片为FM11NC08)

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

今天B更改了芯片的通信速率(从1M到2M)和部分代码。然后A与芯片一起工作!因此,我们发现通信速率对 NFC 通信有影响。如果你在 NFC 通讯上也有同样的困扰,不妨试试我们的方法吧!

感谢在无法解决的日子里考虑这个问题的人。