1. MIPI攝像頭簡介
MIPI (Mobile Industry Processor Interface):ARM, Nokia, ST ,TI等公司在2003年成立的一個聯盟所定的接口。目的是把手機等移動設備內部的接口如:攝像頭、顯示屏接口、射頻/基帶接口等標準化,從而減少手機等移動設備設計的復雜程度和增加設計靈活性。
工作組(Work Group):MIPI聯盟下有許多的工作組,不同的工作組負責定義對應設備的標準。其中包括有:Camera工作組、Display工作組、高速多端鏈接工作組等十幾個工作組。
MIPI CSI-2接口是由MIPI聯盟下的Camera工作組指定的CSI(Camera Serial Interface)的第2版接口標準。硬件層面:最大支持4個虛擬通道(Lane)傳輸數據,1個Lane在硬件上體現就是一對差分信號線(見下方原理圖),每個Lane的最大通訊速率為2.0Gbps。軟件層面:MIPI CSI-2協議棧主要由應用層、協議層、物理層組成,其中協議層又可以分為:像素/字節組包/解包層、底層協議層、通道管理層。
1.2 硬件接口資源介紹
EASY EAI Orin-Nano開發板具有2路MIPI CSI-2接口。每路引出了4個Lane。位置定義如下所示。
EASY EAI Orin-Nano默認搭配IMX415單目攝像頭。同時配有一根0.5mm間距的40pin FPC反向線。
反向線:兩端的藍色標識不在同一側面。
同向線:兩端的藍色標識處于同一側面。
1.3 接線說明
* 接線必須在斷電時進行操作。
* 采用反向線連接IMX415攝像頭與Cmaera1接口。(注意:用錯線會燒壞攝像頭或者核心板,因此在接線時務必要小心。)
* 接線端子卡扣與FPC線的藍色塑料標識必須位于同一側。如下圖所示。
1.4 查看設備情況
可以通過dmesg命令,檢查MIPI-CSI2接口模塊是否正常工作。
dmesg | grep "csi2-.phy"
攝像頭正常掛載的情況如下所示。可以看到:
在dcphy0接口上有一個sensor型號為:imx415的攝像頭,MIPI-CSI2地址為:4-0036;
在dphy0接口上有一個sensor型號為:imx415的攝像頭,MIPI-CSI2地址為:5-0036。
當沒能出現目標camera節點時,就需要檢查FPC排線是否正常連接,請檢查排線的連接是否與“1.3接線說明”一致。
1.5 尋找可用的設備節點
rockchip平臺,一個MIPI-CSI接口會對應20多個video節點(設備樹定了就會生成這么多個),如下圖所示。
注意:但CSI0并不一定是對應著video0~24,這個要根據設備樹的實際情況對應生成。
而且MIPI-CSI camera對應的節點,會在修改內核設備樹的時候固定下來(即:內核配好了MIPI-CSI Camera個數,無論MIPI-CSI攝像頭是否有接上,它的video節點情況都是不會根據MIPI-CSI Camera的接入情況而【動態】改變)。
因此,用戶需要找到這些節點所對應的描述信息是什么。Linux的v4l2框架會把這些節點的描述信息統一放在/sys/class/video4linux/目錄下,如下圖所示。
隨便進入一個描述,如video22。
通過cat命令,可以用查看這個name的內容是什么。rockchip芯片定義:如果這個name是mainpath或者selfpath。則這個“video22”就是可用節點。
在終端任意目錄執行下面這條命令,可以快速掃描所有的節點的“name”描述。
grep "mainpath" /sys/class/video4linux/video*/name

因此,/dev/video22和/dev/video23都是MIPI-CSI0的可用節點。
2. 快速上手
2.1 例程源碼下載
到【百度網盤】上下載相關的單例程序:
鏈接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234
提取碼: 1234
比如在windows環境中,就把單例程序下載到:此電腦D:BaiduNetdisk (無規定,用戶可自主選擇),如下圖所示。
然后把例程【復制粘貼】到nfs掛載目錄中。(不清楚目錄如何構建的,可以參考《入門指南/開發環境準備/nfs服務搭建與掛載》)
2.2 例程編譯&運行
通過adb shell進入開發板環境,執行下方命令定位到demo目錄,并且執行編譯操作。
cd /home/orin-nano/Desktop/nfs/02_camera/ ./build.sh

