亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        陳崇森

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

        ?

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

        陳崇森

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

        摘要:

        關(guān)鍵詞:

        0 引言

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

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

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

        ①4個(gè)ARM Cortex-A9內(nèi)核,每個(gè)內(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通道),三路同時(shí)輸入。

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

        ④數(shù)據(jù)連接支持4個(gè)USB2.0,1 Gbps + IEEE1588以太網(wǎng)接口,3個(gè)SD/MMC 4.4,1個(gè)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è)備和存儲(chǔ)器提供帶片選、時(shí)鐘和控制邏輯的總線接口,既提供如SRAM等設(shè)備的異步訪問(wèn)功能,又具備對(duì)NOR-Flash 或PSRAM等設(shè)備的同步訪問(wèn)功能。EIM總線具備異步模式、異步頁(yè)面模式、多路復(fù)用地址數(shù)據(jù)模式、突發(fā)時(shí)鐘模式、低功耗模式及啟動(dòng)模式等六種工作模式[2],該嵌入式平臺(tái)EIM總線采用異步控制模式,EIM總線功能框圖如圖1所示。

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

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

        圖1 EIM總線功能框圖

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

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

        圖2 i.MX6Q與EP3C40F324的連接

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

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

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

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

        HAL層(硬件抽象層)是位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層,其目的是在于將硬件抽象化。它隱藏了特定平臺(tái)的硬件接口細(xì)節(jié),為操作系統(tǒng)提供虛擬的硬件平臺(tái)[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的貫通,自底向上需要開(kāi)發(fā)的驅(qū)動(dòng)及添加的接口包括:

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

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

        ③Android系統(tǒng)中編寫(xiě)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)核源代碼工程中編寫(xiě)EIM總線驅(qū)動(dòng)程序。EIM總線驅(qū)動(dòng)在該嵌入式平臺(tái)上的應(yīng)用本質(zhì)上屬于字符設(shè)備驅(qū)動(dòng),驅(qū)動(dòng)程序需實(shí)現(xiàn)Linux驅(qū)動(dòng)接口函數(shù),為應(yīng)用程序與FPGA通信提供標(biāo)準(zhǔn)接口。EIM總線的時(shí)序配置關(guān)系到通信速率的設(shè)置及與FPGA交換數(shù)據(jù)的穩(wěn)定性,涉及的EIM總線配置寄存器如表1所示。

        表1 EIM總線配置寄存器

        圖5 EIM總線在異步模式讀寫(xiě)時(shí)序圖

        EIM總線在異步模式下的讀寫(xiě)時(shí)序如圖5所示。

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

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

        第二步在HAL層增加接口模塊以訪問(wèn)EIM總線驅(qū)動(dòng)程序。按照Android硬件抽象層規(guī)范要求,在Android開(kāi)發(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è)備文件描述符,對(duì)應(yīng)驅(qū)動(dòng)設(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è)備打開(kāi)和關(guān)閉接口eimbus_device_open及eimbus_device_close,設(shè)備訪問(wèn)接口eimbus_device_t及eim_write_data。模塊實(shí)例變量定義如下:

        其中eimbus_device_open調(diào)用系統(tǒng)open函數(shù)打開(kāi)/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ū)動(dòng)定義的標(biāo)準(zhǔn)接口函數(shù),eim_read_data調(diào)用系統(tǒng)read函數(shù)使用驅(qū)動(dòng)定義的標(biāo)準(zhǔn)接口函數(shù)。在hardware/libhardware/modules/eimbus目錄下新建Android.mk文件用于編譯此接口模塊,最終生成eimbus.default.so目標(biāo)文件。

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

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

        最后一步,在Android系統(tǒng)的應(yīng)用程序框架層增加EIM總線服務(wù)接口。在Android系統(tǒng)中,應(yīng)用程序通過(guò)代理來(lái)調(diào)用硬件服務(wù)。在frameworks/base/core/java/ android/os目錄,創(chuàng)建IEimbusService.aidl文件定義IEimbusService接口,分別通過(guò)writeData和readData兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)通過(guò)EIM總線訪問(wèn)FPGA。通過(guò)修改對(duì)應(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èn)服務(wù)。通過(guò)修改SystemServer.java文件,在系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載EimbusService。

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

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

        4 結(jié)語(yǔ)

        本文詳細(xì)介紹了Android系統(tǒng)下i.MX6Q與FPGA通過(guò)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)域,對(duì)需要使用FPGA編程實(shí)現(xiàn)專用算法的Android系統(tǒng)嵌入式平臺(tái)具有很好的參考價(jià)值。

        參考文獻(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開(kāi)發(fā)權(quán)威指南[M].北京:人民郵電出版社,2011.

        [5]王振麗.Android底層開(kāi)發(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為核心的嵌入式硬件平臺(tái),介紹i.MX6Q與FPGA基于EIM總線通信接口設(shè)計(jì),基于Linux 3.0.35內(nèi)核開(kāi)發(fā)此接口的驅(qū)動(dòng)程序方法以及基于Android 4.2.2下從應(yīng)用到驅(qū)動(dòng)程序的通信實(shí)現(xiàn)。該技術(shù)已應(yīng)用到某終端設(shè)備研制,實(shí)現(xiàn)FPGA芯片與Android系統(tǒng)的連接,實(shí)際測(cè)試其與Android應(yīng)用程序可靠通信,對(duì)同類型嵌入式平臺(tái)的驅(qū)動(dòng)接口設(shè)計(jì)及開(kāi)發(fā)有借鑒意義。

        i.MX6Q;EIM總線;FPGA;Android

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

        DOI:10.3969/j.issn.1007-1423.2016.13.016

        作者簡(jiǎn)介:

        陳崇森(1983-),男,廣東廣州人,碩士,研究方向?yàn)榍度胧较到y(tǒng)、驅(qū)動(dòng)程序設(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ū)動(dòng)程序內(nèi)核調(diào)用
        萬(wàn)物皆可IP的時(shí)代,我們當(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)用的惡意軟件檢測(cè)技術(shù)研究
        利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
        驅(qū)動(dòng)程序更新與推薦
        驅(qū)動(dòng)程序更新與推薦
        丝袜美腿亚洲综合在线播放 | 国产精品女同久久久久电影院| 国产成人精品123区免费视频| 色丁香久久| 亚洲一区二区三区偷拍自拍 | 无码国产一区二区色欲| 亚洲精品一区二区三区四区久久| 丰满少妇人妻久久久久久| 女女女女bbbbbb毛片在线| 美女爽好多水快进来视频| 精品人妻伦九区久久AAA片69| 人与禽性视频77777| 无码中文字幕在线DVD| 亚洲国产精品免费一区| 亚洲国产色婷婷久久精品| 国精品午夜福利视频不卡| 奇米狠狠色| 亚洲av一区二区三区网站 | av成人资源在线观看 | 国精品午夜福利视频不卡| 日韩国产欧美视频| 日韩丝袜人妻中文字幕| 亚洲av久播在线一区二区| 国产成人av片在线观看| 久久人人做人人妻人人玩精| 亚洲一区二区三区自拍麻豆| 婷婷成人丁香五月综合激情| 最新国产av无码专区亚洲| 极品av在线播放| av天堂最新在线播放| 国精品无码一区二区三区在线蜜臀 | 亚洲天堂线上免费av| 国产精品美女一区二区视频| 人与嘼交av免费| 超清无码AV丝袜片在线观看| 91精品久久久中文字幕| 999国内精品永久免费观看| 精品人妻VA出轨中文字幕| 亚洲av高清一区三区三区| 中文字幕人成乱码熟女| 久久人妻公开中文字幕|