This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

VD0 and VD1 interrupts not received in ISP CCDC block, while using an mt9t112 based camera module.

Other Parts Discussed in Thread: AM3715

Brief description: When we use an mt9t112 camera in combination with an AM3715, with rowboat stack based software running on it (starting from omap3evm board and camera configuration), we do not get any image on the display when running the standard android camera application.  Further investigation pointed out that we do not get any VD0 and VD1 interrupts in the ISP-layer, despite the fact that we do get the HS_VS_IRQ interrupts and the fact that all the signals coming from the camera are looking correct.

 

Question: Does anyone know what might be causing these problems?

 

Full description: 

We are using a camera module based on the mt9t112 Aptina capture processor.  The android system we use is based on the rowboat code stack.  This code stack only has mt9t112 module code available for socket camera use.  The mt9t111 driver is available in the rowboat stack for omap3evm usage (as it is part of the camera module that is available for the omap3evm) and uses the ISP CCDC block to generate a picture for android application layer use (via hardware/ti/omap3/camera interface block).

 

As we are using the rowboat-omap3 based code stack, we used the mt9t111 driver code model as base to generate an adjusted mt9t112 based kernel driver that supports the omap3 based ISP/v4l2 behavior.  After driver completion, no image was visible on the display of the android device.  Further study pointed out that the VD0 and VD1 interrupts are not generated by the ISP hardware.  A check of the registers does point out though that these interrupts are enabled and that they are programmed to react at the correct number of horizontal syncs.  We even tried lowering the VD0 and VD1 to lower values, but still the interrupts are not occurring.

 

Question: Is the horizontal sync counter register accessible for reading so that we could check if the value ever changes?

 

Some further remarks:

-The HS_VS_IRQ interrupts however are being generated (at the VS-rate), so that seems correct.  We checked the signal/data lines coming from the camera with the scope and as well horizontal and vertical sync seem correct and also the data lines look fine (dark and light clearly noticeable and when selecting the walking one test, the data lines are reacting accordingly).  All clocks look good too.

-All GPIO’s have been checked and as far as we can see, these are configured correctly.

-As a double check to see if the HS reach the ISP block correctly, we changed the SYNC_DETECT setting from "VS rising edge" to "HS rising edge" and when we run this code, the number of received HS_VS_IRQ's is drastically increased, indicating that the ISP block is receiving the HS signal correctly.

-We checked numerous other register settings and changed possible issues, but VD0 and VD1 interrupts are still not received.

We also tried generating virtual VD0 and VD1 interrupts (using a timer that is started by the HS_VS_IRQ).  The virtual VD1 and VD0 interrupts are generated at the correct positions, but this does not solve any problems.  This way we were able to verify that the buffers are being copied correctly and that this memory information was reaching the android camera application.  This memory was filled with 0x00's, indicating that no data was placed into the memory by possible received Horizontal Syncs.

We also verified that the pad formats were the same resolution and format.  Input and output pads are all set to 640x480 and in YUV422 mode.

 

Any suggestions on what we could check additionally to verify the problem or how we could solve this issue are welcome.

Best regards,

Hans Van Doninck

  • Hi Van,

    1. From the android layer ( HAL), I do not see any modification for this perticular changes you have done if sensor driver is V4L2 compliant.

    2. To validate capture buffer, one can dump the buffer ( in file) coming to following function.

    File : V4L2Camera.cpp

    Function:GrabRawFrame

    if buffer content is not valid at this point, problem lies to driver integration V4L2 framework or sensor configuration in driver itsself.

    3. However you can always refer to below porting guide for further clarity.

    http://processors.wiki.ti.com/index.php/TI-Android-GingerBread-2.3.4-DevKit-2.1_PortingGuides#Camera

    I hope this would give clarity on android front.

    BR,

    satish

  • Hi Satish,

    Thanks for your response.

    We already checked the buffer functionality between kernel and Android, and that seems ok.

    The problem we are experiencing is on a lower level (hardware/kernel level).  We are not receiving any VD0 and VD1 interrupts on ISP level.  If these interrupts are not generated by the ISP block, the V4L2Camera.cpp code will even not be reached/triggered. The VD0 and VD1 interrupts should be generated by the ISP block depending on the received horizontal syncs (when using parallel mode like we do at the moment).  For more information about the issue we are experiencing, please check the full description from the initial problem description.

    The image data that is visible on the [D0-D11] image data lines (checked via scope), does not seem to be captured by the ISP block.

    The question therefore still remains why we are not receiving the VD0 and VD1 interrupts from the ISP block.

    Best regards,

    Hans