这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 我的NFC学习之旅(8)---不小心误写第7块的教训

共2条 1/1 1 跳转至

我的NFC学习之旅(8)---不小心误写第7块的教训

专家
2026-07-16 13:26:02     打赏

今天在学习M1卡的自动加减处理时,中间有段时间想看看第4、5、6、7块的数据,代码如下:

    // 读取块数据
    for (block=4; block <= 7; block++) {
      Serial.println(F("目标块:"));
      Serial.println(block);
      status = mfrc522.MIFARE_Read(block, buffer, &bufferSize);
      if (status == 0) {
        // 在串口监视器中打印数据(16字节)
        Serial.print(F("  原始数据 "));
        printBlockData();                 // 输出数据到串口
        // // 修改12 - 15的数据为 : 块地址,块地址取反,块地址,块地址取反
        // valueblock[12] = block;
        // valueblock[14] = block;
        // valueblock[13] = ~block;
        // valueblock[15] = ~block;
        // // 写入值块数据
        // status = mfrc522.MIFARE_Write(block, valueblock, 16);
        // if (status == 0) {
        //   Serial.println(F("  数据更新成功。"));
        // } else {
        //   Serial.println(F("  数据更新失败"));
        // }
        // // 再读
        // status = mfrc522.MIFARE_Read(block, buffer, &bufferSize);
        // if (status == 0) {
        //   Serial.print(F("  更新后数据 "));
        //   printBlockData();                 // 输出数据到串口
        // }
      }
      Serial.println(F("==============================================================="));
    }

然后想着按照值块的方式重新更新块的数据,结果块地址的循环值范围也没改,将设置值块的代码(绿色部分)放开,烧录程序执行了。然后就悲剧了,原来还能用的卡,出现为认证过程失败。

这一瞬间就明白了,将第7块数据改掉了,向扇区尾部(Sector Trailer)写入了无效数据,导致该扇区的访问权限被破坏,从而使整个扇区(包括第4块)永久无法访问。

第7块的原始数据应该是这个样子:

00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF 

被我改写成

0F 0F 0F 0F F0 F0 F0 F0 0F 0F 0F 0F, 7, 238, 7, 238

这就意味着,第1扇区不能用了。惨痛的教训啊!好消息是,这个严重的问题,不影响使用其他扇区。





关键词: 懒猫的学习笔记     NFC    

院士
2026-07-20 19:41:16     打赏
2楼

谢谢分享,学习了。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]