赞
踩
上篇简单介绍了下最终效果,本篇开始将详细介绍相机适配、图像调优过程。
RK3588s imx415相机适配及ISP调优系列(一)
RK3588/RK3588S平台配备有两路DPHY、两路DCPHY硬件, 其中DCPHY只支持Full Mode模式: 1)使用csi2_dcphy0、csi2_dcphy1分别对应板卡上的物理接口:MIPI_DCPHY0_CSI0/MIPI_DCPHY1_CSI1; 2)data lane最大4 lanes; 3)最大速率2.5Gbps/lane; DPHY硬件分别是dphy0_hw/dphy1_hw,支持2种模式: Full Mode/Split Mode。其中每一个dphy硬件可以虚拟出3个逻辑dphy :csi2_dphy0/csi2_dphy1/csi2_dphy2。 Full Mode: 1)仅使用csi2_dphy0,csi2_dphy0与csi2_dphy1/csi2_dphy2互斥,不可同时使用; 2)data lane最大4 lanes; 3)最大速率2.5Gbps/lane。 Split Mode: 1)仅使用csi2_dphy1和csi2_dphy2, 与csi2_dphy0互斥,不可同时使用; 2)csi2_dphy1和csi2_dphy2可同时使用; 3)csi2_dphy1和csi2_dphy2各自的data lane最大是2 lanes; 4)csi2_dphy1对应物理dphy的lane0/lane1; 5)csi2_dphy2对应物理dphy的lane2/lane3; 6)最大速率2.5Gbps/lane。
RK3588S所有camera数据都需要通过vicap,再链接到isp。RK3588S VICAP支持输入RAW8/10/12/14,其仅支持一个vicap硬件,这个vicap支持同时输入6路mipi phy及1路dvp数据,所以我们将vicap分化成rkcif_mipi_lvds~rkcif_mipi_lvds5、rkcif_dvp等7个节点,各个节点的绑定关系需要严格按照节点顺序来配置,具体下节会详细介绍。
RK3588s 的ISP属于RK ISP v3.0版本,拥有2个ISP,单ISP最大可支持16M@30fps(4672 x 3504)。每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每一路的图像数据进isp处理。对于多摄方案,建议将数据流平均分配到两个isp上。
直通与回读模式区别:
1)直通:指数据经过vicap采集,直接发送给isp处理,不存储到ddr。需要注意的是hdr直通时,只有短帧是真正的直通,长帧需要存在ddr,isp再从ddr读取。
2)回读:指数据经过vicap采集到ddr,应用获取到数据后,将buffer地址推送给isp,isp再从ddr获取图像数据。
PS:在配置dts时,一个isp硬件,如果只配置一个虚拟节点,默认使用直通模式,如果配置了多个虚拟节点默认使用回读模式。
这次我用了两个Sony IMX415 MIPI口相机,因为AIO-RK3588S-JD4中配置有两个dcphy接口,所以直接可以按以上链接表进行配置。上图节点分别为:
1)mipi camera0/camera1: 相机节点;
2) csi2_dcphy0/csi2_dcphy1:dcphy节点
3) mipi0_csi2/mipi1_csi2:每个mipi phy都需要一个csi2模块来解析mipi协议,节点名称分别mipi0_csi2、mipi1_csi2。
4) rkcif_mipi_lvds/rkcif_mipi_lvds1: vicap节点,每个vicap节点与isp的链接关系,通过对应虚拟出的XXX_sditf来指明链接关系。
5) rkcif_mipi_lvds_sditf: vicap虚拟节点;
6) rkisp0_vir0/rkisp0_vir1: ISP虚拟节点,此处一个物理ISP了vir0、vir1这2个ISP虚拟节点。配置时需要关注下ISP处理能力,我调试过程中就遇到了两个相机使用一个物理ISP导致ISP处理能力不足的情况,这时就需要配两个物理ISP(rkisp0_vir0、rkisp1_vir0)。
dtsi中最重要的配置是相机sensor寄存器的i2c配置,包括主时钟、reset、pwdn等参数。配置前,需要详细对照下官方给出的电路原理图:
dcphy0接口对应管脚信息:
dcphy1接口对应管脚信息:
对照上面两图,配置如下:
配置完i2c后,接下来就按照上节的链接图完成从camera到ISP的配置即可,这部分不容易出错,网上也有不少相关资料可以借鉴。
AIO-3588S-JD电路原理图及dtsi配置文件我上传网盘了,也可下载后进行参考配置:
https://pan.baidu.com/s/1y0yLWy0FrL3IbV4CuQDWRw
提取码:1234
完成以上配置,单独编译kernel(前提是板卡里已经烧写进完整系统镜像,如上篇中提到的官网固件AIO-3588SJD4-RTLINUX_Ubuntu20.04-Gnome-r21197_v1.0.1b_220922.img),RK3588s的内核编译命令为:
$./build.sh extboot
编译通过后,将sdk下kernel目录里的extboot.img文件烧写进板卡(烧写操作详见firefly wiki)即可。烧写完毕重启后,可通过以下指令判断是否配置正确、成功出图:
1)查看相机驱动的LOG信息:
$ dmesg | grep imx
若运行正常的情况下,则会出现fmt等信息,否则会看到未发现设备错误。
2)判断RKISP驱动加载状态:
RKISP驱动如果加载成功,会有video及media设备存在于/dev/目录下。系统中可能存在多个/dev/video设备,通过/sys可以查询到RKISP注册的video节点:
$ cat /sys/class/video4linux/video*/name
3)实时显示命令
$ gst-launch-1.0 v4l2src device=/dev/video11 io-mode=4 ! queue ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! glimagesink sync=false
PS: 末尾加上sync=false,会忽略时间同步的错误
4)查看数据输出帧率
$ v4l2-ctl -d /dev/video11 --set-fmt-video=width=3840,height=2160,pixelformat=‘NV12’ --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=3840,height=2160 --stream-count=500
这条指令我调试用得比较多,因为可以直接看到输出的帧率及有没有丢帧。
参考:
1、firefly wiki: https://wiki.t-firefly.com/zh_CN/Core-3588SJD4/linux_compile_ubuntu.html
2、rk3588_repo_sdk_v1.0.2a目录下doc文档
3、firefly AIO-RK3588S-JD4电板电路原理图:MB-JD4-RK3588S-V10-20220530.pdf
4、RK3588 Kernel DTS解析: https://blog.csdn.net/weixin_43245753/category_11687839.html
5、Rockchip RK3588 kernel dts解析之Camera: https://blog.csdn.net/weixin_43245753/article/details/125304848
6、RK3566调试GC2053: https://blog.csdn.net/professionalmcu/article/details/125083662
7、Camera i2c、常见概念、系统架构简介:https://blog.csdn.net/weixin_38360181/article/details/118960293
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。