工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

ARM平臺(tái)基于嵌入式Linux使用MIPI CSI-2接口

ARM平臺(tái)基于嵌入式Linux使用MIPI CSI-2接口

隨著工業(yè)產(chǎn)品智能化發(fā)展,攝像頭作為圖像采集在嵌入式設(shè)備中需求越來(lái)越多,目前常見的攝像頭接口有專用的Parallel Camera接口和MIPI CSI接口,以及USB/Ethernet Camera等采用USB, Ethernet等接口,本文就著重展示攝像頭專用接口MIPI CSI在嵌入式Linux下的應(yīng)用.

MIPI (Mobile Industry Processor Interface) 攝像頭接口標(biāo)準(zhǔn)是由MIPI®Alliance Camera Working Group針對(duì)傳統(tǒng)并行攝像頭存在的問(wèn)題提出的一個(gè)串行高速攝像頭接口定義, 目前有MIPI CSI-2和MIPI-CSI-3兩個(gè)協(xié)議定義,本文涉及的均為MIPI CSI-2協(xié)議接口, 目前已經(jīng)從V1.0 發(fā)布發(fā)展到V1.3發(fā)布, D-PHY下傳輸帶寬也從1Gbps/lane 提高到2.5Gbps/lane, V1.3新引入的C-PHY則更高,關(guān)于MIPI CSI詳細(xì)說(shuō)明請(qǐng)參考這里.

1). 準(zhǔn)備

a). 本文所使用的硬件平臺(tái)為Toradex 工業(yè)產(chǎn)品級(jí)Apalisi.MX6DT30ARM核心板模塊,搭配ApalisEva Board開發(fā)板和ApalisT30 Mezzanine 擴(kuò)展卡

b). MIPI CSI-2攝像頭使用基于OV5640的攝像頭模塊

c). Parallel Camera攝像頭使用Toradex ACM攝像頭(基于ADV7180)模塊搭配監(jiān)控?cái)z像頭

d). 軟件使用Toradex官方發(fā)布的嵌入式Linux V2.5 Beta3發(fā)布

2). 物理連接示意圖

3). Apalisi.MX6D

a). 模塊支持兩路Parallel Camera接口和一路MIPICSI-2 V1.0接口(1-4 lane)

b). V2.5Beta3版本Linux image已經(jīng)包含OV5640和ADV7180的驅(qū)動(dòng)和相應(yīng)的devicetree patch,因此上電后系統(tǒng)可以直接識(shí)別攝像頭設(shè)備/dev/video0(ADV7180)和/dev/video2(OV5640)

-----------------

root@apalis-imx6:~# dmesg |grep adv  

[   8.650491] adv7180 3-0021: no sensor pwdn pin available

[   8.799108] mxc_v4l2_master_attach: ipu0:/csi0 parallel attachedadv7180:mxc_

v4l2_cap0

root@apalis-imx6:~# dmesg |grep ov5640

[   8.837746] ov5640_mipi 3-003c: request of ov5640_mipi_reset failed

[   9.003448] mxc_v4l2_master_attach: ipu0:/csi1 parallel attachedov5640_mipi:

mxc_v4l2_cap2

[   9.015727] camera ov5640_mipi is found

[  10.675197] ov5640_set_virtual_channel: virtual channel=1

[  98.019038] ov5640_set_virtual_channel: virtual channel=1

[  98.421393] ov5640_set_virtual_channel: virtual channel=1

-----------------

c). 運(yùn)行下面gstreamerpipeline測(cè)試MIPI CSI-2攝像頭

-----------------

/* 640x480分辨率抓取并播放 framerate=90 */

gst-launch -vvv imxv4l2srcdevice=/dev/video2 capture-mode=0 fps-n=90 ! imxv4l2sink disp-width=640disp-height=480

/* 720P分辨率抓取并播放 framerate=60 */

gst-launch -vvv imxv4l2srcdevice=/dev/video2 capture-mode=4 fps-n=60 ! imxv4l2sink disp-width=1280disp-height=720

