#include <pic.h>
#include "main.h"
#include "mfrc522.h"
/////////////////////////////////////////////////////////////////////
//功 能:RC522 读块数据
//参数说明:
// addr[IN]:块地址 RC522 16个区,每个区4个块,第一个区块0存储供应商信息,每个区的块3存储密匙A 读写控制位 密匙B,实际可用存储数据块为47块
// rw_tag: 读写控制,0x01写,0x00读;
// pKey[IN]:密匙A
// buf[IN/OUT]:返回/写入块信息
//返 回: 成功返回0:MI_OK 返回1:寻卡错误 2:防冲错误 3:选卡错误 4:认证错误 5:读错误 6:写错误
/////////////////////////////////////////////////////////////////////
char RC522_RW(
unsigned char addr,
unsigned char rw_tag,
unsigned char *pkey,
unsigned char *buf
)
{
unsigned char status;
unsigned char g_ucTempbuf[MAXRLEN];
unsigned char Key[6];
unsigned char i;
char tag;
for(i=0;i<6;i++)
{
Key[i] = *(pkey+i);
}
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
if (status == MI_OK)
{
status = PcdAnticoll(g_ucTempbuf);//防冲撞
if (status == MI_OK)
{
status = PcdSelect(g_ucTempbuf);//选定卡片
if (status == MI_OK)
{
status = PcdAuthState(PICC_AUTHENT1A,addr, Key, g_ucTempbuf);//验证卡片密码
if (status == MI_OK)
{
if(!rw_tag)
{
status = PcdRead(addr,g_ucTempbuf);//读块
if (status == MI_OK)
{
for(i=0;i<16;i++)
{
*(buf+i) = g_ucTempbuf[i];
}
tag = MI_OK;
}
else {tag = DU_ERR;}
}
else
{
for(i=0;i<16;i++)
{
g_ucTempbuf[i]=*(buf+i);