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