RDID射频识别读写器 - 图文(8)

2020-05-18 17:04

广西科技大学(筹) 基于单片机的RFID读写器的软件设计

char PcdRequest(unsigned char data req_code,unsigned char *pTagType) {

char data status;

unsigned int data unLen;

unsigned char data ucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x07); SetBitMask(TxControlReg,0x03);

ucComMF522Buf[0] = req_code;

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);

if ((status == MI_OK) && (unLen == 0x10)) {

*pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1]; } else

{ status = MI_ERR; }

return status; }

///////////////////////////////////////////////////////////////////// //功 能:防冲撞

//参数说明: pSnr[OUT]:卡片序列号,4字节 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// char PcdAnticoll(unsigned char *pSnr) {

char data status;

unsigned char data i,snr_check=0; unsigned int data unLen;

unsigned char data ucComMF522Buf[MAXRLEN];

ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x00); ClearBitMask(CollReg,0x80);

ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20;

27

广西科技大学(筹) 基于单片机的RFID读写器的软件设计

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);

if (status == MI_OK) {

for (i=0; i<4; i++) {

*(pSnr+i) = ucComMF522Buf[i]; snr_check ^= ucComMF522Buf[i]; }

if (snr_check != ucComMF522Buf[i]) { status = MI_ERR; } }

SetBitMask(CollReg,0x80); return status; }

///////////////////////////////////////////////////////////////////// //功 能:选定卡片

//参数说明: pSnr[IN]:卡片序列号,4字节 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// char PcdSelect(unsigned char *pSnr) {

char data status; unsigned char data i; unsigned int data unLen;

unsigned char data ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x70; ucComMF522Buf[6] = 0; for (i=0; i<4; i++) {

ucComMF522Buf[i+2] = *(pSnr+i); ucComMF522Buf[6] ^= *(pSnr+i); }

CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);

ClearBitMask(Status2Reg,0x08);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);

28

广西科技大学(筹) 基于单片机的RFID读写器的软件设计

if ((status == MI_OK) && (unLen == 0x18)) { status = MI_OK; } else

{ status = MI_ERR; }

return status; }

///////////////////////////////////////////////////////////////////// //功 能:验证卡片密码

//参数说明: auth_mode[IN]: 密码验证模式 // 0x60 = 验证A密钥 // 0x61 = 验证B密钥 // addr[IN]:块地址 // pKey[IN]:密码

// pSnr[IN]:卡片序列号,4字节 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// char PcdAuthState(unsigned char data auth_mode,unsigned char data addr,unsigned char *pKey,unsigned char *pSnr) {

char data status;

unsigned int data unLen;

unsigned char data i,ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = auth_mode; ucComMF522Buf[1] = addr; for (i=0; i<6; i++)

{ ucComMF522Buf[i+2] = *(pKey+i); } for (i=0; i<6; i++)

{ ucComMF522Buf[i+8] = *(pSnr+i); } // memcpy(&ucComMF522Buf[2], pKey, 6); // memcpy(&ucComMF522Buf[8], pSnr, 4);

status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen); if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08))) { status = MI_ERR; }

return status; }

///////////////////////////////////////////////////////////////////// //功 能:读取M1卡一块数据 //参数说明: addr[IN]:块地址

29

广西科技大学(筹) 基于单片机的RFID读写器的软件设计

// pData[OUT]:读出的数据,16字节 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// char PcdRead(unsigned char data addr,unsigned char *pData) {

char data status;

unsigned int data unLen;

unsigned char data i,ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = PICC_READ; ucComMF522Buf[1] = addr;

CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x90)) // { memcpy(pData, ucComMF522Buf, 16); } {

for (i=0; i<16; i++)

{ *(pData+i) = ucComMF522Buf[i]; } } else

{ status = MI_ERR; }

return status; }

///////////////////////////////////////////////////////////////////// //功 能:写数据到M1卡一块 //参数说明: addr[IN]:块地址

// pData[IN]:写入的数据,16字节 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// char PcdWrite(unsigned char data addr,unsigned char *pData) {

char data status;

unsigned int data unLen;

unsigned char data i,ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = PICC_WRITE; ucComMF522Buf[1] = addr;

CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

30

广西科技大学(筹) 基于单片机的RFID读写器的软件设计

if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; }

if (status == MI_OK) {

//memcpy(ucComMF522Buf, pData, 16); for (i=0; i<16; i++) {

ucComMF522Buf[i] = *(pData+i); }

CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen); if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A)) { status = MI_ERR; } }

return status; }

///////////////////////////////////////////////////////////////////// //功 能:命令卡片进入休眠状态 //返 回: 成功返回MI_OK

///////////////////////////////////////////////////////////////////// char PcdHalt(void) {

char data status;

unsigned int data unLen;

unsigned char data ucComMF522Buf[MAXRLEN];

ucComMF522Buf[0] = PICC_HALT; ucComMF522Buf[1] = 0;

CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

return MI_OK; }

///////////////////////////////////////////////////////////////////// //用MF522计算CRC16函数

/////////////////////////////////////////////////////////////////////

void CalulateCRC(unsigned char *pIndata,unsigned char data len,unsigned char *pOutData) {

31


RDID射频识别读写器 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:The best toy of mine(最好的玩具)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: