邢艷芳,張延冬
(1.中國傳媒大學南廣學院 傳媒技術學院,江蘇 南京211172;2.南京南瑞繼保電氣有限公司,江蘇 南京,211102)
隨著近幾年嵌入式技術的飛速發(fā)展和廣泛應用,人機交互成為嵌入式設備的迫切需要。為適應Xilinx最新平臺Zynq的人機交互需要,提出一種基于Zynq的OLED 驅(qū)動設計方法。
有 機 發(fā) 光 二 極 管(Organic Light-Emitting Diode,OLED)由于同時具備自發(fā)光、不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優(yōu)異特性,被認為是下一代的平面顯示器新興應用技術[1-3]。
Xilinx最新平臺Zynq將處理器的軟件可編程能力與FPGA 的硬件可編程能力實現(xiàn)完美結合,以低功耗和低成本等系統(tǒng)優(yōu)勢實現(xiàn)良好的系統(tǒng)性能、靈活性和可擴展性。
文章詳細闡述了基于Zynq的OLED 驅(qū)動設計步驟和方法[6],并且在基于Zynq 的開發(fā)板ZedBoard上實現(xiàn)了實時顯示字母、數(shù)字和點陣圖像,為Zynq在儀器儀表領域?qū)崿F(xiàn)人機交互提供了技術支撐。
Zynq是一個ARM PS+PL 結構,其中PL部分就是傳統(tǒng)意義的FPGA,可以方便地定制相關外設IP,也可以進行相關的算法設計,和使用普通FPGA 完全一樣。如果不使用PL,Zynq的PS部分和普通的ARM 開發(fā)一樣。Zynq最大的特點是可以利用PL 部分靈活地定制外設,掛在PS上,而普通的ARM,外設是固定的。因此,Zynq的硬件外設是不固定的,這也是Zynq靈活性的一個表現(xiàn)。OLED 在Zynq 上是連接在PL上,因此需要把OLED 對應引腳掛在PS的硬件上,然后設計OLED IP核[7],再通過SDK 設計驅(qū)動程序,OLED 驅(qū)動設計流程如圖1所示。
圖1 OLED 驅(qū)動設計流程Fig.1 Design flow of OLED driver
ZedBozrd控制OLED 的主要方法是:自行設計一個IP 核,對OLED 的6 個控制信號和電源信號進行邏輯設計和引腳約束,通過AXI總線,把OLED 的IP核和PS聯(lián)系起來。在PS部分編寫相應的驅(qū)動程序,即可實現(xiàn)對OLED 的控制,如圖2所示。
圖2 OLED 系統(tǒng)設計圖Fig.2 Design diagram of OLED system
因此,要實現(xiàn)OLED 顯示功能,主要做以下幾個方面工作:設計Zynq硬件系統(tǒng)(PS部分)、設計自己的IP核和PS部分驅(qū)動程序設計。
Zynq的開發(fā)板ZedBoard上使用Inteltronic/Wisechip 公 司 的 OLED 顯 示 模 組 UG-2832HSWEG04,分辨率為128×32,是一款單色被動式顯示屏,驅(qū)動電路采用所羅門科技的SSD1306芯片[8]。具體電路如圖3所示。根據(jù)原理圖可知,ZedBoard 開發(fā)板使用的OLED 采用SPI方式控制,SPI模式使用的信號線和電源線有如下幾條:
我的老家在沂蒙山腹地,周圍都是連綿的高山。村里修了平整的水泥路,與這里的環(huán)境相得益彰。等車子駛進了村子,一股暖洋洋的春風吹過,那久違的熟悉的泥土味道、莊稼的味道、村莊的味道、炊煙的味道直撲鼻翼,如我幼時一樣,讓我聞到了故鄉(xiāng)的味道。我和父親先下了車,我們要抄一條小道走回家,母親只好自己先開車回去。
RST(RES):硬復位OLED;
DC:命令/數(shù)據(jù)標志(0,讀寫命令;1,讀寫數(shù)據(jù));
SCLK:串行時鐘線;
SDIN:串行數(shù)據(jù)線;
VDD:邏輯電路電源;
VBAT:DC/DC轉(zhuǎn)換電路電源。
在SPI模式下,每個數(shù)據(jù)長度均為8 位,在SCLK 的上升沿,數(shù)據(jù)從SDIN 移入到SSD1306,并且是高位在前的。
圖3 OLED 原理圖Fig.3 OLED scheme diagram
Zynq的硬件系統(tǒng)是指在PL 中配置相關外設,掛載到PS 中,作為PS 部分的外設使用。OLED 驅(qū)動主要用到6個IO 口,在生成硬件系統(tǒng)時,只需要利用Xilinx的嵌入式工具XPS生成最小硬件系統(tǒng),然后把OLED 的相關引腳添加到最小硬件系統(tǒng)中。主要過程如下:
(1)根據(jù)芯片型號,根據(jù)XPS工具設計流程,生成Zynq的最小硬件系統(tǒng)。
(2)在最小硬件系統(tǒng)中,添加外設IP my_oled,把OLED 的SPI引腳添加到工程中。添加一個6位寄存器,每位和SPI引腳對應。
(3)my_oled IP核邏輯設計主要完成IP核引腳添加、端口映射和用戶邏輯功能。首先要對設計的IP 核添加引腳,在系統(tǒng)生成的MPD 文件中,添加OLED 的相關引腳端口和方向信息。
在MPD 文件中,在PORT 下 添 加OLED 的相關引腳和方向信息,具體代碼如下:
PORT DC="",DIR=O
PORT RES="",DIR=O
PORT SCLK="",DIR=O
PORT SDIN="",DIR=O
PORT VBAT="",DIR=O
PORT VDD="",DIR=O
(4)在系統(tǒng)生成的my_oled.vhd文件中,用VHDL語言進行端口設計,主要進行以下兩個設計。
聲明IP和用戶6個信號和電源的端口。代碼如下:
將用戶端口和IP 核端口進行映射,代碼如下:
(5)在 系 統(tǒng) 生 成 的user_logic.v 文 件 中,用Verilog語言進行邏輯設計,實現(xiàn)寄存器和SPI對應端口連接并實時讀取,主要代碼如下。其中slv_reg0為IP核寄存器,tmp為用戶定義臨時寄存器,tmp的每一位和IP 端口一一對應。實現(xiàn)把slv_reg0寄存器低6位實時傳給tmp寄存器,通過對寄存器slv_reg0的寫操作達到控制6個引腳的時序。
由于ZedBoard開發(fā)板上的OLED 使用的是SPI協(xié)議,并且只支持寫,不支持讀,因此控制OLED 就 是 在SCLK 的 時 鐘 下,通 過SDIN 進 行命令和數(shù)據(jù)的傳輸。OLED 的控制需要經(jīng)過初始化、傳數(shù)據(jù)和命令以及對顯存設置等操作實現(xiàn)[9-10]。
驅(qū)動IC的初始化代碼,可以參考廠家推薦的設置,但需要根據(jù)開發(fā)板上OLED 實際參數(shù)進行一些修改。
根據(jù)SSD1306數(shù)據(jù)手冊的初始化說明,具體步驟如圖4所示。初始化的實現(xiàn)就是對SSD1306進行寫命令。
按照圖4參數(shù),逐步把命令寫入SSD1306即可實現(xiàn)對SSD1306的初始化。
圖4 SSD1306初始化步驟Fig.4 SSD1306initialization step
在SCLK 時鐘下,根據(jù)要寫入的數(shù)據(jù)或者命令,設置SDIN 引腳的電平,一位一位地把數(shù)據(jù)寫入SSD1306。SSD1306 每次傳送的命令和數(shù)據(jù)均為一個字節(jié),傳送數(shù)據(jù)和命令的區(qū)別是通過Set_OLED_DC 宏,設置該函數(shù)為寫數(shù)據(jù),通過Clr_OLED_DC 宏,設置該函數(shù)為寫命令。實現(xiàn)一個字節(jié)的數(shù)據(jù)傳輸代碼如下:
我們采用的辦法是在PS 的內(nèi)部建立一個OLED的GRAM(共128個字節(jié)),在每次修改的時候,只是修改PS 上的GRAM(實際上就是SRAM),在修改完之后,一次性把PS上的GRAM寫入到OLED的GRAM。具體代碼如下:
void OLED_Refresh_Gram(void)
系統(tǒng)實現(xiàn)了OLED 的字母、數(shù)字和點陣圖形實時顯示,如圖5所示。
圖5 OLED 運行結果Fig.5 OLED’s operation result
系統(tǒng)采用可軟硬件協(xié)同設計的Zynq器件,定制硬件IP核,采用傳統(tǒng)ARM 程序設計方法設計OLED 驅(qū)動程序和測試程序,實現(xiàn)了實時顯示。解決了基于Zynq器件在廣電儀器和電力儀表儀器中人機交互的工程技術,具有集成度高、可移植性強和通用性好等優(yōu)點。
[1] 李想,鄭喜鳳,陳宇.基于Linux下的OLED 顯示模塊設計[J].液晶與顯示,2012,27(1):103-107.Li X,Zheng X F,Chen Y.Design of OLED display module based on S3C2440[J].Chinese Journal of Liquid Crystals and Displays,2012,27(1):103-107.(in Chinese)
[2] 劉健,謝文法.OLED 器件光電性能集成測試系統(tǒng)研制[J].液晶與顯示,2013,28(1):132-137.Liu J,Xie W F.Integrated optoelectronic performance test system for OLEDs[J].Chinese Journal of Liquid Crystals and Displays,2013,28(1):132-137.(in Chinese)
[3] 冉峰,何林奇,季淵.無線OLED 微顯示器系統(tǒng)的設計與實現(xiàn)[J].液晶與顯示,2012,27(5):633-637.Ran F,He L Q,Ji Y.Design and implementation of wireless OLED microdisplay system [J].Chinese Journal of Liquid Crystals and Displays,2012,27(5):633-637.(in Chinese)
[4] 何劍鋒,李祥,何月順,等.基于S3C2410的嵌入式LINUX 下OLED 模塊驅(qū)動設計[J].液晶與顯示,2010,25(1):90-93.He J F,Li X,He Y S,et al.Driving design of OLED module based on S3C2410in embedded Linux[J].Chinese Journal of Liquid Crystals and Displays,2010,25(1):90-93.(in Chinese)
[5] 劉麗,劉衛(wèi)東,洪勝峰.基于FPGA 的AMOLED 驅(qū)動控制系統(tǒng)設計[J].現(xiàn)代顯示,2012(12):31-34.Liu L,Liu W D,Hong S F.Design of AMOLED driving control system based on FPGA[J].Advanced Display,2012(12):31-34.(in Chinese)
[6] 李國強,章堅武,占志偉.AMOLED 驅(qū)動電路和LINUX 下驅(qū)動程序設計[J].液晶與顯示,2011,26(4):527-531.Li G Q,Zhang J W,Zhan Z W.Design of AMOLED drive circuit and Linux driver[J].Chinese Journal of Liquid Crystals and Displays,2011,26(4):527-531.(in Chinese)
[7] 何賓.Xilinx All Programmable Zynq-7000 SoC 設計指南[M].北京:清華大學出版社,2013:384-391.He B.Xilinx All Programmable Zynq-7000 SoC Design Guide [M].Beijing:Tsinghua University Press,2013:384-391.(in Chinese)
[8] 陸佳華,江舟,馬岷.嵌入式系統(tǒng)軟硬件協(xié)同設計實戰(zhàn)指南:基于Xilinx Zynq[M].北京:機械工業(yè)出版社,2013:17-18.Lu J H,Jiang Z,Ma M.The Collaborative Design Practical Guide of Hardware and Software in an Embedded System Developed by Xilinx Zynq[M].Beijing:China Machine Press,2013:17-18.(in Chinese)
[9] 盧貴主.OLED 面板的彩色顯示驅(qū)動技術研究[J].半導體光電,2011(2):175-178.Lu G Z.Research on OLED color display driver technology[J].Semiconductor Optoelectronics,2011(2):175-178.(in Chinese)
[10] 王星全,蘭明蛟,鄭振華.基于Windows CE的OLED 驅(qū)動程序設計與實現(xiàn)[J].微型機與應用,2011(20):17-20.Wang X Q,Lan M J,Zheng Z H.Design and implementation of OLED drivers based on Windows CE[J].Microcomputer &Its Applications,2011(20):17-20.(in Chinese)