You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#读取RFIDControllerMfrc522数据?求替代库及问题解决

解决Unosquare.RaspberryIO.Peripherals读取MFRC522数据异常问题及C# RFID库推荐

你当前代码的核心问题是扇区与块不匹配,以及未正确转换字节数据为可读内容:

  1. Mifare卡的扇区和块一一对应:每个扇区包含4个块,扇区0对应块0-3,扇区7对应块28-31。你认证了扇区7却读取块0,权限验证逻辑错误,导致返回无效数据。
  2. SimpleMFRC522默认将文本数据写入扇区1的块4-6,你需要对应读取正确的块。
  3. 直接输出字节数组的单个元素会显示ASCII码值,而非实际文本,需转换为字符串。

修复后的代码示例

using System;
using System.Text;
using System.Threading;
using Unosquare.RaspberryIO;
using Unosquare.RaspberryIO.Peripherals;

class Program
{
    static void Main()
    {
        Pi.Init<BootstrapWiringPi>();
        var reader = new RFIDControllerMfrc522();
        // 空白Mifare卡默认密钥,若你修改过密钥请替换
        var defaultKey = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };

        while (true)
        {
            if (reader.DetectCard() == RFIDControllerMfrc522.Status.AllOk)
            {
                var uidResponse = reader.ReadCardUniqueId();
                if (uidResponse.Status != RFIDControllerMfrc522.Status.AllOk)
                {
                    Console.WriteLine("读取UID失败");
                    Thread.Sleep(1000);
                    continue;
                }

                var cardUid = uidResponse.Data;
                reader.SelectCardUniqueId(cardUid);

                try
                {
                    // 认证SimpleMFRC522默认写入的扇区1(对应块4-6)
                    if (reader.AuthenticateCard1A(cardUid, 1, defaultKey) == RFIDControllerMfrc522.Status.AllOk)
                    {
                        // 读取块4(SimpleMFRC522默认写入的第一个数据块)
                        var readResult = reader.CardReadData(4);
                        if (readResult.Status == RFIDControllerMfrc522.Status.AllOk)
                        {
                            // 转换为ASCII字符串并去除末尾空字符
                            var cardContent = Encoding.ASCII.GetString(readResult.Data).Trim('\0');
                            Console.WriteLine($"读取到的数据:{cardContent}");
                        }
                        else
                        {
                            Console.WriteLine($"读取数据失败:{readResult.Status}");
                        }
                    }
                    else
                    {
                        Console.WriteLine("扇区认证失败");
                    }
                }
                finally
                {
                    reader.ClearCardSelection();
                }
            }

            Thread.Sleep(1000);
        }
    }
}

其他C# RFID库推荐

  • MFRC522.Net:专为MFRC522设计的.NET库,支持.NET Core/.NET 5+,API简洁,覆盖读卡、写卡、密钥管理等全功能。
  • Microsoft IoT.Device.Bindings:微软官方IoT设备绑定库,内置MFRC522实现,兼容性强,文档完善,适合融入.NET IoT生态。
  • RaspberryPi.Net.MFRC522:轻量级库,专注于MFRC522基础操作,代码量小,易于自定义扩展。

内容的提问来源于stack exchange,提问作者Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:10:29