新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2018-6-1
- 在线时间
- 4 小时
|
8金钱
本帖最后由 redddd 于 2018-6-1 22:15 编辑
我写入一个数据到卡片里面,然后也可以从这个卡片读出数据,但是数据读完之后,如果再次检验密匙,就一直校验失败,我试过了只有读数据操作会出现这种问题,请问下这是什么原因,程序如下
while ( 1 )
{
if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, UID ) ) != MI_OK ) //寻卡
{
printf ( "Please swipe your card!\n" );
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
ucStatusReturn = PcdRequest ( PICC_REQALL, UID );
}
if ( ucStatusReturn == MI_OK)
{
if ( PcdAnticoll ( UID ) == MI_OK )//防冲撞
{
sprintf(cstr1,"%2X%2X%2X%2X\n",UID[0],UID[1],UID[2],UID[3]);
printf( "The card id is:%s\n",cstr1);
status = PcdSelect(UID);//选卡
if (status != MI_OK)
{
printf( "\nSelect Failed\n");
continue;
}
printf( "Select Successful\n");
status = PcdAuthState(PICC_AUTHENT1A, 5, DefaultKey, UID);//验证卡片密码
if (status != MI_OK)
{
printf( "Check Failed\n");
continue;
}
printf( "Check Successful\n");
status = PcdWrite(5, data1);//往弟五块写入数据
{
printf( "Write Failed\n");
continue;
}
printf( "Write Successful\n");
PcdHalt();
}
}
//进入另外一个while
while(1)
{
if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK ) //寻卡
{
printf ( "Please swipe your card!\n" );
continue;
}
if ( ucStatusReturn == MI_OK)
{
if ( PcdAnticoll ( ucArray_ID ) == MI_OK )//防冲撞
{
sprintf(cstr1,"%2X%2X%2X%2X\n",ucArray_ID[0],ucArray_ID[1],ucArray_ID[2],ucArray_ID[3]);
printf( "The card id is:%s\n",cstr1);
status = PcdSelect(ucArray_ID);//选定
if (status != MI_OK)
{
printf( "\nSelect Failed\n");
continue;
}
printf( "Select Successful\n");
status = PcdAuthState(PICC_AUTHENT1A, 5, DefaultKey, UID);//校验
if (status != MI_OK)
{
printf( "Check Failed\n");
continue;
}
printf( "Check Successful\n");
status = PcdValue(PICC_DECREMENT,5,data3);//块5中的数据减去data3中的数据
if (status != MI_OK)
{
printf( "Paid Failed\n");
continue;
}
printf( "Paid Successful\n");
status = PcdBakValue(5,6);//块五中的数据备份到块6
if (status != MI_OK)
{
printf( "Back Failed\n");
continue;
}
printf( "Back Successful\n");
status=PcdRead (6, data2 );//读取块6的数据,问题就在这,只要一执行完这个函数,接下来就不能正常校验了
if (status != MI_OK)
{
printf( "Read Failed\n");
continue;
}
PcdHalt();//另卡片休眠
sprintf(cstr1,"%d%d%d%d\n",data2[3],data2[2],data2[1],data2[0]);
printf( "The balance is:%s\n",cstr1);
}
}
}
}
|
|