0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >业界动态 > 非接触式智能卡门禁卡中的应用

非接触式智能卡门禁卡中的应用

2017-03-29
类别:业界动态
eye 186
文章创建人 拍明

       

    非接触式智能卡的软件设计分为三部分,分别为MF RC500的应用子程序的设计、主程序设计和读卡器其它电路的应用程序设计。

非接触式IC卡又称射频卡,由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和IC卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片在一定距离范围(通常为5—10cm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。

IC芯片(Integrated Circuit集成电路)是将大量的微电子元器件(晶体管、电阻、电容等)

3ac79f3df8dcd100cde2870b708b4710b9122f99.jpg

IC芯片 形成的集成电路放在一块塑基上,做成一块芯片。而今几乎所有看到的芯片,都可以叫做IC芯片。

集成电路(integrated circuit)是一种微型电子器件或部件。采用一定的工艺,把一个电路中所需的晶体管、二极管、电阻、电容和电感等元件及布线互连一起,制作在一小块或几小块半导体晶片或介质基片上,然后封装在一个管壳内,成为具有所需电路功能的微型结构;其中所有元件在结构上已组成一个整体,使电子元件向着微小型化、低功耗和高可靠性方面迈进了一大步。它在电路中用字母“IC”表示。集成电路发明者为杰克·基尔比(基于硅的集成电路)和罗伯特·诺伊思(基于锗的集成电路)。当今半导体工业大多数应用的是基于硅的集成电路。

单片机开发所使用的语言一般为汇编语言。汇编语言的优点是:代码生成效率高,程序运行速度快。其缺点是:程序的可读性和可移植性比较差,而且用汇编语言编写单片机应用系统程序的周期长,调试和排错比较困难。c语言是一种通用的计算机程序设计语言,在国际上十分流行,它既可用来编写计算机的系统程序,也可用来编写一般的应用程序,用它编写的程序,具有较好的可读性和可移植性。德国Keil软件公司的C51编译器可以直接对8051单片机的内部特殊功能寄存器I/O口进行操作,直接访问片内或片外存储器,还可以进行各种位操作,能够产生简洁、高效率的程序代码,在代码质量上可以与汇编语言相媲美。因此在本读卡器中使用C语言进行程序设计。

非接触式Ic卡读卡器主程序设计

复位应答操作将通知MF RC500在天线的有效工作范围(距离)内寻找Mifare卡片。如果有Mifare卡片存在,这一操作将分别与每一张Mifare卡片进行通信,读取MIFARE卡片上的卡片类型号TAGTYPE(两个字节),由MFRC500传递给MCU,进行识别处理。如果有多余一张的Mifare卡片在读卡器天线的有效工作范围(距离)内,必须执行防重叠操作,返回一张卡片的序列号,作为本次操作的对象。而其它卡片处于等待状态。在成功执行防重叠操作之后,或在任何时候当程序员想实际地与己知序列号的卡片进行通信时,必须执行选择卡片操作,以建立与所选卡片的通信,同时返回该卡片的size(容量)字节。为了保证对卡片操作的合法性,在对卡片进行操作之前必须在卡片和读卡器之间进行认证操作。读卡器对任何一张Mifare卡片进行任何操作都要经过上述几个步骤,之后就可以具体地对卡片进行相应的读、写等操作。

读卡器主程序框图

下面介绍主程序中调用的应用子程序:

MF Rc500应用子程序设计

单片机对Mifare非接触式智能卡的控制是通过MF RC500来实现的,MF RC500是单片机和MIFAR}接触式智能卡之间的通信载体。单片机对MF RC500的控制是以单片机发出MF RC500的指令来达到的,MF RC500收到指令之后执行这些指令。单片机对MFRC500的某一指令操作不是简单的一条指令所能完成的,必须有一个程序的序列来完成,其中有对MF RC500硬件内核寄存器的读、写以及根据读出的硬件内核寄存器的内容进行语言软件上的判断和设置。例如对卡片进行读(READ)操作,则程序员必须对MF RC500内部的RegChannelRedundancyRegInterruptEnRegInterruptRqlRegCommand等寄存器进行设置,同时还要对地址进行设置,并对每~个状态进行判别,最后在对读得的数据进行校验等等。就连一条最简单的停机(Halt)指令也必须首先对MF RC500内部的诸多寄存器进行设置。不同的指令将设置不同的MF RC500内部寄存器以及应有不同的编程语言程序序列””。下面介绍一下主程序中涉及到的子程序:

(1)寻卡子程序是由下面的函数实现的:

Char M500PiccRequest(unsigned char req_codeunsigned char 4atq)Request指令将通知读卡器在天线有效的工作范围(距离)内寻找Mifare卡片。如果有Mifare卡片存在,这一指令将与Mifare进行通信,读取卡片上的卡片类型号,传递给单片机,进行识别处理。程序员可以根据TAGTYPE来区别卡片的不同类型。对于Mifare卡片来说,返回卡片的TAGTYPE(2个字节)0004h

参数:req code52H表示当某一张卡片在天线的有效的工作范围(距离)内,Request指令在成功地读取这一张卡片之后,将一直等待卡片的使用者拿走这一张卡片,直到有新的一张卡片进入天线的有效工作范围(距离)内。26H表示连续地进行读卡操作,而不管这张卡片是否被拿走。只要有一张卡片进入天线的有效的工作范围(距离)内,Request指令将始终连续地进行读卡操作;

