引言
MCF52233是飞思卡尔公司推出一款主要用于工业控制的32位芯片[1],具有稳定性好、可靠性高、接口丰富、存储空间大等优点,并且集成了网络模块,已经广泛应用于工业控制领域。射频识别是一种非接触式的自动识别技术,目前已广泛应用于物流、制造、公共信息服务等行业。
本系统通过射频模块读取二代身份证的序列号,然后对该序列号作如下处理:*,使用快速查询方法,查询MCF52233的Flash中已存储的序列号。若查询成功,电子门自动打开,授权刷卡人员进入,具有门禁的功能。第二,若门禁控制器处于脱机工作状态,则ID序列号暂存于Flash中,等联机后再把ID序列号和刷卡时间上传到服务器;若门禁控制器处于联机工作状态,则把ID序列号和刷卡时间直接通过网络或USB接口上传到服务器。
1系统总体架构
基于二代身份证的RFID门禁考勤系统(以下简称门禁考勤系统)由二代身份证ID采集器、门禁控制器、服务器管理软件和可控电子门组成,使用二代居民身份证作为电子标签,无须购买专门的射频卡,为用户节省成本,使用方便。
由于门禁控制器脱机工作时,能够独立识别ID序列号,因此要预先把ID序列号下载到门禁控制器的Flash中,此时需要使用ID采集器预先进行ID序列号的采集。门禁控制器具有以太网和USB接口,同时支持TypeA标准(Mifire1卡)和TypeB标准(二代身份证)射频卡,能根据射频卡上的信息自动识别持卡人是否被授权进入,从而控制电子门的开和闭;另外,它还能记录持卡人进出时间,具备考勤的功能。
2系统硬件组成
本系统选择80引脚的MCF52233作为主控芯片,主要是由于该芯片引脚功能比较丰富,同时包含网络模块、IIC模块(用于对时钟芯片PCF8563进行数据传输)和QSPI模块(用于对液晶进行控制)。该芯片虽不包含USB模块,但可使用飞思卡尔生产的M68HC908JB8的USB接口。本系统需实现的功能模块包括:GPIO、UART、QSPI、IIC、PIT、Flash及USB模块[1]。
刷卡记录包括刷卡时间和卡号,因此使用PCF8563时钟芯片保存系统时间,同时使用MCF52233内部的定时器(PIT)模块计时,以延长PCF8563使用的纽扣电池的寿命。
3系统软件设计
3.1MCU方软件设计
MCU方软件主要分为两大部分:身份证信息采集软件和门禁控制器软件。
身份证信息采集软件的主要功能:对ID序列号进行采集,并上传到服务器方的数据库中。
门禁控制器软件的主要功能:ID索引表和序列号的写入功能、配置参数信息的写入功能、刷卡识别并开门功能和刷卡信息上传功能。
为了能够在主控芯片的Flash中快速查询到ID序列号,本系统对Flash区域进行了重新划分(下文介绍),其中两区域分别用于存储ID索引表和ID序列号。身份证信息的写入程序主要是将ID索引表和ID序列号两部分信息写入到门禁控制器中。该信息的写入都要通过握手信号,以确保正确的信息写入到MCF52233的Flash中。下面主要介绍ID序列号写入Flash的过程。
配置参数信息的写入流程与ID序列号的写入流程一致,这里不再描述。
刷卡识别并开门程序主要实现以下功能:将当前刷卡的ID序列号读出;检查该ID序列号的有效性;若ID序列号有效,则开电子门并将该刷卡记录存入到Flash中。检查身份证ID有效性的程序主要包括三部分函数:总的查询函数、根据特征值(由ID序列号累加求和取模得到)到ID索引表中取得分组首末地址函数和在分组中查询ID序列号函数。
刷卡信息上传程序主要是将刷卡的信息上传到服务器方入库,以备查询使用。上传的信息主要包含刷卡时间和ID序列号。如果每刷一条信息就写入Flash,则必定对Flash要进行频繁的擦写,这样会降低系统的效率。为了提高系统效率,采用临时缓冲区的方法,只有当刷卡记录满一页,才写入到Flash中。
3.2服务器方软件设计
服务器方软件主要实现以下的功能:ID序列号采集功能,对门禁控制器的操作,人员信息和刷卡信息的数据库操作功能。
ID序列号采集功能是采集ID序列号并保存到服务器的数据库上。
门禁控制器的操作主要有以下几个方面:门禁控制器系统时间的设置、人员信息的下载、配置参数的下载和刷卡记录的上传等。
人员信息的数据库操作主要包括:人员信息的添加、修改、查询和删除操作。
刷卡信息的数据库操作主要包括:刷卡记录的查询和删除操作。
3.3服务器方数据库设计
本系统的服务器方数据库主要包含以下两个表:人员信息表和刷卡信息表。
人员信息表用于保存人员的基本信息,必需包含字段:人员编号、姓名、性别、ID序列号,其中人员编号是主键,用于*标识每条记录。各字段的长度如下:人员编号10字节,姓名10字节,性别1字节,ID序列号16字节。
刷卡信息表用于保存刷卡信息。刷卡记录通过以下方式获得:服务器读取门禁控制器中的刷卡信息(仅包含ID序列号和刷卡时间),根据ID序列号查询人员信息表,获得人员编号和姓名,然后同刷卡时间一并存入到刷卡信息表中。刷卡信息表包含以下字段:人员编号10字节,姓名10字节,刷卡时间(日期型)。
4设计要点的讨论
4.1Flash分配设计
MCF52233是ColdFire的一款芯片,其可寻址4GB的地址空间,地址范围为0x00000000~0xFFFFFFFF。该芯片具有256KB的Flash和32KB的SRAM,其Flash存储器的地址范围是0x00000000~0x0003FFFF[3]。本系统的Flash存储器划分为5大部分:程序区域、门禁控制器配置区域、ID索引表区域、ID序列号区域和刷卡记录信息区域,。
ID索引表每项为8字节,分别存放每组的起始地址和结束地址;每个ID序列号为16个字节,存放8字节的ID号和预留8字节;每条刷卡记录信息为16个字节,存放8字节的刷卡时间和8字节的ID序列号。
4.2ID序列号查询过程
为了能够在MCF52233的Flash中快速查找到匹配的ID序列号,作者对几种常用的查询方法进行比较,发现异或和累加和取模的查询效率比较高。通过软件模拟大量数据,计算标准差偏移程度,zui终得到累加和取模的效率更高。因此,本系统采用累加和取模的方法得到该ID序列号的特征值,在Flash中把ID序列号分为两部分存储:ID索引表和ID序列号表。ID索引表中存储的是模相同的ID序列号在Flash中的起始地址和结束地址。
ID序列号查询过程调用以下函数:
uint8SelectID(uint8personID[],uint8nlength)
其功能为:根据给定的ID序列号,查询Flash的ID序列号表中是否存在该ID序列号。参数personID为要查询的ID序列号数组;nlength为ID序列号的字节数。
SelectID内部又调用以下两个函数:
(1)uint8FetchIDGroupAddressFromIDIndex(uint8nIndexValue,uint32*pHeadAddr,uint32*pEndAddr)。
其功能为:根据ID序列号的特征值取得该ID序列号所在分组的首末地址。参数nIndexValue为ID序列号的特征值;pHeadAddr为ID序列号所在分组的首地址;pEndAddr为ID序列号所在分组的末地址。
(2)uint8SelectIDFromIDGroup(uint8*pHeadlAddr,uint8*pEndAddr,uint8personID[],uint8nLength)。
其功能为在ID序列号分组中查询是否存在指定的ID序列号。参数pHeadlAddr为ID分组的首地址;pEndAddr为ID分组的末地址;personID为要查询的ID序列号的数组;length为ID序列号的字节数。
5结束语
本系统采用全国统一发行的第二代身份证作为RFID识别的电子标签,集成了以太网和USB接口,具有“脱机”和“联机”两种工作状态,同时具有门禁和考勤的功能。本系统经半年的实际使用表明能够在现场、稳定地运行。本文对局域网内的嵌入式系统应用、现有只读卡系统的升级换代以及二代身份证的应用扩展具有参考价值。
参考文献
[1]王宜怀.基于32位ColdFire构建嵌入式系统[M].北京:电子工业出版社,2009.
[2]孙鹏.基于嵌入式以太网的RFID系统应用技术研究[D].苏州:苏州大学出版社,2008.
[3]FreescaleMCF52233MCF52233RM[Z].2004.http://www.freescale.com.