使用Mifare Ultralight C卡在Android上收发失败

使用Mifare Ultralight C卡在Android上收发失败,android,xamarin,nfc,ioexception,mifare,Android,Xamarin,Nfc,Ioexception,Mifare,我正在尝试将原始APDU命令发送到Android上的Mifare Ultralight C卡(在Xamarin中)。我发送的任何命令都会失败,并出现IOException(“收发器失败”) 有什么意见吗 private static readonly string SELECT_CSN = "FFCA000000"; public void OnTagDiscovered(Android.Nfc.Tag tag) { Log.Info(TAG, $"New tag discovered

我正在尝试将原始APDU命令发送到Android上的Mifare Ultralight C卡(在Xamarin中)。我发送的任何命令都会失败,并出现
IOException
(“收发器失败”)

有什么意见吗

private static readonly string SELECT_CSN = "FFCA000000";

public void OnTagDiscovered(Android.Nfc.Tag tag)
{
    Log.Info(TAG, $"New tag discovered {ByteArrayToHexString(tag.GetId())}");

    var mifareTag = MifareUltralight.Get(tag);

    if(mifareTag != null)
    {
        mifareTag.Connect();

        byte[] cmd = HexStringToByteArray(SELECT_CSN);

        try
        {
            var response = mifareTag.Transceive(cmd);
        }
        catch (Java.IO.IOException ex)
        {
            Log.Error(TAG, $"Error with reading card {ex.Message}, {ex.StackTrace}");
        }
    }            
}

获得
IOException
的原因是标记拒绝命令(即,它用NAK响应)并重置自身。请注意,在某些Android设备上,您可能会收到NAK答案,而不是获得
IOException

标记拒绝该命令,因为它不是有效的MIFARE Ultralight(C)命令。MIFARE Ultralight(C)标签不使用APDU命令进行通信,而是使用ISO/IEC 14443-3上设置的专有命令。例如,MIFARE Ultralight C的有效命令有:

  • 阅读: +------+------+ | 0x30 | ADDR | +------+------+ +------+------+ |0x30 |地址| +------+------+
  • 写入: +------+------+------+------+------+------+ | 0x2A | ADDR | DATA | +------+------+------+------+------+------+ +------+------+------+------+------+------+ |0x2A |地址|数据| +------+------+------+------+------+------+
  • 验证(1): +------+------+ |0x1A | 0x00| +------+------+
您试图发送的APDU命令(
FFCA000000
)似乎是用于获取枚举标记的UID的PC/SC读卡器命令(由无效的CLA字节
0xFF
明确指示)。也就是说,此命令从非接触式智能卡读卡器而不是从标签本身请求信息。在Android上,正如您已经发现的,您将使用
tag.GetId()

+------+------+ | 0x1A | 0x00 | +------+------+