树莓派4B连接RC522 RFID读卡器无法读卡及SPI通信异常求助
RC522 SPI通信异常(发送0xAA返回0)且无法读卡排查方案
问题背景
树莓派4B运行Debian 11(bullseye),按教程完成RC522接线,SPI已启用(lsmod可查看到spi_bcm2835模块),SPI环回测试正常,但使用spidev发送0xAA始终收到[0],且无法识别任何RFID标签。
测试代码:
import spidev import time spi = spidev.SpiDev() spi.open(0, 0) # Open SPI bus 0, device 0 try: while True: data = spi.xfer2([0xAA]) # Send 0xAA over SPI print("Received:", data) time.sleep(1) except KeyboardInterrupt: pass finally: spi.close()
预期输出:
Received: [0xAA] Received: [0xAA] ...
实际输出:
Received: [0] Received: [0] ...
排查与解决步骤
1. 重新核对硬件接线
RC522的引脚对应极易出错,重点确认:
- SDA(CS):必须接树莓派CE0(GPIO8)或CE1(GPIO7),对应代码中
spi.open(0,0)(CE0)或spi.open(0,1)(CE1),严禁接错引脚 - SCK:接GPIO11(SPI0 SCLK)
- MOSI:接GPIO10(SPI0 MOSI)
- MISO:接GPIO9(SPI0 MISO)
- GND:必须与树莓派共地,避免电平偏移导致通信失败
- VCC:优先用3.3V供电,部分模块支持5V,但树莓派3.3V引脚更匹配模块电平
2. 修正SPI通信参数
RC522对SPI参数有固定要求,默认spidev参数不匹配会导致通信异常,需手动设置:
import spidev import time spi = spidev.SpiDev() spi.open(0, 0) spi.max_speed_hz = 1000000 # 设为1MHz,兼容多数RC522模块 spi.mode = 0 # SPI模式0(CPOL=0,CPHA=0) spi.lsbfirst = False # 高位优先传输 try: while True: data = spi.xfer2([0xAA]) print("Received:", data) time.sleep(1) except KeyboardInterrupt: pass finally: spi.close()
3. 排查硬件故障
- 更换优质杜邦线,劣质线材易出现信号衰减或隐性短路
- 交叉验证模块:用其他树莓派或开发板测试RC522是否正常工作
- 用万用表检测树莓派SPI引脚电平,确认信号输出正常
4. 使用成熟RC522库替代裸spidev
直接操作spidev需严格遵循RC522通信协议,建议用现成库简化开发:
- 安装依赖:
sudo apt-get update && sudo apt-get install python3-pip pip3 install mfrc522
- 测试读卡代码:
from mfrc522 import SimpleMFRC522 import time reader = SimpleMFRC522() try: while True: print("等待RFID标签...") id, text = reader.read() print(f"标签ID: {id}") print(f"标签内容: {text}") time.sleep(2) except KeyboardInterrupt: pass finally: reader.quit()
5. 检查系统SPI配置
- 打开
/boot/config.txt确认SPI启用:
sudo nano /boot/config.txt
确保存在dtparam=spi=on且未被注释
- 重启树莓派生效:
sudo reboot
内容的提问来源于stack exchange,提问作者Alexio
相关产品推荐
相关产品推荐

