rc522可以读啥型号的ic卡芯片?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rc522可以读啥型号的ic卡芯片?相关的知识,希望对你有一定的参考价值。
参考技术A mifare(s50、s70、pro、UltraLight)、desfire、FM11RF08。。。。凡是符合ISO 14443A 协议的卡片均可以读。本回答被提问者采纳 参考技术B 这是什么意思? #包括
#定义RST 1 << 8 / / P0.7控制RC522复位,低电平有效复位/ *
******************* ************************************************** ************************************
**函数名称:RC522_RST() **功能:复位RC522
**调试说明:需要连接跳线JP5和RST。
********************************************** ************************************************** *********
* / INT RC522_RST(无效)
/ / PINSEL0 = 00000000; / /设置针连接器GPIO
IO0DIR = RST; / /设置RST控制端口作为输出
IO0SET = RST; / / P0.7置高
DelayNS(10); / /延迟
IO0CLR = RST; / /置低P0.7
DelayNS(3);
IO0SET = RST;
返回0;
/ *
*********** ************************************************** ***************
**函数名称:ReadRawRC()
**功能:读取MF522寄存器
**参数:地址[IN] :寄存器地址
**返回值:读取 ******************************** ************************************************** **********************
* / unsigned char型ReadRawRC(无符号字符型地址)
无符号字符ucAddr;
无符号字符ucResult = 0;
ucAddr =((地址<< 1)&的0x7E)| 0x80的;
ucResult = MSPI_SendData(ucAddr);
回报ucResult;
/ *
******************************* ************************************************** **********************
**函数名称:WriteRawRC()
**功能:写MF522寄存器
* *参数:地址[IN]:寄存器地址
**值[IN]:写入的值
**返回值:无
************* ************************************************** ****************************************
* /无效WriteRawRC(无符号字符地址,无符号字符值)
无符号字符ucAddr;
ucAddr =((地址<< 1)&0x7E的);
MSPI_SendData(ucAddr);
MSPI_SendData(值);
返回0; / *
******************************** ************************************************** *********************
**函数名称:SetBitMask()
**功能:设置MF522寄存器位
* *参数:第[IN]:寄存器地址
**口罩[IN]:设定值
**返回值:无
************* ************************************************** ****************************************
* /无效SetBitMask(无符号字符REG,unsigned char型面膜)
字符TMP = 0X0;
TMP = ReadRawRC(REG);
WriteRawRC(REG,tmp目录|面罩);
返回0;
/ *
*********** ************************************************** **************
**函数名称:ClearBitMask()
**功能:清晰MF522寄存器位
**参数:REG [IN] :寄存器地址
**口罩[IN]:清位值
**返回值:无
****************** ************************************************** ***********************************
* /无效ClearBitMask(unsigned char型REG,无符号字符型面罩)
字符TMP = 0X0;
tmp目录ReadRawRC(REG);
WriteRawRC(REG,TMP&面罩);
返回0; / *
*********** ************************************************** **************
**函数名称:PcdAntennaOn()
**功能:打开天线
**功能:每次开启时间或关闭还有的BR 1ms的**返回值发射机天线之间至少间隔:无
*********************** ************************************************** ******************************
* /无效PcdAntennaOn()
无符号烧焦我; I = ReadRawRC(TxControlReg);
SetBitMask(TxControlReg,×03)((I&0x03)的!);
返回0;
/ *
*********** ************************************************** **************
**函数名称:PcdAntennaOff()
**功能:关闭天线
**功能:每次开机时有至少或BR 1ms的**返回值发射天线之间的紧密间距:无
************************** ************************************************** ***************************
* /无效PcdAntennaOff()
ClearBitMask(TxControlReg, ×03);
/ *
*********************************** ************************************************** ******************
**函数名称:PcdComMF522()
**功能:通过沟通RC522和ISO14443卡 **功能说明:命令[IN]:RC522命令字
** pIndata [IN]:RC522通过数据 ** InLenByte [IN]:发送数据的字节长度
** pOutData [OUT]:接收到的返回数据卡
*** pOutLenBit [OUT]:返回数据位长度
**返回值:成功返回MI_OK
********* ************************************************** ********************************************
* /字符PcdComMF522(无符号字符命令,
无符号字符* pInData,
unsigned char型InLenByte,
无符号字符* pOutData,
无符号整型* pOutLenBit)
>字符状态= MI_ERR;
无符号字符IRQEN = 0×00;
无符号字符WAITFOR = 0×00;
无符号字符lastBits;
无符号字符N;
无符号整数I;
开关(命令)
情况PCD_AUTHENT:
IRQEN = 0X12;
WAITFOR = 0X10;
突破;
情况PCD_TRANSCEIVE:
IRQEN = 0x77;
WAITFOR = 0X30;
突破;
默认:
突破;
WriteRawRC(ComIEnReg,IRQEN | 0x80的);
ClearBitMask(ComIrqReg,如0x80);
WriteRawRC(CommandReg,PCD_IDLE);
SetBitMask(FIFOLevelReg,如0x80);
就(i = 0;我<InLenByte,我+ +)
WriteRawRC(FIFODataReg,pInData由[i]);
WriteRawRC(CommandReg,命令);
如果(命令== PCD_TRANSCEIVE)
SetBitMask(BitFramingReg,如0x80);
I = 600 ;/ /时钟频率调节,操作M1卡最大等待时间为25ms
N = ReadRawRC(ComIrqReg);
我 - ;
而((i! = 0)&&(N&0X01)&&(N&WAITFOR)!);
ClearBitMask(BitFramingReg,如0x80);!
如果(i! = 0)
如果((ReadRawRC(ErrorReg)及0X1B))
状态= MI_OK;
如果(N&IRQEN&0X01)
状态= MI_NOTAGERR;
如果(命令== PCD_TRANSCEIVE)
N = ReadRawRC(FIFOLevelReg);
lastBits = ReadRawRC(CONTROLREG)&0X07;
如果(lastBits)
* pOutLenBit =(N-1)* 8 + lastBits;
* pOutLenBit = N * 8;
如果(N == 0)
N = 1;
如果(N> MAXRLEN)
N = MAXRLEN;
就(i = 0;我<N;我+ +)
pOutData由[i] = ReadRawRC(FIFODataReg);
状态= MI_ERR;
BR />
SetBitMask(CONTROLREG,如0x80); / /停止定时器现在
WriteRawRC(CommandReg,PCD_IDLE);
返回状态;
2007-8-11 22:33:00 jianjian1981
级别:初中级
帖子:51
点数:1461
门派:无门无派
>报名:2楼,2006年4月19日---------------------------------------- ----------------------------------------
/ *
************************************************** ************************************************** ***
**函数名称:PcdRequest()
**功能:寻卡
**功能描述:req_code [IN]:寻卡方式
** 0x52 =感应区找到所有匹配的14443A标准卡
** 0X26 =请求无法进入休眠卡
** pTagType [OUT]:卡片类型代码
** 0x4400 = Mifare_UltraLight
* * 0x0400 = Mifare_One(S50)
** 0x0200 = Mifare_One(S70)
**为0x0800 = Mifare_Pro(倍)
** 0x4403 = Mifare_DESFire
**返回值:成功返回MI_OK
**************** ************************************************** *********
* /字符PcdRequest(无符号字符req_code为unsigned char * pTagType)
字符状态;
无符号整型UNLEN;
unsigned char型ucComMF522Buf [MAXRLEN]; ClearBitMask(Status2Reg,0X08);
WriteRawRC(BitFramingReg,0X07); SetBitMask(TxControlReg,0×03);
ucComMF522Buf [0] = req_code;状态= PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,与UNLEN);
如果((状态== MI_OK)&&(UNLEN == 0X10))
* pTagType = ucComMF522Buf [0];
(pTagType 1)= ucComMF522Buf [1];
状态= MI_ERR;
返回状态;
/ *
*********** ************************************************** **************
**函数名称:PcdAnticoll()
**功能:防碰撞功能
**说明:PSNR [OUT] :卡序列号,4字节
**返回值:成功返回MI_OK
************************** ************************************************** ***************************
* /字符PcdAnticoll(无符号字符* PSNR)
字符状态;
unsigned char型我,snr_check = 0;
无符号整型UNLEN;
unsigned char型ucComMF522Buf [MAXRLEN];
ClearBitMask(Status2Reg,0X08);
WriteRawRC(BitFramingReg,为0x00);
ClearBitMask(CollReg,如0x80);
ucComMF522Buf [0] = PICC_ANTICOLL1;
ucComMF522Buf [1] = 0X20;状态= PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,与UNLEN);如果(状态== MI_OK)
就(i = 0; I <4; i + +)
*(PSNR + I)= ucComMF522Buf [I] ;
snr_check ^ = ucComMF522Buf由[i];
如果(snr_check = ucComMF522Buf由[i]!)
状态= MI_ERR;
SetBitMask(CollReg,如0x80);
返回状态;
/ *
*********** ************************************************** **************
**函数名称:PcdSelect()
**功能:选中的卡
**功能:PSNR [IN]:卡序列号,4字节
**返回值:成功返回MI_OK
**************************** ************************************************** *************************
* /字符PcdSelect(无符号字符* PSNR)
字符状态;
unsigned char型我;
无符号整型UNLEN;
unsigned char型ucComMF522Buf [MAXRLEN];
ucComMF522Buf [0] = PICC_ANTICOLL1; ucComMF522Buf [1] = 16进制值为0x70;
ucComMF522Buf [6] = 0;
就(i = 0; I <4; i + +)
ucComMF522Buf [I + 2] = *(PSNR + I);
ucComMF522Buf [6] ^ = *(PSNR + I);
CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf [7]);
ClearBitMask(Status2Reg,0X08);状态= PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,与UNLEN);
如果((状态== MI_OK)&&(UNLEN == 0X18))
状态= MI_OK;
状态= MI_ERR;回报状态;
IC卡(智能卡)基础知识简介
IC卡(智能卡)基础知识简介
1、何为IC卡(智能卡)
IC卡是从磁条卡发展而来,它是将一个集成电路芯片封装在一个卡片中。与磁条卡相比,IC卡可靠性好,存储容量大,而且具有一定的“智能”。
IC卡大致分为存储器卡与“智能”卡两个最常用的大类,存储器卡是将一个EEPROM存储器芯片封装在卡片中,使卡片具有“记忆”功能。信息可以“写入(存)”卡内或从卡内“读出(取)”,原则上存取过程是不受限制的,整个存储空间也是开放的,对存储空间的管理是在卡片外部进行,这使得存储器卡缺乏良好的安全性。
之后存储器卡有了一些改进,主要是增加了密码验证功能对信息的存取过程进行控制,但仍然缺乏较好的存储管理功能。
而“智能”卡则不仅将EEPROM存储器封装进卡中,同时还将一个“微控制器(MCU:MicroController Unit)”集成到卡片中,这个MCU中具有对卡片上EEPROM存储器进行管理的一套软件,(这套软件通常被称为“卡片操作系统(COS:Card Operation System)”),从卡片外部发送数据到卡内都要经过MCU进行处理。也就是说,MCU及其搭载的软件(COS)控制着信息的存取过程,同时也管理着存储器的分配与使用。
综上所述,我们可以看出IC卡的实质是:信息的存取。而智能卡所谓的“智能”,就是对存取过程的“严格”控制与对存储器的“灵活”管理,目的是使存放在卡内的信息更安全且易于使用。
2、IC卡的相关规范
IC卡是一种很规范的产品,不论其外形,还是其内部芯片的电气特性,甚至于其应用方法都受一些较严格的协议控制。最基础最重要的一套规范是ISO/IEC 7816协议。这套协议不仅规定了IC卡的机械电气特性,而且还规定了IC卡(特别是智能卡)的应用方法(包括COS中很多数据结构)。
除了7816协议之外,在各个可能应用IC卡的特定领域内还有一些更为具体的协议,比如在中国,金融领域制定PBOC规范,交通管理体系,社会福利体系都有其特定的规范。这些协议规范都是建立在7816协议基础之上,且将7816协议加以具体化形成的。
当然,7816协议并不是独立存在(定义)的,它里面有很多概念引自于其它一些相关的协议规范。比如在7816协议中有一些数据的组织采用了“BER-TLV”,而有关“BER-TLV”这个概念的详细表述则是在IEC 8825 ASN.1协议中给出。由此可见7816协议并非完全独出心裁,能够采用规范的概念的场合就不自作主张。这使得各种协议规范形成一个严密的体系。
3、智能卡如何管理其存储器
一般的存储器卡不具备管理存储器的能力,这种管理要在卡外部进行。具有存储管理能力的卡只有“智能”卡。因此下面的讨论都是针对“智能”卡的。
简单的把存储器划分成一些块进行管理是最常用的一种办法,但此办法在实现的的时候不能过于简单,若要求用户记忆存储器中各个块的编号及属性未免太难于使用了。因此我们通常要在逻辑上更抽象的描述存储块。
试想在普通的桌面计算机上我们的大容量存储装置(硬盘之类)也是分块管理的,我们习惯称之为“按扇区方式”组织。但我们在通常使用过程中并不关心(不知道)“扇区”这样的概念,而只是看到一个个“文件”和“子目录”。所谓“文件”,其实就是保存在一系列存储块中的一组数据,而“子目录”就是将一组文件组织在一起的一种形式。“文件”与“子目录”使我们易于使用数据。
7816协议规定了智能卡采用“文件”的形式管理卡内存储器,它将卡内的文件分为3类:MF、DF和EF。
MF(Master File)相当于桌面系统中的“根目录”,DF(Dedicated File)相当于桌面系统中的“子目录”,而EF(Elementary File)则是一个个保存数据的具体文件了。
与桌面系统不同的是智能卡中DF级数(相当于目录层数的概念)通常是固定的,一般为1级(MF – DF),也有的为两级(MF – DF – SubDF)结构,但7816协议本身并不严格规定DF的级数。另外,7816协议对EF文件的类型有基本的定义,所以卡上的文件很多都是有一定格式的(如“定长记录”文件),并不是像桌面系统中的文件那样给出偏移量和长度就能操作的“透明”结构。
对于更高层的协议(如EMV、PBOC),对EF文件的类型有更具体的规定,这种规定往往为了适应本领域的应用。比如PBOC协议规定的“钱包文件”,就是为让智能卡适用于金融领域。但要注意这些具体的规定最终要“映射”到7816协议中的某个文件格式中。
4、智能卡如何对信息存取过程进行控制
对保存在卡中的文件不是随随便便就可以读出或修改的。每种智能卡都有一整套规则(也可理解为一个安全模型)限制对文件的存取操作。各个协议一般只规定了一个智能卡应该具备哪些算法(DES、3DES、RSA等),在一些特定领域里还会规定必须采用哪个算法才能保证安全。至于这些算法是以怎样的形式运用到安全模型中则没有过于严格的要求。
另外,卡与卡终端(能够对卡进行存取操作的设备)之间的通信在某些情况下要求是安全的,就是说信息在卡与卡终端之间传递时不应被第3方破解,也不应该失去其完整性。7816协议规定了“安全报文传递”规则,符合7816协议的智能卡都应支持这个规则。
有些卡(或对卡的某些操作)要求在特定的卡终端上进行,有时还要求持卡人授权进行,这些特殊情况要求卡与卡终端之间,卡与持卡人之间能够相互确认。卡与持卡人之间的认证是大家比较熟悉的,每个卡都有PIN码,就是做这个用的。
以上是关于rc522可以读啥型号的ic卡芯片?的主要内容,如果未能解决你的问题,请参考以下文章
国产13.56MHZ非接触式读写卡芯片--SI522替代CV520/RC522/WS1850/FM17520
基于Stm32的RFID-RC522模块的对RFID读写使用