基于TrueFFS的鐵路牽引自動(dòng)化系統(tǒng)應(yīng)用
在嵌入式產(chǎn)品中,一般使用Flash作為應(yīng)用程序代碼及各種數(shù)據(jù)和參數(shù)的存儲(chǔ)介質(zhì)。尤其是NOR Flash具有操作接口簡(jiǎn)單、傳輸效率高、芯片內(nèi)執(zhí)行(eXecute In Place,XIP)的特點(diǎn),在電力、鐵路等工業(yè)控制領(lǐng)域得到了廣泛應(yīng)用。
為了便于用戶的使用,VxWorks操作系統(tǒng)提供了基于Flash的文件系統(tǒng),即TrueFFS。TrueFFS與DosFS文件系統(tǒng)基本兼容,通過(guò)VxWorks提供的操作接口以文件的方式實(shí)現(xiàn)對(duì)Flash的操作。而對(duì)于用戶來(lái)說(shuō),如何在自己的硬件系統(tǒng)上根據(jù)Flash的具體型號(hào)和使用要求實(shí)現(xiàn)TrueFFS系統(tǒng),并在此基礎(chǔ)上完成應(yīng)用程序代碼的靈活啟動(dòng)、更新,同時(shí)兼顧仿真調(diào)試的需求,則非常重要。
1 系統(tǒng)基本功能
本系統(tǒng)應(yīng)用于鐵路牽引自動(dòng)化系統(tǒng)中,實(shí)現(xiàn)在電氣化鐵路供電系統(tǒng)中對(duì)相關(guān)電力設(shè)備的保護(hù)、測(cè)量和控制功能。系統(tǒng)基本功能框圖如圖1所示。核心CPU選用Freescale公司的ColdFire系列32位微控制器MCF5234。該處理器內(nèi)部集成了UART、SPI、I2C、ETPU、CAN、以太網(wǎng)等豐富的功能模塊,系統(tǒng)主頻可達(dá)150 MHz,主要用于工業(yè)控制、智能家電等方面(尤其是電力自動(dòng)化控制領(lǐng)域)。系統(tǒng)通過(guò)2路以太網(wǎng)接口實(shí)現(xiàn)與當(dāng)?shù)鼗蜻h(yuǎn)方設(shè)備的通信,維護(hù)串口用來(lái)實(shí)現(xiàn)對(duì)本設(shè)備的維護(hù),采用2片16位接口的NOR Flash實(shí)現(xiàn)應(yīng)用程序和有關(guān)參數(shù)及數(shù)據(jù)的存儲(chǔ)。系統(tǒng)提供模擬量輸入、數(shù)字量輸入、數(shù)字量輸出等接口。有關(guān)的模擬量及開(kāi)關(guān)量狀態(tài)信息經(jīng)過(guò)對(duì)應(yīng)接口采集到系統(tǒng)內(nèi)部,經(jīng)過(guò)保護(hù)算法軟件的處理后,再通過(guò)數(shù)字量輸出接口完成對(duì)有關(guān)設(shè)備的控制操作。
在傳統(tǒng)嵌入式系統(tǒng)中,編譯好的運(yùn)行態(tài)應(yīng)用程序一般通過(guò)硬件調(diào)試工具(如BDM調(diào)試器)直接固化到程序Flash的指定位置,裝置上電或復(fù)位后,CPU直接跳轉(zhuǎn)到Flash的起始位置,從Flash中取指并開(kāi)始執(zhí)行。但是在VxWorks中,采用該方式不方便軟件的仿真調(diào)試,需要重新固化bootrom才行。另外,由于系統(tǒng)要求保存較多的參數(shù)和數(shù)據(jù),需要在2片F(xiàn)lash中都實(shí)現(xiàn)TrueFFS系統(tǒng);并且為了滿足動(dòng)態(tài)更新程序的要求,還需要實(shí)現(xiàn)FTP的功能。因此,需要實(shí)現(xiàn)如下功能:在2片F(xiàn)lash上實(shí)現(xiàn)True-FFS;在bootrom和應(yīng)用VxWorks程序上實(shí)現(xiàn)TrueFFS和FTP的加載;對(duì)bootrom進(jìn)行改造,以實(shí)現(xiàn)應(yīng)用VxWorks程序和調(diào)試VxWorks程序分別通過(guò)TrueFFS和TFTP的方式啟動(dòng)。
2 TrueFFS的實(shí)現(xiàn)及加載
2.1 TrueFFS的層次結(jié)構(gòu)
如圖2所示,VxWorks中TrueFFS的層次結(jié)構(gòu)包括內(nèi)核層、翻譯層、socket層、MTD層。由于VxWorks對(duì)TrueFFS進(jìn)行了優(yōu)秀的層次劃分和封裝,用戶一般不需要對(duì)上述基本層次代碼進(jìn)行修改。MTD層實(shí)現(xiàn)了對(duì)常用幾種類(lèi)型Flash的讀、寫(xiě)、擦除等基本控制。如果用戶選用了支持的類(lèi)型,則基本不需要編寫(xiě)代碼;而如果用戶選用了特殊類(lèi)型的Flash,則可以參考用例代碼完成對(duì)應(yīng)MTD層代碼的編寫(xiě)。
2.2 MTD層代碼實(shí)現(xiàn)
由于本系統(tǒng)中選用的2片F(xiàn)lash為Spansion公司的S29AL032D,因此需要編寫(xiě)對(duì)應(yīng)的驅(qū)動(dòng)代碼。對(duì)于MTD層,一般向上提供MTD識(shí)別、Flash連續(xù)扇區(qū)擦除、Flash連續(xù)數(shù)據(jù)寫(xiě)等主要接口函數(shù),可以不提供單獨(dú)的鏡像函數(shù),系統(tǒng)會(huì)使用內(nèi)部缺省的鏡像函數(shù)。需要在2片F(xiàn)lash上實(shí)現(xiàn)TrueFFS,即每片F(xiàn)lash相當(dāng)于一個(gè)分區(qū),這一點(diǎn)在編寫(xiě)驅(qū)動(dòng)程序時(shí)需要重點(diǎn)考慮。在MTD層驅(qū)動(dòng)程序中,F(xiàn)lash的單個(gè)字節(jié)(或字)寫(xiě)入接口函數(shù)為重點(diǎn),不同F(xiàn)lash類(lèi)型以及不同的端口寬度都會(huì)導(dǎo)致該函數(shù)的實(shí)現(xiàn)不同。其寫(xiě)操作流程如圖3所示。
評(píng)論