使用PN532进行IC卡的Linux和Windows平台的数据读取以及写入过程

强调:勿用于非法用途
       本文介绍使用PN532进行IC卡的Linux和Windows平台的数据读取以及写入过程。
注意: 在树莓派平台只做到了卡片解密,并没能写入UID卡,我不清楚具体原因,最后我在Win10平台进行了卡片的写入。欢迎学习和参考。软件附于最后。

前言

       现在大多数IC卡都有加密,我最开始想用RC522解决这个问题。因为之前我也有过MFRC522的使用经验,在网上看过一些文章,有些人说RC522功能不够强(相比于PN532),也有人说他尝试过用RC522进行密码破解,于是我尝试了。我将RC522采用SPI通信连接上树莓派3B+,最后止步于安装libnfc,因为libnfc不支持RC522。为了节约时间,没有再耗下去。

       PN532我也不太清楚功能到底如何,买来尝试一下,毕竟它便宜,还能买得起。相比于PM3,PN532便宜太多了。新品只需21.5元。
我买的红色板子,需要自己焊接排针,简简单单地使用十块钱的烙铁就搞好了。

PN532支持三种连接方式

       - SPI
       - I2C
       - UART
       对于这几种连接方式,我在树莓派上采用的是I2C,在Win10上采用的是UART。

Win10平台

       Win10平台最推荐,方法最简单,流程也简单。下面介绍硬件连接和软件操作。

1. 选择PN532通信方式

       拨动芯片上的开关到对应的通信方式,我采用的是I2C。如图:
展示PN532上的通信方式选择的位置

2. 串口转USB

       大多数网上的帖子用的是CH340,由于我手上已经有了CH341,同样可以实现接口转换。
CH341连接说明
       用杜邦线进行连接:
       - 5V <==> VCC
       - GND <==> GND
       - RX <==

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些指导。 首先,您需要将PN532连接到STM32单片机上。PN532可以通过SPI或I2C接口与STM32通信。您需要根据您的PN532模块和STM32单片机的硬件接口来选择相应的接口方式。 接下来,您需要编写代码来初始化PN532和STM32之间的通信接口,并使用PN532读取IC卡。以下是一个简单的示例代码: ```c #include <PN532_SPI.h> #include <SPI.h> PN532_SPI pn532spi(SPI, 10); // 创建 PN532_SPI 实例 void setup() { Serial.begin(9600); while (!Serial); // 等待串口打开 pn532spi.begin(); uint32_t versiondata = pn532spi.getFirmwareVersion(); if (! versiondata) { Serial.print("Didn't find PN53x board"); while (1); // 程序停止 } Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); Serial.println(); // 配置 PN532读取 IC 卡模式 pn532spi.SAMConfig(); } void loop() { uint8_t success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // 存储 UID uint8_t uidLength; // UID 长度 // 等待 IC 卡的到来 success = pn532spi.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); if (success) { Serial.println("Found an ISO14443A card"); Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); Serial.print("UID Value: "); for (uint8_t i=0; i < uidLength; i++) { Serial.print(" 0x");Serial.print(uid[i], HEX); } Serial.println(""); } delay(1000); } ``` 这个示例代码使用SPI接口与PN532通信,并读取Mifare ISO14443A协议的IC卡。如果您的IC卡不是Mifare协议,您需要根据您的IC卡类型更改代码中的协议类型。 希望这能帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值