教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

基于单片机的RFID读写器设计(9)

来源:网络收集 时间:2026-08-25
导读: unsigned char ReadRawRC(unsigned char data Address); void PcdAntennaOn(void); void delay_ns(unsigned int data ns) { unsigned int data i; for(i=0;i nop(); nop(); nop(); } } unsigned char SPIReadByte(v

unsigned char ReadRawRC(unsigned char data Address); void PcdAntennaOn(void);

void delay_ns(unsigned int data ns) {

unsigned int data i; for(i=0;i

nop(); nop(); nop(); } }

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 }

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 {

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); 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;

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);

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 …… 此处隐藏:2068字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于单片机的RFID读写器设计(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/606339.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)