【问题标题】:PN532 NFC card emulation detection issuePN532 NFC 卡仿真检测问题
【发布时间】:2014-12-17 04:46:09
【问题描述】:

我有一个基于unfc.codeplex.com 的C# 程序在卡模拟模式下配置PN532 module (connected via USB To TTL CH340G Converter)。我使用 dotnet SerialPort 类与模块进行通信。当我将手机悬停在模块上时,手机开始振动并尝试检测卡/模块,但无法始终检测到。有时它确实会被检测到,但这不会始终如一地发生。我通过分析Stollmann nfcplayer 的串行端口流量找到了相关的十六进制代码,这对于卡模拟模式非常有效。

有人知道代码有什么问题吗?或者这种方法有什么问题吗?

“ex”方法中添加的Preamble、Postamble、长度和校验和等数据包数据。以下在检测线程之前执行

     byte[] cmd0 = { 0x14, 0x01, 0x00, 0x01 };
     this.pn532.ex(cmd0);

     byte[] cmd1 = { 0x32, 0x02, 0x00, 0x0F, 0x0A };
     this.pn532.ex(cmd1);

     byte[] cmd2 = { 0x32, 0x05, 0xFF, 0xFF, 0xFF };
     this.pn532.ex(cmd2);

以下是在线程内运行

    private void HCEDetectionThread()
    {
        while (this.isRunning)
        {
            byte[] cmd1 = { 0x8C, 0x05, 0x04, 0x00, 0x14, 0x44, 0x3A, 
                        0x20, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 
                        0x44, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 
                        0x00, 0x00, 0x00 };
            this.pn532.ex(cmd1);

            byte[] cmd2 = { 0x14, 0x01, 0x00, 0x01 };
            this.pn532.ex(cmd2);

            byte[] cmd3 = { 0x32, 0x01, 0x00 };
            this.pn532.ex(cmd3);

        }
    }

【问题讨论】:

    标签: serial-port nfc hce


    【解决方案1】:

    如果 HCEDetectionThread 不断向 PN532 发送帧。 NFC 芯片很少有时间建立连接。这就是它失败的原因。

    尝试在最后一帧之后的 100 到 300 毫秒范围内添加暂停。

    顺便说一句,你应该试试 Stollmann 库。它并没有那么昂贵,从长远来看,它可能总体上更便宜。近 20 人年的开发投入其中,您在项目后期将面临的所有小怪癖和问题都已得到解决。

    Disclamer:我为 Stollmann 工作,并在这个 NFC 堆栈上全职工作了 3.5 年。

    【讨论】:

    • 我添加了 400 毫秒的线程睡眠,但仍然没有运气。我可以看到很多 IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_GET_COMMSTATUS) 和 IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK) 请求的想法。知道如何最小化它吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多