/* 1080P分辨率抓取并播放 framerate=15 */

gst-launch -vvv imxv4l2srcdevice=/dev/video2 capture-mode=5 fps-n=15 ! imxv4l2sink

-----------------

d). 分別對(duì)應(yīng)的CPU占用率如下

-----------------

//640x480

CPU1 - 48%

CPU2 - 1%

//720P

CPU1 - 100%

CPU2 - 1%

//1080P

CPU1 - 100%

CPU2 - 1%

-----------------

d). 和Parallel Camera攝像頭同時(shí)顯示

./ 原生ipu driver無(wú)法支持兩路camera同時(shí)顯示,需要對(duì)imagesource code 打patch,然后按照這里的說(shuō)明重新編譯kernel 和 modules,并部署到Apalis i.MX6模塊.

./ 然后運(yùn)行下面gstreamerpipeline來(lái)進(jìn)行同時(shí)顯示

-----------------

gst-launch -vvv imxv4l2srcdevice=/dev/video2 capture-mode=0 fps-n=30 ! imxv4l2sink device=/dev/video17disp-width=640 disp-height=480 & gst-launch -vvv tvsrc device=/dev/video0 !imxv4l2sink device=/dev/video16 disp-width=640 disp-height=480 axis-top=480

-----------------

./ 顯示效果如下

./ 此時(shí)CPU占用率

-----------------

CPU1 60%

CPU2 40%

-----------------

4). ApalisT30

a). 模塊支持兩路Parallel Camera接口和一路MIPICSI-2 V1.0接口(1-4 lane)

b). 手動(dòng)加載驅(qū)動(dòng)模塊, 識(shí)別出/dev/video0 (ADV7180)和/dev/video1(OV5640)

-----------------

root@apalis-t30:~# modprobevideobuf2-memops

root@apalis-t30:~# modprobevideobuf2-dma-nvmap

root@apalis-t30:~# modprobe adv7180

root@apalis-t30:~# modprobe ov5640

root@apalis-t30:~# modprobetegra_v4l2_camera

-----------------

c). 運(yùn)行下面gstreamerpipeline測(cè)試MIPI CSI-2攝像頭

-----------------

/* 640x480分辨率抓取并播放 framerate=90 */

gst-launch -vvv v4l2src device=/dev/video1! 'video/x-raw-yuv, width=640, height=480, framerate=90/1' ! deinterlace tff=1method=4 ! nv_omx_videomixer ! nv_gl_eglimagesink

/* 1296x972分辨率抓取并播放 framerate=60 */

gst-launch -vvv v4l2src device=/dev/video1! 'video/x-raw-yuv, width=1296, height=972, framerate=60/1' ! deinterlace tff=1method=4 ! nv_omx_videomixer ! nv_gl_eglimagesink

/* 1920x1088分辨率抓取并播放 framerate=15 */

gst-launch -vvv v4l2src device=/dev/video1! 'video/x-raw-yuv, width=1920, height=1088, framerate=15/1' ! deinterlacetff=1 method=4 ! nv_omx_videomixer ! nv_gl_eglimagesink

-----------------

d). 分別對(duì)應(yīng)的CPU占用率如下

-----------------

//640x480

CPU1 - 85%

CPU2 - 0%

CPU3 - 0%

CPU4 - 0%

//720P

CPU1 - 90%

CPU2 - 70%

CPU3 - 0%

CPU4 - 0%

//1080P

CPU1 - 100%

CPU2 - 60%

CPU3 - 0%

CPU4 - 0%

-----------------

5). 總結(jié)

隨著ARM處理器性能越來(lái)越強(qiáng)大,高質(zhì)量的攝像頭解決方案的需求在嵌入式工業(yè)領(lǐng)域也會(huì)越來(lái)越廣泛,MIPI CSI無(wú)疑是目前最好的方案之一,相信會(huì)有廣闊的前景。

投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測(cè)試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計(jì)算機(jī)模塊

Verdin iMX8MP 調(diào)試串口更改

NXP iMX8MM Cortex-M4 核心 GPT Capture 測(cè)試