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