搜索
bottom↓
回复: 10

请教:FM1702读数据总是提示错误...

[复制链接]

出0入0汤圆

发表于 2010-12-9 14:10:52 | 显示全部楼层 |阅读模式
/****************************************************************/
/*名称: MIF_Read */
/*功能: 该函数实现读MIFARE卡块的数值*/
/*输入: buff: 缓冲区首地址*/
/* Block_Adr: 块地址*/
/*输出: FM1702_NOTAGERR: 无卡*/
/* FM1702_PARITYERR: 奇偶校验错*/
/* FM1702_CRCERR: CRC校验错*/
/* FM1702_BYTECOUNTERR: 接收字节错误*/
/* FM1702_OK: 应答正确*/
/****************************************************************/
uchar MIF_READ(uchar *buff, uchar Block_Adr)
{
   
    uchar temp;
   
    SPIWrite2(CRCPresetLSB,0x63);
    SPIWrite2(CWConductance,0x3f);
    SPIWrite2(ModConductance,0x3f);
    SPIWrite2(ChannelRedundancy,0x0f);

    buff[0] = RF_CMD_READ;
    buff[1] = Block_Adr;
    temp = Command_Send(2, buff, Transceive);
    if(temp == 0)
    {
        return FM1702_NOTAGERR;
    }

    temp = SPIRead2(ErrorFlag);
    if((temp & 0x02) == 0x02) return FM1702_PARITYERR;
    if((temp & 0x04) == 0x04) return FM1702_FRAMINGERR;
    if((temp & 0x08) == 0x08) return FM1702_CRCERR;
    temp = SPIRead2(FIFO_Length);
    if(temp == 0x10)       
    {
        Read_FIFO(buff);
        return FM1702_OK;
    }
    else if(temp == 0x04)       
    {
        Read_FIFO(buff);
        return FM1702_OK;
    }
    else
    {
        return FM1702_BYTECOUNTERR;
    }
}

上面是标准的函数,我想请问的是:形参Block_Adr取值是0~3,还是按照扇区号,每过一个扇区,块号就+4?因为前面在密码验证阶段,已指明了对某一个扇区验证,那么这里读一个块的数据时,Block_Adr块号应该就是针对这个扇区的偏移号(0~3)吧??
另外:我传入的是0~3间的数时,这函数返回值是FM1702_CRCERR(CRC校验错误),传入的值大于3时,返回值时FM1702_NOTAGERR(无卡),总之返回的不是FM1702_OK,问题会出在哪呢???请高人指点!!!谢谢.

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入4汤圆

发表于 2010-12-9 14:38:40 | 显示全部楼层
Block_Adr,是块号,S50卡的话是取值范围从0到63,共64块

出0入0汤圆

 楼主| 发表于 2010-12-9 16:19:10 | 显示全部楼层
请教楼上:
如果取值是0~63,那么在密码校验那个步骤,只是对某一个扇区(包含4个块)的密码进行验证,其他的块并未密码校验,应该是不给读才对,比如我校验的是1号扇区,那么可以操作的块号应该是4~7块才对,能不能说的更详细点?

出0入4汤圆

发表于 2010-12-9 16:51:19 | 显示全部楼层
你说的没错,loadkey和Authen的参数是扇区,即0到15,如果这两个函数都返回OK的话就可以对相应扇区进行读写操作了,校验的是1号扇区,可操作的块只有4到7

出0入0汤圆

 楼主| 发表于 2010-12-9 18:53:18 | 显示全部楼层
楼上高手,可知道我出现的那个问题怎么解决?就是返回FM1702_CRCERR(CRC校验错误),我知道它和RC500在校验时有区别,但我用的代码是和应用资料中的一样,而且我也对比了其他的一些版本的示例程序,都是一样的啊...

出0入0汤圆

 楼主| 发表于 2010-12-9 19:21:51 | 显示全部楼层
刚才又测试了下,是这样的:比如我校验的扇区是2号扇区,那么我用MIF_READ函数读8~11块时,返回都是FM1702_NOTAGERR(无卡),读其他块时(这时应该是不允许的),返回是CRC错误,我奇怪的是:2号扇区对应的块就是8~11,为什么会返回"无卡"呢???

出0入4汤圆

发表于 2010-12-9 20:24:48 | 显示全部楼层
MIF_READ前先要通过Request,AntiColl,Select_Card得到GUID号,然后Load_key,Authentication,这些都返回FM1702_OK再进行MIF_READ操作

出0入0汤圆

 楼主| 发表于 2010-12-9 21:16:34 | 显示全部楼层
恩,是的,我都做了,原因找到了,可以说是延时不够,谢了

出0入0汤圆

发表于 2011-6-19 09:29:47 | 显示全部楼层
感谢楼主 和二楼 我一直没注意块号和扇区号 做了好久都是返回字节错误 呵呵 看了楼主和二楼的发言 顿时大悟啊 试了一下 可以正常读写了  衷心感谢。今天大早起来值了 正当周末 今天任务完成 待会出去放松放松 哇哈哈

出0入0汤圆

发表于 2011-9-13 17:15:57 | 显示全部楼层
我也在做,现在看不懂在说的是什么。。不过我觉得过一段时间可能会用得到。。。先mark

出0入0汤圆

发表于 2013-11-20 15:56:34 | 显示全部楼层
quest 发表于 2010-12-9 21:16
恩,是的,我都做了,原因找到了,可以说是延时不够,谢了

quest 您好,我现在和你一模一样的问题,请问你是怎么解决的...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 18:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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