編譯成功后,相關的demo會生成在Release目錄下。
執行下方命令以運行demo,如下所示。
sudo ./Release/test-mipiCam 22 ##需要root權限
注:輸入參數22為MIPI-CSI0所對應的video索引,本固件camera1~2默認對應video索引分別為:22、31(若用戶按需對設備樹進行過修改,這些索引將會有所變化)
執行效果如下所示。
然后把/tmp/photo拷貝到當前目錄下的Release內
cp /tmp/photo ./Release/
再通過組合鍵【Ctrl+Shift+T】創建一個新窗口,定位到nfs服務器的對應位置。
最后使用mplayer工具播放圖片,命令如下所示。
mplayer -demuxer rawvideo -rawvideo w=1920:h=1080:format=bgr24 ./Release/photo -loop 0

例程默認分辨率為1920x1080,故w和h的參數對應填入1920和1080。當出現圖片異常時,說明分辨率等不太對應于手頭的攝像頭,所以需要調整mipicamera_init()的分辨率,例如640x480。
3. MIPI攝像頭測試案例
示例代碼路徑為:02_camera/test-mipiCam/main.c。MIPI Camera API的測試案例代碼邏輯流程如下所示:
3.1 源碼說明
int main() { int ret = 0; if(1 == argc){ printf("nerr: Missing parameter!n"); printf("================= [usage] ==================n"); printf("example:n"); printf("t%s 22/31?>n", argv[0]); printf("--------------------------------------------n"); return 0; } char *pbuf = NULL; int ret = 0; int skip = 0; FILE *fp = NULL; ret = mipicamera_init(CAMERA_INDEX, CAMERA_WIDTH, CAMERA_HEIGHT, 0); if (ret) { printf("error: %s, %dn", __func__, __LINE__); goto exit3; } pbuf = (char *)malloc(IMAGE_SIZE); if (!pbuf) { printf("error: %s, %dn", __func__, __LINE__); ret = -1; goto exit2; } //跳過前10幀 skip = 10; while(skip--) { ret = mipicamera_getframe(CAMERA_INDEX, pbuf); if (ret) { printf("error: %s, %dn", __func__, __LINE__); goto exit1; } } /* tips: 可以在Ubuntu下用mplayer播放錄制圖像 * adb pull /tmp/photo * mplayer -demuxer rawvideo -rawvideo w=1920:h=1080:format=bgr24 photo -loop 0 */ fp = fopen("/tmp/photo", "w"); if (!fp) { printf("error: %s, %dn", __func__, __LINE__); ret = -1; goto exit2; } fwrite(pbuf, 1, IMAGE_SIZE, fp); fclose(fp); exit1: free(pbuf); pbuf = NULL; exit2: mipicamera_exit(CAMERA_INDEX); exit3: return ret; }
其中mipicamera_init(),mipicamera_getframe(),mipicamera_exit()是對v4l2接口調用的易用化封裝。具體實現于02_camera/commonApi/mipi_camera.c。
審核編輯 黃宇
-
攝像頭
+關注
關注
60文章
4937瀏覽量
97528 -
開發板
+關注
關注
25文章
5445瀏覽量
101407 -
MIPI
+關注
關注
11文章
319瀏覽量
49419 -
rk3576
+關注
關注
1文章
134瀏覽量
507
發布評論請先 登錄
如何通過RK3576配置MIPI-CSI攝像頭的不同輸出格式
【米爾RK3576開發板評測】帶你初步了解米爾RK3576這塊開發板
【米爾RK3576開發板評測】+項目名稱【米爾RK3576開發板評測】一個視頻和你共同認識一下米爾RK3576開發板
米爾瑞芯微RK3576實測輕松搞定三屏八攝像頭
國產開發板的端側AI測評-基于米爾瑞芯微RK3576
基于RK3576開發板的MIPI-DSI使用

基于RK3576開發板的網絡攝像頭方案

評論