前言
欢迎大家我分享和推荐好用的代码段~~
声明
欢迎转载,但请保留文章原始出处:
CSDN:http://www.csdn.net
雨季o莫忧离:http://blog.csdn.net/luckkof
正文
TG module 处于data path的前端, 当产生问题后经常会有黑屏的现象.
TG前端还有一个Seninf Module, Seninf Module的主要功能是处理Parallel/Mipi/Serial等interface发送的信号,TG module全称为Timing Generator,它主要有两个作用,一是产生sensor 工作所需要的Master Clock,二是接收sensor 吐出的信号。当怀疑是TG有问题的时候通常可以按照以下的思路.
1. 查看是否是ISP wait irq time out error, 出现问题后可以再main log里面看到以下的log:
ERROR: Clear(1),Type(0),IrqStatus(0x00005000),WaitStatus(0x00000400),Timeout(5000)
Bit10: 为1代表没有成功收到TG1 Done status
2. 认为和TG有关系后,接下来可以去分析dump register,主要需要关系以下的register.
A: TG2 receive input image data from seninf 2
0x150044E8 (ex. 0x0CC00990)
Width = 0xCC0, Height = 0x990
Width = 0xCC0, Height = 0x990
B: TG2 grab window
0x150044B8 (ex. 0x0C860002)
Grab pixel start = 0x0002, Grab pixel end = 0x0C86
0x150044BC (ex. 0x09680002)
Grab line start = 0x0002, Grab line end = 0x0968
C. TG1 receive input image data from seninf 1
0x15004448 (ex. 0x0CC00990)
Width = 0xCC0, Height = 0x990
0x15004448 (ex. 0x0CC00990)
Width = 0xCC0, Height = 0x990
D. TG1 grab window
0x15004418 (ex. 0x0C860002)
Grab pixel start = 0x0002, Grab pixel end = 0x0C86
0x1500441C (ex. 0x09680002)
Grab line start = 0x0002, Grab line end = 0x0968
0x15004418 (ex. 0x0C860002)
Grab pixel start = 0x0002, Grab pixel end = 0x0C86
0x1500441C (ex. 0x09680002)
Grab line start = 0x0002, Grab line end = 0x0968
3. 如果发现TG这些register里面的数据已经异常,则很有可能是Seninf Module已经产生了问题.因此就需要再去分析Seninf Module的相关register,Seninf module的register可以参考FAQ10571, 下面就把两种经常犯的错误罗列出来:
A: 以92为例,design note上main/sub camera有独立的mipi port,sub camera使用的为port_A,会有客户把sub camera的mipi-data 与main camera接在一起;这样就造成在切换到sub camra时,TG 无法从port_A 接收到数据.具体的修改不同的平台稍有不同.核心代码如下:
B. 还有一种情况是发生了CRC error;
0x1500810C,bit 0~2 为ECC,CRC error interrupt status;
若bit0,bit1,bit2为1,说明lane number不匹配,通常是sensor module的mipi lane number和对应的driver不匹配。
0x1500810C,bit 0~2 为ECC,CRC error interrupt status;
若bit0,bit1,bit2为1,说明lane number不匹配,通常是sensor module的mipi lane number和对应的driver不匹配。
4. 若发现前端Seninf Module输出来的数据正常,在main log里面还是发现有TG 的irq error而且TG的相关register收到的数据却不正常,可以考虑是bandwidth的问题导致.分析如下:
A: g_TempAddr:Last(0x02EC0000) == Cur(0x02EC0000)
Status(0x00000010),Lost pass1 done,Error IRQ, Type(0)
Bit4: 为1,表明bandwidth不足
B: 此时可以去check 0x15000802c和0x150004448, 0x150080ac和0x150044e8对比数据的大小来确认是否为TG module产生了问题.