• 
    

    
    

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

      基于ARM11與OV7675的CMOS相機(jī)設(shè)計(jì)

      2017-02-09 03:12:21李云劉德慶
      關(guān)鍵詞:內(nèi)核調(diào)用時(shí)鐘

      李云,劉德慶

      (重慶郵電大學(xué),重慶 400065)

      ?

      基于ARM11與OV7675的CMOS相機(jī)設(shè)計(jì)

      李云,劉德慶

      (重慶郵電大學(xué),重慶 400065)

      工業(yè)上對(duì)于攝像頭模塊的大小需求各不相同。本文以ARM11為核心自行設(shè)計(jì)了核心板,基于CMOS攝像頭OV7675進(jìn)行啟動(dòng)開(kāi)發(fā)工作,進(jìn)而設(shè)計(jì)出和實(shí)現(xiàn)了多種通信接口和可擴(kuò)展性強(qiáng)的相機(jī)。設(shè)計(jì)采用了S3C6410XH-66的CPU,移植了內(nèi)核版本為linux-2.6.38的操作系統(tǒng),同時(shí)為了提高性能改進(jìn)了緩存區(qū)的機(jī)制。

      ARM11;Linux操作系統(tǒng);CMOS攝像頭;驅(qū)動(dòng)

      引 言

      隨著社會(huì)的發(fā)展,攝像頭模塊越來(lái)越多地在工業(yè)上得到應(yīng)用,如攝影測(cè)量、物體跟蹤、零件分揀、遠(yuǎn)程監(jiān)控等領(lǐng)域。本文設(shè)計(jì)是針對(duì)商家在工業(yè)上二維碼的掃描使用,在已給定的模具大小下,充分考慮了需求、成本以及功耗等因素,采用OV7675攝像頭模塊和S3C6410XH-66的CPU,移植了Linux內(nèi)核版本為L(zhǎng)inux-2.6.38的操作系統(tǒng),同時(shí)為了提高性能,改進(jìn)了緩存區(qū)的機(jī)制。

      1 硬件結(jié)構(gòu)

      如圖1所示,相機(jī)主要由CPU、系統(tǒng)電源、通信接口、CMOS傳感器以及I/O接口等硬件組成。由于面向的是低端市場(chǎng),為了控制成本,采用了S3C6410XH-66的CPU。這款CPU內(nèi)部集成了強(qiáng)大的多媒體資源,具有較強(qiáng)的視頻處理能力,同時(shí)主時(shí)鐘可以穩(wěn)定運(yùn)行在533 MHz。

      CMOS傳感器采用的是OmniVision公司的OV7675攝像頭,該傳感器鏡頭尺寸為1/9″,感光陣列大小為640×480,幀率達(dá)到30 fps,封裝尺寸為2 797 μm×2 800 μm。支持YCbCr422、Raw RGB、RGB565、ITU656等多種圖像輸出格式,包含自動(dòng)曝光控制、自動(dòng)增益控制、自動(dòng)白平衡、自動(dòng)黑級(jí)校準(zhǔn)等功能。在tiny6410的開(kāi)發(fā)板上設(shè)計(jì)的是10×2的軟排插槽攝像頭接口,接口模塊電路如圖2所示,除了CAMERA信號(hào)外,還有I2C信號(hào)用于對(duì)攝像頭寄存器的讀寫(xiě),從而能夠配置攝像頭相關(guān)參數(shù),另外增加了GPIO信號(hào),用于協(xié)助攝像頭實(shí)現(xiàn)電源管理[1]。CPU通過(guò)I2C接口來(lái)初始化OV7675內(nèi)部寄存器,OV7675內(nèi)部有8位A/D轉(zhuǎn)換器,對(duì)應(yīng)8為數(shù)據(jù)輸出CAMDATA[7:0],而設(shè)計(jì)中輸出的圖像格式是經(jīng)過(guò)內(nèi)部的DSP轉(zhuǎn)化的YCbCr。同時(shí)為了滿足尺寸的大小需求,SDRAM采用的是256 MB的三星K4X2G323PD,NAND FLASH采用的為256 MB的三星K9F2G08U0C。

      圖1 系統(tǒng)硬件結(jié)構(gòu)圖

      圖2 攝像頭接口模塊電路圖

      2 軟件程序設(shè)計(jì)

      2.1 V4L2驅(qū)動(dòng)

      V4L2全稱為video for linux two,是V4L的改進(jìn)版,是linux內(nèi)核中用于圖片采集、視頻和音頻數(shù)據(jù)的API接口[2]。如圖3所示,字符設(shè)備驅(qū)動(dòng)核心、V4L2驅(qū)動(dòng)核心、平臺(tái)V4L2設(shè)備驅(qū)動(dòng)和具體的sensor驅(qū)動(dòng)構(gòu)成了V4L2驅(qū)動(dòng)框架[3]。V4L2是兩層驅(qū)動(dòng)系統(tǒng)組成的,上層驅(qū)動(dòng)是平臺(tái)V4L2驅(qū)動(dòng),即video_dev模塊驅(qū)動(dòng),當(dāng)video_dev初始化時(shí)會(huì)被注冊(cè)為字符設(shè)備驅(qū)動(dòng),主設(shè)備號(hào)為81,同時(shí)會(huì)注冊(cè)相關(guān)的功能函數(shù)[4]。下層驅(qū)動(dòng)為V4L2驅(qū)動(dòng),video_dev通過(guò)V4L2來(lái)訪問(wèn)設(shè)備。當(dāng)V4L2驅(qū)動(dòng)初始化時(shí),V4L2將會(huì)傳遞一個(gè)包含V4L2的驅(qū)動(dòng)方式、子設(shè)備號(hào)等數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)給video_dev[4]。

      圖3 V4L2驅(qū)動(dòng)框架

      在初始化程序cmos_ov7675_drv_init()中,通過(guò)i2c_add_driver(& cmos_ov7675_drv),向i2c-core注冊(cè)驅(qū)動(dòng),通過(guò)cmos_ov7675_drv調(diào)用cmos_ov7675_probe函數(shù),在cmos_ov7675_probe里,將GPIO-F設(shè)置成對(duì)應(yīng)的攝像頭模式,使用request_mem_region(),為攝像頭申請(qǐng)內(nèi)存空間。接著初始化攝像頭時(shí)鐘,設(shè)置時(shí)鐘,將時(shí)鐘設(shè)置為24 MHz,并通過(guò)list_add_tail將攝像頭結(jié)構(gòu)添加到設(shè)備鏈表中,并通過(guò)video_register_device(&cmos_ov7675_vdev, VFL_TYPE_GRABBER, -1) 進(jìn)行設(shè)備注冊(cè)。在cmos_ov7675_vdev中,cmos_ov7675_fops()提供了應(yīng)用層使用的,包括cmos_ov7675_open、cmos_ov7675_read、cmos_ov7675_close、video_ioctl2,video_ioctl2由V4L2提供框架,涉及到的關(guān)鍵處理程序在驅(qū)動(dòng)中具體實(shí)現(xiàn)。在cmos_ov7675_vdev結(jié)構(gòu)中還需要實(shí)現(xiàn)的函數(shù)包括cmos_ov7675_vidioc_enum_fmt_vid_cap(列舉支持那些格式)、cmos_ov7675_vidioc_g_fmt_vid_cap(返回當(dāng)前格式)、cmos_ ov7675_vidioc_try_fmt_vid_cap(測(cè)試驅(qū)動(dòng)程序是否支持某種格式)、cmos_ov7675_vidioc_s_fmt_vid_cap(設(shè)置圖像輸出格式)等。

      本文采集圖片的像素大小為640×480,圖片格式為YUV,本階段系統(tǒng)只需要采集4幀圖片。將采集的圖片映射到內(nèi)存中,并把對(duì)應(yīng)的地址傳送給應(yīng)用層,進(jìn)行讀取和處理后,循環(huán)采集實(shí)現(xiàn)圖像的更新,形成動(dòng)態(tài)圖。

      2.2 應(yīng)用程序

      Liunx-2.6.38內(nèi)核提供了用于編寫(xiě)視頻的V4L2核心API文件操作結(jié)構(gòu): v4l2_file_operations,用此函數(shù)進(jìn)行設(shè)備操作。通過(guò)定義cmos_ov7675_fops為v4l2_file_operations編寫(xiě)用于上層驅(qū)動(dòng)調(diào)用的函數(shù):

      static const struct v4l2_file_operations cmos_ov7675_fops ={

      .owner=THIS_MODULE,

      .open=cmos_ov7675_open,

      .read=cmos_ov7675_read,

      .release=cmos_ov7675_close,

      .unlocked_ioctl=video_ioctl2,

      };

      如圖4所示,應(yīng)用程序首先通過(guò)dev_fd=open(cam_name, O_RDWR)、fb_fd=open("/dev/fb0",O_RDWR)來(lái)打開(kāi)video和FB設(shè)備,然后通過(guò)ioctl(cam_fp, VIDIOC_S_FBUF,&fb)設(shè)置攝像頭格式,通過(guò)應(yīng)用程序調(diào)用read,將會(huì)調(diào)用內(nèi)核層驅(qū)動(dòng)提供的函數(shù)cmos_ov7675_read,該函數(shù)將會(huì)注冊(cè)一個(gè)名為cmos_ov7675_camif_irq_p的內(nèi)核中斷函數(shù),當(dāng)完成一幀圖像的數(shù)據(jù)緩沖后,將會(huì)進(jìn)行喚醒,然后會(huì)映射到用戶空間里。本文通過(guò)fb_show(dev_fd,fbmem,preview_frame)實(shí)現(xiàn)預(yù)覽功能,將采集到的數(shù)據(jù)傳送到framebu ffer緩存區(qū)。在結(jié)束預(yù)覽后,調(diào)用set_capture()更改格式,最后捕捉圖片并保存。由于無(wú)法直接預(yù)覽和處理YUYV的格式圖片,需通過(guò)算法將YUYV格式轉(zhuǎn)化為RGB彩色格式圖片,隨后對(duì)其進(jìn)行相應(yīng)的處理[6]。

      圖4 圖片采集流程圖

      2.3 緩存機(jī)制的改進(jìn)

      在所做的項(xiàng)目中,我們對(duì)于傳統(tǒng)的環(huán)形緩存區(qū)進(jìn)行了改進(jìn),設(shè)緩存區(qū)的個(gè)數(shù)為N,在視頻數(shù)據(jù)需要填充的情況下,只要空的緩存區(qū)個(gè)數(shù)不小于(N-1),就能喚醒任務(wù)使其能夠填充數(shù)據(jù)到緩存區(qū)中。

      假設(shè)需要傳輸M倍于單個(gè)緩存區(qū)的個(gè)數(shù),緩存區(qū)的個(gè)數(shù)為N(2

      假設(shè)在環(huán)形緩存區(qū)的設(shè)計(jì)中,環(huán)形緩存區(qū)由若干個(gè)單緩存區(qū)組成,每個(gè)緩存區(qū)的大小為2 KB,即若環(huán)形緩存區(qū)由N個(gè)單緩存區(qū)構(gòu)成,則環(huán)形緩存區(qū)的大小為2N KB。設(shè)CPU的工作頻率為fc,攝像頭的時(shí)鐘采樣頻率為fm,位時(shí)鐘信號(hào)速率最大為:

      式中,fbclk為位時(shí)鐘速率;Bn為采樣位數(shù);fm為采樣頻率。

      CPU處理一個(gè)字節(jié)的時(shí)間關(guān)系滿足下式[7]:

      式中,t為處理一個(gè)字節(jié)的時(shí)間;fc為CPU主頻;Bwidth為總線寬度。

      若環(huán)形緩存區(qū)有M個(gè)單緩存區(qū),在進(jìn)行視頻數(shù)據(jù)傳輸時(shí)不會(huì)影響其他任務(wù)的正常執(zhí)行,即CPU填充(M-1)個(gè)緩存區(qū)的時(shí)間要少于視頻接口傳輸一個(gè)緩存區(qū)的時(shí)間。

      式中,K為字節(jié)單位系數(shù),即常量1024;T為處理一個(gè)字節(jié)的時(shí)間;fbclk為位時(shí)鐘速率。由式(1)~(3)可得出M必須滿足式(3),才能滿足設(shè)計(jì)要求。

      ARM11的CPU頻率為533 MHz,地址總線的帶寬為32位,采樣位數(shù)最大為12位,采樣頻率最大為24 MHz,由式(4)可得M最大可為6。由于存儲(chǔ)的照片是4張,因此本論文中將M的值設(shè)置為4。

      3 測(cè)試結(jié)果

      圖5 相機(jī)的硬件實(shí)物圖

      相機(jī)的核心板與攝像頭的轉(zhuǎn)接板是分開(kāi)的,方便以后攝像頭硬件進(jìn)行升級(jí)。由于使用的場(chǎng)景限制,對(duì)于模塊的大小有著嚴(yán)格的要求,導(dǎo)致整個(gè)板子并不能用USB、SD卡來(lái)燒寫(xiě),只能通過(guò)J-LINK來(lái)燒寫(xiě)程序。將SDRAM初始化程序ddr.bin燒寫(xiě)進(jìn)去,然后運(yùn)行程序,在確定SDRAM能夠被正常的初始化后,再次通過(guò)J-LINK將u-boot.bin文件燒寫(xiě)到DDR中,并運(yùn)行u-boot。由于,J-LINK只能燒寫(xiě)二進(jìn)制文件,所以內(nèi)核和根文件是無(wú)法通過(guò)J-LINK燒寫(xiě)的。串口在u-boot界面中,將u-boot、內(nèi)核以及根文件燒寫(xiě)進(jìn)FLASH中,這樣掉電后不會(huì)丟失內(nèi)容。由于整個(gè)模塊并沒(méi)有網(wǎng)口,使得板子無(wú)法與PC進(jìn)行掛載,只能將驅(qū)動(dòng)程序以及測(cè)試程序編譯進(jìn)根文件系統(tǒng)中,由于根文件是jffs2格式的,所以在進(jìn)入到系統(tǒng)前,需要通過(guò)u-boot界面改動(dòng)系統(tǒng)的啟動(dòng)參數(shù)。當(dāng)進(jìn)入到系統(tǒng)后,在mnt文件夾下通過(guò)insmod命令加載攝像頭驅(qū)動(dòng)模塊,運(yùn)行測(cè)試程序,保存拍攝的照片。然后,將保存的照片通過(guò)串口從板子的FLASH下載到PC上,如圖5所示。

      結(jié) 語(yǔ)

      [1] 楊東瓊,云利軍,王坤.Linux和 OK6410 環(huán)境下視頻圖像的采集與顯示[J].云南師范大學(xué)學(xué)報(bào),2016(2):48-53.

      [2] 徐家,陳奇.基于V4L2的視頻設(shè)備驅(qū)動(dòng)開(kāi)發(fā)[J].計(jì)算機(jī)工程與設(shè)計(jì),2007,19(5):539-542.

      [3] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M].北京:人民郵電出版社,2012.

      [4] 曹占中.基于 s3c2440 的 Linux 攝像頭驅(qū)動(dòng)開(kāi)發(fā)[J].電子測(cè)量技術(shù),2009,32(2):108-111.

      [5] 樊國(guó)棟, 石紅瑞.嵌入式 Linux下CMOS攝像頭驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)儀表與自動(dòng)化裝置,2010(3):68-94.

      [6] 段東波, 靳天玉. 基于 ARM11 的視頻采集系統(tǒng)及二維碼識(shí)別[J]. 電子測(cè)試,2013(20):81-82.

      [7] Lei Rao, Jian Huazhao, Zhan Xizhao,et al. Marco and Micro structure Evolution of 5CrNiMo Steel Ingots during Electroslag Remelting Process[J]. Journal of Iron and Steel Re search, 2014,21(7):644-652.

      李云(教授),主要研究方向?yàn)闊o(wú)線網(wǎng)絡(luò);劉德慶(碩士),主要研究方向?yàn)榍度胧津?qū)動(dòng)。

      CMOS Camera Design Based on ARM11 and OV7675

      Li Yun,Liu Deqing

      (Chongqing University of Posts and Telecommunications,Chongqing 400065,China)

      In order to meet the needs of different size module of camera.In this paper,the core board is designed using ARM11.The system starts the development work based on CMOS camera OV7675.The variety of communication interfaces and scalable camera are designed.The design uses the S3C6410XH-66 CPU,and transplants the linux-2.6.38 operating system.While in order to the performance,the cache mechanism is improved.

      ARM11;Linux operating system;CMOS camera;driver

      TN949.6

      A

      ?迪娜

      2016-09-01)

      猜你喜歡
      內(nèi)核調(diào)用時(shí)鐘
      萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      別樣的“時(shí)鐘”
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      古代的時(shí)鐘
      核電項(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)用
      有趣的時(shí)鐘
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      壤塘县| 万安县| 东乡| 安顺市| 吉林市| 巨野县| 无极县| 东港市| 临邑县| 锡林郭勒盟| 固原市| 涞水县| 光泽县| 炎陵县| 平泉县| 五常市| 白玉县| 会昌县| 双桥区| 东乌珠穆沁旗| 吉隆县| 曲周县| 安阳县| 泰兴市| 二手房| 合作市| 江达县| 江安县| 乐昌市| 桂东县| 扶绥县| 斗六市| 来宾市| 色达县| 通道| 双桥区| 铜川市| 光山县| 汾阳市| 德庆县| 三明市|