rc522 程序读取CPU卡数据,大于64字节时,FIFO溢出

您可能感兴趣的
&|&&|&&|&&|&&|&&|&
Copyright & 2003 -
All Rights Reserved 谷瀑环保设备网 版权所有 经营许可证:
邮箱: 服务热线:5,75503 客服:&
营运: 本网站法律顾问:浙江天杭律师事务所
张平安律师 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
[精品]CPU卡的接口特性、传输协议与读写程序设计
下载积分:420
内容提示:cpu卡 cpu卡入门教程 什么是cpu卡 rc522 cpu卡 cpu卡读卡器 cpu卡 容量 cpu卡燃气表 cpu卡sfi
文档格式:DOC|
浏览次数:1|
上传日期: 16:36:06|
文档星级:
该用户还上传了这些文档
下载文档:[精品]CPU卡的接口特性、传输协议与读写程序设计.DOC
官方公共微信所属子分类:
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
最近捣鼓RFID-RC522,----从某宝上淘来RC522模块和几张S50的卡,在论坛上下载了几个大虾写的RC522的程序研究了几天,遇到了一些问题:
看S50卡的说明书得知:S50有16个扇区,每个扇区有4个块,每块16个字节。
访问一个扇区时需要验证密码A或者B;才能进行操作。
u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff};&
unsigned char SN[5]; &//卡号
问题1:PcdAuthState(0x60,0x09,KEY,SN); & //验证卡片密码 形参参数:验证方式,块地址,密码,卡许列号
&&&&& & 这个函数是验证卡片密码。传的参数里:0X09表示块地址 &
0X09代表的是那块的地址?不是有64块么,访问第0块地址应该是0,第一块就1呀。0X09是表示那一块地址?
/*************************************************************************
**功 & &能:写数据到M1卡一块
**参数说明: K:块地址
** & & & & &BUF:向块写入的数据,16字节
**返 & &回: 成功返回MI_OK
*************************************************************************/ & & & & & & & & &
char Write(u8 & K,u8 BUF )
我想向M1卡里的第二个扇区的第0块地址写入16个字节的数据,应该怎么传参数呢?
数组定义为:BUF[16]={9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,};
&&&&&&&&&&&&&&&&& BUF[16]={255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
如果写这两个数组里其中一个数组的数据进去能否可行?第会不会越界,装不下?
/******************************************************************
**功 & &能:寻卡
**参数说明: req_code[IN]:寻卡方式
** & & & & & & & &0x52 = 寻感应区内所有符合14443A标准的卡
** & & & & & & & &0x26 = 寻未进入休眠状态的卡
** & & & & &
pTagType[OUT]:卡片类型代码
** & & & & & & & &0x4400 = Mifare_UltraLight
** & & & & & & & &0x0400 = Mifare_One(S50)
** & & & & & & & &0x0200 = Mifare_One(S70)
** & & & & & & & &0x0800 = Mifare_Pro(X)
** & & & & & & & &0x4403 = Mifare_DESFire
**返 & &回: 成功返回MI_OK
************************************************************************/
char PcdRequest(u8 & req_code,u8 *pTagType)
这个函数可返回读取的卡片类型,但是我实验了下,发现返回的就是两个字符而已,怎么上面提示的16进制?
把返回的两个字符转化为16进制也对不上上面说的那几个16进制。 & 问下那个16进制怎么来的?
推荐参考答案
酱油团队--
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
搞过的大虾解答下呀。在线等等,,,,,
酱油团队--
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
大虾们--都去哪了
酱油团队--
注册时间: 11:04
回复数: 88
论坛积分:115
这个函数是验证卡片密码。传的参数里:0X09表示块地址 &
0X09代表的是那块的地址?不是有64块么,访问第0块地址应该是0,第一块就1呀。0X09是表示那一块地址?
你的卡总共64块,那么地址就是0 - 63,不用考虑扇区,例如,你想读第0块,传入0,想读第4块传入4即可,注意地址是从0开始的
/*************************************************************************
**功 & &能:写数据到M1卡一块
**参数说明: K:块地址
** & & & & &BUF:向块写入的数据,16字节
**返 & &回: 成功返回MI_OK
*************************************************************************/ & & & & & & & & &
char Write(u8 & K,u8 BUF )
我想向M1卡里的第二个扇区的第0块地址写入16个字节的数据,应该怎么传参数呢?
数组定义为:BUF[16]={9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,};
&&&&&&&&&&&&&&&&& BUF[16]={255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
如果写这两个数组里其中一个数组的数据进去能否可行?第会不会越界,装不下?
不知道你的实现函数是什么样的???char Write(u8 & K,u8 *BUF )
/******************************************************************
**功 & &能:寻卡
**参数说明: req_code[IN]:寻卡方式
** & & & & & & & &0x52 = 寻感应区内所有符合14443A标准的卡
** & & & & & & & &0x26 = 寻未进入休眠状态的卡
** & & & & &
pTagType[OUT]:卡片类型代码
** & & & & & & & &0x4400 = Mifare_UltraLight
** & & & & & & & &0x0400 = Mifare_One(S50)
** & & & & & & & &0x0200 = Mifare_One(S70)
** & & & & & & & &0x0800 = Mifare_Pro(X)
** & & & & & & & &0x4403 = Mifare_DESFire
**返 & &回: 成功返回MI_OK
************************************************************************/
char PcdRequest(u8 & req_code,u8 *pTagType)
这个函数可返回读取的卡片类型,但是我实验了下,发现返回的就是两个字符而已,怎么上面提示的16进制?
把返回的两个字符转化为16进制也对不上上面说的那几个16进制。 & 问下那个16进制怎么来的?
0x52或0x26指令读回来的就是卡的类型,返回两个字符是对的,就是卡的类型,一般会是0x0400
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
写函数的原型
/*************************************************************************
**功 & &能:写数据到M1卡一块
**参数说明: addr:块地址
** & & & & &p:向块写入的数据,16字节
**返 & &回: 成功返回MI_OK
*************************************************************************/ & & & & & & & & &
char Write(u8 & addr,u8 *p )
& & char &
& & u8 & unL
& & u8 & i,ucComMF522Buf[MAXRLEN];&
& & ucComMF522Buf[0] = PICC_WRITE;// 0xA0 //写块
& & ucComMF522Buf[1] =//块地址
& & CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
& & status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
& & if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
& & { & status = MI_ERR; & }
& & if (status == MI_OK)
& & & & for (i=0; i&16; i++)//向FIFO写16Byte数据&
& & & & { & &
ucComMF522Buf[i] = *(p +i); &&
& & & & CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
& & & & status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
& & & & if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
& & & & { & status = MI_ERR; & }
我要给扇区2的第1块写入数据,是不是直接传参:char Write( &5 ,buf ); &
char buf[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
zxz&这样传参数行不行呢?
酱油团队--
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
回复【3楼】&z1234zz&:
---------------------------------
0x52或0x26指令读回来的就是卡的类型,返回两个字符是对的,就是卡的类型,一般会是0x0400
问:返回的就是16进制吗?
酱油团队--
注册时间: 11:04
回复数: 88
论坛积分:115
返回的就是16进制吗?&
是的
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
回复【6楼】&z1234zz&:
---------------------------------
写函数的原型
/*************************************************************************
**功&&&&能:写数据到M1卡一块
**参数说明:&addr:块地址
**&&&&&&&&&&p:向块写入的数据,16字节
**返&&&&回:&成功返回MI_OK
*************************************************************************/&&&&&&&&&&&&&&&&&&
char&Write(u8&&&addr,u8&*p&)
{
&&&&char&&&
&&&&u8&&&unL
&&&&u8&&&i,ucComMF522Buf[MAXRLEN];&
&&&&
&&&&ucComMF522Buf[0]&=&PICC_WRITE;//&0xA0&//写块
&&&&ucComMF522Buf[1]&=&//块地址
&&&&CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
&
&&&&status&=&PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
&&&&if&((status&!=&MI_OK)&||&(unLen&!=&4)&||&((ucComMF522Buf[0]&&&0x0F)&!=&0x0A))
&&&&{&&&status&=&MI_ERR;&&&}
&&&&&&&&
&&&&if&(status&==&MI_OK)
&&&&{
&&&&&&&&for&(i=0;&i&16;&i++)//向FIFO写16Byte数据&
&&&&&&&&{&&&&
&&&&&&&&ucComMF522Buf[i]&=&*(p&+i);&&&
&&&&&&&&}
&&&&&&&&CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);
&&&&&&&&status&=&PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
&&&&&&&&if&((status&!=&MI_OK)&||&(unLen&!=&4)&||&((ucComMF522Buf[0]&&&0x0F)&!=&0x0A))
&&&&&&&&{&&&status&=&MI_ERR;&&&}
&&&&}
&&&&
&&&&return&
}
我要给扇区2的第1块写入数据,是不是直接传参:char&Write(&&5&,buf&);&&
char&buf[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
zxz&这样传参数行不行呢?
我写进去了,都出来都是0
酱油团队--
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
回复【6楼】&z1234zz&:
---------------------------------
谢谢啦!问题已经全部解决
酱油团队--
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
回复【6楼】&z1234zz&:
---------------------------------
大虾-还有一问题:
修改扇区的密码格式是怎么样的?
unsigned&char&RFID1[16]={0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff};&&这样吗?
主要是么有看明白:访问第3块控制区域,的存取控制权限&&和修改0,1,2块区域的存取权限&&有什么不同?是以前修改还是分开?
酱油团队--
注册时间: 11:04
回复数: 88
论坛积分:115
每个扇区的最后一块,就是前三块的密,四个块的密钥是一样的
注册时间: 12:35
回复数: 70
主题数: 32
论坛积分:165
回复【9楼】&xiaolong12&:
-------------------------------你好,在吗,大神。能不能讲讲怎样修改密匙A密码?
注册时间: 12:35
回复数: 70
主题数: 32
论坛积分:165
回复【10楼】&z1234zz&:
---------------------------------你好,在吗,大神。能不能讲讲怎样修改密匙A密码
注册时间: 20:59
回复数: 91
主题数: 19
论坛积分:247
来自: 深圳
回复【12楼】&long7qazzaq&:
---------------------------------
0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff
这是密码格式/。前面6位是密码A,后六位是密码B&&中间4位是控制位。
修改密码和写入数据是一样的,把密码格式写正确,写到控制块就OK了
酱油团队--
注册时间: 11:04
回复数: 88
论坛积分:115
<div class="edit_area" id="楼讲的是对的!!!,先把原来的密码写入,验证通过就可以把你的新密码,再写入原来的密码块就行了
请选择一个版面...
STM32-F0/F1/F2专区
STM32-F3/F4专区
MSP430专区
ARM7/ARM9/ARM11专区
其他Cortex系列
uCOS & uCGUI & Emwin
trochili(飞鸟)操作系统
中国RTOS联盟
FPGA/CPLD/DSP专区
数字,模拟,高频电路
编程语言学习
蓝牙/WIFI/Zigbee等通信技术
开发工具专栏
UOL 单片机面向对象语言
四轴飞行器
DIY大赛专区
DIY项目资料专区
论坛建设区
二手交易专栏
& 开源电子网() |读卡器及基于rc522的读卡器的设计(1) - 网文精粹 - 技术资料==
热门型号:
技术文章分类:
电子综合工具:
&&&当前位置:
& 读卡器及基于rc522的读卡器的设计(1)
读卡器及基于rc522的读卡器的设计(1)
相关技术资料

我要回帖

更多关于 rc522 程序 的文章

 

随机推荐