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