【问题标题】:Error sending APDU commands with Arduino. Change the module context使用 Arduino 发送 APDU 命令时出错。更改模块上下文
【发布时间】:2020-10-12 12:23:28
【问题描述】:

我尝试使用 Arduino Uno 和 PN532 发送 APDU 命令。 PN532 找到了 EMV 卡,但是当我尝试发送命令时,我得到:

状态码表示错误

响应转储显示此结果(前 8 个字节):

0x00 0x00 0xFF 0x03 0xFD 0xD5 0x41 0x27

我发送的命令(SELECT PPSE):

00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00

根据文档,代码0x27(8字节)表示:

由于 PN532 的当前上下文,此命令不可接受(发起者与目标,未知目标编号,目标未处于良好状态,...)

如何将上下文更改为发送命令所需的上下文?

我的代码:

void loop(void) {
  uint8_t success;
  uint8_t uid[] = {0, 0, 0, 0, 0, 0, 0};
  uint8_t uidLength;

  // EMV card
  bool apdusuccess;
  uint8_t apdu[255];
  uint8_t berBuffer[255];
  uint8_t berLength = 255;

  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, & uidLength);

  if (success && uid && (uidLength == 4)) {
    uint8_t apdu[] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
    apdusuccess = nfc.inDataExchange(apdu, sizeof(apdu), berBuffer, &berLength);
    Serial.print("APDU Success: ");
    Serial.println(apdusuccess);
  }  
}

【问题讨论】:

    标签: c arduino nfc apdu emv


    【解决方案1】:

    我找到了一个解决方案,它适用于inListPassiveTarget

    void loop(void) {
      uint8_t success;
      uint8_t uid[] = {0, 0, 0, 0, 0, 0, 0};
      uint8_t uidLength;
    
      // EMV card
      bool apdusuccess;
      uint8_t apdu[255];
      uint8_t berBuffer[255];
      uint8_t berLength = 255;
    
      success = nfc.inListPassiveTarget();
    
      if (success) {
        uint8_t apdu[] = {0x00, 0xA4, 0x04, 0x00, 0x0e, 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00};
        apdusuccess = nfc.inDataExchange(apdu, sizeof(apdu), berBuffer, &berLength);
        Serial.print("APDU Success: ");
        Serial.println(apdusuccess);
      }  
    }
    

    【讨论】:

    • 在数据交换之前没有 IJDEP/IJPSL 我收到一个 0x27 上下文错误,表明目标尚未激活...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多