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

        ?

        GPMC總線在AM3354與FPGA接口應(yīng)用中的Android驅(qū)動實現(xiàn)

        2017-12-26 10:55:54刁彥華賈寶青王曉君
        電子器件 2017年6期
        關(guān)鍵詞:外設(shè)驅(qū)動程序內(nèi)核

        刁彥華,賈寶青,王曉君

        (河北科技大學(xué)信息科學(xué)與工程學(xué)院,石家莊 050018)

        GPMC總線在AM3354與FPGA接口應(yīng)用中的Android驅(qū)動實現(xiàn)

        刁彥華*,賈寶青,王曉君

        (河北科技大學(xué)信息科學(xué)與工程學(xué)院,石家莊 050018)

        針對以AM3354處理器與FPGA相結(jié)合的硬件平臺,提出Android下GPMC總線驅(qū)動程序的設(shè)計方案。論述了GPMC總線結(jié)構(gòu)原理,系統(tǒng)接口設(shè)計思路,分析了總線驅(qū)動程序的開發(fā)流程和方法。完成了Android下GPMC總線驅(qū)動程序的設(shè)計,包括Linux內(nèi)核層的添加和Android HAL層的調(diào)用,并給出了關(guān)鍵實現(xiàn)代碼。Android下GPMC總線驅(qū)動程序運行良好,達到預(yù)定目標。

        Android;GPMC總線;驅(qū)動程序;Android HAL

        AM3354處理器與FPGA采用GPMC總線實現(xiàn)連接,完成二者之間的數(shù)據(jù)傳輸,此種連接方式具有數(shù)據(jù)傳輸穩(wěn)定、高效、FPGA時序邏輯易于實現(xiàn)等優(yōu)點[1]。但FPGA作為ARM通過GPMC總線連接的新外設(shè),必須要在Android下添加GPMC總線驅(qū)動程序,才能保證FPGA與Android系統(tǒng)實現(xiàn)交互。而GPMC總線在Android下的驅(qū)動程序的開發(fā)研究相對較少,可參考的資料不多,因此Android下GPMC驅(qū)動程序的開發(fā)是一項值得挖掘的技術(shù)。

        1 硬件組成

        1.1 AM3354處理器

        AM3354是由德州儀器生產(chǎn)的以Cortex-A8為核心的處理器。其主頻最高速度可以達到1 GHz,不僅處理速度快,而且外部資源豐富,最重要的是內(nèi)部還集成了GPMC總線,由于它靈活的編程方式使它可以與各種外設(shè)連接。該處理器主要用在工業(yè)控制領(lǐng)域,尤其是在多處理器組合方式中發(fā)揮它的控制作用[2-3]。

        1.2 GPMC總線結(jié)構(gòu)原理

        GPMC總線是一種通用外部存儲控制器,它主要用來連接外部存儲器設(shè)備。由于它靈活的編程模型,所以支持的外設(shè)類型特別豐富,包括異步、同步和頁模式的NOR、NAND、SRAM等設(shè)備。它與外部設(shè)備連接時可以提供16 bit或者8 bit寬的數(shù)據(jù)總線,時鐘頻率最高可以提供100 MHz的外部時鐘。最大的地址訪問空間是512 Mbyte,最多可以連接7片外設(shè),分別由CS0~CS6控制。同時它還支持2個外部中斷信號,連接的外設(shè)可以通過中斷信號向AM3354處理器發(fā)出中斷請求命令[4-5]。GPMC總線結(jié)構(gòu)原理如圖1所示。

        圖1 總線結(jié)構(gòu)原理圖

        1.3 FPGA設(shè)計

        FPGA采用的是xilinx公司的V系列的virtex-6芯片,這款芯片具有成本低、功耗低、運算速度快、內(nèi)部資源豐富等特點,它和前幾代產(chǎn)品相比功耗可以降低50%,成本也降低20%。不僅如此,它還完成了新的組合優(yōu)化,包括以下幾個方面,靈活性、收發(fā)器以及開發(fā)工具支持等[6-8]。FPGA通過內(nèi)部編程來模擬GPMC總線的讀寫時序,以實現(xiàn)AM3354與FPGA之間的通信。GPMC的驅(qū)動程序?qū)⒁罁?jù)寄存器配置的值產(chǎn)生相應(yīng)的信號。FPGA根據(jù)GPMC總線的控制命令來完成相應(yīng)的操作

        1.4 接口連接

        根據(jù)系統(tǒng)需求,決定將FPGA作為AM3354的外設(shè),二者之間的通信協(xié)議決定采用NOR模式的通信方式,采用數(shù)據(jù)/地址非復(fù)用模式連接、同步通信方式。AM3354與FPGA具體連接如圖2所示。

        圖2 AM3354與FPGA連接示意圖

        2 GPMC總線寄存器配置

        GPMC總線驅(qū)動的開發(fā)過程中必須對GPMC總線寄存器作深入的研究。為了配置GPMC總線寄存器,必須對GPMC總線寄存器的每一個位作詳細研究。GPMC總線可以被劃分為7個獨立的片選空間,每個片選空間都包括7個32 bit的寄存器[9]。GPMC總線的工作模式、工作時序等都是依據(jù)這些寄存器中配置的內(nèi)容決定的。

        為了實現(xiàn)系統(tǒng)中特定的工作模式,要對寄存器進行一一配置。在對寄存器進行配置的過程中,還需進一步了解寄存器每一個位所代表的功能。對GPMC總線寄存器的關(guān)鍵位功能說明如表1所示。

        表1 GPMC總線寄存器功能

        該設(shè)計根據(jù)具體要求決定采用同步模式,數(shù)據(jù)總線和地址總線非復(fù)用16 bit的NOR模式。GPMC工作模式確定后就可以對GPMC對應(yīng)的片選寄存器進行配置。GPMC總線寄存器配置如表2所示。

        表2 GPMC總線寄存器關(guān)鍵位配置值

        3 GPMC總線驅(qū)動程序設(shè)計

        3.1 Android操作系統(tǒng)的驅(qū)動原理

        雖然Android系統(tǒng)使用的是Linux內(nèi)核,但它與Linux又有區(qū)別,所以對驅(qū)動程序的開發(fā)也存在很大的差異。它們之間最大的差別在于Linux系統(tǒng)把與硬件交互的相關(guān)驅(qū)動都存放在內(nèi)核當中,而Android則是分為兩層:一層存放在硬件抽象層(HAL);另一層存放在Linux內(nèi)核當中。所以Android驅(qū)動不僅要完成內(nèi)核層的設(shè)計同時還要完成HAL層的調(diào)用。內(nèi)核層和Linux系統(tǒng)驅(qū)動開發(fā)是相同的。HAL層的調(diào)用分為兩種方法,傳統(tǒng)的libhardware_legacy和最新的libhardware,但它們的本質(zhì)是相同的,都是為上層提供.so動態(tài)鏈接庫,而libhardware只是由Stub代理來完成[9-10]。因此GPMC總線驅(qū)動的完成,不僅需要在Linux中添加GPMC驅(qū)動模塊,還必須實現(xiàn)HAL層的調(diào)用。

        3.2 GPMC驅(qū)動程序?qū)崿F(xiàn)流程

        AM3354與FPGA之間通過AM3354本身帶有的GPMC總線實現(xiàn)連接,為了完成Android與FPGA之間的數(shù)據(jù)交互,必須實現(xiàn)Android下GPMC驅(qū)動程序的添加。GPMC驅(qū)動流程圖如圖3所示,首先要完成GPMC總線的加載和聲明,其次在Linux內(nèi)核中添加GPMC總線驅(qū)動模塊,最后完成Android HAL層調(diào)用。

        圖3 GPMC驅(qū)動流程圖

        圖4 GPMC驅(qū)動開發(fā)流程圖

        4 GPMC總線驅(qū)動程序?qū)崿F(xiàn)

        4.1 Linux層 GPMC驅(qū)動程序?qū)崿F(xiàn)

        Linux系統(tǒng)下設(shè)備驅(qū)動主要分為:字符設(shè)備、塊設(shè)備以及網(wǎng)絡(luò)設(shè)備,字符設(shè)備是最簡單的設(shè)備,在收發(fā)數(shù)據(jù)時直接操作的對象就是字符;塊設(shè)備是以整個緩沖區(qū)作為操作對象進行數(shù)據(jù)的收發(fā);網(wǎng)絡(luò)設(shè)備是通過網(wǎng)絡(luò)來進行數(shù)據(jù)的收發(fā)。Linux調(diào)用設(shè)備驅(qū)動時有兩種方法可供選擇,一是將設(shè)備驅(qū)動直接編譯到Linux內(nèi)核當中,這種方式使得設(shè)備驅(qū)動成為內(nèi)核的一部分,在內(nèi)核啟動時就會自動加載;第2種是作為一個可以動態(tài)加載的模塊,用戶可以根據(jù)自己的需要來通過指令進行動態(tài)的加載,這種方式的優(yōu)勢是可以控制內(nèi)核的大小[11-12]。本文中將使用字符設(shè)備,同時將驅(qū)動程序作為可加載的模塊,進行動態(tài)的加載,從而增加內(nèi)核的靈活性。GPMC驅(qū)動程序的開發(fā)包括向內(nèi)核申請空間、對GPMC片選寄存器進行初始化、完成數(shù)據(jù)的讀寫、向內(nèi)核注冊驅(qū)動程序以及卸載內(nèi)核中的相關(guān)驅(qū)動程序。具體的GPMC驅(qū)動開發(fā)流程圖如圖4所示。

        4.1.1 GPMC申請內(nèi)核空間

        FPGA作為ARM的外設(shè),通過GPMC總線與ARM實現(xiàn)連接,GPMC總線與外部通信的地址是0x0000 0000到0x1FFF FFFF之間的地址,一共是512 Mbit。申請內(nèi)核空間需要用gpmc_cs_request函數(shù)為FPGA外設(shè)向內(nèi)核申請一段物理地址,利用request mem_region函數(shù)為FPGA外設(shè)申請一段內(nèi)存,request mem_region的作用只是占用了內(nèi)核的內(nèi)存,但并沒有將物理地址映射到內(nèi)核的內(nèi)存空間,完成將物理地址映射到內(nèi)核內(nèi)存的函數(shù)是ioremap。

        4.1.2 GPMC片選寄存器初始化

        GPMC初始化的依據(jù)是GPMC的工作模式,在上文中已經(jīng)介紹了本設(shè)計選擇的通信協(xié)議是同步傳輸,16 bit的數(shù)據(jù)線,地址線和數(shù)據(jù)線不復(fù)用的NOR模式。確定了通信協(xié)議之后,只需對寄存器gpmc_configi_j設(shè)置相應(yīng)的值即可完成GPMC片選寄存器的初始化。

        4.1.3 讀寫功能實現(xiàn)

        讀寫功能的實現(xiàn)主要采用的是read(ssize t(*read)(struct file*,char-user*,sizeest,loff t*)和write(ssize t(*write)(struct file*,const char-user*,sizees t,loff t*)兩個函數(shù)。Read主要完成將FPGA的數(shù)據(jù)傳送到ARM處理器中,而Write主要完成ARM處理器的數(shù)據(jù)傳送到映射的地址內(nèi)存中。

        4.1.4 向內(nèi)核注冊

        以上步驟完成之后,需要實現(xiàn)向內(nèi)核注冊,內(nèi)核才能識別驅(qū)動程序的存在并對其進行調(diào)用。向內(nèi)核注冊需要申請一個設(shè)備號,申請設(shè)備號用到的函數(shù)是alloc_chrdev_region。至此整個Linux層的GPMC驅(qū)動設(shè)計就完成了。

        圖5 GPMC總線在HAL層的調(diào)用圖

        4.2 Android HAL層的調(diào)用

        Linux內(nèi)核層GPMC驅(qū)動程序設(shè)計完成之后,Android下GPMC總線驅(qū)動程序的開發(fā),還需在HAL(硬件抽象層)添加相關(guān)代碼,完成HAL的調(diào)用。HAL相當于是中介層,向下完成對Linux內(nèi)核驅(qū)動程序的調(diào)用,向上為上層應(yīng)用提供訪問底層硬件的接口。具體實現(xiàn)如圖5所示。在HAL層添加新的硬件支持,需要用gpmc_hardware_module_id、struct gpmc_module_t、struct gpmc_device_t分別定義模塊的ID、硬件模塊的結(jié)構(gòu)體和硬件接口結(jié)構(gòu)體。模塊定義之后,還需對這些模塊添加操作方法,包括設(shè)備的打開關(guān)閉、接口的訪問、模塊方法表等。實現(xiàn)上述步驟之后,即可完成GPMC在HAL層的調(diào)用,也完成了向Application Framework層提供硬件服務(wù)。但底層是C語言編寫的,而Android上層應(yīng)用程序是由JAVA語言編寫的,此時JAVA的應(yīng)用還不能訪問GPMC硬件。需要編寫JNI方法來調(diào)用HAL方法。完成JNI方法需定義一個JAVA訪問底層硬件的服務(wù)類GPMCService,JNI方法的實現(xiàn),本質(zhì)是對HAL的聲明、加載和完成JNI方法表,以及對JNI方法完成注冊。實現(xiàn)JNI方法之后,只需進行最后一步,在framework層實現(xiàn)GPMCservice服務(wù)。首先需要定義IGPMCService.aidl接口,IGPMCService.aidl可以提供訪問GPMC硬件寄存器的方法。通過對IGPMCService.aidl進行編譯可以生成IGPMCService.aidl.Stub接口。接口生成之后GPMCservice通過調(diào)用JNI中init_mative、set_Reg_native、getReg_native 3個方法來提供GPMC的硬件服務(wù)。此時,應(yīng)用程序就可以通過JAVA接口訪問GPMC相關(guān)的硬件服務(wù)了。

        5 結(jié)束語

        在深入了解Linux和Android驅(qū)動原理的基礎(chǔ)上,完成了GPMC總線在Linux內(nèi)核層的驅(qū)動程序的開發(fā),以及Android HAL層的調(diào)用,最終實現(xiàn)了Android系統(tǒng)下GPMC總線驅(qū)動的開發(fā)。該方案已經(jīng)成功的應(yīng)用到AM3354與FPGA之間,能夠保證系統(tǒng)的穩(wěn)定工作。該設(shè)計對Android操作系統(tǒng)之外其他的驅(qū)動開發(fā)具有一定的借鑒意義。

        [1] 孫潔,付友善,孔繁鵬,等. Android系統(tǒng)下的USB設(shè)備驅(qū)動程序設(shè)計[J]. 計算機測量與控制,2013,21(5):1386-1389.

        [2] 寇磊. Am335x掃描控制器設(shè)備驅(qū)動程序的開發(fā)與應(yīng)用[D]. 西安:西安電子科技大學(xué),2014.

        [3] 姚博. LED打印機GPMC接口的設(shè)計與實現(xiàn)[D]. 西安:西安電子科技大學(xué),2014.

        [4] 趙冰潔. 基于FPGA+ARM的多源圖像融合技術(shù)研究[D]. 中國科學(xué)院大學(xué),2014.

        [5] TI. AM335x ARM? CortexTM-A8 Microprocessors.www.ti.com. 2015-08-25.[EB/oL].

        [6] 張淑梅. 基于ARM+FPGA的高精度數(shù)據(jù)采集系統(tǒng)設(shè)計[J]. 國外電子測量技術(shù),2014,33(11):62-65.

        [7] 連猛,丑修建,李慶,等. 基于FPGA和DSP的數(shù)據(jù)采集與壓縮系統(tǒng)[J]. 電子器件2013,38(1):131-134.

        [8] 張素萍,高照陽,張建芬. 基于FPGA的可配置IIC總線接口設(shè)計[J]. 電子器件,2016,39(4):866-873.

        [9] 陳崇森. 基于i.MX6Q+FPGA平臺Android下EIM總線接口設(shè)計[J]. 現(xiàn)代計算機2016,05(13):60-64.

        [10] 李玉潔,朱維杰. Android 系統(tǒng)下CAN 總線驅(qū)動程序的設(shè)計與實現(xiàn)[J]. 電子科技大學(xué)學(xué)報,2013,26(2):83-86.

        [11] 賈建峰,崔佩玲. 基于FPGA的ARM與CAN控制器的接口設(shè)計與實現(xiàn)[J]. 計算機測量與控制,2010,18(11):2652-2655.

        [12] 尹劍鋒. GPMC總線在DM3730與FPGA通信應(yīng)用中的Linux驅(qū)動實現(xiàn)[J]. 江蘇科技信息,2014,12(23):55-57.

        ImplementationofAndroidDriverinAM3354andFPGAInterfaceApplicationBasedonGPMCBus

        DIAOYanhua*,JIABaoqing,WANGXiaojun

        (Information Science and Engineering,Hebei University of Science and Technology,Shijiazhuang 050018,China)

        For the hardware platform of combining AM3354 processor with FPGA,a design of GPMC bus driver program in Android is proposed. The structure principle of GPMC bus and the design idea of system interface are discussed,and the development process and method of bus driver are analyzed. The design of GPMC bus driver program is completed in Android including the addition of the Linux kernel layer and the call of the Android HAL layer,and the key implement code is showed. GPMC bus driver program in Android system works well and finally achieves the intended goal.

        Android;GPMC bus;driver program;Android HAL

        10.3969/j.issn.1005-9490.2017.06.033

        2016-09-06修改日期2016-12-26

        TP3

        A

        1005-9490(2017)06-1502-04

        刁彥華(1966-),女,黑龍江哈爾濱人,副教授,碩士生導(dǎo)師,碩士,主要從事衛(wèi)星通信和衛(wèi)星導(dǎo)航方向的研究;

        賈寶青(1990-),男,河北張家口人,河北科技大學(xué)碩士研究生,主要從事衛(wèi)星通信和衛(wèi)星導(dǎo)航方向的研究;

        王曉君(1973-),男,河北科技大學(xué)信息學(xué)院,教授,碩士生導(dǎo)師,博士后,目前主要研究方向為衛(wèi)星應(yīng)用技術(shù)。

        猜你喜歡
        外設(shè)驅(qū)動程序內(nèi)核
        萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
        強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
        Linux內(nèi)核mmap保護機制研究
        Microchip推出具備雙ADC外設(shè)的全新器件,擴展其低成本8位PIC?單片機產(chǎn)品線
        貼身呵護 必不可少的PSP外設(shè)
        外設(shè)天地行情
        外設(shè)天地行情
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        亚洲欧洲成人a∨在线观看| 日本第一区二区三区视频| 日本免费三片在线视频| 免费一级淫片日本高清| 亚洲va中文字幕| 亚洲国产福利精品一区二区| 亚洲乱码中文字幕综合| 亚洲精品一区三区三区在线| 亚洲av无码成人网站在线观看 | 欧美精品v国产精品v日韩精品| 一本大道香蕉最新在线视频| 国产毛片三区二区一区| 亚洲中文字幕久久精品一区| 精品国产一二三产品区别在哪| 天天爽夜夜爽人人爽曰喷水| 日本久久一区二区三区高清| 亚洲最新国产av网站| 国语对白做受xxxxx在线| 另类欧美亚洲| 久久亚洲春色中文字幕久久久综合 | 久久精品一品道久久精品9| 国产一区二区三区精品成人爱| 中文字幕无码中文字幕有码| 国产亚洲一区二区手机在线观看| 久久国产精品免费一区二区| 一区二区三区极品少妇| 特黄大片又粗又大又暴| 欧美人与物videos另类xxxxx | 久久午夜一区二区三区| 国产精品毛片va一区二区三区| 久久久久国产精品免费免费搜索| 91极品尤物在线观看播放| 国产成人自拍视频播放| 久久99精品九九九久久婷婷 | 日韩在线免费| 久久婷婷夜色精品国产 | 在线成人一区二区| 久久久久亚洲av成人网址| 国产亚洲av一线观看| 97精品国产一区二区三区| 男女扒开双腿猛进入免费看污|