MF RC522 射频识别参考程序注释

2019-04-16 17:16

By 曙光单片机科技 RC522程序读书笔记 详细注释

MF RC522 射频识别参考程序注释 串口读取的数据

//------------------------------------------

By 曙光单片机科技 RC522程序读书笔记 详细注释

ucAddr = ((Address<<1)&0x7E)|0x80;//变化成有效的地址形式,最

低位为0,最高位为1时候是,从MFRC522读出数据,参考39页

// 读SPI数据

//------------------------------------------ unsigned char SPIReadByte(void) {

unsigned char data SPICount; // Counter used to clock out the data

unsigned char data SPIData; SPIData = 0;

for (SPICount = 0; SPICount < 8; SPICount++) // Prepare to clock in the data to be read {

SPIData <<=1; // Rotate the data CLR_SPI_CK; nop();nop(); // Raise the clock to clock the data out of the MAX7456 if(STU_SPI_MISO) {

SPIData|=0x01; }

SET_SPI_CK; nop();nop(); // Drop the clock ready for the next bit

} // and loop back return (SPIData); // Finally return the read data }

//------------------------------------------ // 写SPI数据

//------------------------------------------

void SPIWriteByte(unsigned char data SPIData) {

unsigned char data SPICount; // Counter used to clock out the data

for (SPICount = 0; SPICount < 8; SPICount++) {

if (SPIData & 0x80) {

SET_SPI_MOSI; } else

By 曙光单片机科技 RC522程序读书笔记 详细注释

{

CLR_SPI_MOSI; } nop();nop();

CLR_SPI_CK;nop();nop(); SET_SPI_CK;nop();nop(); SPIData <<= 1; }

}

///////////////////////////////////////////////////////////////////// //功 能:寻卡

//参数说明: req_code[IN]:寻卡方式

// 0x52 = 寻感应区内所有符合14443A标准的卡 // 0x26 = 寻未进入休眠状态的卡 // pTagType[OUT]:卡片类型代码 // 0x4400 = Mifare_UltraLight // 0x0400 = Mifare_One(S50) // 0x0200 = Mifare_One(S70) // 0x0800 = Mifare_Pro(X) // 0x4403 = Mifare_DESFire //返 回: 成功返回MI_OK

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

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);//清除MRCrypto1on,要用软件清零 WriteRawRC(BitFramingReg,0x07);//startsend=0,rxalign=0,在FIFO中存放的位置,TXlastbit=7 SetBitMask(TxControlReg,0x03);//TX2rfen=1,TX1RFen=1,传递调制的13.56MHZ的载波信号 ucComMF522Buf[0] = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);//******************8 if ((status == MI_OK) && (unLen == 0x10)) { *pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1];

By 曙光单片机科技 RC522程序读书笔记 详细注释

} 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); //清除MRCrypto1on,要用软件清零 WriteRawRC(BitFramingReg,0x00); //表示最后一个字节所有位都发送 ClearBitMask(CollReg,0x80); //CollRegCollReg 0冲突结束后冲突位被置零

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

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); //CollRegCollReg 在106kbps良好的防冲突情况下该位置1 return status; }

By 曙光单片机科技 RC522程序读书笔记 详细注释

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

//参数说明: 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);//清零MFcryon

status

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

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]:密码

=


MF RC522 射频识别参考程序注释.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年用经济学智慧解读中国尔雅考试满分答案

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

马上注册会员

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