• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于i.MX6Q+FPGA平臺Android下EIM總線接口設(shè)計(jì)

      2016-06-08 06:49:03陳崇森
      現(xiàn)代計(jì)算機(jī) 2016年13期
      關(guān)鍵詞:驅(qū)動程序內(nèi)核調(diào)用

      陳崇森

      (廣州海格通信集團(tuán)股份有限公司,廣州510663)

      ?

      基于i.MX6Q+FPGA平臺Android下EIM總線接口設(shè)計(jì)

      陳崇森

      (廣州海格通信集團(tuán)股份有限公司,廣州510663)

      摘要:

      關(guān)鍵詞:

      0 引言

      i.MX6Q平臺是Freescale公司推出的新一代面向多媒體設(shè)備的高性能低功耗應(yīng)用處理器,在手持、車載終端,平板電腦等通信、工業(yè)、醫(yī)療及消費(fèi)類電子領(lǐng)域獲得廣泛應(yīng)用?;谒暮薃RM Cortex-A9架構(gòu),運(yùn)行頻率可高達(dá)1.2GHz,外設(shè)接口豐富,可運(yùn)行Android系統(tǒng),為用戶提供流暢的使用體驗(yàn)。大規(guī)模FPGA可實(shí)現(xiàn)專屬復(fù)雜算法運(yùn)算及片上系統(tǒng)的定制,兩者結(jié)合可為數(shù)字業(yè)務(wù)處理提供完美的平臺解決方案。i.MX6Q與FPGA采用EIM總線接口連接可實(shí)現(xiàn)高速通信,此種連接具有通信可靠,F(xiàn)PGA時序邏輯易于實(shí)現(xiàn)等優(yōu)點(diǎn),但是此類接口在Android 4.2.2下驅(qū)動開發(fā)沒有先例可參考,實(shí)現(xiàn)從Android的App到FGPA的頂層到底層的數(shù)據(jù)貫通成為了設(shè)備研發(fā)的關(guān)鍵。

      1 i.MX6Q的特點(diǎn)及EIM接口

      i.MX6Q的特點(diǎn)[1]如下:

      ①4個ARM Cortex-A9內(nèi)核,每個內(nèi)核運(yùn)行頻率高達(dá)1.2 GHz,1 MB L2緩存,32 KB指令和數(shù)據(jù)緩存NEON SIMD媒體加速器。

      ②GPU 3D為Vivante GC2000,200Mtri/s 1000Mpxl /s,OpenGL ES 3.0 & Halti,CL EP;GPU 2D(矢量圖形)為Vivante GC355,300Mpxl/s,OpenVG 1.1;GPU 2D(復(fù)合)為Vivante GC320,600Mpxl/s,BLIT;支持1080p60 h. 264視頻解碼,1080p30 H.264 BP/雙720p視頻編碼;攝像頭接口支持1x 20位并行,MIPI-CSI2(4通道),三路同時輸入。

      ③存儲器支持兩個32 LP-DDR2,1個64 DDR3 / LV-DDR3;NAND支持SLC/MLC,40位ECC,ONFI2.2,DDR。

      ④數(shù)據(jù)連接支持4個USB2.0,1 Gbps + IEEE1588以太網(wǎng)接口,3個SD/MMC 4.4,1個SDXC5x SPI,5x UART,3x I2C,MIPI-HIS,PCIe 2.0(單通道)。

      ⑤支持2 x 4XGA(2048x1536)或2 x[1080p + WXGA(1280x720)]顯示。

      ⑥電源管理PMU集成恩智浦PF100電源管理單元。

      i.MX6Q的EIM總線接口用于為片外設(shè)備和存儲器提供帶片選、時鐘和控制邏輯的總線接口,既提供如SRAM等設(shè)備的異步訪問功能,又具備對NOR-Flash 或PSRAM等設(shè)備的同步訪問功能。EIM總線具備異步模式、異步頁面模式、多路復(fù)用地址數(shù)據(jù)模式、突發(fā)時鐘模式、低功耗模式及啟動模式等六種工作模式[2],該嵌入式平臺EIM總線采用異步控制模式,EIM總線功能框圖如圖1所示。

      EIM總線提供多達(dá)4個片選分區(qū),每個片區(qū)支持128MB的尋址空間,具備寫保護(hù)引腳,支持多路復(fù)用配置成x8、x16、x32數(shù)據(jù)接口。支持大端及小端模式訪問,具備外部中斷功能。

      該嵌入式平臺大規(guī)模FPGA采用ALTERA公司Cyclone III系列的EP3C40F324芯片。EP3C40F324芯片內(nèi)部含39600個邏輯單元,1161216 bit片內(nèi)RAM,324個管腳[3]。i.MX6Q與EP3C40F324通過EIM總線接口連接進(jìn)行數(shù)據(jù)傳輸,具體連接如圖2所示。

      圖1 EIM總線功能框圖

      2 Android系統(tǒng)下EIM總線接口設(shè)計(jì)

      Android是一種基于Linux的操作系統(tǒng),最早由Google等30多家科技公司和手機(jī)公司組成的“開放手機(jī)聯(lián)盟”共同研發(fā),而且完全免費(fèi)開源,主要應(yīng)用于移動設(shè)備,如智能手機(jī)及平板電腦[4]。Android系統(tǒng)的總體框架主要分為四層:Kernel、Libraries、Framework、Applications。其中Kernel、Libraries采用C語言或匯編語言實(shí)現(xiàn),使用JNI連接Libraries和Framework。各層描述如下:

      圖2 i.MX6Q與EP3C40F324的連接

      ①最底層為Linux Kernel,主要負(fù)責(zé)內(nèi)存管理、進(jìn)程調(diào)度等系統(tǒng)管理以及終端的硬件驅(qū)動。其中的Binder driver為Google為Android設(shè)計(jì)的一個增強(qiáng)系統(tǒng)的進(jìn)程間通信能力模塊。

      ②Kernel的上一層為Libraries,包含了核心庫、第三方庫和Android虛擬機(jī)。Android并沒有直接采用傳統(tǒng)的J2SE或J2ME的Java虛擬機(jī),而是自己建立了一個稱為dalvik的虛擬機(jī),號稱更節(jié)省字節(jié)碼的空間,性能更好。

      ③Framework為Android為應(yīng)用開發(fā)者設(shè)計(jì)的一套軟件框架,提供了豐富的組件,簡化了程序開發(fā)的架構(gòu)設(shè)計(jì),封裝了SDK,提供API供上層調(diào)用。

      ④Application為在Framework基礎(chǔ)上開發(fā)的各種應(yīng)用。

      HAL層(硬件抽象層)是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層,其目的是在于將硬件抽象化。它隱藏了特定平臺的硬件接口細(xì)節(jié),為操作系統(tǒng)提供虛擬的硬件平臺[5]。HAL層與Android系統(tǒng)框架的關(guān)系如圖3所示:

      圖3 HAL層與Android系統(tǒng)框架結(jié)構(gòu)圖

      要實(shí)現(xiàn)i.MX6Q的EIM總線接口從Android的應(yīng)用程序到FPGA的貫通,自底向上需要開發(fā)的驅(qū)動及添加的接口包括:

      ①Android的Linux內(nèi)核源代碼工程中編寫EIM總線驅(qū)動程序。

      ②Android的HAL層增加接口模塊以訪問EIM總線驅(qū)動程序。

      ③Android系統(tǒng)中編寫JNI方法為應(yīng)用程序框架層提供Java接口。

      ④Android系統(tǒng)的應(yīng)用程序框架層增加EIM總線服務(wù)接口。

      從Android的應(yīng)用程序到FPGA的接口分層調(diào)用關(guān)系如圖4所示:

      圖4 EIM總線接口的分層調(diào)用關(guān)系圖

      3 Android系統(tǒng)下EIM總線接口實(shí)現(xiàn)

      按照EIM總線接口設(shè)計(jì)方法,第一步完成Linux內(nèi)核源代碼工程中編寫EIM總線驅(qū)動程序。EIM總線驅(qū)動在該嵌入式平臺上的應(yīng)用本質(zhì)上屬于字符設(shè)備驅(qū)動,驅(qū)動程序需實(shí)現(xiàn)Linux驅(qū)動接口函數(shù),為應(yīng)用程序與FPGA通信提供標(biāo)準(zhǔn)接口。EIM總線的時序配置關(guān)系到通信速率的設(shè)置及與FPGA交換數(shù)據(jù)的穩(wěn)定性,涉及的EIM總線配置寄存器如表1所示。

      表1 EIM總線配置寄存器

      圖5 EIM總線在異步模式讀寫時序圖

      EIM總線在異步模式下的讀寫時序如圖5所示。

      針對Linux3.0.35內(nèi)核的EIM總線接口驅(qū)動設(shè)計(jì),程序主體為各個文件操作函數(shù)的具體實(shí)現(xiàn),文件操作結(jié)構(gòu)體eimbus_fops中的成員函數(shù)定義如下:

      其中eimbus_read提供CS1片區(qū)基于物理地址偏移的數(shù)據(jù)讀取接口,eimbus_write提供CS1片區(qū)基于物理地址偏移的數(shù)據(jù)寫入接口,eimbus_mmap提供物理地址空間到應(yīng)用空間的高效片區(qū)映射;驅(qū)動程序加載及卸載時執(zhí)行eimbus_init及eimbus_exit函數(shù),eimbus_init完成EIM總線CS1片區(qū)的物理地址空間到虛擬地址空間映射、EIM總線時序配置等初始化工作,而eimbus_exit則執(zhí)行卸載時相關(guān)資源的釋放。通過修改Kernel相關(guān)目錄的Kconfig文件,將此驅(qū)動編譯進(jìn)內(nèi)核。

      第二步在HAL層增加接口模塊以訪問EIM總線驅(qū)動程序。按照Android硬件抽象層規(guī)范要求,在Android開發(fā)包頂層目錄的hardware/libhardware/ include/hardware下創(chuàng)建eimbus.h用于定義模塊ID、硬件模塊結(jié)構(gòu)體eimbus_module_t、硬件接口結(jié)構(gòu)體eimbus_device_t。在硬件接口結(jié)構(gòu)體中,fd表示設(shè)備文件描述符,對應(yīng)驅(qū)動設(shè)備文件"/dev/eimbus",eim_write_data及eim_real_data為HAL層向上層提供的函數(shù)接口。在hardware/libhardware/modules下創(chuàng)建eimbus目錄,在eimbus目錄下建立eimbus.c源程序,定義模塊實(shí)例變量,實(shí)現(xiàn)設(shè)備打開和關(guān)閉接口eimbus_device_open及eimbus_device_close,設(shè)備訪問接口eimbus_device_t及eim_write_data。模塊實(shí)例變量定義如下:

      其中eimbus_device_open調(diào)用系統(tǒng)open函數(shù)打開/dev/eimbus,eimbus_device_close調(diào)用系統(tǒng)close函數(shù)關(guān)閉/dev/eimbus;eim_write_data調(diào)用系統(tǒng)write函數(shù)使用驅(qū)動定義的標(biāo)準(zhǔn)接口函數(shù),eim_read_data調(diào)用系統(tǒng)read函數(shù)使用驅(qū)動定義的標(biāo)準(zhǔn)接口函數(shù)。在hardware/libhardware/modules/eimbus目錄下新建Android.mk文件用于編譯此接口模塊,最終生成eimbus.default.so目標(biāo)文件。

      第三步,編寫JNI方法為應(yīng)用程序框架層提供Java接口。在frameworks/base/services/jni目錄,創(chuàng)建com_Android_server_EimbusService.cpp源程序,定義eimbus_init、eimbus_readData和eimbus_writeData三個JNI方法。其中eimbus_readData調(diào)用硬件抽象層定義的硬件訪問接口對FPGA進(jìn)行讀操作,eimbus_writeData調(diào)用硬件抽象層定義的硬件訪問接口對FPGA進(jìn)行寫操作。JNI方法表定義如下:

      通過修改對應(yīng)目錄的Android.mk文件,將此JNI方法編譯進(jìn)Android系統(tǒng)鏡像。

      最后一步,在Android系統(tǒng)的應(yīng)用程序框架層增加EIM總線服務(wù)接口。在Android系統(tǒng)中,應(yīng)用程序通過代理來調(diào)用硬件服務(wù)。在frameworks/base/core/java/ android/os目錄,創(chuàng)建IEimbusService.aidl文件定義IEimbusService接口,分別通過writeData和readData兩個函數(shù)來實(shí)現(xiàn)通過EIM總線訪問FPGA。通過修改對應(yīng)目錄的Android.mk文件,編譯IEimbusService.aidl生成IEimbusService.Stub接口。在frameworks/base/ services/java/com/Android/server目錄,創(chuàng)建EimbusService.java文件,定義EimbusService調(diào)用JNI方法init_native、writeData_native和readData_native提供EIM總線訪問服務(wù)。通過修改SystemServer.java文件,在系統(tǒng)啟動時自動加載EimbusService。

      最后可編寫Android應(yīng)用程序來測試EIM總線對FPGA片內(nèi)RAM讀寫。應(yīng)用程序App通過ServiceM-anager.getService("eimbus")來獲得EimbusService,服務(wù)名稱“eimbus”在系統(tǒng)啟動加載EimbusService時指定。然后通過IEimbusService.Stub.asInterface函數(shù)將EimbusService轉(zhuǎn)換為IEimbusService接口,IEimbusService接口在Android.os.IEimbusService中定義。App通過IEimbusService.readData和IEimbusService.writeData兩個接口實(shí)現(xiàn)對FGPA片內(nèi)RAM的讀寫。

      通過在i.MX6Q側(cè)編寫Android應(yīng)用程序,并在FPGA側(cè)編程實(shí)現(xiàn)符合EIM總線時序的被讀寫邏輯,通過FPGA集成開發(fā)環(huán)境Quartus II的SignalTap II邏輯分析工具觀測讀寫時序波形與回環(huán)數(shù)據(jù)測試表明,Android應(yīng)用程序與FPGA通過EIM總線可實(shí)現(xiàn)穩(wěn)定快速通信。

      4 結(jié)語

      本文詳細(xì)介紹了Android系統(tǒng)下i.MX6Q與FPGA通過EIM總線實(shí)現(xiàn)可靠通信的接口分層設(shè)計(jì)及實(shí)現(xiàn)方法,實(shí)現(xiàn)FPGA芯片這種非標(biāo)準(zhǔn)接口在Android系統(tǒng)下的數(shù)據(jù)互通,可用于終端、平板等通信、工業(yè)領(lǐng)域,對需要使用FPGA編程實(shí)現(xiàn)專用算法的Android系統(tǒng)嵌入式平臺具有很好的參考價值。

      參考文獻(xiàn):

      [1]Freescale Semiconductor. http://www.nxp.com,2016.

      [2]Freescale Semiconductor. i.MX 6Dual/6Quad Applications Processor Reference Manual,2013.

      [3]Altera Corporation. Cyclone III Device Handbook,2012.

      [4]李寧.Android開發(fā)權(quán)威指南[M].北京:人民郵電出版社,2011.

      [5]王振麗.Android底層開發(fā)技術(shù)實(shí)戰(zhàn)詳解[M].北京:電子工業(yè)出版社,2015.

      Design of EIM Bus Interface Based on i.MX6Q+FPGA Platform under Android

      CHEN Chong-sen
      (Guangzhou Haige Communications Group Incorporated Company,Guangzhou 510663)

      Abstract:

      Keywords:

      以Freescale公司的i.MX6Q四核處理器及ALTERA EP3C40F324 FPGA為核心的嵌入式硬件平臺,介紹i.MX6Q與FPGA基于EIM總線通信接口設(shè)計(jì),基于Linux 3.0.35內(nèi)核開發(fā)此接口的驅(qū)動程序方法以及基于Android 4.2.2下從應(yīng)用到驅(qū)動程序的通信實(shí)現(xiàn)。該技術(shù)已應(yīng)用到某終端設(shè)備研制,實(shí)現(xiàn)FPGA芯片與Android系統(tǒng)的連接,實(shí)際測試其與Android應(yīng)用程序可靠通信,對同類型嵌入式平臺的驅(qū)動接口設(shè)計(jì)及開發(fā)有借鑒意義。

      i.MX6Q;EIM總線;FPGA;Android

      文章編號:1007-1423(2016)13-0060-06

      DOI:10.3969/j.issn.1007-1423.2016.13.016

      作者簡介:

      陳崇森(1983-),男,廣東廣州人,碩士,研究方向?yàn)榍度胧较到y(tǒng)、驅(qū)動程序設(shè)計(jì)等

      收稿日期:2016-03-18修稿日期2016-04-18

      Applies Freescale i.MX6Q quad core processor and Altera EP3C40F324 FPGA as the core components for the embedded platform. The communication interface design is based on EIM bus between I.MX6Q and FPGA,the development method of this interface driver is based on Linux 3.0.35 kernel,and the implementation of communication from the application to the driver is based on android 4.2.2. The technology has been applied to a terminal equipment. The connection between FPGA chip and the Android system is successful. Tests show that the communication between Android application and FPGA is reliable. The design of the interface is a reference to the same type of embedded platform.

      i.MX6Q;EIM Bus;FPGA;Android

      猜你喜歡
      驅(qū)動程序內(nèi)核調(diào)用
      萬物皆可IP的時代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      驅(qū)動程序更新與推薦
      驅(qū)動程序更新與推薦
      收藏| 祁连县| 肇源县| 海原县| 闵行区| 隆昌县| 万山特区| 阳泉市| 尉氏县| 遵义市| 晋城| 抚顺市| 分宜县| 高要市| 名山县| 天峻县| 沙河市| 温州市| 新安县| 花垣县| 双桥区| 旬阳县| 琼结县| 靖边县| 天水市| 阿克陶县| 中阳县| 辉南县| 石景山区| 福海县| 镇坪县| 德清县| 内丘县| 合阳县| 连平县| 嘉荫县| 克拉玛依市| 海阳市| 霍州市| 乌兰县| 浮山县|