1. MIPI攝像頭簡(jiǎn)介
1.1 MIPI CSI2接口簡(jiǎn)介
MIPI (Mobile Industry Processor Interface):ARM, Nokia, ST ,TI等公司在2003年成立的一個(gè)聯(lián)盟所定的接口。目的是把手機(jī)等移動(dòng)設(shè)備內(nèi)部的接口如:攝像頭、顯示屏接口、射頻/基帶接口等標(biāo)準(zhǔn)化,從而減少手機(jī)等移動(dòng)設(shè)備設(shè)計(jì)的復(fù)雜程度和增加設(shè)計(jì)靈活性。
工作組(Work Group):MIPI聯(lián)盟下有許多的工作組,不同的工作組負(fù)責(zé)定義對(duì)應(yīng)設(shè)備的標(biāo)準(zhǔn)。其中包括有:Camera工作組、Display工作組、高速多端鏈接工作組等十幾個(gè)工作組。
MIPI CSI-2接口是由MIPI聯(lián)盟下的Camera工作組指定的CSI(Camera Serial Interface)的第2版接口標(biāo)準(zhǔn)。硬件層面:最大支持4個(gè)虛擬通道(Lane)傳輸數(shù)據(jù),1個(gè)Lane在硬件上體現(xiàn)就是一對(duì)差分信號(hào)線(見下方原理圖),每個(gè)Lane的最大通訊速率為2.0Gbps。軟件層面:MIPI CSI-2協(xié)議棧主要由應(yīng)用層、協(xié)議層、物理層組成,其中協(xié)議層又可以分為:像素/字節(jié)組包/解包層、底層協(xié)議層、通道管理層。
1.2 硬件接口資源介紹
EASY EAI PI2開發(fā)板具有2路MIPI CSI-2接口。每路引出了4個(gè)Lane。位置定義如下所示。

EASY EAI PI2默認(rèn)搭配IMX415單目攝像頭。同時(shí)配有一根0.5mm間距的40pin FPC反向線。
反向線:兩端的藍(lán)色標(biāo)識(shí)不在同一側(cè)面。
同向線:兩端的藍(lán)色標(biāo)識(shí)處于同一側(cè)面。


1.3 接線說明

* 接線必須在斷電時(shí)進(jìn)行操作。
* 采用反向線連接IMX415攝像頭與Cmaera1接口。(注意:用錯(cuò)線會(huì)燒壞攝像頭或者核心板,因此在接線時(shí)務(wù)必要小心。)
* 接線端子卡扣與FPC線的藍(lán)色塑料標(biāo)識(shí)必須位于同一側(cè)。如下圖所示。

1.4 查看設(shè)備情況
可以通過dmesg命令,檢查MIPI-CSI2接口模塊是否正常工作。
dmesg | grep "csi2-.phy"
攝像頭正常掛載的情況如下所示??梢钥吹剑?/p>
在dphy0接口上有一個(gè)sensor型號(hào)為:sc450ai的攝像頭,MIPI-CSI2地址為:1-0030;
在dphy3接口上有一個(gè)sensor型號(hào)為:imx415的攝像頭,MIPI-CSI2地址為:4-0036。

當(dāng)沒能出現(xiàn)目標(biāo)camera節(jié)點(diǎn)時(shí),就需要檢查FPC排線是否正常連接,請(qǐng)檢查排線的連接是否與“1.3接線說明”一致。
1.5 尋找可用的設(shè)備節(jié)點(diǎn)
rockchip平臺(tái),一個(gè)MIPI-CSI接口會(huì)對(duì)應(yīng)20多個(gè)video節(jié)點(diǎn)(設(shè)備樹定了就會(huì)生成這么多個(gè)),如下圖所示。