+atq:表示16位的ATQ字节,atq[O],低位,atq[1],高位。

(2)char M500PiccCascAnticoll(unsigned char select_codeunsigned char bcntunsigned char*sn):如果有多于一张卡片在读卡器天线的有效的工作范围(距离)内,必须使用AntiCollision指令,使读卡器能够在这一叠卡片中选择个别的一张卡片。此函数指令开始于一个AntiCollision loop(防重叠循环)。结束时,指令将提供给用户在这些卡片中选择的那张卡片的一个有效的40bit长的序列号SN(serial number)前四个字节是有意义的,第5个字节仅仅作为校验之用,而获得SN之后,~般地应在程序中对所接收到的SN进行校验,以确保数据的正确性1341I”J

select code:表示模式选择,标准的应为93H;

bcnt:表示读入多少个位,一般来说为32位,即四个有效字节:

*SU:表示输入或输出四个字节。其长度由bcnt控制。

f3)char M500PiccCascSelect(unsigned char select_codeunsigned char+snrunsigned char*sak):为了允许在Select指令以后对卡片能进行读、写等指令的操作,Select指令是很重要,必须首先被使用。被选择的卡片将给出其自己的存储器容量即己编码的一个BYTE(字节)

select code:表示模式选择93H(95H97H);

+snr:表示由微处理器控制RC500PICC发出四个字节的序号,然后等待卡片的回应。四个字节是在Anticoll操作中接收到的四个字节;

*sak:表示一个字节的应答位,共8位,其中bit6bit3可用。

(4)char M500PiccAuth(unsigned char auth—modeunsigned char+snrunsigned charkey sectorunsigned char block):在MCU将运算获得的数据,准备存储到卡片上的存储器之前,或MCU希望能读取Mifare卡片上的数据之前,程序员必须证明他的读、写请求操作是被允许的。这可以通过选择秘密地存储在MF RC500RAM中的密码集(KEYSET)中的一组密码来进行认证而实现。如果这一组密码与Mifare卡片上的密码

非接触式读卡器的软件设计设计匹配,则这一次的操作就被允许。unsigned char auth_mode:表示认证模式,当用60h代码时,在KEYADDR寄存器中只能设置AB=“l”,用于选择KEYA;当用61h代码时,在KEYADDR寄存器中只能设置AB=?0’,用于选择KEYB

+sIlr:表示(输入)需要进行认证的四个字节地址指针;

key :表示选择要认证的扇区( 15);_sector 0-

block:表示选择要认证的块地址(O64)

(5)char M500PiccAuthE2(unsigned char auth—modeunsigned char+snrunsigned charkey sectorunsigned char sector):对存储在EEPROM中的密码进行论证,要认证的密码必须事先存放在EEPROM的指定位置。

auth mode:表示认证模式,当用60h代码时,在KEYADDR寄存器中只能设置AB=“l”,用于选择KEYA;当用61h代码时,在KEYADDR寄存器中只能设置AB=?0’,用于选择KEYB

·sⅢ:表示(输入)需要进行认证的四个字节地址指针;

kez sector:表示选择要认证的扇区(015);

sector:表示选择要认证的扇区地址(¨15)

(6)char M500HostcodeKey(unsigned char+uncodedunsigned char+coded):这个功能是完成为了认证在的过程,完成将RC500密码缓冲器中主存密码的非编码信息(6字节)进行编码(12字节)

*uncoded:输入;

*coded:输出。

(7)char M500PiccAuthKey(unsigned char auth_modeunsigned char+snrunsigned char4keysunsigned char sector):这个功能完成直接对微处理器加载进行的密码进行认证,在执行这条命令前,M500HostCodeKey命令必须先执行。

auth—mode:表示认证模式,当用60h代码时,在KEYADDR寄存器中只能设置AB=“1”,用于选择KEYA;当用61h代码时,在KEYADDR寄存器中只能设置AB=?0’,用于选择KEYB[36J;

+Sill':表示(输入)需要进行认证的四个字节地址指针;

keys:表示己进行编码的12字节密码流:

sector:表示选择要认证的扇区地址(o~15)

(8)char M500PiccRead(unsigned char addrunsigned char+data):功能是完成读取卡片的指定地址的16个数据。存放到指定的单元。

Addr:表示块地址(0-63);

+data:表示输出数据指针。

(9)char M500PiccWrite(unsigned char addrunsigned char+data):功能是完成将数据写入指定的地址中。写入后等待卡片的应答。

Addr:表示块地址(0-63);

+data:表示输出数据指针。

蜂鸣器驱动程序设计

蜂呜器发出声音的条件是晶体管不断ON/OFF交互变化,也即是P3.5不断的输出“1”电位及?0’电位,如果P3.5输出一直是“1”或输出一直是?0电位,则蜂鸣器无法产生声音。程序设计除了要让蜂鸣器能够发出声音之外,还要让蜂鸣器能够连续发出不同音长及音调的声音,使蜂鸣器能够基于不同功能发出不同的报警信号。

 





责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