想做门禁刷卡、给机器人做个身份识别、给桌面做一张快递卡管理系统,RC522是一颗非常普及的RFID读卡模块。它工作在13.56MHz频段,能读ISO14443A标准的IC卡,也就是最常见的门禁卡和NFC卡。走SPI接口接线,第一次弄容易被那几个引脚名绕晕,这篇把接线和读卡逻辑讲清楚。

八个脚,找对几个关键接线
RC522模块常见的接法是走SPI,主要用这几个脚:SDA(片选CS)、SCK(时钟)、MOSI、MISO,再加RST(复位)、IRQ(中断,可空)、VCC和GND。接到Arduino Uno上,一个常见接法是:SDA接数字10、SCK接13、MOSI接11、MISO接12、RST接9、IRQ不接,VCC接3.3V、GND接地。
这里有个必须强调的点:RC522芯片核心是3.3V供电,千万不要接到5V上,很多模块烧掉就是5V怼上去的。接3.3V、共地,其余按SPI脑补脚位对应,就能跑起来。
读卡就两步:选卡、取卡号
Arduino端最省事的是用MFRC522库,装好后上电把卡靠近线圈,程序先PICC_IsNewCardPresent()检测有新卡靠近,再用PICC_ReadCardSerial()把卡的序列号读出来。卡号是以字节数组返回的,比如像 6A 3B CD E2 这样的四到七字节,拿到后转成十六进制打印,就是常说的卡ID。
要判断“是不是这张卡”,就把读到的卡号和一个白名单数组比对。白名单里存几个预先刷过的卡号,判断通过就开锁、白名单外就报警或忽略,这套逻辑做门禁和权限控制都够用。

三个高频坑,提前绕开
第一是3.3V供电和信号电平。模块要3.3V供电,虽然Arduino的数字脚输出5V高电平大多数情况下能正常驱动RC522,但规范上更稳妥是用逻辑电平转换。如果在3.3V供电的MCU上(比如某些ESP32)接,直接天然匹配,反而更省心。
第二是天线线圈不要弯折、不要贴着金属。RC522靠天线线圈感应,线圈被金属板压着或者弯折太大,读卡距离会骤降甚至读不到。把它架空几毫米、远离地线和金属桌面,读卡距离才会好。
第三是卡速问题。“读不到卡”很多时候是程序写完没循环检测或者上电后没有稳定。多刷几次、卡贴近线圈停一秒,基本能稳定读到。真正读不到的排查点:先确认3.3V供电、再确认SPI四根线没接错、然后用例程扫一遍卡号。
把3.3V供电、SPI四根线和白名单比对捋顺,RC522就是一个能读能判的射频读卡器,做门禁、打卡、权限识别都很实用。


白名单比对做门禁很顺,读到卡号转十六进制存数组比对就完事
SDA/SCK/MOSI/MISO这四根SPI线接错就白忙,对照Uno的10/13/11/12就行
天线别贴着金属桌,我放金属板上直接读不到,架空几毫米就好
3.3V供电这点太关键了,我就是图省事接5V把模块烧了才看到这篇