将TgInitAsTarget命令发送到PN532(ELEHOUSE模块),获取ACK帧,但丢失了正常的信息帧

时间:2016-03-09 14:38:23

标签: nfc nfc-p2p

我最近开始使用PN532 NFC模块。我可以成功读/写M1和S50卡。

现在我正在尝试学习如何使用P2P通信。然而, 当我向PN532(ELEHOUSE模块)发送TgInitAsTarget命令时,我收到一个ACK帧,但是我从未收到过后应该遵循的正常信息帧。

以下是我的步骤:

  1. 通过发送TgInitAsTarget命令将PN532置于目标模式:

    TgInitAsTarget:
    { 00 00 ff 0x27 0xd9
      d4 8c 04
         08 00 12 34 56 40
         01 fe a2 a3 a4 a5 a6 a7   c0 c1 c2 c3 c4 c5 c6 c7   ff ff
         aa 99 88 77 66 55 44 33 22 11
         00
         00
      fd 00 }
    
  2. 通过发送InJumpForDEP命令获取第二个PN532进入启动器模式:

    InJumpForDEP:
    { 00 00 ff 0a f6
      d4 56 01 02
         01   00 ff ff 00 00
      d4 00 }
    
  3. 将发起人置于目标之上。

  4. 当我通过UART读取从目标收到的信息时,我得到以下信息:

    target->pc:
    { 01
      00 00 ff 00 ff 00 }
    

    这似乎是一个ACK帧,表明正确处理了TgInitAsTarget命令。但之后PN532不发送包含TgInitAsTarget命令结果的正常信息帧,并且目标始终处于忙碌状态。

  5. 这里出了什么问题?

2 个答案:

答案 0 :(得分:0)

您的命令似乎有些问题。

  1. 首先,InJumpForDEP命令似乎格式不正确。该命令解码为以下内容:

    d4 56   InJumpForDEP
       01   ActPass = Active Mode
       02   Baud Rate = 424 kbps
       01   Next = NFCID3i
       00 ff ff 00 00  NFCID3i ? (HERE is the problem)
    

    该命令的NFCID3i字段无效。 NFCID3i必须由10个字节组成(例如11 22 33 44 55 66 77 88 99 AA)。最简单的方法是让PN532通过不指定NFCID3i字段自动生成随机NFCID3i:

    d4 56   InJumpForDEP
       01   ActPass = Active Mode
       02   Baud Rate = 424 kbps
       00   Next = none
    

    请注意,命令框的长度字段和校验和需要相应调整。

  2. 启动器以424 kbps的波特率在活动模式下轮询。但是,使用TgInitAsTarget命令,您可以指示目标仅以PICC模式进行侦听:

    d4 8c   TgInitAsTarget
       04   Mode = PICC only ! (HERE is the problem)
       08 00 12 34 56 40   MifareParams
       01 fe a2 a3 a4 a5 a6 a7   c0 c1 c2 c3 c4 c5 c6 c7   ff ff   FelicaParams
       aa 99 88 77 66 55 44 33 22 11   NFCID3t
       00   no Gt
       00   no Tk
    

    因此,目标仅作为ISO / IEC 14443-4 PICC运行(类似于106 kbps的被动模式)。因此,发起者和目标被配置为说两个完全不同的协议,因此彼此不理解。因此,PN532在启动器模式下永远不会调用目标模式下的PN532,因此永远不会从TgInitAsTarget命令返回。

    为了以与启动器配置兼容的方式配置目标,您可以使用:

    d4 8c   TgInitAsTarget
       02   Mode = DEP only
       08 00 12 34 56 40   MifareParams (not used in active mode)
       01 fe a2 a3 a4 a5 a6 a7   c0 c1 c2 c3 c4 c5 c6 c7   ff ff   FelicaParams (not used in active mode)
       aa 99 88 77 66 55 44 33 22 11   NFCID3t
       00   no Gt
       00   no Tk (not used in active mode)
    

答案 1 :(得分:0)

最后,我解决了这个问题,这是一个硬件问题,我买了新的PN532模块。正常的信息框成功返回。无论如何,谢谢@Michael Roland。