很多人在调试RK3588/RK356X平台的camera的时候,经常会出现V4L2抓不到数据的情况,抓图的时候,返回select timeout的错误,或者是抓数据流的情况下,没有返回。这篇文章记录一下在调试过程中的这些常见问题以及debug手段。
第一种情况就是使用V4L2抓数据,串口没有报错,但是也没抓到数据,抓图的命令,会出现select timiout的报错反馈。
说一下常开的几种:
a. 命令直接提示错误的,提示V4L2-ctl的帮助页面,说明命令有误。
b. 出现no such devices的报错,如下:
Failed to open /dev/video0: No such device
大概率是由于提前打开了apk,apk会请链路,然后退出apk抓图的时候链路并非enabled的状态。
c.出现Invalid arguments类似的错误
说明命令的参数有误,可以使用help查看使用说明
d.出现device busy之类的报错
说明video节点被其他应用占用,先查看一下是否被其他赢占用节点。
经常会出现抓数据没数据返回,串口也没报错,抓图的时候报select timeout的错误。此现象可以按照如下排查:
a. 查看DPHY的状态
根据TRM手册,查看dphy的stopstate 来判断是否有收到数,例如查看RK3588 CSI0:
io -4 -l 0x100 0xfdd30000
需要连续读取10次上述寄存器,正常有识别到MIPI信号的话,对应的stopstate会在0/1之间变化。
b.测量mipi信号
示波器测量是否有MIPI信号输出
c.确认sensor寄存器
确认sensor mipi out的寄存器是正常的,可以使用i2c工具读取,推荐使用i2ctransfer
d.核对接口是否正确
RK3588系列/RK3562等都具有多路MIPI接口,容易硬件接的与DTS配置的对应不上的问题。
抓不到数据,经常伴有MIPI的相关报错,例如MIPI crc error,ECC等报错,这些报错与MIPI的信号相关,是MIPI信号校验出现的问题,通常有以下原因供排查:
MIPIRX的时钟需要与TX的相匹配,否则极大概率会导致MIPI报错。
MIPIRX的时钟在驱动的LINK FREQ进行配置,如果不知道TX端的时钟是多大,可以使用示波器测量一下,实在不知道,按照如下公式计算:
mipi clk = Htotal * Vtotal *fps * bit / lane num / 2
bit根据图像格式,例如raw10就是10,YUV422就是16,RGB888就是24。
SOT时序需要符合MIPI spec的要求:
Inserts the HS Sync-Sequence ‘00011101’ beginning on a rising Clock edge
MIPI速率较大的时候,对走线要求较高,建议硬件一起排查,走线是否等长,阻抗是否匹配等等
RK3588的DCHY有时序的要求,需要核对时序是否满足要求
最后测量MIPI信号确认问题,按照SPEC的规范,测试MIPI信号,再根据测试fail的项目,逐一进行排查。