文獻標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2015.08.005
中文引用格式: 曹國平,,王宜懷,凌云. 基于KL25的RFID構(gòu)件化工程框架研究[J].電子技術(shù)應(yīng)用,,2015,,41(8):20-23.
英文引用格式: Cao Guoping,Wang Yihuai,,Ling Yun. The research of RFID component engineering framework based on KL25 processor[J].Application of Electronic Technique,,2015,41(8):20-23.
0 引言
目前,射頻識別技術(shù)(RFID)已在多個領(lǐng)域中被廣泛使用,,但RFID應(yīng)用系統(tǒng)是典型的硬件平臺相關(guān)性系統(tǒng),,通常具有難以維護、更新,、移植等特點[1],,其中存在大量重復(fù)工作。軟件構(gòu)件技術(shù)是指通過組裝一系列可復(fù)用的軟件構(gòu)件形成軟件系統(tǒng)的軟件技術(shù),,以軟件構(gòu)件為基礎(chǔ),,設(shè)計一個合理的構(gòu)件化工程框架是降低工程開發(fā)的難度,提升軟件的可重用性,、可移植性和可維護性的有效途徑[2],。本文針對RFID應(yīng)用系統(tǒng)的特點,通過對RFID一般應(yīng)用模型的分析,,封裝了構(gòu)件相關(guān)函數(shù),,并給出了結(jié)構(gòu)清晰合理的RFID構(gòu)件化工程框架,有效提高了RFID應(yīng)用系統(tǒng)的開發(fā)效率,。同時以思卡爾KL25 MCU和射頻芯片RC531構(gòu)成的實驗裝置為基礎(chǔ),,在Kinetis Design Studio集成開發(fā)環(huán)境中對該構(gòu)件框架的使用進行了具體測試,并分析了該構(gòu)件框架在其他嵌入式系統(tǒng)上的移植應(yīng)用,,對提高系統(tǒng)開發(fā)的規(guī)范性和可移植性具有重要參考意義,。
1 RFID驅(qū)動構(gòu)件的設(shè)計及解析
構(gòu)件設(shè)計的目標(biāo)是可重用,達到此目標(biāo)的關(guān)鍵是構(gòu)件提供了契約式的接口,,它的輸入接口代表了環(huán)境為它提供的服務(wù),,輸出接口代表了它為環(huán)境提供的服務(wù)。一個接口提供一種服務(wù),,完成某種邏輯行為[3],。構(gòu)件接口由兩部分組成:一是署名部分,即構(gòu)件本身提供服務(wù)的描述,,由構(gòu)件頭文件(.h)實現(xiàn),;二是行為部分,,即構(gòu)件行為的描述,由源文件(.c)實現(xiàn),。因此,,為提高構(gòu)件可重用性,在設(shè)計軟件構(gòu)件時,,必須對構(gòu)件的共性和個性進行分析,,抽取出構(gòu)件的屬性和對外接口函數(shù)。盡量做到:當(dāng)一個構(gòu)件應(yīng)用到不同系統(tǒng)中時,,僅需修改構(gòu)件的頭文件,,對于構(gòu)件的源程序文件則不必修改或改動很小。
1.1 RFID應(yīng)用系統(tǒng)的一般模型
通過分析RFID應(yīng)用系統(tǒng)的共性,,可以建立一個由3部分組成的一般系統(tǒng)模型[4],,如圖1所示??刂芃CU主要提供對射頻讀寫芯片的控制操作,;射頻讀寫芯片及輔助電路用于實現(xiàn)與控制MCU的數(shù)據(jù)通信并控制與標(biāo)簽的通信操作;天線部分則實現(xiàn)電磁波的收發(fā),。
以蘇州大學(xué)飛思卡爾嵌入式中心開發(fā)的 RFID實驗裝置為例,,KL25作為控制MCU,是整個硬件系統(tǒng)的核心,;射頻讀寫芯片RC531與KL25通信實現(xiàn)各種功能,。RC531支持并行接口或SPI接口兩種方式實現(xiàn)與控制MCU的通信。任意一款MCU只需按表1所示提供對應(yīng)的GPIO引腳即可以模擬SPI的方式控制RC531芯片,。
1.2 構(gòu)件函數(shù)封裝
在RFID系統(tǒng)中,,射頻讀寫芯片RC531作為KL25的外設(shè)[5-6],是驅(qū)動構(gòu)件的對象,。
RC531對A類卡的通信處理流程如圖2所示,。首先,發(fā)送Request詢卡命令給天線工作范圍內(nèi)的所有卡片,,卡片在上電復(fù)位后響應(yīng)該命令,;隨后通過防沖突循環(huán),根據(jù)卡的序列號選中一張卡,;接著對準(zhǔn)備訪問的卡片的存儲區(qū)的密碼進行鑒別,;在通過了密碼驗證后,讀寫模塊可以對該存儲區(qū)的數(shù)據(jù)進行讀,、寫,、增值、減值以及掛起等操作[7],。
根據(jù)該處理流程,,從上層應(yīng)用的角度出發(fā),,可不必關(guān)注防沖突、密碼驗證等過程,,只需要關(guān)注對存儲區(qū)的具體應(yīng)用,。因此RC531構(gòu)件只需要對A類卡提供初始化、讀寫數(shù)據(jù)等功能函數(shù),,而防沖突等操作可作為內(nèi)部函數(shù)處理,。同理根據(jù)B類卡的處理流程,,構(gòu)件需要提供初始化,、讀取卡號等函數(shù)。
綜合以上分析,,在RC531構(gòu)件頭文件中的內(nèi)容應(yīng)主要包含外設(shè)模塊寄存器相關(guān)信息的定義和函數(shù)原型的聲明,。前者指明了本“元構(gòu)件”與具體硬件相關(guān)的信息,而后者則給出了本驅(qū)動構(gòu)件對上層構(gòu)件或應(yīng)用程序所提供的接口函數(shù),。另外從硬件的角度看,,控制射頻模塊只需要確定MCU與RC531的接口一個要素即可,但由于KL25的每個引腳都需要確定端口號與引腳號兩個部分,,所以在應(yīng)用中將這兩個部分組合為一個值,,方便理解與調(diào)用。通過這種設(shè)定,,上層構(gòu)件在使用它時,,將具有極大的靈活性。構(gòu)件源程序文件實現(xiàn)對外接口函數(shù)功能,,構(gòu)件內(nèi)部使用的函數(shù)也在構(gòu)件源程序文件中定義,。最終在頭文件中應(yīng)給出MF_Init(初始化)、MF_ReadCardA(讀A卡),、MF_WriteCardA(寫A卡),、MF_Deduct(電子錢包充值)、MF_Recharge(電子錢包扣款),、MF_Halt(掛起),、MF_ ReadCardB(讀B卡)等功能函數(shù)。以初始化函數(shù)為例,,其需要完成的功能為:將KL25的GPIO接口初始化為SPI形式,,將RC531復(fù)位并將天線接口初始化為A類或B類通信狀態(tài)。因此初始化函數(shù)的封裝需要提供一個通信協(xié)議類型的參數(shù),,并需要返回一個狀態(tài)值反映初始化是否成功,。
//將KL25部分GPIO口定義為模擬SPI功能
//MFRC531的MOSI引腳
#define MF_MOSI_PIN
(GPIO_PORT_D << 8) | 3
//MFRC531的MISO引腳
#define MF_MISO_PIN
(GPIO_PORT_D << 8) | 5
…
/函數(shù)名稱:MF_Init
//功能概要:復(fù)位芯片并根據(jù)標(biāo)簽類型初始化
//參數(shù)說明:ProMode: A類協(xié)議 Pro_A
// B類協(xié)議 Pro_B
//函數(shù)返回:錯誤碼 MI_OK:初始化成功
// MI_NOTAGERR:失敗
uint_8 MF_Init(uint_8 ProMode);
…
2 工程框架設(shè)計
2.1 工程框架的組織原則
按照軟件工程的思想,,框架是一個能夠被開發(fā)人員實例化的系統(tǒng)構(gòu)架,,規(guī)定了應(yīng)用軟件的體系結(jié)構(gòu),,定義了模塊和對象的分割,確定了各部分的主要職責(zé),、協(xié)作關(guān)系及控制流程[8],。工程框架的設(shè)計和組織必須是可復(fù)用、可移植和可理解的,,以利于提高嵌入式軟件的開發(fā)效率,。因此,本文在設(shè)計中遵循以下的原則[9-10]:
(1)系統(tǒng)結(jié)構(gòu)分層,,軟件與硬件分離,。
首先,應(yīng)用系統(tǒng)按照用戶,、業(yè)務(wù)邏輯,、驅(qū)動進行分層,將不同層次的構(gòu)件文件組織在不同文件夾下,,使框架可即插即用替換構(gòu)件,;其次,從不同的層次中分別提煉出高層構(gòu)件和底層構(gòu)件,,高層構(gòu)件與硬件無關(guān),,而底層構(gòu)件與硬件密不可分,是硬件驅(qū)動程序的封裝,。高層構(gòu)件實現(xiàn)一個具體應(yīng)用,,而底層構(gòu)件是對硬件驅(qū)動程序的封裝;同時在硬件構(gòu)件層中,,相對于核心構(gòu)件最小系統(tǒng)而言,,中間構(gòu)件和終端構(gòu)件都是核心構(gòu)件的“外設(shè)”,將這些“外設(shè)”的驅(qū)動程序封裝而成的軟件構(gòu)件作為底層外設(shè)構(gòu)件,。底層外設(shè)構(gòu)件可以調(diào)用底層內(nèi)部構(gòu)件,,而高層構(gòu)件可以調(diào)用底層外設(shè)構(gòu)件和底層內(nèi)部構(gòu)件中的功能構(gòu)件。
(2)將芯片特性分離
每款芯片都擁有自己的內(nèi)核及芯片初始化文件,,這些文件由芯片設(shè)計人員提供,,具有特定的內(nèi)容。將這類文件組織在一起,,這樣針對某一款芯片進行開發(fā)時,,應(yīng)用開發(fā)者不必修改該目錄。
2.2 工程框架的組織形式
通過RFID應(yīng)用系統(tǒng)模型,,可將射頻讀寫芯片作為外設(shè)構(gòu)件處理,。基于框架的組織原則,,通過對工程框架的目錄名和共性的文件歸納分類組織,,得到符合要求的構(gòu)件化工程框架,。以基于KL25的RFID工程為例,其在KDS1.1.1開發(fā)環(huán)境下的目錄結(jié)構(gòu)組織如圖3所示,。
整個框架中的目錄按照開發(fā)系統(tǒng)所應(yīng)用到的文件順序排列,,各目錄中存放文件的原則如下:
Includes目錄存放開發(fā)環(huán)境相關(guān)的文件,由工程自動生成,。
01_DOC中存放工程說明文檔,,工程有變化時,即時更新,。
02_CPU,、03_MCU目錄分別存放與內(nèi)核及芯片相關(guān)的公共文件,其中包含了幾乎所有底層構(gòu)件都涉及的MCU寄存器的宏定義,、啟動代碼等文件,。
04_Linker_File中存放鏈接腳本文件,描述程序文件在芯片存儲區(qū)中的存放順序,,該文件與編譯器相關(guān)。
05_Driver,、06_App_componet目錄分別存放底層硬件的驅(qū)動構(gòu)件及高層構(gòu)件文件,,底層構(gòu)件是硬件系統(tǒng)各功能模塊的驅(qū)動封裝,如讀寫芯片RC531的構(gòu)件文件等,;高層構(gòu)件用于實現(xiàn)具體的應(yīng)用功能,。
07_Soft_component目錄存放穩(wěn)定、移植性良好,、與硬件無關(guān)的抽象構(gòu)件文件,,如數(shù)值類型轉(zhuǎn)換算法等,如此則實現(xiàn)了業(yè)務(wù),、邏輯,、數(shù)據(jù)的完全分離。
08_Sources目錄包括總頭文件includes.h,、主函數(shù)文件main.c以及中斷函數(shù)文件isr.h,、isr.c。main.c文件是工程任務(wù)的核心文件,,用戶的應(yīng)用都添加在該文件中,。總頭文件中包含主程序文件中需要的驅(qū)動構(gòu)件頭文件,、變量聲明等,;isr.c中包含了中斷函數(shù)的實現(xiàn)代碼,isr.h是isr.c文件的頭文件,,存放中斷函數(shù)聲明,,因為中斷向量表文件是工程框架的重要內(nèi)容之一,,因此,在工程框架中,,用戶應(yīng)避免直接對中斷向量表文件進行修改,,而采用“注冊”的方式為用戶提供編程接口,既方便用戶使用,,同時也提高了系統(tǒng)編程的安全性,。
3 工程在框架下的移植分析
在實際應(yīng)用中,工程的移植有多種情況,。以KL25下的RFID應(yīng)用工程為例,,當(dāng)需要在相同的硬件環(huán)境下設(shè)計不同的工程時,只需以該工程為模板,,在05_Driver目錄下添加需要的底層構(gòu)件,,并在08_Sources目錄下修改主函數(shù)中的任務(wù),即可在其余文件保持不變的情況下,,快速開發(fā)出新的應(yīng)用工程,。這種情況下應(yīng)用工程之間的可移植性最大。
當(dāng)將工程移植到相同或相兼容內(nèi)核的芯片時,,僅需修改03_MCU目錄下的芯片文件,,以及根據(jù)硬件連接方式在05_Driver目錄下修改RC531構(gòu)件頭文件中的引腳定義,已有的工程即可在新的目標(biāo)芯片下運行,。如將KL25上的工程移植到Cortex-M4內(nèi)核的K60芯片時,,只需將頭文件中的引腳定義修改即可。
//將K60部分GPIO口定義為模擬SPI功能
//MFRC531的MOSI引腳
#define MF_MOSI_PIN
(GPIO_PORT_E << 8) | 19
//MFRC531的MISO引腳
#define MF_MISO_PIN
(GPIO_PORT_E << 8) | 1
…
當(dāng)工程移植到不同內(nèi)核的芯片時,,由于硬件結(jié)構(gòu)一般變化較大,,通常需要修改02_CPU、03_MCU,、08_Sources目錄下的中斷注冊文件等與芯片直接相關(guān)的系統(tǒng)文件,,同時還須修改GPIO的驅(qū)動,但設(shè)備構(gòu)件文件的結(jié)構(gòu)及工程框架依然可以保持不變,??梢娫谠摽蚣芟拢こ探M織非常清晰,,移植也很方便,。
4 工程框架應(yīng)用與測試
測試工程在KDS1.1.1開發(fā)環(huán)境和SD-FSL-KL25-EVB開發(fā)板上進行,測試工程實現(xiàn)的功能為:KL25的串口1與PC通信,,接收讀取M1卡中數(shù)據(jù)塊5中數(shù)據(jù)的控制命令,,實現(xiàn)框架的中斷服務(wù)功能;查找并讀取標(biāo)簽中的數(shù)據(jù),通過串口1將數(shù)據(jù)顯示在PC上,。要實現(xiàn)以上功能,,需在框架isr.c文件中添加串口1的中斷服務(wù)例程,并在isr.h文件中實現(xiàn)中斷注冊,,然后在主函數(shù)文件中分別調(diào)用RFID初始化,、讀數(shù)據(jù)構(gòu)件與串口發(fā)送數(shù)據(jù)構(gòu)件即可。主函數(shù)部分代碼如下:
MF_Init(Pro_A),;
for(,;;)
{
If(1==read_flag)
{
if(MI_OK == MF_ReadCardA
(ReadDataBuff, Key,BlockNo))
{
uart_send_string(UART_1, "Read Success!\r\n");
//將讀取的數(shù)據(jù)轉(zhuǎn)換為16進制字符形式
…
//將數(shù)據(jù)輸出
uart_sendN(UART_1,16,DataBuff),;
}
else
{
uart_send_string(UART_1, "Read failed!\r\n"),;
}
}
…
將測試工程編譯后下載到目標(biāo)板,將開發(fā)板上的串口1與PC連接運行,,從串口測試工具中發(fā)送控制命令“R11”,,可以觀察到接收窗口中穩(wěn)定地回送數(shù)據(jù),如圖4所示,。測試結(jié)果表明在該工程框架下,,工程任務(wù)建立簡便,運行穩(wěn)定,,控制邏輯清晰可靠,,能夠滿足工程運行的需求。
5 結(jié)論
RFID應(yīng)用系統(tǒng)在市場中被廣泛使用,,但RFID開發(fā)原理較為復(fù)雜,同時在開發(fā)中存在大量重復(fù)工作,。設(shè)計一個合理的開發(fā)框架有助于封裝底層構(gòu)件,,幫助開發(fā)者高效地開發(fā)出穩(wěn)定的嵌入式RFID產(chǎn)品。本文根據(jù)軟件工程思想,,對RFID構(gòu)件分析并封裝了MF_Init,、MF_ReadCardA、MF_WriteCardA,、MF_Deduct,、MF_Recharge、MF_Halt,、MF_ ReadCardB等功能函數(shù),,并給出了結(jié)構(gòu)清晰合理的構(gòu)件化工程框架,對提高RFID應(yīng)用系統(tǒng)開發(fā)的規(guī)范性和可移植性具有重要參考意義,。同時以飛思卡爾KL25 MCU和射頻芯片RC531構(gòu)成的實驗裝置為基礎(chǔ),,給出了測試工程的創(chuàng)建及測試過程,為RFID應(yīng)用系統(tǒng)開發(fā)提供了一個結(jié)構(gòu)清晰,、層次分明,、可移植性強的開發(fā)模板,。
參考文獻
[1] 譚民,劉禹,,曾雋芳.RFID技術(shù)系統(tǒng)工程及應(yīng)用指南[M].北京:機械工業(yè)出版社,,2007.
[2] 楊芙清,梅宏,,黃罡.構(gòu)件化軟件設(shè)計與實現(xiàn)[M].北京:清華大學(xué)出版社,,2008.
[3] MOREIRA F A,SOLIVEIRA M F.A model-driven engineering framework for embedded systems design[J].Innovations in Systems and Software Engineering,,2012,,8(1):19-23.
[4] 王慧明.RFID開發(fā)平臺的設(shè)計及其應(yīng)用[D].蘇州:蘇州大學(xué),2009.
[5] ARM.Cortex-M0+ technical reference manual[EB/OL].(2012-03-01)[2015-04-20].http://www.Freescale.com.cn.
[6] 王宜懷,,朱仕浪,,郭蕓.嵌入式技術(shù)基礎(chǔ)與實踐-ARM Cortex-M0+ Kinetis L系列微控制器[M].北京:清華大學(xué)出版社,2013.
[7] Philips Semiconductors.Mifare MF RC531 ISO 14443 readerIC data sheet[EB/OL].(2005-12-01)[2015-04-20].http://www.nxp.com.
[8] 凌藝春,,黃飛.匯編程序移植性的研究與實踐[J].制造業(yè)自動化,,2011,33(3):174-175.
[9] SZYPERSKI C,,GRUNTZ D,,MURER S.Component software:beyond object-oriented programming[M].Addison-Wesley,2002.
[10] 張倩,,楊玉宇.《系統(tǒng)與軟件可移植性》標(biāo)準(zhǔn)中可移植性定義的研究[J].信息技術(shù)與標(biāo)準(zhǔn)化,,2009,35(10):51-54.