鄭 洲
(東華理工大學(xué) 機械與電子工程學(xué)院,上海 200237)
?
鄭 洲
(東華理工大學(xué) 機械與電子工程學(xué)院,上海 200237)
研究基于移動存儲介質(zhì)的低成本、高性能車載影音系統(tǒng),結(jié)合FreeRTOS操作系統(tǒng)調(diào)度的實時性和VisualState狀態(tài)機機制控制流程, 該系統(tǒng)實時性強,并且性能穩(wěn)定,具有廣闊的市場前景。
車載影音;碟片;USB/SD;FreeRTOS;VisualState狀態(tài)機
隨著車載影音娛樂系統(tǒng)的普及,要求車載影音系統(tǒng)方案具有更高的穩(wěn)定性、操作簡便性,也對成本控制提出了更大的挑戰(zhàn)。新一代車載影音系統(tǒng)省去了碟片攜帶不方便且成本較高的光驅(qū)控制部分,用現(xiàn)代存儲設(shè)備(如U盤、SD卡)為載體,借助高科技解碼技術(shù),可將網(wǎng)上下載的多種格式的影音文件進行播放的車載影音娛樂系統(tǒng)進行升級,同時還整合了收音機、藍牙免提式接打電話、AUX輸入音頻等功能。整個系統(tǒng)使用FreeRTOS操作系統(tǒng),實時響應(yīng)各種中斷服務(wù),同時采用狀態(tài)機控制機制,使整個流程控制更加清晰、穩(wěn)定。
硬件MCU采用集成了USB/SD接口的STM32F103系列、電源管理芯片、AUX輸入檢測電路、藍牙模塊、調(diào)諧收音芯片TEF6621、鍵盤及顯示段碼屏,系統(tǒng)框架如圖1所示。為了滿足低功耗設(shè)計,各個模塊都有獨立I/O去控制對應(yīng)電源。
圖1 系統(tǒng)框架圖
1.1 微處理器
系統(tǒng)采用32位Cortex-M3內(nèi)核的STM32F103微處理器,工作電壓為2.0~3.6 V,主頻達72 MHz,有睡眠、停機和待機3種低功耗模式,包括12 位的ADC、DMA控制器,支持ADC、SPI、I2C、 32位CRC等外設(shè)[1],完全可以滿足車載影音系統(tǒng)方案需求。
1.2 USB檢測與復(fù)位電路
針對U盤兼容性測試中,不同廠商生產(chǎn)的U盤出現(xiàn)一次讀取不成功或者連續(xù)插拔讀取不成功的情況,本文提出了在一次讀取失敗之后,強制給U盤供電電路進行復(fù)位控制,中間需要間隔1 s左右,正常情況下一個U盤讀取時間為3 s,個別U盤有可能為5~6 s,在客戶可接受范圍內(nèi)。檢測與復(fù)位電路如圖2所示。
圖2 USB檢測與復(fù)位電路
1.3 電源供電B+電路和ACC檢測電路
車載干擾因素非常多(例如發(fā)動機、點火系統(tǒng)等),其中最有威脅的干擾是共模干擾,少數(shù)還有差模干擾,因此系統(tǒng)需要在電源輸入端加入干擾過濾電路,并加大鋁電解電容容量,以消除汽車電源輸入端的干擾。電源主供電電路如圖3所示。
圖3 電源主供電電路
圖4 電源ACC檢測電路
對于車載系統(tǒng),需要實時檢測點火信號ACC,當ACC關(guān)閉時需要進行數(shù)據(jù)備份、保存當前播放源、收音的當前頻點和預(yù)存臺號、USB/SD的當前播放曲目和文件夾等信息;當再打開ACC時,需要進行數(shù)據(jù)恢復(fù)處理。另外,還需要考慮電壓浮動情況的高低壓檢測電路部分設(shè)計。圖4為高低壓檢測電路。
1.4 后級功率放大電路
收音機模塊TEF6621對外通信接口為I2C總線,將它掛在系統(tǒng)I2C總線上,STM32F103可以對其相關(guān)寄存器進行設(shè)置。收音機芯片輸出音頻信號非常微弱,通過前級音頻控制芯片PT2313進行音源選擇和后級功率放大器TB2929[2]進行放大以驅(qū)動車載音響設(shè)備。其中后級功率放大電路略——編者注。
低成本車載影音系統(tǒng)的軟件系統(tǒng)是以嵌入式操作系統(tǒng)FreeRTOS作為開發(fā)和運行平臺,利用狀態(tài)機機制實現(xiàn)流程跳轉(zhuǎn)與功能實現(xiàn),該軟件主要由操作系統(tǒng)FreeRTOS層、狀態(tài)機控制HMI層、媒體播放Media層等組成,如圖5所示。
2.1 FreeRTOS操作系統(tǒng)層
FreeRTOS作為一款輕量級操作系統(tǒng),提供了任務(wù)管理、時間管理、消息隊列、內(nèi)存管理等功能,并且源碼公開,在基于Cortex-M3內(nèi)核的STM32F103系列上移植非常靈活[3]。
2.1.1 FreeRTOS移植
FreeRTOS的實現(xiàn)主要由list.c、queue.c、croutine.c和tasks.c四個文件組成。list.c是一個鏈表的實現(xiàn),主要供給內(nèi)核調(diào)度器使用;queue.c是一個隊列的實現(xiàn),支持中斷環(huán)境和信號量控制;croutine.c和tasks.c是兩種任務(wù)的組織實現(xiàn)。對于croutine.c,各個任務(wù)共享同一個堆棧,使RAM的需求進一步縮小,正因如此,它的使用受到相對嚴格的限制。而task.c則是傳統(tǒng)的實現(xiàn),各個任務(wù)使用各自的堆棧,支持完全的搶占式調(diào)度。FreeRTOS在STM32F103上的移植大致由3個文件實現(xiàn):.h文件定義編譯器相關(guān)的數(shù)據(jù)類型和中斷處理的宏定義;.c文件實現(xiàn)任務(wù)的堆棧初始化、系統(tǒng)心跳的管理以及任務(wù)切換的請求;.s文件實現(xiàn)具體的任務(wù)切換,具體文件結(jié)構(gòu)圖如圖6所示。
圖5 程序框架設(shè)計圖
圖6 FreeRTOS文件結(jié)構(gòu)圖
2.1.2 任務(wù)配置
任務(wù)就是一段可以執(zhí)行的代碼,擁有自己的棧資源和生命周期,可以被創(chuàng)建、刪除。任務(wù)創(chuàng)建后,系統(tǒng)會去執(zhí)行入口函數(shù)里面的代碼。系統(tǒng)OS采用FreeRTOS,任務(wù)調(diào)度[4]原則是:高優(yōu)先級的Task優(yōu)先執(zhí)行,只有高優(yōu)先級Task主動讓出,低優(yōu)先級Task才能被執(zhí)行。任務(wù)劃分如表1所列。
表1 Task簡介
MainTask實現(xiàn)各種應(yīng)用模式,主要處理設(shè)備插拔消息以及上下曲播放控制、藍牙協(xié)議交換處理、顯示信息處理。其控制流程如圖7所示。
2.2 狀態(tài)機控制HMI層
狀態(tài)機是一個很好的建模方法,能夠處理復(fù)雜的控制。狀態(tài)機提供了一個抽象化的系統(tǒng)設(shè)計方法,簡化了設(shè)計,使得維護復(fù)雜的控制成為可能。VisualState[5]圖形界面提供的工具鏈,使開發(fā)者能夠非常方便地設(shè)計出這種狀態(tài)圖;而一旦狀態(tài)機模型(或部分狀態(tài)圖)建立了,VisualState擁有強大的分析工具來處理它,從而確保最終產(chǎn)品與需求一致;在開發(fā)后期,狀態(tài)圖被用來生成目標代碼和開發(fā)文檔。VisualState是一組高級的嵌入式設(shè)計工具套件,專門用于開發(fā)高質(zhì)量的嵌入式系統(tǒng)軟件,適用于汽車電子、便攜式電子產(chǎn)品、家電和人機界面等不同行業(yè)領(lǐng)域。
圖7 MainTask控制流程
車載影音系統(tǒng)采用狀態(tài)機控制機制,利用VisualState可視化圖形操作界面的直觀性對整個邏輯進行設(shè)計,根據(jù)消息事件的先進先出原則,對每個狀態(tài)下對應(yīng)事件進行響應(yīng)或者忽略,從而實現(xiàn)不同的邏輯控制。比如對應(yīng)車載影音系統(tǒng)處于收音HMI_REC_MAIN這一大的狀態(tài)下,任何子狀態(tài)(包括收音初始狀態(tài)HMI_REC_INIT、搜索有效臺狀態(tài)HMI_REC_SEEK和預(yù)存6個信號臺AS狀態(tài))都要對其進行響應(yīng)處理,對于數(shù)字鍵1~6,都會優(yōu)先進行響應(yīng)處理,將其生成的代碼導(dǎo)入到程序中,將其中的消息響應(yīng)函數(shù)添加到對應(yīng)的模塊API函數(shù)中,實現(xiàn)其功能處理。收音狀態(tài)下HMI_REC_MAIN的狀態(tài)機控制流程圖略——編者注。
2.3 媒體播放Media層
為了有效管理寫入或者讀取USB/SD中的數(shù)據(jù),需要將USB/SD卡中的數(shù)據(jù)以FAT32文件系統(tǒng)方式管理,本文采用比較成熟的FATFS Module[6]文件系統(tǒng)模塊。需要做的工作如下:修改ff.h以匹配處理器類型;修改integer.h以匹配數(shù)據(jù)類型;對diskio.c的6個接口函數(shù)(即Disk_initialize、Disk_status、Disk_write、Disk_read、Disk_ioctl和Get_fattime)進行編程,實現(xiàn)移植。
本地播放由前臺播放模式(MainTask)和后臺解碼(CodecTask)組成,前臺負責(zé)播放控制,后臺負責(zé)歌曲解碼播放。播放流程控制主要是實現(xiàn)上下曲切換、快進快退、瀏覽播放、重復(fù)和隨機模式選擇等功能。MainTask入口函數(shù)是一個死循環(huán),一直檢測有無消息,如果有消息,則執(zhí)行消息響應(yīng)事件,一旦在指定時間內(nèi)無消息,則執(zhí)行任務(wù)調(diào)度。播放控制流程如圖8所示。
圖8 播放控制流程
車載影音系統(tǒng)已經(jīng)成為新一代汽車的基本組成部分,車載嵌入式設(shè)備要求具有良好可靠性、健壯性、易用性,以及用戶操作響應(yīng)快等特性。
3.1 硬件測試
硬件測試主要是檢測電路的硬件電路設(shè)計是否合理,比如針對電源ACC的頻繁開關(guān)測試、對U盤的模擬車輛運行過程中的抖動測試,以及針對藍牙部分的有效連接距離測試。
3.2 軟件測試
軟件測試首先要對各個模塊進行功能測試。對于媒體部分,有對各個廠商和各個容量大小的U盤或者SD卡的讀取時間測試,對USB支持播放歌曲格式(MP3、WMA、FLAC)的測試,以及對U盤文件中文件深度和最大支持播放歌曲數(shù)目測試,并且對錯誤曲目自動跳過、播放下一曲有效歌曲。對于藍牙部分,需要測試兼容性,對市面上多種品牌的多種款式手機進行測試,并且進行記錄,及時反饋給客戶。最后是對整個系統(tǒng)的打斷功能處理測試,如正在收聽電臺時,若連接上的手機接收到來電,需要轉(zhuǎn)到接聽電話界面。
經(jīng)過移植和定制的實時操作系統(tǒng)FreeRTOS采用基于優(yōu)先級的調(diào)度算法,并且通過VisualState 狀態(tài)機控制,整個系統(tǒng)代碼結(jié)構(gòu)緊湊、流程清晰,非常適合汽車電子實時嵌入式應(yīng)用?;贔reeRTOS實時操作系統(tǒng)設(shè)計的車載影音娛樂系統(tǒng)具有實時性強、精度高、穩(wěn)定性強和性價比高等特點,不僅省去了光驅(qū)部分,而且也省去了為防止車輛運行過程中給伺服系統(tǒng)帶來抖動而引入的防震部分模塊設(shè)計。
[1] 黃智偉.STM32F 32位ARM微控制器應(yīng)用設(shè)計與實踐[M].北京:北京航空航天出版社,2012.
[2] TOSHIBA.TB2929HQ DataSheet,2009.
[3] 張龍彪,張果,王劍平,等.嵌入式操作系統(tǒng)FreeRTOS的原理與移植實現(xiàn)[J].信息技術(shù),2012(11):31-34.
[4] 張龍彪.嵌入式實時操作系統(tǒng)FreeRTOS的內(nèi)核研究[D].昆明:昆明理工大學(xué),2013.
[5] 趙良,倪福川.基于有限狀態(tài)機的嵌人式系統(tǒng)建模研究與實現(xiàn)[J].計算機工程與科學(xué),2010(32):128-130.
[6] 洪岳煒,王百鳴,謝超英.一種易于移植和使用的文件系統(tǒng)FatFs Module[J].單片機與嵌入式系統(tǒng)應(yīng)用,2008(5):29-31.
Zheng Zhou
(Department of Mechanical and Electronic Engineering,East China Institute of Technology,Shanghai 200237,China)
In this paper,low-cost and high performance car audio system based on the mobile storage medium is reasearched,and combining with the FreeRTOS operating system which has scheduling mechanism of real-time and VisualState state machine control process,all of that make the system has good real-time performance,stable performance and wide market prospect.
car audio;disc;USB/SD;FreeRTOS;VisualState state machine
TP368.1
A
士然
2015-02-09)