当前位置:首页 > 嵌入式 > 嵌入式云IOT技术圈
[导读]点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!CCamera知识体系庞大、又杂、又难,虽然资料也不少,但是都很乱,很容易让人感到迷茫,失去学习的信心。对于初入这个体系的小白很难找到自己的学习的目标和方法。众所周知,学好Camera相关的知识,能够在音...

点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!C

Camera知识体系庞大、又杂、又难,虽然资料也不少,但是都很乱,很容易让人感到迷茫,失去学习的信心。对于初入这个体系的小白很难找到自己的学习的目标和方法。众所周知,学好Camera相关的知识,能够在音视频相关等行业拿到非常高的报酬:

根据最近自己调试瑞芯微RV1109平台Camera的一些心得体会,我将它们一一总结出来分享给大家:

1、瑞芯微平台Camera调试知识体系

1.1、调试RK平台摄像头的一些关键缩写语
缩写全称
3A =>(AWB, AE, AF)表示AWB, AE, AF的简写
AE =>(Auto Exposure)表示自动曝光
AF =>(Auto Focus)表示自动对焦
AWB =>(Auto White Balance)表示自动白平衡
FBC =>(Frame Buffer Compressed)表示帧缓冲压缩
FBC0 =>f(Rockchip yuv420sp fbc encoder)表示RK平台yuv420sp fbc 编码
FBC2 =>(Rockchip yuv422sp fbc encoder)表示RK平台yuv422sp fbc 编码
RkAiq =>(Rockchip Automatical Image Quality)表示RK平台自动图像质量
IQ =>(Image Quality)表示图像质量
ISP =>(Image Signal Process)表示图像信号处理
ISPP =>(Image Signal Post Process)表示图像信号后处理
1.2、瑞芯微平台Camera调试知识体系划分

以上分为:软件控制流程、图像算法、图像效果,这是相对于Android平台来划分的(图片来源于韦东山老师专家计划的Camera相关章节的学习笔记)。对于驱动工程师,我们只需要关注以下两个点:

