完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
国内网上逛了一圈,NFC-PN532的质料并不多,dataset也是随便介绍了下,开发手册还没有找到。
在各大论坛和百科的上找到的质料几乎都是一摸一摸的,要么发几个串口指令,要么就是开源驱动库的上位机。 想要弄懂这玩意到底怎么用的,确实不容易。 我总结了一些使用方法,和驱动编写,当然这个模块有很多的功能,这边只会涉及到对卡片的读写操作。 下面所讲只适用于串口通信模式。 1整体功能和简介: 串口默认115200 使用stm32控制PN532读写操作,nfc功能不就是为了读写嘛,完成这些使用我觉得应该差不多了。 一般的卡内存都是1K大小,当然也有其它的,不常见。 FUID 只能写一次UID (这个网上看到的,没有验证过) CUID 可以重复擦写UID (这个网上看到的,没有验证过) 2工作流程: 以上就是一个完整的对卡读写过程。 程序也会从这个流程去实现。,最基本的函数就是向串口发送指令,当然发送指令这里有讲究,需要去计算校验值,公式前面有写,然后通过这个函数来实现唤醒,寻卡,校验,读写。 计算校验和的函数:这些printf是用来测试用的 每个驱动都是先发送指令,然后串口会接收到返回指令,再去解析返回的指令,如果是成功的指令就拆解有效数据,则否。 具体发送和拆解就不一一讲解了,有兴趣的可以下载源码看一下,我这边主要说一下思路和注意的坑,通信规则。 看看主函数:无视其它文件,驱动内容都写在NFC_PN532里面,这里是校验第3扇区,读取其中内容。 #include "stm32f10x.h" #include "led.h" #include "systick.h" #include "serial.h" #include "24l01.h" #include "tx_rx_report.h" #include "1_V4_data.h" #include "timer.h" #include "tim3_pwm4.h" #include "string.h" #include "NFC_PN532.h" LED led1('C',13); int main(void) { u8 uid[4]; u8 block[16]; u8 block1[16]={0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1}; u8 check0[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7,0x80,0x69,0xff,0xff,0xff,0xff,0xff,0xff}; u8 check[]={0xff,0xff,0xff,0xff,0xff,0xff}; u8 check1[]={0x88,0x15,0x14,0x13,0x12,0x11}; u8 check2[]={0x64,0x98,0x8d,0x22,0x30,0x63}; u8 i=0; u8 n=0; serial1_init(115200); //串口初始化为 115200 serial3_init(115200); //串口初始化为 115200 printf("rn开始rn"); while(1) { PCout(13)=!PCout(13); if(awaken_nfc()) { //printf("检查到NFC设备rn"); if(find_card(uid)) { printf("检测到卡号:%x %x %x %xrn",uid[0],uid[1],uid[2],uid[3]); if(check_card(uid,check,11)) { printf("校验成功rn"); block1[0]=0x15; n=8; // if(write_block(block1,n)) // { // printf("写卡成功rn"); // } // block1[0]++; // if(write_block(block1,n+1)) // { // printf("写卡成功rn"); // } // block1[0]++; // if(write_block(block1,n+2)) // { // printf("写卡成功rn"); // // } // block1[0]++; // if(write_block(check0,n+3)) // { // printf("写卡成功rn"); // // } if(read_block(block,n)) { printf("读卡成功:%drn",n); for(i=0;i<16;i++) printf("%x ",block); printf("rn"); } if(read_block(block,n+1)) { printf("读卡成功:%drn",n+1); for(i=0;i<16;i++) printf("%x ",block); printf("rn"); } if(read_block(block,n+2)) { printf("读卡成功:%drn",n+2); for(i=0;i<16;i++) printf("%x ",block); printf("rn"); } if(read_block(block,n+3)) { printf("读卡成功:%drn",n+3); for(i=0;i<16;i++) printf("%x ",block); printf("rn"); } } else { printf("校验失败rn"); } } } delay_ms(100); } } 结果: 源码:可以自己连接试一下stm32f103c8t6 + PN532 https://download.csdn.net/download/hes_c/11112051 有了这个驱动,你想做个电子感应锁,刷卡消费系统啥的都不是问题。 想破解别人的卡,当然也可以,但是你得知道对方所有块的加密方式,你也可以写个扫描自己去破解,这个还是有难度了。 对于不加密的一些卡,随你怎么玩啦。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
653浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
523浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 13:37 , Processed in 0.874367 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号