我现在用tw2866+tw2826在imx6q上调试,tw2866+tw2826的寄存器配置是以前在imx53上用的,输出为bt656,interlaced,确认在imx53上使用一切正常。
但是我移植到imx6上,android系统,架构是我按照ov5640上改的,所做的改动是 ioctl_g_ifparm函数里p->u.bt656.clock_curr = 0,保证mxc_v4l2_capture.c文件中mxc_v4l2_s_param这个函数if (ifparm.u.bt656.clock_curr == 0) csi_param.clk_mode = IPU_CSI_CLK_MODE_CCIR656_INTERLACED;
在ipu_csi_init_interface函数中
if (width == 720 && height == 625) {
/* PAL case */
/*
* Field0BlankEnd = 0x6, Field0BlankStart = 0x2,
* Field0ActiveEnd = 0x4, Field0ActiveStart = 0
*/
ipu_csi_write(ipu, csi, 0x40596, CSI_CCIR_CODE_1);
/*
* Field1BlankEnd = 0x7, Field1BlankStart = 0x3,
* Field1ActiveEnd = 0x5, Field1ActiveStart = 0x1
*/
ipu_csi_write(ipu, csi, 0xD07DF, CSI_CCIR_CODE_2);
ipu_csi_write(ipu, csi, 0xFF0000, CSI_CCIR_CODE_3);
我改成了:
if (width == 720 && height == 625||height == 576) {
/* PAL case */
/*
* Field0BlankEnd = 0x6, Field0BlankStart = 0x2,
* Field0ActiveEnd = 0x4, Field0ActiveStart = 0
*/
ipu_csi_write(ipu, csi, 0x40596, CSI_CCIR_CODE_1);
/*
* Field1BlankEnd = 0x7, Field1BlankStart = 0x3,
* Field1ActiveEnd = 0x5, Field1ActiveStart = 0x1
*/
ipu_csi_write(ipu, csi, 0xD07DF, CSI_CCIR_CODE_2);
ipu_csi_write(ipu, csi, 0xFF0000, CSI_CCIR_CODE_3);
一些参数配置在probe函数中,这个和sensor芯片一致:
tw2866_data.pix.pixelformat = V4L2_PIX_FMT_UYVY;
tw2866_data.pix.width = 720;
tw2866_data.pix.height = 576;
现在的问题是 :
1:我按上面这么配置 p->u.bt656.clock_curr = 0,使得cpu按隔行处理,每次都出错ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0:
2:如果我设置p->u.bt656.clock_curr = tw2866_data.mclk; mxc_v4l2_s_param函数中csi_param.clk_mode = IPU_CSI_CLK_MODE_CCIR656_PROGRESSIVE;能显示一半图像。
3:我确认sensor输出是隔行的,所以cpu这边也不能配置成逐行。我看论坛里有类似的情况 有人说The hardware cause EAV/SAV error,这个硬件导致EAV/SAV出错,这个具体不是很懂,是硬件布线什么的导致EAV/SAV错误吗?
4:还有MX6Q_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN这个管脚需要配置吗?如果要配置,外面要拉高还是拉低?或者代码里要做什么动作吗?
|