图像算法:ISP算法(硬件)、3A算法(AE(曝光),AF(自动对焦),AWB(自动白平衡)、后处理算法(HDR、MFNR)

图像效果调试(Tunning):ISP调试、3A调试、后处理算法调试

1.3、瑞芯微平台中Camera的数据流通路
如上图(图片来源于瑞芯微原厂文档)所示,这张图反馈了以下信息:

Camera数据经过ISP20采集,ISP20再输出经过一系列图像处理算法后的数据,RkAiq不断从ISP20获取统计数据,并经过3A等算法生成新的参数反馈给ISP20,如上所示,以上的设备节点并不是固定的,它可能会改变,我们可以使用media-ctl查看对应的节点。

RKISP驱动主要是依据v4l2 / media framework实现硬件的配置、中断处理、控制 buffer轮转,以及控制subdevice(如mipi dphy及sensor)的上下电等功能,它的处理过程其实是非常复杂的,我们来看下面这张图(图片来源于瑞芯微原厂文档)就知道了:

1.3.1、通过搜索/sys目录下查找对应的节点名称
grep "" /sys/class/video4linux/*/name
来获取相应的节点,如下所示,这是通过grep "" /sys/class/video4linux/*/name来获取的节点信息:

这里你可能会发现,一个ISP节点有多个video节点的对应关系,其实它们是位于不同的media设备下的,因此在不同的media下所对应的video节点也是不同的。

其中,冒号前面的一部分表示video节点,冒号后面一部分就是ISP节点:

如上所示,video节点为:

/sys/class/video4linux/v4l-subdev0/name
ISP节点为:

rkispp-subdev
1.3.2、通过media-ctl获取拓扑信息
我们可以通过media-ctl获取拓扑信息,然后找到相应的数据通路,分别输入以下指令:

media-ctl -p -d /dev/media0
media-ctl -p -d /dev/media1
media-ctl -p -d /dev/media2
media-ctl -p -d /dev/media3
然后我们就可以找到ISP20输出的四路数据的信息了:

也就是说,我们在应用程序中只需要去操作:

/dev/video30  或  rkispp_m_bypass
/dev/video31  或  rkispp_scale0
/dev/video32  或  rkispp_scale1
/dev/video33  或  rkispp_scale2
就可以对摄像头进行驱动了,另外:

rkispp_m_bypass这路数据流比较特殊,其不支持设置分辨率,其输出分辨率由ISP输入的分辨率决定,可以通过media-ctl查看拓扑结构确定ISP输入的分辨率:

如上所示,rkispp_m_bypass这路输出的分辨率为1920x1080。

其它三路数据:rkispp_scale0、rkispp_scale1、rkispp_scale2节点支持缩放,每一路支持的最大分辨率如下所示:

节点名称视频设备ID最大支持宽度支持输出格式
rkispp_m_bypass/dev/video30不支持设置分辨率,不支持缩放NV12/NV16/YUYV/FBC0/FBC2/
rkispp_scale0/dev/video31max width: 3264,最大支持8倍缩放NV12/NV16/YUYV
rkispp_scale1/dev/video32max width: 1280,最大支持8倍缩放NV12/NV16/YUYV
rkispp_scale2/dev/video33max width: 1280,最大支持8倍缩放NV12/NV16/YUYV
video id 节点不是固定的,我的节点也是通过media-ctl查看的。当然我们也可以使用v4l2-ctl来抓图,测试数据是否正常通信。

1.3.3、图像优化调试3A算法
当Sensor输出RAW BAYER RGB格式时,如RGGB,BGGR,GBRG,GRBG等,需要ISP20提供一系列图像处理算法来优化图像效果,此时需要RkAiq模块介入。

SDK提供了一种3A独立进程的方式(ispserver)集成了RkAiq库librkaiq.so,当我们使用RK提供的RKMEDIA进行编程获取据流时,能够得到具有ISP调试效果的图像。

2、RKISP调试

21、查看摄像头sensor驱动的适配情况
我选用的是gc2053这款摄像头,并且在Linux设备树中已经做了相应的支持,故我们可以通过获取内核启动信息来查看摄像头驱动的加载情况,获取方法:

dmesg | grep "gc2053"
我们可以看到如下信息:

其中,如果能在内核信息中看到以上两行信息:

[    0.831096] gc2053 1-0037: Detected GC2053 sensor
[    0.831201] rockchip-mipi-dphy-rx ff4b0000.csi-dphy: match m00_f_gc2053 1-0037:bus type 4
即表示摄像头已经适配成功了!

2.2、获取驱动版本号
搜索应的字段:

dmesg | grep "rkisp driver version"
dmesg | grep "rkispp driver version"
如下:

或者通过以下命令获取:

cat /sys/module/video_rkisp/parameters/version
cat /sys/module/video_rkispp/parameters/version
如下:

2.3、如何判断RKISP驱动加载状态
RKISP驱动如果加载成功,会有video及media设备存在于/dev/目录下。系统中可能存在多个/dev/video设备,通过/sys可以查询到RKISP注册的video节点:

grep '' /sys/class/video4linux/video*/name
查询信息如下:

当然也可以通过media-ctl命令来打印拓扑结构查看pipeline的状态是否正常,如果RKISP驱动加载成功,则在内核中能看到如下打印:

dmesg | grep Async
如果没有的话,则需要返回到1.1步骤去检查摄像头sensor驱动是否有报错,检测I2C通讯是否正常。

往期精彩

超轻量级网红软件定时器multi_timer(51 stm32双平台实战)

使您的软件运行起来: 防止缓冲区溢出(C语言精华帖)

RT-Thread UART设备驱动框架初体验(中断方式接收带\r\n的数据)

数显仪表盘显示“速度、方向、计数器”的跑马灯

MCU串口命令解析器的实现TKM32F499评估板串口通信学习与实践笔记

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