ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:1.15MB ,
资源ID:6264961      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6264961.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(1356M读卡器开发详解二RC522驱动程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

1356M读卡器开发详解二RC522驱动程序.docx

1、1356M读卡器开发详解二RC522驱动程序13.56M读卡器开发详解二1.硬件接口介绍根据上一篇的介绍,小编使用了RC522的SPI口通信方式和51单片机进行通信。硬件接口设计此处不再附图。只是将接口配置列写如下:sbitspi_cs=P16;sbitspi_ck=P15;sbitspi_mosi=P14;sbitspi_miso=P13;sbitspi_rst=P12;#defineSET_SPI_CSspi_cs=1#defineCLR_SPI_CSspi_cs=0#defineSET_SPI_CKspi_ck=1#defineCLR_SPI_CKspi_ck=0#defineSET_S

2、PI_MOSIspi_mosi=1#defineCLR_SPI_MOSIspi_mosi=0#defineSTU_SPI_MISOspi_miso#defineSET_RC522RSTspi_rst=1#defineCLR_RC522RSTspi_rst=02.51单片机模拟SPI通信函数voiddelay_ns(unsignedintdatans)unsignedintxdatai;for(i=0;inop();nop();nop();unsignedcharSPIReadByte(void)unsignedcharidataSPICount;/Counterusedtoclockoutth

3、edataunsignedcharidataSPIData;SPIData=0;for(SPICount=0;SPICount8;SPICount+)/PreparetoclockinthedatatobereadSPIData=1;/RotatethedataCLR_SPI_CK;nop();nop();/RaisetheclocktoclockthedataoutoftheMAX7456if(STU_SPI_MISO)SPIData|=0x01;SET_SPI_CK;nop();nop();/Droptheclockreadyforthenextbit/andloopbackreturn(

4、SPIData);/FinallyreturnthereaddatavoidSPIWriteByte(unsignedchardataSPIData)unsignedcharidataSPICount;/Counterusedtoclockoutthedatafor(SPICount=0;SPICount8;SPICount+)if(SPIData&0x80)SET_SPI_MOSI;elseCLR_SPI_MOSI;nop();nop();CLR_SPI_CK;nop();nop();SET_SPI_CK;nop();nop();SPIData=1;3.RC522芯片的寄存器、命令字等定义3

5、.1命令字等定义这些宏定义都是根据RC522数据手册编写的代码。3.2.RC522寄存器地址定义4.Rc522的14443协议代码驱动程序4.1寻卡程序charPcdRequest(unsignedchardatareq_code,unsignedchar*pTagType)charidatastatus;unsignedintidataunLen;unsignedcharxdataucComMF522BufMAXRLEN;ClearBitMask(Status2Reg,0x08);WriteRawRC(BitFramingReg,0x07);SetBitMask(TxControlReg,0

6、x03);ucComMF522Buf0=req_code;status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);if(status=MI_OK)&(unLen=0x10)*pTagType=ucComMF522Buf0;*(pTagType+1)=ucComMF522Buf1;elsestatus=MI_ERR;returnstatus;4.2防冲撞函数charPcdAnticoll(unsignedchar*pSnr)charxdatastatus;unsignedcharxdatai,snr_chec

7、k=0;unsignedintxdataunLen;unsignedcharxdataucComMF522BufMAXRLEN;ClearBitMask(Status2Reg,0x08);WriteRawRC(BitFramingReg,0x00);ClearBitMask(CollReg,0x80);ucComMF522Buf0=PICC_ANTICOLL1;ucComMF522Buf1=0x20;status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);if(status=MI_OK)for(i=0;i4

8、;i+)*(pSnr+i)=ucComMF522Bufi;snr_check=ucComMF522Bufi;if(snr_check!=ucComMF522Bufi)status=MI_ERR;SetBitMask(CollReg,0x80);returnstatus;4.3选定卡片charPcdSelect(unsignedchar*pSnr)charxdatastatus;unsignedcharxdatai;unsignedintxdataunLen;unsignedcharxdataucComMF522BufMAXRLEN;ucComMF522Buf0=PICC_ANTICOLL1;u

9、cComMF522Buf1=0x70;ucComMF522Buf6=0;for(i=0;i4;i+)ucComMF522Bufi+2=*(pSnr+i);ucComMF522Buf6=*(pSnr+i);CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf7);ClearBitMask(Status2Reg,0x08);status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);if(status=MI_OK)&(unLen=0x18)status=MI_OK;elsestatu

