我正在 Pax 设备上进行开发,我想管理
Mifare ULTRALIGHT C (MF0ICU2)
Pax 设备使用自定义 PayDroid 操作系统而不是标准的安卓系统,因此,我没有
NFC 安卓库。
我需要安装一个名为 NeptuneLiteAPI 的东西,它通过一个库公开 IPCC。
首先,我对命名约定和标准有点迷茫。Api 正在谈论:
通常情况下,Ultralight C 是 14443 Type A,但我不能用这个选项读取我的卡,我用“M1 卡”选项读取成功。什么是 M1 卡?它是Classic 1k吗?
文档提到我需要使用 APDU 并公开一些命令来执行这种调用
我成功读写卡(具有M1功能),库公开了使用与我的卡兼容的兼容模式的默认读/写方法
现在,我正在尝试配置身份验证并通过 APDU 命令向芯片发送一些命令。
这是我可以使用的代码的简化
iPicc = getDal().getPicc(piccType);
iPicc.open();
while(){
PiccCardInfo cardInfo = iPicc.detect(EDetectMode.ONLY_M);
if(cardInfo!=null){
//Read : works
byte[] page0=iPicc.m1Read((byte) 0);
// Write : works
iPicc.m1Write((byte)(13),hexStringToByteArray(\"AAAAAAAA000000000000000000000000\"));
}
对于写作,我有 3 种方法:
- byte[] : isoCommand(byte cid, byte[] 发送)
- ApduRespInfo:isoCommandByApdu(字节 cid,ApduSendInfo apduSendInfo)
- byte[] cmdExchange(byte[] dataIn, int recvLen)
- 所有这些方法都需要 APDU 命令。
如果我理解得很好,Mifare Ultralight C 不尊重 APDU 但 APDU 是唯一的方法吗?
在一些网站上,我发现使用指令类“FF”,我可以直接向芯片发送指令。
但是我迷失在我需要发送的命令中,我尝试了几个。
我有错误(不幸的是,它们是一个 NeptuneLiteAPi 而不是标准的)。
- 感应区没有特定卡,或卡未激活 PICC#3(未搜索卡错误)
- PICC#97(意外错误)
但奇怪的是,我刚才很好地检测到卡并成功读/写,所以卡“连接”良好
我尝试了几个命令(直接指令、APDU 指令、CRC 计算),没有任何效果。