摘要:RFID 應(yīng)用系統(tǒng)種類繁多,開發(fā)工作上具有一定的重復(fù)性,為此通過分析RFID 系統(tǒng)的一般模型,提出了基于構(gòu)件化封裝設(shè)計(jì)思想的RFID 系統(tǒng)通用開發(fā)平臺軟、硬件模型,利用飛思卡爾公司的32 位ColdFire 系列微控制器MCF52235 設(shè)計(jì)了RFID 通用開發(fā)平臺,給出了軟、硬件構(gòu)件設(shè)計(jì)方案,并在此平臺上成功進(jìn)行了二次開發(fā),實(shí)現(xiàn)了學(xué)生機(jī)房上機(jī)刷卡系統(tǒng)。 實(shí)踐結(jié)果表明,這種構(gòu)件化的平臺開發(fā)方法有效地提高了軟硬件的可重用性和可移植性,使用該RFID 系統(tǒng)通用開發(fā)平臺進(jìn)行各種二次應(yīng)用開發(fā)縮短了開發(fā)周期。
概述
射頻識別(RFID,Radio Frequency Identification)是一種非接觸式的自動識別技術(shù),通過射頻信號在空間上的耦合實(shí)現(xiàn)非接觸式數(shù)據(jù)傳輸,達(dá)到自動識別對象并獲取相關(guān)信息的目的。 目前市場上有大量的、面向眾多領(lǐng)域的RFID 應(yīng)用系統(tǒng)。 在開發(fā)這些RFID 系統(tǒng)時(shí), 若因不同的應(yīng)用需求和應(yīng)用環(huán)境,而將每個(gè)RFID 系統(tǒng)孤立看待,無疑會增加開發(fā)成本和延長開發(fā)周期。 因此,文中基于構(gòu)件化的封裝設(shè)計(jì)思想設(shè)計(jì)了一個(gè)RFID 系統(tǒng)通用的軟硬件平臺,對軟硬件進(jìn)行封裝,提高軟硬件的可重用性和可移植性,在保證系統(tǒng)性能的前提下,避免重復(fù)勞動,縮短開發(fā)周期。
1 總體設(shè)計(jì)方案
1.1 RFID 射頻識別系統(tǒng)一般模型
RFID 射頻識別系統(tǒng)因具體應(yīng)用不同其組成會有所不同,但是通過分析它們的共性可以建立一個(gè)一般的模型, 如圖1 所示。 該模型主要由電子標(biāo)簽、射頻識別裝置即讀卡器、PC 主機(jī)組成。 電子標(biāo)簽與射頻識別裝置之間通過耦合元件實(shí)現(xiàn)射頻信號的空間耦合。 在耦合通道內(nèi), 根據(jù)時(shí)序關(guān)系,實(shí)現(xiàn)能量的傳遞、數(shù)據(jù)的交換。
一個(gè)通用的RFID 系統(tǒng)開發(fā)平臺是指:此平臺以RFID 射頻識別系統(tǒng)一般模型為基礎(chǔ),提供開發(fā)RFID 射頻識別系統(tǒng)通用的硬件和軟件構(gòu)件。 在設(shè)計(jì)思路上須遵循構(gòu)件化設(shè)計(jì)、可二次開發(fā)性和平臺化設(shè)計(jì)原則。
1.2 RFID 通用開發(fā)平臺硬件構(gòu)件模型
在一般模型中,電子標(biāo)簽根據(jù)自身是否帶電源可分為有源標(biāo)簽、無源標(biāo)簽,根據(jù)存儲方式分為只讀標(biāo)簽、讀寫標(biāo)簽,根據(jù)工作距離分為密耦合型標(biāo)簽識別距離1cm 內(nèi)、近耦合型標(biāo)簽識別距離10 cm內(nèi)、鄰近型標(biāo)簽識別距離100 cm 內(nèi)。 不同的電子標(biāo)簽識別技術(shù)不一樣。
文中的通用開發(fā)平臺主要面向無源的近耦合型RFID 應(yīng)用, 參照ISO/IEC 14443 協(xié)議操作13.56 MHz 讀寫標(biāo)簽(Type A 卡) 或者只讀標(biāo)簽(Type B 卡), 并配備各種常用接口和外設(shè)如通用I/O口、網(wǎng)絡(luò)、串口、SPI、USB、LCD、語音以適應(yīng)不同的應(yīng)用。 RFID 通用開發(fā)平臺硬件構(gòu)件模型如圖2 所示。 在單芯片解決方案中, 通常MCU 內(nèi)部包含有通用I/O 口和一些內(nèi)置的功能模塊如串口、網(wǎng)絡(luò)等,因此相對于核心構(gòu)件MCU 而言,通用I/O 口、SPI、串口、網(wǎng)絡(luò)是MCU 內(nèi)部構(gòu)件,LCD、語音、USB、射頻可以看成是其外設(shè)構(gòu)件。
1.3 RFID 通用開發(fā)平臺軟件構(gòu)件模型
RFID 通用開發(fā)平臺軟件設(shè)計(jì)分為兩大部分:
底層軟件構(gòu)件層和高層構(gòu)件層。 其中底層軟件構(gòu)件層針對硬件構(gòu)件編程, 是硬件驅(qū)動程序的封裝,高層構(gòu)件層根據(jù)用戶的實(shí)際應(yīng)用需求調(diào)用底層軟件構(gòu)件層封裝好的功能函數(shù)。 通用平臺的軟件構(gòu)件層次模型如圖3 所示。 將通用I/O 口的驅(qū)動封裝為GPIO 構(gòu)件,各內(nèi)置功能模塊的驅(qū)動程序封裝為功能構(gòu)件,合稱為內(nèi)部軟件構(gòu)件。 外設(shè)的驅(qū)動程序封裝為外設(shè)軟件構(gòu)件。
原則上開發(fā)基于此平臺的各種應(yīng)用只需要設(shè)計(jì)PC 端的應(yīng)用軟件,其余軟、硬件構(gòu)件不需要進(jìn)行改動,這就是RFID 通用開發(fā)平臺的構(gòu)件化封裝設(shè)計(jì)的思想。 高層構(gòu)件層提供了訪問各個(gè)構(gòu)件的網(wǎng)絡(luò)命令,PC 端主機(jī)操作網(wǎng)絡(luò)、射頻、LCD、USB、語音等構(gòu)件時(shí),只需發(fā)送相應(yīng)的網(wǎng)絡(luò)命令即可。
2 RFID 通用開發(fā)平臺設(shè)計(jì)
2.1 硬件設(shè)計(jì)
硬件構(gòu)件模型中首先是主控制器MCU 的選型。 由于RFID 應(yīng)用廣泛, 很多場合要求控制器有較快的處理速度, 有多種控制模塊如A/D 控制模塊、CAN 總線模塊、以太網(wǎng)控制模塊等。 綜合分析,文中選擇了飛思卡爾單芯片解決方案MCF52235處理器。 該處理器采用Coldfire V2 內(nèi)核和精簡指令集(RISC),頻率為60 MHz,通過設(shè)置鎖相環(huán)( PLL ),MCF52235 能夠穩(wěn)定工作在80 MHz. 內(nèi)部集成了10/100M 快速以太網(wǎng)控制器(FEC)、以太網(wǎng)物理收發(fā)器(EPHY)等模塊,還有UART,I2C、QSPI、PWM 、快速ADC 等模塊,實(shí)現(xiàn)了單芯片解決方案。
由于MCF52235 處理器中集成的以太網(wǎng)模塊已經(jīng)包括了以太網(wǎng)控制器和物理層收發(fā)器,因此網(wǎng)絡(luò)硬件構(gòu)件僅需添加少量的元件便可。 MCF52235處理器的PHY_RXP、PHY_RXN 引腳用于接收數(shù)據(jù),PHY_TXP、PHY_TXN 引腳用于發(fā)送數(shù)據(jù)。 這兩對收、發(fā)引腳分別接50 Ω 的上拉電阻。 SPDLED 引腳接網(wǎng)速LED 燈指示當(dāng)前的連接速度是10 Mbps還是100 Mbps,LNKLED 引腳接的LED 燈則指示當(dāng)前是否已經(jīng)與另一個(gè)網(wǎng)絡(luò)設(shè)備連接。 如果RFID射頻系統(tǒng)中讀卡器終端并不多,可以不采用網(wǎng)絡(luò)而是通過USB 接口與PC 機(jī)進(jìn)行通信。 USB 構(gòu)件采用飛思卡爾的單芯片MC9S12UF32, 它提供了高速USB2.0 接口, 即插即用。 此處使用USB 接口不是為了獲得更高的速度而是為了使用方便,所以選擇通過MCF52235 的一個(gè)串口與UF32 通信。
射頻芯片選用的是飛利浦RC531 芯片,工作頻率為13.56 MHz, 在不外加功率放大器時(shí)讀寫距離可達(dá)10 cm,它通過SPI 接口與MCF52235 通信。
LCD 構(gòu)件采用耀宇科技的YM12864 圖形點(diǎn)陣液晶。 該液晶顯示器可以顯示4 行、每行8 個(gè)漢字或者16 個(gè)字母。 它有兩種常用的連接方式:并行和串行。 并行連接需要11 根引腳線, 串行連接僅用3 根引腳線,因此與MCU 的連接采用串行的連接方式。 另外還需一個(gè)引腳控制背光燈電源的正極LEDA開關(guān)。 語音模塊和LCD 模塊的功能一樣,都是為了增強(qiáng)人機(jī)交互, 它采用上海奔流公司的BMP5008語音芯片。 狀態(tài)指示燈用于觀察系統(tǒng)的運(yùn)行狀態(tài)和用戶的操作,通過GPIO 口連接,幾乎所有的MCF52235 引腳都可以作為GPIO 引腳。 主控制器MCF52235 與各模塊的引腳連接如圖4 所示。
2.2 軟件設(shè)計(jì)
根據(jù)平臺的軟件構(gòu)件層次模型,先將各個(gè)模塊的驅(qū)動程序封裝成構(gòu)件。 底層軟件構(gòu)件是與硬件直接打交道的,它由頭文件和源程序文件兩部分組成。 編程思想是分析構(gòu)件的共性和個(gè)性,抽取出構(gòu)件的屬性和對外接口函,用戶使用該構(gòu)件時(shí)只需了解其接口函數(shù), 而不必去了解內(nèi)部具體如何實(shí)現(xiàn)。
頭文件部分給出構(gòu)件屬性的宏定義和對外接口函數(shù)的原型說明,源程序部分是函數(shù)的實(shí)現(xiàn)。
以太網(wǎng)構(gòu)件主要包括以太網(wǎng)物理收發(fā)器(EPHY)和快速以太網(wǎng)控制器(FEC) 的初始化、TCP/IP 協(xié)議棧實(shí)現(xiàn)。 它的接口函數(shù)原型說明如下:
//==================================
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);//發(fā)送單個(gè)以太網(wǎng)幀
uint8 hw_fec_receiveframe(uint8 ch[], uint16 *len);//接收單個(gè)以太網(wǎng)幀
uint hw_icmp_handle(PACKET p);//處理接收到的ICMP 包,響應(yīng)ping 請求
int hw_udp_send (unshort fport, unshort lport,
PACKET p);//發(fā)送UDP 包
//==================================
RC531 射頻模塊與MCF52235 通信嚴(yán)格按照串行通信時(shí)序要求。 RC531 與ISO/IEC 14443 TypeA 和Type B 卡通信,則按照A、B 卡調(diào)制和編碼的方式設(shè)置相關(guān)的寄存器,并根據(jù)ISO/IEC 14443 協(xié)議來設(shè)計(jì)軟件即可。 讀卡器與A、B 卡之間的通信是按照應(yīng)答方式來進(jìn)行的,非接觸式的卡有很多工作狀態(tài),各個(gè)狀態(tài)的轉(zhuǎn)化可通過讀卡器向卡發(fā)送一系列命令完成。 射頻構(gòu)件的接口函數(shù)說明如下所示:
// ==操作Type A 卡的部分主要函數(shù)======
void pcdinit();//R 初始化
char pcdreset();//RC531 復(fù)位
char pcdrequest(uint8 req_code);//尋卡
char pcdanticoll(uint8 *snr);//防碰撞
char pcdselect(uint8 *snr);//選定一張卡
// =========操作Type B 卡的函數(shù)========
void pcdinitB();//B 卡初始化
char pcdrequestB(uint8 *pupi);//尋B 卡
char pcdattrib(uint8 *pupi);// 發(fā)送attrib 命令
char pcdhaltB(uint8 *pupi);// B 卡掛起
char pcdgetUID (uint8 *snr, uint8 *len); //獲得B 卡的ID
//==================================
MCF52235 與LCD 構(gòu)件的通信同樣采用串行方式。 串行通信的一次數(shù)據(jù)分3 個(gè)字節(jié)傳輸。 第一個(gè)字節(jié)數(shù)據(jù)格式為11111AB0,表示串行控制,A 是選擇數(shù)據(jù)方向,1 表示LCD 到MCF52235,0 表示MCF52235 到LCD. B 是選擇數(shù)據(jù)類型,1 表示數(shù)據(jù)為顯示數(shù)據(jù),0 表示數(shù)據(jù)為控制命令。 第二個(gè)字節(jié)格式為DDDD0000, 表示8 位數(shù)據(jù)的高4 位。 第三個(gè)字節(jié)格式為0000DDDD 表示8 位數(shù)據(jù)的低4 位。
LCD 構(gòu)件接口函數(shù)說明如下所示:
//==================================
void lcd_init();//初始化
void lcd_display (const char* buf, int line);//在第line 行顯示buf,line>=0 && line<= 3
//==================================
USB 軟件構(gòu)件比較簡單,只需對MC9S12UF32的USB 模塊進(jìn)行初始化,UF32 便可以和MCF52235 進(jìn)行交互了。 由于MCF52235 與UF32采用串口連接, 因此只要在串口中斷程序中調(diào)用USB 構(gòu)件,UF32 便可從串口接收數(shù)據(jù), 然后通過USB 傳送給上位機(jī)。 上位機(jī)通過USB 接口發(fā)送數(shù)據(jù)給UF32 也產(chǎn)生一個(gè)中斷,在中斷程序把數(shù)據(jù)緩存起來再調(diào)用USB 構(gòu)件, 通過串口發(fā)送給MCF52235. USB 構(gòu)件接口函數(shù)說明如下所示:
//==================================
void uf32_uart_init(void);//uf32 模塊初始化
void uf32_uart_send(uint8 ch[],uint32 n); //發(fā)送數(shù)據(jù)
uint32 uf32_uart_rev (uint8 ch [],uint32 n); //接收數(shù)據(jù)
//==================================
語音構(gòu)件相對比較簡單,接口函數(shù)說明如下所示:
//==================================
void audio_init();//語音模塊初始化
void audio_play(int i);//語音播放
void audio_stop();//語音停止
//==================================
串口構(gòu)件接口函數(shù)說明如下所示:
//==================================
uint8 hw_uart_init(uint8 uartNo, uint32 baud);//串口初始化
uint8 hw_uart_rev_one (uint8 uartNo, uint8 *fp); //串口接收一個(gè)字節(jié)到fp
uint8 hw_uart_send_one(uint8 uartNo, unit8 ch);
//串口發(fā)送一個(gè)字節(jié)
//==================================
SPI 構(gòu)件接口函數(shù)說明如下所示:
//==================================
uint8 hw_spi_init (uint8 spiNo,uint8 master);//SPI 初始化
uint8 hw_spi_send (uint8 spiNo,uint8 data [],uint8 len);//SPI 發(fā)送數(shù)據(jù)
uint8 hw_spi_re(uint8 spiNo,uint8 data[]); //SPI接收數(shù)據(jù)
uint8 hw_spi_enable_re_int (uint8 spiNo); //開SPI 接收中斷
uint8 hw_spi_disable_re_int (uint8 spiNo); //關(guān)SPI 接收中斷
//==================================
GPIO 構(gòu)件接口函數(shù)說明如下所示:
//==================================
uint8 hw_gpio_init (uint8 port,uint8 pin,uint8dir,uint8 state);//初始化端口為GPIO 引腳
uint8 hw_gpio_set (uint8 port,uint8 pin, uint8state); //設(shè)置指定引腳狀態(tài)
uint8 hw_gpio_get(uint8 port,uint8 pin);//獲取指定引腳狀態(tài)
uint8 hw_gpio_reverse(uint8 port,uint8 pin);//反轉(zhuǎn)指定引腳狀態(tài)
//==================================
高層構(gòu)件包括三個(gè)部分:FreeRTOS 操作系統(tǒng)在MCF52235 上的移植[13-14],Shell 的實(shí)現(xiàn),網(wǎng)絡(luò)命令和信息的封裝。 將FreeRTOS 移植到MCF52235主要是實(shí)現(xiàn)3 個(gè)底層匯編級的支持函數(shù),tk_frame(task *tk, int (*entry)(), int arg)函數(shù)為tk 進(jìn)程創(chuàng)建堆棧幀保存進(jìn)程的各種狀態(tài);tk_switch (task *tk)函數(shù)用于把當(dāng)前進(jìn)程切換到tk 進(jìn)程;tk_getsp()函數(shù)返回當(dāng)前堆棧指針。 另外,在FreeRTOS 中運(yùn)行一個(gè)Shell 進(jìn)程,進(jìn)程函數(shù)為int keyboard (int param),可調(diào)試或查看系統(tǒng)狀態(tài)信息,比如各個(gè)進(jìn)程的運(yùn)行狀態(tài)、ARP 表、IP 地址、MAC 地址、連接狀態(tài)等。
Shell 實(shí)現(xiàn)的效果如圖5 所示。
在實(shí)際應(yīng)用中,通常一臺PC 主機(jī)管理若干讀卡器, 一個(gè)讀卡器可以為若干PC 主機(jī)服務(wù)。 每個(gè)PC 主機(jī)和讀卡器都具有不同的IP 地址, 一臺PC主機(jī)可以控制讀寫器1 讀寫每個(gè)Type A 卡的某個(gè)塊數(shù)據(jù), 還可以同時(shí)控制讀寫器2 讀寫每個(gè)TypeA 卡的另一個(gè)塊數(shù)據(jù), 或者請求讀取Type B 卡的UID, 整個(gè)網(wǎng)絡(luò)關(guān)系比較復(fù)雜。 因此采用將主機(jī)發(fā)送的命令、網(wǎng)絡(luò)信息、卡信息封裝在如下所示的若干個(gè)數(shù)據(jù)結(jié)構(gòu)中。
//==================================
struct invite_info //PC 主機(jī)發(fā)送的讀卡請求
{ char del_or_add; //主機(jī)離開或加入
uint8 type; //卡的類型
uint8 block; //要訪問的數(shù)據(jù)塊
uint8 password[6]; //塊的密碼
};
struct ip_arrays_B //讀Type B 卡信息
{ ip_addr ipaddress; //IP 地址
int port; //UDP 端口號
};
struct send_data_type //發(fā)送到主機(jī)的數(shù)據(jù)
{ uint8 sn[4]; //序列號
uint8 block; //塊號
uint8 data[16]; //16 個(gè)字節(jié)塊數(shù)據(jù)
uint8 ret; //返回值
};
struct IC_ope //用于消費(fèi)用途的RFID 應(yīng)用
{
uint8 block; //總的金額數(shù)
float fsub; //每次刷卡扣除的金額數(shù)量
uint8 *pass;
};
struct record_info //記錄卡信息
{ //此塊引用計(jì)數(shù),0 表示沒有請求讀這塊數(shù)據(jù)
uint8 ref; //引用計(jì)數(shù)
uint8 block; //塊號
uint8 password[6]; //塊的訪問密碼
};
struct ip_arrays_A //讀Type A 卡信息
{ ip_addr ipaddress; //IP 地址
int port; // UDP 端口號
uint8 block [num_of_rf_structs]; //這個(gè)UDP連接要讀取的所有塊
};
struct net_cmd //發(fā)送到板子的命令
{ uint8 lenth; //請求數(shù)據(jù)長度
uint8 cmdope; //操作碼
uint8 data[1]; //數(shù)據(jù)
};//=================================
3 RFID 通用開發(fā)平臺應(yīng)用
基于此平臺文中開發(fā)了學(xué)生機(jī)房上機(jī)刷卡系統(tǒng)。 在每個(gè)機(jī)房安裝一臺讀卡器,PC 主機(jī)的數(shù)據(jù)庫中存儲了每個(gè)機(jī)房的課表、任課教師和學(xué)生的信息。 學(xué)生持卡到各個(gè)機(jī)房的讀卡器上刷卡,讀卡器將讀到的信息通過網(wǎng)絡(luò)傳輸?shù)絇C 主機(jī)上,統(tǒng)計(jì)學(xué)生人數(shù)和上、下課時(shí)間等情況, 相關(guān)信息顯示在LCD 上并進(jìn)行語音提示。 PC 端軟件實(shí)現(xiàn)了網(wǎng)絡(luò)通信功能和學(xué)生機(jī)房上機(jī)刷卡管理系統(tǒng)。 網(wǎng)絡(luò)通信通過CManagerDlg:: m_skInfo 和CManagerDlg::
m_skCmd 這2 個(gè)sokcet 接口完成。 學(xué)生機(jī)房上機(jī)刷卡管理系統(tǒng)開發(fā)軟件采用VC++2012 和SQLServer 2012 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。 學(xué)生機(jī)房上機(jī)刷卡管理系統(tǒng)界面如圖6 所示。
4 結(jié)語
現(xiàn)有RFID 系統(tǒng)開發(fā)基本是根據(jù)具體應(yīng)用需求進(jìn)行單獨(dú)設(shè)計(jì)的。 而這些不同的應(yīng)用系統(tǒng)在軟、硬件部分具有很大的重復(fù)性,為提高軟、硬件的可重用性,文中通過分析RFID 射頻識別系統(tǒng)一般模型,提出了一種基于MCF52235 的RFID 通用開發(fā)平臺軟、硬件構(gòu)件化設(shè)計(jì)方案,設(shè)計(jì)了集成多種接口的具備通用功能的RFID 開發(fā)平臺,并將該平臺應(yīng)用于學(xué)生機(jī)房上機(jī)管理系統(tǒng)中。 實(shí)踐證明它為RFID 系統(tǒng)開發(fā)提供了一個(gè)快速、通用的軟、硬件模型。
評論
查看更多