基于RK3576开发板的MIPI-CSI摄像头使用
1. MIPI摄像头简介
1.1 MIPI CSI2接心简介
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.百度.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。
考核编纂 黄宇