这篇文章主要介绍一下,驱动已经实现,i2c已经通信正常且驱动成功注册,但是apk打开不出图应该如何排查。
很多同学调试camera的时候,经常会遇到,驱动按照原厂给的序列配置了,但是打开apk不出图或者apk直接闪退,下面介绍一下这类问题主要的排查方向。
(1)确认sensor驱动是否正常注册
查看log,类似如下,sensor check ID正常之后就会注册成V4L2子设备,log会打印连接到对应的DPHY上面。
[ 2.441640][ T1] gc8034 4-0037: driver version: 00.01.09
[ 2.441689][ T1] gc8034 4-0037: Failed to get power-gpios, maybe no use
[ 2.441794][ T1] gc8034 4-0037: supply dovdd not found, using dummy regulator
[ 2.441902][ T1] gc8034 4-0037: supply dvdd not found, using dummy regulator
[ 2.441946][ T1] gc8034 4-0037: supply avdd not found, using dummy regulator
[ 2.441985][ T1] gc8034 4-0037: lane_num(2) pixel_rate(320400000)
[ 2.441998][ T1] gc8034 4-0037: could not get default pinstate
[ 2.442006][ T1] gc8034 4-0037: could not get sleep pinstate
[ 2.448076][ T1] gc8034 4-0037: detected gc8044 sensor
[ 2.448156][ T1] rockchip-csi2-dphy csi2-dphy1: dphy1 matches m00_b_gc8034 4-0037:bus type 5
[ 2.448806][ T1] rkcif-mipi-lvds: Async subdev notifier completed
[ 2.449111][ T144] rkisp-vir0: Async subdev notifier completed
sensor注册失败,大多数原因都是check ID失败,也就是i2c不通,可以看上一篇文章进行排查:
(1条消息) camera调试:i2c不通如何排查?_人生苦短,我想躺平的博客-CSDN博客
(2)查看拓扑是否正常
查看pipeline的命令如下:
media-ctl -p -d /dev/mediaX X = 0..1..2..3...
在rk3588的平台上,正常会有两个链路,分别如下:
sensor -> csi_dphy -> mipi_csi2 -> rkcif_mipi_lvds
rkcif_mipi_lvds_stdif -> rkisp_vir
可使用上述命令查看pipeline链路是否完整。
(3)确认驱动是否可以抓图
使用V4L2工具抓图确认驱动是否正常,RAWsensor可以从RKCIF的节点抓RAW数据:
设置非紧凑
echo 0 > /sys/devices/platform/rkcif_mipi_lvds/compact_test
抓raw图
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='BG10' --stream-mmap=3 --stream-skip=20 --stream-to=/data/1080p60.raw --stream-count=5 --stream-poll
抓数据流,不保存图,仅刷出帧率:
v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=1920,height=1080
如果可以抓到数据流,或者可以抓到图像的话,可以从isp 节点的mainpath抓一张NV12的图像,使用看图软件确认图像是否正常,可以确认驱动是否正常出图
抓不到图,下面分几种情况:
①命令敲完直接报错(no such devices/invalid param)
命令敲完直接停止报错,检查命令是否正确。
可能还会出现no such devices之类的报错,大概率是由于链路没有enabled的导致的,正常开机之后pipeline是enabled的,如果打开了apk,pipeline有可能会被清空,建议直接重启之后不打开apk,直接抓数据。命令配置pipeline参考:
V4L2常用调试命令_人生苦短,我想躺平的博客-CSDN博客_v4l2调试
②抓数据没有,串口也没有报错,抓图select timeout
这种情况可能性一般有以下:
- 接口错误,RK3588有多个MIPI接口,dts配置的接口和实际硬件的连接对不上
- 硬件错误,硬件的连接性错了
- sensor没输出
- 其他主控的问题
上述的问题,比较常见的是dts配置错误和sensor没有信号输出,可以直接测量MIPI信号来确认,后面的文章会介绍主控端如何通过寄存器排查信号的问题。
③出现MIPI 相关报错
出现MIPI相关的报错,比较常见的是出现crc的报错刷屏:
[ 2266.859853][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.859862][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.859869][ C0] mipi2-csi2 ERR2:0x100 (ecc,vc: 0)
[ 2266.859920][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.859930][ C0] mipi2-csi2 ERR1:0x10000000 (ecc2)
[ 2266.859962][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.859970][ C0] mipi2-csi2 ERR2:0x100 (ecc,vc: 0)
[ 2266.860026][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.860033][ C0] mipi2-csi2 ERR1:0x10000000 (ecc2)
[ 2266.860093][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.860101][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.860108][ C0] mipi2-csi2 ERR2:0x100 (ecc,vc: 0)
[ 2266.860160][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
[ 2266.860167][ C0] mipi2-csi2 ERR1:0x1000000 (crc,vc: 0)
出现上述mipi相关的报错,crc/ecc等报错,本质上都是与phy层的mipi信号相关,可能原因如下:
- 驱动配置的MIPI时钟与sensor输出的MIPI时钟对应不上
- MIPI时序错误,例如SOT的时序不符合MIPI的SPEC
- MIPI信号质量不佳导致的报错
示波器测量可以确认sensor输出的MIPI时钟大小,驱动需要与其对应,MIPI信号质量的问题,可以通过将驱动的xvclk降低到12M/6M,如果降低后没出现MIPI的报错,那么需要排查硬件的走线等等。MIPI时序的问题,建议测量MIPI信号,看是否符合spec,后面再写文章来介绍这部分。
④vicap控制器的其他报错
包括PICK_SIZE_ERROR报错、iommu的报错等,需要确认一下sensor输出的图像格式是否正确,驱动配置的是否正确,抓图的大小与图像格式是否正确等等。
(4)确认camera服务是否成功注册设备
使用如下命令确认camera设备是否注册上:
dumpsys media.camera
如果发现设备没有注册上,重点排查camera3_profiles.xml文件配置是否正确,重点是moduleID 和name字段的检查。
(5)确认IQ效果文件的有效性
JSON文件在设备上的/vendor/etc/camera/rkisp2/,命名规则如下:
sensor_module-name_module-lens-name.json
确认文件命令是否正确,已经效果文件是否有效,需要跟dts的配置对应。
这个问题也可以先使用SOC运行看是否正常,SOC模式不会跑3A算法,也就不会用到IQ文件。
(6)cameraHAL报错
cameraHAL的相关报错导致,可以搜索logcat的关键词进行排查定位问题:
E RkCamera
(7)camera_engine_rkaiq相关报错
AIQ的相关报错,建议给原厂排查。