概述射频识别(RFID,Radio Frequency Identification)是一种非接触式的自动识别技术,通过射频信号在空间上的耦合实现非接触式数据传输,达到自动识别对象并获取相关信息的目的。
目前市场上有大量的、面向众多领域的RFID应用系统。在开发这些RFID系统时,若因不同的应用需求和应用环境,而将每个RFID系统孤立看待,无疑会增加开发成本和延长开发周期。因此,文中基于构件化的封装设计思想设计了一个RFID系统通用的软硬件平台,对软硬件进行封装,提高软硬件的可重用性和可移植性,在保证系统性能的前提下,避免重复劳动,缩短开发周期。
1总体设计方案
1.1 RFID射频识别系统一般模型
RFID射频识别系统因具体应用不同其组成会有所不同,但是通过分析它们的共性可以建立一个一般的模型,如图1所示。该模型主要由电子标签、射频识别装置即读卡器、PC主机组成。电子标签与射频识别装置之间通过耦合元件实现射频信号的空间耦合。在耦合通道内,根据时序关系,实现能量的传递、数据的交换。
一个通用的RFID系统开发平台是指:此平台以RFID射频识别系统一般模型为基础,提供开发RFID射频识别系统通用的硬件和软件构件。在设计思路上须遵循构件化设计、可二次开发性和平台化设计原则。
1.2 RFID通用开发平台硬件构件模型
在一般模型中,电子标签根据自身是否带电源可分为有源标签、无源标签,根据存储方式分为只读标签、读写标签,根据工作距离分为密耦合型标签识别距离1cm内、近耦合型标签识别距离10 cm内、邻近型标签识别距离100 cm内。不同的电子标签识别技术不一样。
文中的通用开发平台主要面向无源的近耦合型RFID应用,参照ISO/IEC 14443协议操作13.56 MHz读写标签(Type A卡)或者只读标签(Type B卡),并配备各种常用接口和外设如通用I/O口、网络、串口、SPI、USB、LCD、语音以适应不同的应用。RFID通用开发平台硬件构件模型如图2所示。在单芯片解决方案中,通常MCU内部包含有通用I/O口和一些内置的功能模块如串口、网络等,因此相对于核心构件MCU而言,通用I/O口、SPI、串口、网络是MCU内部构件,LCD、语音、USB、射频可以看成是其外设构件。
1.3 RFID通用开发平台软件构件模型
RFID通用开发平台软件设计分为两大部分:
底层软件构件层和高层构件层。其中底层软件构件层针对硬件构件编程,是硬件驱动程序的封装,高层构件层根据用户的实际应用需求调用底层软件构件层封装好的功能函数。通用平台的软件构件层次模型如图3所示。将通用I/O口的驱动封装为GPIO构件,各内置功能模块的驱动程序封装为功能构件,合称为内部软件构件。外设的驱动程序封装为外设软件构件。
原则上开发基于此平台的各种应用只需要设计PC端的应用软件,其余软、硬件构件不需要进行改动,这就是RFID通用开发平台的构件化封装设计的思想。高层构件层提供了访问各个构件的网络命令,PC端主机操作网络、射频、LCD、USB、语音等构件时,只需发送相应的网络命令即可。
2 RFID通用开发平台设计
2.1硬件设计
硬件构件模型中首先是主控制器MCU的选型。由于RFID应用广泛,很多场合要求控制器有较快的处理速度,有多种控制模块如A/D控制模块、CAN总线模块、以太网控制模块等。综合分析,文中选择了飞思卡尔单芯片解决方案MCF52235处理器。该处理器采用Coldfire V2内核和精简指令集(RISC),频率为60 MHz,通过设置锁相环(PLL),MCF52235能够稳定工作在80 MHz.内部集成了10/100M快速以太网控制器(FEC)、以太网物理收发器(EPHY)等模块,还有UART,I2C、QSPI、PWM、快速ADC等模块,实现了单芯片解决方案。
由于MCF52235处理器中集成的以太网模块已经包括了以太网控制器和物理层收发器,因此网络硬件构件仅需添加少量的元件便可。MCF52235处理器的PHY_RXP、PHY_RXN引脚用于接收数据,PHY_TXP、PHY_TXN引脚用于发送数据。这两对收、发引脚分别接50Ω的上拉电阻。SPDLED引脚接网速LED灯指示当前的连接速度是10 Mbps还是100 Mbps,LNKLED引脚接的LED灯则指示当前是否已经与另一个网络设备连接。如果RFID射频系统中读卡器终端并不多,可以不采用网络而是通过USB接口与PC机进行通信。USB构件采用飞思卡尔的单芯片MC9S12UF32,它提供了高速USB2.0接口,即插即用。此处使用USB接口不是为了获得更高的速度而是为了使用方便,所以选择通过MCF52235的一个串口与UF32通信。
射频芯片选用的是飞利浦RC531芯片,工作频率为13.56 MHz,在不外加功率放大器时读写距离可达10 cm,它通过SPI接口与MCF52235通信。
LCD构件采用耀宇科技的YM12864图形点阵液晶。该液晶显示器可以显示4行、每行8个汉字或者16个字母。它有两种常用的连接方式:并行和串行。并行连接需要11根引脚线,串行连接仅用3根引脚线,因此与MCU的连接采用串行的连接方式。另外还需一个引脚控制背光灯电源的正极LEDA开关。语音模块和LCD模块的功能一样,都是为了增强人机交互,它采用上海奔流公司的BMP5008语音芯片。状态指示灯用于观察系统的运行状态和用户的操作,通过GPIO口连接,几乎所有的MCF52235引脚都可以作为GPIO引脚。主控制器MCF52235与各模块的引脚连接如图4所示。
2.2软件设计
根据平台的软件构件层次模型,先将各个模块的驱动程序封装成构件。底层软件构件是与硬件直接打交道的,它由头文件和源程序文件两部分组成。编程思想是分析构件的共性和个性,抽取出构件的属性和对外接口函,用户使用该构件时只需了解其接口函数,而不必去了解内部具体如何实现。
头文件部分给出构件属性的宏定义和对外接口函数的原型说明,源程序部分是函数的实现。
以太网构件主要包括以太网物理收发器(EPHY)和快速以太网控制器(FEC)的初始化、TCP/IP协议栈实现。它的接口函数原型说明如下:
//==================================
uint8 hw_ephy_init(uint16 sysclk,uint8 ratemode,
uint8 dupmode,uint8 autoneg);//EPHY初始化
void hw_fec_init(uint8 mac_addr_fec[6];//FEC初始化
int8 hw_fec_sendframe(uint8 ch[],uint8destAdd[6],uint8 srcAdd[6],uint16 lenType,uint16len);//发送单个以太网帧
uint8 hw_fec_receiveframe(uint8 ch[],uint16 *len);//接收单个以太网帧
uint hw_icmp_handle(PACKET p);//处理接收到的ICMP包,响应ping请求
int hw_udp_send(unshort fport,unshort lport,
PACKET p);//发送UDP包
//==================================
RC531射频模块与MCF52235通信严格按照串行通信时序要求。RC531与ISO/IEC 14443 TypeA和Type B卡通信,则按照A、B卡调制和编码的方式设置相关的寄存器,并根据ISO/IEC 14443协议来设计软件即可。读卡器与A、B卡之间的通信是按照应答方式来进行的,非接触式的卡有很多工作状态,各个状态的转化可通过读卡器向卡发送一系列命令完成。射频构件的接口函数说明如下所示:
// ==操作Type A卡的部分主要函数======
void pcdinit();//R初始化
char pcdreset();//RC531复位
char pcdrequest(uint8 req_code);//寻卡
char pcdanticoll(uint8 *snr);//防碰撞
char pcdselect(uint8 *snr);//选定一张卡
// =========操作Type B卡的函数========
void pcdinitB();//B卡初始化
char pcdrequestB(uint8 *pupi);//寻B卡
char pcdattrib(uint8 *pupi);//发送attrib命令
char pcdhaltB(uint8 *pupi);// B卡挂起
char pcdgetUID(uint8 *snr,uint8 *len);//获得B卡的ID
//==================================
MCF52235与LCD构件的通信同样采用串行方式。串行通信的一次数据分3个字节传输。第一个字节数据格式为11111AB0,表示串行控制,A是选择数据方向,1表示LCD到MCF52235,0表示MCF52235到LCD. B是选择数据类型,1表示数据为显示数据,0表示数据为控制命令。第二个字节格式为DDDD0000,表示8位数据的高4位。第三个字节格式为0000DDDD表示8位数据的低4位。
LCD 构件接口函数说明如下所示:
//==================================
void lcd_init();//初始化
void lcd_display (const char* buf, int line);//在第line 行显示buf,line》=0 && lineRFID 应用
{
uint8 block; //总的金额数
float fsub; //每次刷卡扣除的金额数量
uint8 *pass;
};
struct record_info //记录卡信息
{ //此块引用计数,0 表示没有请求读这块数据
uint8 ref; //引用计数
uint8 block; //块号
uint8 password[6]; //块的访问密码
};
struct ip_arrays_A //读Type A 卡信息
{ ip_addr ipaddress; //IP 地址
int port; // UDP 端口号
uint8 block [num_of_rf_structs]; //这个UDP连接要读取的所有块
};
struct net_cmd //发送到板子的命令
{ uint8 lenth; //请求数据长度
uint8 cmdope; //操作码
uint8 data[1]; //数据
};//=================================
3 RFID 通用开发平台应用
基于此平台文中开发了学生机房上机刷卡系统。 在每个机房安装一台读卡器,PC 主机的数据库中存储了每个机房的课表、任课教师和学生的信息。 学生持卡到各个机房的读卡器上刷卡,读卡器将读到的信息通过网络传输到PC 主机上,统计学生人数和上、下课时间等情况, 相关信息显示在LCD 上并进行语音提示。 PC 端软件实现了网络通信功能和学生机房上机刷卡管理系统。 网络通信通过CManagerDlg:: m_skInfo 和CManagerDlg::
m_skCmd 这2 个sokcet 接口完成。 学生机房上机刷卡管理系统开发软件采用VC++2012 和SQLServer 2012 关系型数据库管理系统。 学生机房上机刷卡管理系统界面如图6 所示。
4 结语
现有RFID 系统开发基本是根据具体应用需求进行单独设计的。 而这些不同的应用系统在软、硬件部分具有很大的重复性,为提高软、硬件的可重用性,文中通过分析RFID 射频识别系统一般模型,提出了一种基于MCF52235 的RFID 通用开发平台软、硬件构件化设计方案,设计了集成多种接口的具备通用功能的RFID 开发平台,并将该平台应用于学生机房上机管理系统中。 实践证明它为RFID 系统开发提供了一个快速、通用的软、硬件模型。
概述射频识别(RFID,Radio Frequency Identification)是一种非接触式的自动识别技术,通过射频信号在空间上的耦合实现非接触式数据传输,达到自动识别对象并获取相关信息的目的。
目前市场上有大量的、面向众多领域的RFID应用系统。在开发这些RFID系统时,若因不同的应用需求和应用环境,而将每个RFID系统孤立看待,无疑会增加开发成本和延长开发周期。因此,文中基于构件化的封装设计思想设计了一个RFID系统通用的软硬件平台,对软硬件进行封装,提高软硬件的可重用性和可移植性,在保证系统性能的前提下,避免重复劳动,缩短开发周期。
1总体设计方案
1.1 RFID射频识别系统一般模型
RFID射频识别系统因具体应用不同其组成会有所不同,但是通过分析它们的共性可以建立一个一般的模型,如图1所示。该模型主要由电子标签、射频识别装置即读卡器、PC主机组成。电子标签与射频识别装置之间通过耦合元件实现射频信号的空间耦合。在耦合通道内,根据时序关系,实现能量的传递、数据的交换。
一个通用的RFID系统开发平台是指:此平台以RFID射频识别系统一般模型为基础,提供开发RFID射频识别系统通用的硬件和软件构件。在设计思路上须遵循构件化设计、可二次开发性和平台化设计原则。
1.2 RFID通用开发平台硬件构件模型
在一般模型中,电子标签根据自身是否带电源可分为有源标签、无源标签,根据存储方式分为只读标签、读写标签,根据工作距离分为密耦合型标签识别距离1cm内、近耦合型标签识别距离10 cm内、邻近型标签识别距离100 cm内。不同的电子标签识别技术不一样。
文中的通用开发平台主要面向无源的近耦合型RFID应用,参照ISO/IEC 14443协议操作13.56 MHz读写标签(Type A卡)或者只读标签(Type B卡),并配备各种常用接口和外设如通用I/O口、网络、串口、SPI、USB、LCD、语音以适应不同的应用。RFID通用开发平台硬件构件模型如图2所示。在单芯片解决方案中,通常MCU内部包含有通用I/O口和一些内置的功能模块如串口、网络等,因此相对于核心构件MCU而言,通用I/O口、SPI、串口、网络是MCU内部构件,LCD、语音、USB、射频可以看成是其外设构件。
1.3 RFID通用开发平台软件构件模型
RFID通用开发平台软件设计分为两大部分:
底层软件构件层和高层构件层。其中底层软件构件层针对硬件构件编程,是硬件驱动程序的封装,高层构件层根据用户的实际应用需求调用底层软件构件层封装好的功能函数。通用平台的软件构件层次模型如图3所示。将通用I/O口的驱动封装为GPIO构件,各内置功能模块的驱动程序封装为功能构件,合称为内部软件构件。外设的驱动程序封装为外设软件构件。
原则上开发基于此平台的各种应用只需要设计PC端的应用软件,其余软、硬件构件不需要进行改动,这就是RFID通用开发平台的构件化封装设计的思想。高层构件层提供了访问各个构件的网络命令,PC端主机操作网络、射频、LCD、USB、语音等构件时,只需发送相应的网络命令即可。
2 RFID通用开发平台设计
2.1硬件设计
硬件构件模型中首先是主控制器MCU的选型。由于RFID应用广泛,很多场合要求控制器有较快的处理速度,有多种控制模块如A/D控制模块、CAN总线模块、以太网控制模块等。综合分析,文中选择了飞思卡尔单芯片解决方案MCF52235处理器。该处理器采用Coldfire V2内核和精简指令集(RISC),频率为60 MHz,通过设置锁相环(PLL),MCF52235能够稳定工作在80 MHz.内部集成了10/100M快速以太网控制器(FEC)、以太网物理收发器(EPHY)等模块,还有UART,I2C、QSPI、PWM、快速ADC等模块,实现了单芯片解决方案。
由于MCF52235处理器中集成的以太网模块已经包括了以太网控制器和物理层收发器,因此网络硬件构件仅需添加少量的元件便可。MCF52235处理器的PHY_RXP、PHY_RXN引脚用于接收数据,PHY_TXP、PHY_TXN引脚用于发送数据。这两对收、发引脚分别接50Ω的上拉电阻。SPDLED引脚接网速LED灯指示当前的连接速度是10 Mbps还是100 Mbps,LNKLED引脚接的LED灯则指示当前是否已经与另一个网络设备连接。如果RFID射频系统中读卡器终端并不多,可以不采用网络而是通过USB接口与PC机进行通信。USB构件采用飞思卡尔的单芯片MC9S12UF32,它提供了高速USB2.0接口,即插即用。此处使用USB接口不是为了获得更高的速度而是为了使用方便,所以选择通过MCF52235的一个串口与UF32通信。
射频芯片选用的是飞利浦RC531芯片,工作频率为13.56 MHz,在不外加功率放大器时读写距离可达10 cm,它通过SPI接口与MCF52235通信。
LCD构件采用耀宇科技的YM12864图形点阵液晶。该液晶显示器可以显示4行、每行8个汉字或者16个字母。它有两种常用的连接方式:并行和串行。并行连接需要11根引脚线,串行连接仅用3根引脚线,因此与MCU的连接采用串行的连接方式。另外还需一个引脚控制背光灯电源的正极LEDA开关。语音模块和LCD模块的功能一样,都是为了增强人机交互,它采用上海奔流公司的BMP5008语音芯片。状态指示灯用于观察系统的运行状态和用户的操作,通过GPIO口连接,几乎所有的MCF52235引脚都可以作为GPIO引脚。主控制器MCF52235与各模块的引脚连接如图4所示。
2.2软件设计
根据平台的软件构件层次模型,先将各个模块的驱动程序封装成构件。底层软件构件是与硬件直接打交道的,它由头文件和源程序文件两部分组成。编程思想是分析构件的共性和个性,抽取出构件的属性和对外接口函,用户使用该构件时只需了解其接口函数,而不必去了解内部具体如何实现。
头文件部分给出构件属性的宏定义和对外接口函数的原型说明,源程序部分是函数的实现。
以太网构件主要包括以太网物理收发器(EPHY)和快速以太网控制器(FEC)的初始化、TCP/IP协议栈实现。它的接口函数原型说明如下:
//==================================
uint8 hw_ephy_init(uint16 sysclk,uint8 ratemode,
uint8 dupmode,uint8 autoneg);//EPHY初始化
void hw_fec_init(uint8 mac_addr_fec[6];//FEC初始化
int8 hw_fec_sendframe(uint8 ch[],uint8destAdd[6],uint8 srcAdd[6],uint16 lenType,uint16len);//发送单个以太网帧
uint8 hw_fec_receiveframe(uint8 ch[],uint16 *len);//接收单个以太网帧
uint hw_icmp_handle(PACKET p);//处理接收到的ICMP包,响应ping请求
int hw_udp_send(unshort fport,unshort lport,
PACKET p);//发送UDP包
//==================================
RC531射频模块与MCF52235通信严格按照串行通信时序要求。RC531与ISO/IEC 14443 TypeA和Type B卡通信,则按照A、B卡调制和编码的方式设置相关的寄存器,并根据ISO/IEC 14443协议来设计软件即可。读卡器与A、B卡之间的通信是按照应答方式来进行的,非接触式的卡有很多工作状态,各个状态的转化可通过读卡器向卡发送一系列命令完成。射频构件的接口函数说明如下所示:
// ==操作Type A卡的部分主要函数======
void pcdinit();//R初始化
char pcdreset();//RC531复位
char pcdrequest(uint8 req_code);//寻卡
char pcdanticoll(uint8 *snr);//防碰撞
char pcdselect(uint8 *snr);//选定一张卡
// =========操作Type B卡的函数========
void pcdinitB();//B卡初始化
char pcdrequestB(uint8 *pupi);//寻B卡
char pcdattrib(uint8 *pupi);//发送attrib命令
char pcdhaltB(uint8 *pupi);// B卡挂起
char pcdgetUID(uint8 *snr,uint8 *len);//获得B卡的ID
//==================================
MCF52235与LCD构件的通信同样采用串行方式。串行通信的一次数据分3个字节传输。第一个字节数据格式为11111AB0,表示串行控制,A是选择数据方向,1表示LCD到MCF52235,0表示MCF52235到LCD. B是选择数据类型,1表示数据为显示数据,0表示数据为控制命令。第二个字节格式为DDDD0000,表示8位数据的高4位。第三个字节格式为0000DDDD表示8位数据的低4位。
LCD 构件接口函数说明如下所示:
//==================================
void lcd_init();//初始化
void lcd_display (const char* buf, int line);//在第line 行显示buf,line》=0 && lineRFID 应用
{
uint8 block; //总的金额数
float fsub; //每次刷卡扣除的金额数量
uint8 *pass;
};
struct record_info //记录卡信息
{ //此块引用计数,0 表示没有请求读这块数据
uint8 ref; //引用计数
uint8 block; //块号
uint8 password[6]; //块的访问密码
};
struct ip_arrays_A //读Type A 卡信息
{ ip_addr ipaddress; //IP 地址
int port; // UDP 端口号
uint8 block [num_of_rf_structs]; //这个UDP连接要读取的所有块
};
struct net_cmd //发送到板子的命令
{ uint8 lenth; //请求数据长度
uint8 cmdope; //操作码
uint8 data[1]; //数据
};//=================================
3 RFID 通用开发平台应用
基于此平台文中开发了学生机房上机刷卡系统。 在每个机房安装一台读卡器,PC 主机的数据库中存储了每个机房的课表、任课教师和学生的信息。 学生持卡到各个机房的读卡器上刷卡,读卡器将读到的信息通过网络传输到PC 主机上,统计学生人数和上、下课时间等情况, 相关信息显示在LCD 上并进行语音提示。 PC 端软件实现了网络通信功能和学生机房上机刷卡管理系统。 网络通信通过CManagerDlg:: m_skInfo 和CManagerDlg::
m_skCmd 这2 个sokcet 接口完成。 学生机房上机刷卡管理系统开发软件采用VC++2012 和SQLServer 2012 关系型数据库管理系统。 学生机房上机刷卡管理系统界面如图6 所示。
4 结语
现有RFID 系统开发基本是根据具体应用需求进行单独设计的。 而这些不同的应用系统在软、硬件部分具有很大的重复性,为提高软、硬件的可重用性,文中通过分析RFID 射频识别系统一般模型,提出了一种基于MCF52235 的RFID 通用开发平台软、硬件构件化设计方案,设计了集成多种接口的具备通用功能的RFID 开发平台,并将该平台应用于学生机房上机管理系统中。 实践证明它为RFID 系统开发提供了一个快速、通用的软、硬件模型。
举报