|
/****************************************************************/
/*名称: 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周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|