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

如何使用dotnet/iot的Mfrc522库读取树莓派连接的NFC标签数据

问题解决方案

一、树莓派3B+无法识别任何卡片问题修复

  • 先确认树莓派SPI接口已启用:执行raspi-config,在「Interface Options」中找到SPI选项,选择开启后重启设备
  • 修正SPI设备编号:你当前代码使用SpiConnectionSettings(0, 1)对应SPI0的CE1引脚,而Python的SimpleMFRC522库默认使用SPI0的CE0(BCM编号8脚),如果你的RC522的CE引脚接的是BCM8,需要将配置改为SpiConnectionSettings(0, 0)
  • 确认引脚编号规则:dotnet/iot的GpioController默认使用BCM编号,你需要确认你接线的RST引脚对应的BCM编号确实是22,而非BOARD编号的22
  • 增加手动复位逻辑:初始化Mfrc522前先手动触发复位,避免库自动复位失效,代码参考:
gpioController.OpenPin(pinReset, PinMode.Output);
gpioController.Write(pinReset, PinValue.Low);
Thread.Sleep(50);
gpioController.Write(pinReset, PinValue.High);
Thread.Sleep(50);
// 再初始化Mfrc522
mfrc522 = new(spi, pinReset, gpioController, false);

二、树莓派计算模块4认证失败问题修复

  • 修正认证逻辑:Mifare 1K卡每4个块为一个扇区,每个扇区仅需要认证1次,无需每个块都发起认证请求,频繁发起认证会触发卡片的防冲突机制导致认证失败,调整逻辑为按扇区遍历,每个扇区认证成功后连续读取该扇区的4个块
  • 修正卡号输出逻辑:card.NfcId是字节数组,不能直接用UTF8编码转字符串,改为BitConverter.ToString(card.NfcId).Replace("-", "")输出十六进制格式的卡号
  • 调整重试逻辑:认证失败后不要仅调用ReselectCard(),需要重新执行寻卡流程获取新的卡片实例,再进行认证尝试
  • 降低SPI时钟频率:将connection.ClockFrequency调整为1_000_000,部分RC522模块在高频SPI下通信不稳定,容易出现校验错误导致认证失败
  • 增加卡片挂起操作:每次完成单张卡片的读写操作后,调用mfrc522.HaltA()将卡片挂起,避免残留状态影响后续的识别和认证
  • 确认卡片密钥:如果使用的不是空白卡,需要替换代码中的默认密钥为你卡片实际对应的KeyA/KeyB,不要直接使用库提供的默认密钥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:05