注意:CSI0并不一定是對(duì)應(yīng)著video0~24,這個(gè)要根據(jù)設(shè)備樹的實(shí)際情況對(duì)應(yīng)生成。
而且MIPI-CSI camera對(duì)應(yīng)的節(jié)點(diǎn),會(huì)在修改內(nèi)核設(shè)備樹的時(shí)候固定下來(即:內(nèi)核配好了MIPI-CSI Camera個(gè)數(shù),無論MIPI-CSI攝像頭是否有接上,它的video節(jié)點(diǎn)情況都是不會(huì)根據(jù)MIPI-CSI Camera的接入情況而【動(dòng)態(tài)】改變)。
因此,用戶需要找到這些節(jié)點(diǎn)所對(duì)應(yīng)的描述信息是什么。Linux的v4l2框架會(huì)把這些節(jié)點(diǎn)的描述信息統(tǒng)一放在/sys/class/video4linux/目錄下,如下圖所示。

隨便進(jìn)入一個(gè)描述,如video23。

通過cat命令,可以用查看這個(gè)name的內(nèi)容是什么。rockchip芯片定義:如果這個(gè)name是mainpath或者selfpath。則這個(gè)“video23”就是可用節(jié)點(diǎn)。
在終端任意目錄執(zhí)行下面這條命令,可以快速掃描所有的節(jié)點(diǎn)的“name”描述。
grep "mainpath" /sys/class/video4linux/video*/name

因此,/dev/video23和/dev/video24都是MIPI-CSI0的可用節(jié)點(diǎn)。
2. 快速上手
2.1 開發(fā)環(huán)境準(zhǔn)備
如果您初次閱讀此文檔,請(qǐng)閱讀《入門指南/開發(fā)環(huán)境準(zhǔn)備/Easy-Eai編譯環(huán)境準(zhǔn)備與更新》,并按照其相關(guān)的操作,進(jìn)行編譯環(huán)境的部署。
在PC端Ubuntu系統(tǒng)中執(zhí)行run腳本,進(jìn)入EASY-EAI編譯環(huán)境,具體如下所示。
cd ~/develop_environment ./run.sh 2204

2.2 源碼下載以及例程編譯
首先,在虛擬機(jī)后臺(tái)終端,執(zhí)行以下命令,創(chuàng)建外設(shè)單例源碼管理目錄:
cd /opt mkdir -p EASY-EAI-PI2/demo
首先,到【百度網(wǎng)盤】上下載相關(guān)的單例程序:
鏈接:https://pan.baidu.com/s/1ORJrMeW-bOJ6g_lPiNG6mw?pwd=1234
提取碼:1234
比如把單例程序下載到:此電腦\D:\BaiduNetdisk (無規(guī)定,用戶可自主選擇),如下圖所示。

再將下載好的單例復(fù)制進(jìn)入虛擬機(jī)的文件系統(tǒng),過程如下圖所示。



最后,進(jìn)入到對(duì)應(yīng)的例程目錄執(zhí)行編譯操作,具體命令如下所示:
cd EASY-EAI-PI2/demo/02_camera ./build.sh
注:
* 由于依賴庫(kù)部署在板卡上,因此交叉編譯過程中必須保持/mnt掛載。

2.3 例程運(yùn)行
通過串口調(diào)試或ssh調(diào)試,進(jìn)入板卡后臺(tái),定位到例程部署的位置,如下所示:
cd /userdata

運(yùn)行例程命令如下所示:
./test-mipiCam 23
2.4 運(yùn)行效果
執(zhí)行效果如下所示。

例程運(yùn)行完之后,會(huì)在/tmp目錄下得到一張photo圖片?;氐教摂M機(jī)里,新開一個(gè)終端窗口,通過scp命令把圖片拷回來:

然后把photo用mplayer命令播放出來,如下所示。
ffplay -f rawvideo -pixel_format bgr24 -video_size 1920x1080 photo
例程默認(rèn)分辨率為1920x1080,故w和h的參數(shù)對(duì)應(yīng)填入1920和1080。當(dāng)出現(xiàn)圖片異常時(shí),說明分辨率等不太對(duì)應(yīng)于手頭的攝像頭,所以需要調(diào)整mipicamera_init()的分辨率,例如1280x720。命令執(zhí)行如下所示。

3. MIPI攝像頭測(cè)試案例
示例代碼路徑為:02_camera/test-mipiCam/main.c。MIPI Camera API的測(cè)試案例代碼邏輯流程如下所示:

3.1 源碼說明
int main(int argc, char **argv) { int ret = 0; if(1 == argc){ printf("\nerr: Missing parameter!\n"); printf("================= [usage] ==================\n"); printf("example:\n"); printf("\t%s <22/30>\n", argv[0]); printf("--------------------------------------------\n"); return 0; } char *pbuf = NULL; int skip = 0; FILE *fp = NULL; int cameraIndex = atoi(argv[1]); //通常是video22 ret = mipicamera_init(cameraIndex, CAMERA_WIDTH, CAMERA_HEIGHT, 0); if (ret) { printf("error: %s, %d\n", __func__, __LINE__); goto exit3; } pbuf = (char *)malloc(IMAGE_SIZE); if (!pbuf) { printf("error: %s, %d\n", __func__, __LINE__); ret = -1; goto exit2; } //跳過前10幀 skip = 10; while(skip--) { ret = mipicamera_getframe(cameraIndex, pbuf); if (ret) { printf("error: %s, %d\n", __func__, __LINE__); goto exit1; } } /* tips: 可以在Ubuntu下用mplayer播放錄制圖像 * mplayer -demuxer rawvideo -rawvideo w=1920:h=1080:format=bgr24 photo -loop 0 */ fp = fopen("/tmp/photo", "w"); if (!fp) { printf("error: %s, %d\n", __func__, __LINE__); ret = -1; goto exit2; } fwrite(pbuf, 1, IMAGE_SIZE, fp); fclose(fp); exit1: free(pbuf); pbuf = NULL; exit2: mipicamera_exit(cameraIndex); exit3: return ret; }
其中mipicamera_init(),mipicamera_getframe(),mipicamera_exit()是對(duì)v4l2接口調(diào)用的易用化封裝。具體實(shí)現(xiàn)于02_camera/commonApi/mipi_camera.c。
-
人工智能
+關(guān)注
關(guān)注
1822文章
50637瀏覽量
268339 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6577瀏覽量
121537 -
瑞芯微
+關(guān)注
關(guān)注
27文章
933瀏覽量
54793 -
EASY-EAI靈眸科技
+關(guān)注
關(guān)注
4文章
158瀏覽量
3764 -
RV1126B
+關(guān)注
關(guān)注
0文章
154瀏覽量
302
發(fā)布評(píng)論請(qǐng)先 登錄
瑞芯微(EASY EAI)RV1126B MIPI-CSI攝像頭
瑞芯微(EASY EAI)RV1126B AHD攝像頭
瑞芯微RV1126B開發(fā)板(EASY-EAI-PI2) 主板簡(jiǎn)介
瑞芯微RV1126B開發(fā)板(EASY-EAI-PI2) 核心板簡(jiǎn)介
【EASY EAI Nano-TB(RV1126B)開發(fā)板試用】開箱測(cè)評(píng)
【EASY EAI Nano-TB(RV1126B)開發(fā)板試用】+1、開箱上電
【EASY EAI Nano-TB(RV1126B)開發(fā)板試用】桌面系統(tǒng)功能測(cè)試-驅(qū)動(dòng)攝像頭-Mediapipe人體姿態(tài)檢測(cè)1
【EASY EAI Nano-TB(RV1126B)開發(fā)板試用】介紹、系統(tǒng)安裝
【飛凌嵌入式RV1126B開發(fā)板】+兩款開發(fā)板之比較
【飛凌嵌入式RV1126B開發(fā)板試用體驗(yàn)】初識(shí)飛凌嵌入式RV1126B開發(fā)板試
瑞芯微(EASY EAI)RV1126B 人員檢測(cè)方案
瑞芯微(EASY EAI)RV1126B 網(wǎng)絡(luò)攝像頭方案
瑞芯微RV1126B 方案特性
瑞芯微RV1126B開發(fā)板(EASY-EAI-PI2) 以太網(wǎng)口
瑞芯微RV1126B開發(fā)板(EASY-EAI-PI2) MIPI-CSI攝像頭
評(píng)論