亚博智能论坛  
  
查看: 469|回复: 1

最近在弄RFID_RC522_无线射频卡,遇到问题,玩过的大虾帮忙...

[复制链接]

该用户从未签到

23

主题

54

帖子

149

积分

菜鸟程序猿

Rank: 2

积分
149
发表于 2017-6-20 16:34:53 | 显示全部楼层 |阅读模式
最近捣鼓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是表示那一块地址?


问题2:
/*************************************************************************
**功    能:写数据到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};
如果写这两个数组里其中一个数组的数据进去能否可行?第会不会越界,装不下?

问题3:
/******************************************************************
**功    能:寻卡
**参数说明: 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进制怎么来的?

回复

使用道具 举报

该用户从未签到

0

主题

13

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2017-6-23 16:58:06 | 显示全部楼层
这个函数是验证卡片密码。传的参数里:0X09表示块地址  
0X09代表的是那块的地址?不是有64块么,访问第0块地址应该是0,第一块就1呀。0X09是表示那一块地址?
你的卡总共64块,那么地址就是0 - 63,不用考虑扇区,例如,你想读第0块,传入0,想读第4块传入4即可,注意地址是从0开始的

问题2:
/*************************************************************************
**功    能:写数据到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 )
问题3:
/******************************************************************
**功    能:寻卡
**参数说明: 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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表