10、s=MI_ERR;returnstatus;4.4验证卡片密码charPcdAuthState(unsignedchardataauth_mode,unsignedchardataaddr,unsignedchar*pKey,unsignedchar*pSnr)charxdatastatus;unsignedintxdataunLen;unsignedcharxdatai,ucComMF522BufMAXRLEN;ucComMF522Buf0=auth_mode;ucComMF522Buf1=addr;for(i=0;i6;i+)ucComMF522Bufi+2=*(pKey+i);for(i

11、=0;i6;i+)ucComMF522Bufi+8=*(pSnr+i);/memcpy(&ucComMF522Buf2,pKey,6);/memcpy(&ucComMF522Buf8,pSnr,4);status=PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);if(status!=MI_OK)|(!(ReadRawRC(Status2Reg)&0x08)status=MI_ERR;returnstatus;4.5读取M1卡一块数据charPcdRead(unsignedchardataaddr,unsignedch

12、ar*pData)charidatastatus;unsignedintidataunLen;unsignedcharidatai,ucComMF522BufMAXRLEN;ucComMF522Buf0=PICC_READ;ucComMF522Buf1=addr;CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf2);status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);if(status=MI_OK)&(unLen=0x90)/memcpy(pData,ucComMF5

13、22Buf,16);for(i=0;i16;i+)*(pData+i)=ucComMF522Bufi;elsestatus=MI_ERR;returnstatus;4.6写数据到M1卡一块charPcdWrite(unsignedchardataaddr,unsignedchar*pData)charidatastatus;unsignedintidataunLen;unsignedcharidataucComMF522BufMAXRLEN;ucComMF522Buf0=PICC_WRITE;ucComMF522Buf1=addr;CalulateCRC(ucComMF522Buf,2,&uc

14、ComMF522Buf2);status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);if(status!=MI_OK)|(unLen!=4)|(ucComMF522Buf0&0x0F)!=0x0A)status=MI_ERR;if(status=MI_OK)memcpy(ucComMF522Buf,pData,16);/for(i=0;i16;i+)/ucComMF522Bufi=*(pData+i);/CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf16);statu

15、s=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);if(status!=MI_OK)|(unLen!=4)|(ucComMF522Buf0&0x0F)!=0x0A)status=MI_ERR;returnstatus;4.7命令卡进入休眠状态charPcdHalt(void)charidatastatus;unsignedintidataunLen;unsignedcharidataucComMF522BufMAXRLEN;ucComMF522Buf0=PICC_HALT;ucComMF522Buf1=0;C

16、alulateCRC(ucComMF522Buf,2,&ucComMF522Buf2);status=PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);returnMI_OK;4.8RC522计算CRC16voidCalulateCRC(unsignedchar*pIndata,unsignedchardatalen,unsignedchar*pOutData)unsignedcharidatai,n;ClearBitMask(DivIrqReg,0x04);WriteRawRC(CommandReg,PCD_ID

17、LE);SetBitMask(FIFOLevelReg,0x80);for(i=0;iWriteRawRC(FIFODataReg,*(pIndata+i);WriteRawRC(CommandReg,PCD_CALCCRC);i=0xFF;don=ReadRawRC(DivIrqReg);i-;while(i!=0)&!(n&0x04);pOutData0=ReadRawRC(CRCResultRegL);pOutData1=ReadRawRC(CRCResultRegM);4.9复位RC522charPcdReset(void)/PORTD|=(1RC522RST);SET_RC522RS

18、T;delay_ns(10);/PORTD&=(1RC522RST);CLR_RC522RST;delay_ns(10);/PORTD|=(1RC522RST);SET_RC522RST;delay_ns(10);WriteRawRC(CommandReg,PCD_RESETPHASE);delay_ns(10);WriteRawRC(ModeReg,0x3D);/MifareCRC0x6363WriteRawRC(TReloadRegL,30);WriteRawRC(TReloadRegH,0);WriteRawRC(TModeReg,0x8D);WriteRawRC(TPrescalerR

19、eg,0x3E);WriteRawRC(TxAutoReg,0x40);/returnMI_OK;4.10设置RC522工作方式charM500PcdConfigISOType(unsignedchardatatype)if(type=A)/ISO14443_AClearBitMask(Status2Reg,0x08);WriteRawRC(ModeReg,0x3D);/3FWriteRawRC(RxSelReg,0x86);/84WriteRawRC(RFCfgReg,0x7F);/4FWriteRawRC(TReloadRegL,30);/tmoLength);/TReloadVal=h6

20、a=tmoLength(dec)WriteRawRC(TReloadRegH,0);WriteRawRC(TModeReg,0x8D);WriteRawRC(TPrescalerReg,0x3E);delay_ns(1000);PcdAntennaOn();elsereturn-1;returnMI_OK;4.11读RC522寄存器unsignedcharReadRawRC(unsignedchardataAddress)unsignedcharxdataucAddr;unsignedcharxdataucResult=0;CLR_SPI_CS;ucAddr=(Address1)&0x7E)|

21、0x80;SPIWriteByte(ucAddr);ucResult=SPIReadByte();SET_SPI_CS;returnucResult;4.12写RC522寄存器voidWriteRawRC(unsignedchardataAddress,unsignedchardatavalue)unsignedcharxdataucAddr;CLR_SPI_CS;ucAddr=(Address1)&0x7E);SPIWriteByte(ucAddr);SPIWriteByte(value);SET_SPI_CS;4.13置和清RC522寄存器位4.14RC522与ISO14443卡通讯cha

22、rPcdComMF522(unsignedchardataCommand,unsignedchar*pInData,unsignedchardataInLenByte,unsignedchar*pOutData,unsignedint*pOutLenBit)chardatastatus=MI_ERR;unsignedchardatairqEn=0x00;unsignedchardatawaitFor=0x00;unsignedchardatalastBits;unsignedchardatan;unsignedintdatai;switch(Command)casePCD_AUTHENT:irqEn=0x12;waitFor=0x10;break;casePCD_TRANSCEIVE:irqEn=0x77;waitFor=0x30;break;default:break;WriteRawRC(ComIEnReg,irqEn|0x80);ClearBitMask(ComIrqReg,0x80);WriteRawRC(CommandReg,PCD_IDLE);SetBitMask(FIFOLevelReg,0x80);for(i=0;iW

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1