野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14144|回复: 6

求助有关RFID模块的一些问题(求探讨)

[复制链接]
发表于 2015-11-5 14:00:40 | 显示全部楼层 |阅读模式
本帖最后由 cosherry 于 2015-11-17 11:28 编辑

硬件平台ISO-MINI V2 + 野火RFID模块(WF-RC522) + S50 RFID射频卡(MiFare 1K)

软件资料野火RFID模块(WF-RC522)资料V1.0.0 版本

问题描述野火资料所给ISO-MINI相应程序,只是简单的测试卡片UID,
          在这基础上,根据RC522中的function.c文件实现了,选卡,验证某块密钥,读取某块数据的功能,
          但是在写卡测试时,却一直失败,不能将16字节数据写入某块。

问题排除:卡的问题,卡上每一扇区完好,不存在扇区损坏,控制字用的默认FF078069,密钥A进行读写测试,钱包数据格式正确。

回复

使用道具 举报

 楼主| 发表于 2015-11-5 14:02:35 | 显示全部楼层
本帖最后由 cosherry 于 2015-11-5 15:40 编辑

问题出现具体描述:
function.c文件中块写入函数char PcdWrite ( u8 ucAddr, u8 * pData );为什么要进行两次CRC检验,一次是写块命令+写块地址检验,另一次是16字节写入数据CRC检验,而两次检验之后,再进行RC522传输接收之后都用下面条件语句判断
第一次CRC检测传输后:
cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen );
    if( ( cStatus != MI_OK ) || ( ulLen != 4 ) || ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) )
返回结果 cStatus = MI_OK(0x26) ,  ulLen = 4 ,  ( ucComMF522Buf [ 0 ] & 0x0F ) = 0x0A ,通过。

第二次CRC检测传输后:
cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 18, ucComMF522Buf, & ulLen );
    if( ( cStatus != MI_OK ) || ( ulLen != 4 ) || ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) )
返回结果 cStatus = MI_OK(0x26) ,  ulLen = 4 ,  ( ucComMF522Buf [ 0 ] & 0x0F ) = 0x05 ,不通过。

自己通过调整程序可以得到

返回结果 cStatus = MI_ERR(0xbb) ,  ulLen = 4 ,  ( ucComMF522Buf [ 0 ] & 0x0F ) = 0x0A,明显依然错误。

求问,为什么传输返回是半字节(4bits)的数据,而且是0x0A,及二进制为:1010,而带入野火所给程序所得结果为0x05,及:0101,因此通不过条件判断,返回MI_ERR,写入失败
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-5 14:03:30 | 显示全部楼层
感谢:求大家帮我顶顶,谢谢野火论坛答疑解惑!
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-11-5 14:08:58 | 显示全部楼层
本帖最后由 cosherry 于 2015-11-17 11:30 编辑

@论坛各位前来

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-5 14:14:53 | 显示全部楼层
本帖最后由 cosherry 于 2015-11-17 11:30 编辑

重新梳理系统时钟工作原理,上面问题已解决。修改延时和RC522通讯里面的ul值,但这种修改纯属运气成分,没有多大根据,求大神继续探讨。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-5 16:37:59 | 显示全部楼层
没人做过这个嘛,求大神指导一下呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-17 11:27:37 | 显示全部楼层
想问题下,有没有仔细研究过RFID卡的同志,

ul = 250;                                                                                                                                                               
do  {
         ucN = ReadRawRC ( ComIrqReg );                                                       
         ul --;
    }
while ( ( ul != 0 ) && ( ! ( ucN & 0x01 ) ) && ( ! ( ucN & ucWaitFor ) ) );       

在不同的平台下,修改ul的值,到底有何依据,该参照什么数据来修改,或者应该考虑程序其他方面问题。       
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-21 16:27 , Processed in 0.079215 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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