呂春豪,郭利進
(天津工業(yè)大學 電氣工程與自動化學院,天津300387)
呂春豪(碩士研究生),主要研究方向為微機控制技術(shù);郭利進(副教授),主要研究方向為微機控制技術(shù)、現(xiàn)場總線。
伴隨著數(shù)碼科技的快速發(fā)展以及數(shù)碼相機的日益普及,傳統(tǒng)的相冊和相框由于自身局限性已經(jīng)不能完全滿足人們?nèi)找嬖鲩L的對于照片的有效存儲和分享的需求。鑒于此,數(shù)碼相框應運而生,經(jīng)過幾年的發(fā)展,數(shù)碼相框[1]的外觀已經(jīng)非常接近傳統(tǒng)相框,而且更為精致。從200萬像素發(fā)展到目前的600萬以上像素,畫面精度和質(zhì)量已經(jīng)有了大幅上升。此外,還有多功能數(shù)碼相框,除了能展示數(shù)碼照片外,還可以播放 MP3/MP4/幻燈片、電影/影像/電視,以及看電子書、設置鬧鐘和日歷等。
本文介紹一種簡單、低成本的數(shù)碼相框設計,主要由LPC1100系列MCU、SD存儲卡、TFT液晶屏以及電源等外圍電路組成。通過信號處理芯片LPC1114實現(xiàn)BMP圖片文件的讀取以及TFT液晶屏的顯示。經(jīng)試驗,此數(shù)碼相框可以存儲和展示幾百甚至上千張的照片,能夠很好地完成SD卡中照片的循環(huán)播放,性能穩(wěn)定且畫面清晰,比普通相框的單一功能更有優(yōu)勢。
本數(shù)碼相框功能非常簡單,把320×240像素的16位或24位BMP照片放入SD卡中,數(shù)碼相框就會循環(huán)讀取SD卡中的照片,并逐一顯示。硬件平臺以NXP公司生產(chǎn)的低 功 耗、高 性 能 ARM Cortex-M0[2]內(nèi) 核 微 控 制 器LPC1114為核心,配合一個SD卡和一個3.2英寸的TFT顯示屏。數(shù)碼相框硬件結(jié)構(gòu)框圖如圖1所示。
圖1 數(shù)碼相框硬件結(jié)構(gòu)框圖
電源電路作為本系統(tǒng)的供電電路具有十分重要的作用,是整個系統(tǒng)的動力核心。數(shù)碼相框一般情況下都是處于運行狀態(tài),非常耗電,不適合采用電池供電,所以這里采用直流電源供電。首先,220V的交流電經(jīng)過變壓整流轉(zhuǎn)換成9~12V的直流電壓,再通過二極管IN5819進入三端穩(wěn)壓器7805轉(zhuǎn)換成5V電壓,然后通過西伯斯公司(Sipex半導體)生產(chǎn)的低壓差(LDO)穩(wěn)壓芯片SPX1117轉(zhuǎn)換成系統(tǒng)需要的3.3V電壓。設計中選取7805主要出于兩方面的考慮:一是所需外圍元件少,內(nèi)部有過流、過熱及調(diào)整管的保護電路;二是可以擴大輸入電壓范圍,并為其他5V電路提供電源。IN5819的作用是防止電源正負極接反,SPX1117是將7805穩(wěn)定好的5V電壓轉(zhuǎn)換成系統(tǒng)需要的3.3V電壓。電源電路如圖2所示。
圖2 電源電路
存儲器采用普通SD卡,容量選擇在2GB以下,其SD卡存儲電路如圖3所示。SD卡最大的特點就是具有加密功能,可以充分保證數(shù)據(jù)資料的安全性。SD卡支持兩種可選的通信協(xié)議,分別為SD模式和SPI模式[3]?;谥骺匦酒倪x擇,設計中采用SPI模式為彩屏模塊提供字庫和圖庫,這樣大大降低了硬件要求,同時又能很好地滿足系統(tǒng)的需求。需要注意的是,不同卡座引腳有所不同,所以在使用SD卡座時,注意先檢查引腳區(qū)別。
圖3 SD卡存儲電路
這里選擇市場上比較流行且方便購買的3.2寸TFT彩屏模塊[4],其控制芯片為ILI9320。為了節(jié)省LPC1114的I/O端口,在數(shù)據(jù)的輸入端口采用數(shù)據(jù)鎖存器74HC573進行數(shù)據(jù)鎖存,以實現(xiàn)兩次8位數(shù)據(jù)的分轉(zhuǎn)。背光采用8050三極管控制,串聯(lián)10kΩ限制電阻,放大電流達到300mA,完全能為5路LED提供足夠的電流。觸摸屏選擇電阻式觸摸屏,驅(qū)動芯片為ADS7843,以此實現(xiàn)對于數(shù)碼相框的鍵盤操作。其模塊電路如圖4所示。
處理器部分電路是本系統(tǒng)的核心電路,設計中選取NXP公司推出的基于ARM Cortex-M0內(nèi)核的LPC1100系列MCU LPC1114。LPC1114屬于32位微控制器,主要面向8、16位微控制器的應用,具有高性能、低功耗、簡單指令集和統(tǒng)一編址尋址等優(yōu)點,相對于市場上存在的8/16位架構(gòu)來說,它有效地降低了代碼長度。它不僅能執(zhí)行基本的控制任務,而且能進行復雜的運算。執(zhí)行效率的提高直接轉(zhuǎn)換為能耗的降低。目前,LPC1100系列MCU運行速度高達50MHz,其功耗也得到了很大程度的優(yōu)化——平均電流不到10mA。
圖4 TFT液晶模塊電路
LPC1114作為LPC1100系列的一種,內(nèi)部資源非常豐富,簡要介紹如下:
① 多達42個帶有配置上拉/下拉電阻的通用GPIO,驅(qū)動電流可達20mA;
② 具有一個增強快速模式(FM+)I2C接口,4個通用定時器/計數(shù)器,8通道10位ADC;
③32KB片上Flash可編程存儲器,高達8KB的SRAM;
④ 一個RS-485/EIA-485標準的通用異步串行收發(fā)器,兩個具有SSP特性的SPI接口;
⑤ 擁有集成PMU(電源管理單元),可自動調(diào)整其內(nèi)部的電壓調(diào)節(jié)器,以降低睡眠、深度睡眠和深度掉電模式期間的功耗。
控制部分電路其實就是LPC1114的最小系統(tǒng)電路,主要由時鐘電路、調(diào)試電路和復位電路組成,控制電路如圖5所示。
彩屏模塊程序可以分為兩大類:一類是內(nèi)部函數(shù),主要由復位函數(shù)、寫數(shù)據(jù)函數(shù)、寫寄存器函數(shù)、光標設置函數(shù)、顯示窗口設置函數(shù)、清屏函數(shù)等組成,供TFT模塊內(nèi)部驅(qū)動程序調(diào)用;另一類為外部函數(shù),主要由TFT初始化、背光控制、顯示測試、寫點函數(shù)等組成,專門提供用戶應用程序調(diào)用。
圖5 LPC1114控制電路
學習SPI總線時已經(jīng)介紹了讀/寫SD卡的方法,對于SD卡的讀寫操作都是以扇區(qū)為基本單位進行的,但是,系統(tǒng)又是如何讀取的呢?又是怎么知道文件存放在哪些扇區(qū)呢?本設計采用文件系統(tǒng)FatFs[5]的方法對存儲器空間進行組織和分配,并對存入的文件進行保護和檢索。具體來說,也就是它負責為用戶建立文件、存入、讀出、修改、轉(zhuǎn)儲以及控制文件的存取,當用戶不再使用的時候撤銷文件。
FatFs文件系統(tǒng)的結(jié)構(gòu)主要分為3個層:磁盤I/O操作、FatFs模塊和應用層。前兩層分別是移植文件系統(tǒng)需要編寫的驅(qū)動函數(shù)層和文件系統(tǒng)操作層,而最后一層就是用戶操作層,當文件系統(tǒng)移植完成后,用戶可以根據(jù)自己的需要編寫應用程序,操作磁盤。
FatFs作為一種開源項目具有容易移植、代碼小、占用資源少、支持RTOS和多扇區(qū)讀/寫等特點,非常適合微處理器使用。要移植FatFs文件系統(tǒng),首先需要到FatFs文件系統(tǒng)的官方網(wǎng)站,下載文件系統(tǒng)源代碼。設計中使用的版本是FatFs R0.08b,具體移植步驟介紹如下:
① 解壓下載的文件系統(tǒng),可以看到一共有兩個文件夾:一個是doc,包含F(xiàn)atFs的描述、特性說明等;另一個是src,可以存放所有的源代碼信息,一共有8個文件。
② 在工程下新建一個文件夾,存放文件系統(tǒng)源代碼。
③ 把源代碼都添加到相應的工程中,首先根據(jù)需要修改數(shù)據(jù)類型,在integer.h中修改適合的數(shù)據(jù)類型。
④ 配置文件系統(tǒng),可以根據(jù)字節(jié)的需要進行配置,從而減小代碼和內(nèi)存空間。
⑤ 打開diskio.c文件,編寫相應的函數(shù),如初始化磁盤函數(shù)、磁盤狀態(tài)函數(shù)、讀/寫扇區(qū)函數(shù)、磁盤相關功能控制函數(shù)等。
⑥ 最后,需要在ff.c中添加函數(shù)get_fattime,此函數(shù)可獲取操作時間,便于在文件屬性中填寫相應的創(chuàng)建、修改、訪問時間。
BMP是Windows操作系統(tǒng)中的標準圖像文件格式,應用非常廣泛。它采用位映射存儲格式,除了圖像深度可選擇以外,不采用其他任何壓縮,因此,BMP占用的空間很大。BMP文件的圖像深度可選擇1位、4位、8位、16位、32位等。BMP文件存儲數(shù)據(jù)時,圖像的掃描方式是按照從左到右、從下到上的順序。典型的BMP圖像文件由4部分組成,如表1所列。
表1 BMP位圖文件結(jié)構(gòu)
位圖顯示[6]是通過函數(shù)參數(shù)傳遞文件名,通過文件名讀取文件數(shù)據(jù)。讀取位圖數(shù)據(jù)時,先讀取54字節(jié)的頭信息,再根據(jù)頭信息判斷是否為位圖圖像。如果不是位圖,直接返回不再讀取數(shù)據(jù);如果是位圖,再判斷是16位還是24位,并循環(huán)讀取數(shù)據(jù)信息,經(jīng)過數(shù)據(jù)轉(zhuǎn)換后發(fā)送到TFT進行顯示。
讀取位圖文件需要調(diào)用FatFs文件系統(tǒng)的API函數(shù),在讀取文件時需要注意以下3點:
① 首先要f_mounth函數(shù)注冊工作區(qū),在文件讀取完成后,再調(diào)用這個函數(shù)來注銷工作區(qū);
② 打開文件需要調(diào)用的f_open函數(shù),當文件讀取完成后,再調(diào)用f_close函數(shù)關閉文件,所以這兩個函數(shù)必須成對出現(xiàn);
③ 在讀取文件時,可以由f_read函數(shù)返回的結(jié)果和次函數(shù)的讀取結(jié)果來判斷數(shù)據(jù)是否讀取完成。
圖6為數(shù)碼相框軟件流程圖。系統(tǒng)上電后先按順序初始化系統(tǒng)時鐘、SSP0總線、SD卡以及TFT,之后循環(huán)掃描顯示數(shù)碼照片。代碼編寫過程中完全實現(xiàn)結(jié)構(gòu)化,只需要直接調(diào)用數(shù)碼相框,掃描顯示函數(shù)BmpFileScan()即可實現(xiàn)其功能。
圖6 數(shù)碼相框軟件流程圖
數(shù)碼相框是基于NXP公司推出的Cortex-M0內(nèi)核LPC1100系列ARM芯片LPC1114設計的,主要從硬件和軟件兩個方面介紹了一種簡易數(shù)碼相框的制作過程。硬件電路較為簡單,軟件方面通過FatFs文件系統(tǒng)的移植,能夠很好地完成BMP圖片的循環(huán)播放。經(jīng)試驗,LPC1114微控制器能夠穩(wěn)定地實現(xiàn)數(shù)碼相框的基本功能,實物效果如圖7所示。
對于一些特殊效果尚無法實現(xiàn),再加上除了BMP格式外,都要涉及解碼問題,而使用微處理器軟件解碼非常緩慢的。對于這些不完善的地方在后續(xù)的研究中將逐步解決。
圖7 實物效果
[1]丁鑫蕾,劉一清,余奔.一種簡易數(shù)碼相框的設計[J].微型機與應用,2011(3):19-21,25.
[2]范云龍,方安平,李寧.Cortex-M0處理器初探[J].單片機與嵌入式系統(tǒng)應用,2010(6):79-82.
[3]楊懷德,樸希南.基于SPI的SD卡驅(qū)動軟件設計[J].現(xiàn)代計算機,2012(4):78-82.
[4]周波.TFT液晶顯示原理[J].科技咨詢,2006(35):15-18.
[5]李世奇,董浩斌,李榮生.基于FatFs文件系統(tǒng)的SD卡存儲器設計[J].測控技術(shù),2011(12):84-86.
[6]楊喜東.基于AVR單片機的簡易數(shù)碼相框設計[J].機械電子,2012(9):135-136.