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.

TDA4VE-Q1: Unable to update MIPI CRC error

Part Number: TDA4VE-Q1
Other Parts Discussed in Thread: AM62P

Tool/software:

Hi, experts:

I refer to this post and successfully get the "crcCount" parameter in my app.

I wanted to test if this parameter was valid, so I did the following test:

I tried to force a mipi crc error on the camera side, and I found that the crc error could be represented on the deserializer side, but the "crcCount" parameter was still 0.

And I read the error_irqs register (0x04504028/0x04514028), PAYLOAD_CRC_IRQ is still 0.

But I did the same test on the am62p platform with the same camera and deserializer, the same error injection method.

I found that a mipi crc error can be read in the error_irqs register (0x30101028). See the picture below:

Therefore, I would like to ask whether mipi crc errors are supported on the TDA4VE platform?

If yes, do I need to turn it on or am I reading the wrong register?

Thank you~

  • Hi Wang Liu,

    Yes, CRC errors are captured in the RTOS CSIRX driver, but can you please check if they are enabled by calling IOCTL_CSIRX_REGISTER_EVENT control command? Please refer to implementation in the capture node in video_io\kernels\video_io\capture\vx_capture_target.c for the reference.

    Regards,

    Brijesh 

  • Hi Brijesh,

    I think so.

    In addition, as I mentioned above, the PAYLOAD_CRC_IRQ bit shows no crc error when reading the error_irqs register.

    Is this register also associated with the ioctl command?

  • Hi Wang Liu,

    I think so, please refer to the PDK documentation to get the list of errors supported/captured by the driver.  

    Regards,

    Brijesh

  • Hi Brijesh,

    In the PDK documentation I can confirm that mipi crc errors are supported.

    However, in my actual test, the crc error flag bit (PAYLOAD_CRC_IRQ) was not set to 1.


    I did the same test on the am62p platform and the crc error flag bit (PAYLOAD_CRC_IRQ) was set to 1.

  • Hi,

    Well, if there is any CRC error in the payload, then it would be set, but then this interrupt is processed by the RTOS driver and so driver would have cleaned it and incremented its own internal status. So please get this status from driver, instead of from register. 

    Regards,

    Brijesh

  • Hi Brijesh,

    Thank you for your patient reply. I understand.

    I tried to complete the following function by referring to the call to the TIVX_CAPTURE_GET_STATISTICS parameter in video_io/kernels/video_io/test/test_capture.c.

    vx_status app_send_stats_config_to_capture(vx_context context, CaptureObj *CaptureObj)
    {
        vx_status status = VX_SUCCESS;
        uint32_t *data_ptr;
        vx_map_id capture_stats_map_id;
        tivx_capture_statistics_t *capture_stats_struct;
        vx_user_data_object stats_config;
        vx_reference refs[1];
    
        stats_config =
            vxCreateUserDataObject(context, "tivx_capture_statistics_t" ,
            sizeof(tivx_capture_statistics_t), NULL);
    
        refs[0] = (vx_reference)stats_config;
    
        status = tivxNodeSendCommand(CaptureObj->node, 0,
            TIVX_CAPTURE_GET_STATISTICS, refs, 1u);
    
        if (status != VX_SUCCESS)
        {
            APP_PRINTF("Capture Node send command failed!\n");
        }
    
        vxMapUserDataObject(
                (vx_user_data_object)refs[0],
                0,
                sizeof(tivx_capture_statistics_t),
                &capture_stats_map_id,
                (void **)&data_ptr,
                VX_READ_ONLY,
                VX_MEMORY_TYPE_HOST,
                0
        );
    
        capture_stats_struct = (tivx_capture_statistics_t*)data_ptr;
    
        printf("\n\r==========================================================\r\n");
        printf(": Capture Status:\r\n");
        printf("==========================================================\r\n");
        printf(": CRC count: %d\r\n",capture_stats_struct->crcCount[0U]);
        printf(": CRC count: %d\r\n",capture_stats_struct->crcCount[1U]);
        vxUnmapUserDataObject((vx_user_data_object)refs[0], capture_stats_map_id);
    
        return status;
    }

    However, when the crc error is injected, "crcCount" is still 0.

    Could you please help me check if there are any problems with my implementation?

  • Hi wang liu,

    This looks to be correct implementation, so i want to check with you, is the CRC error really generated when you run this code?  If it is, it should be captured by the driver. I have seen CRC errors reported by the driver..  

    Regards,

    Brijesh 

  • Hi Brijesh,

    I have seen CRC errors reported by the driver.. 

    Could you please share the log of CRC errors reported by the driver that you have seen ?

    In addition,I can confirm that CRC errors have been generated before running this code.

    Because I did the same test on the am62p platform with the same camera and deserializer, the same CRC error generation method.

    I found that a CRC error can be read in the error_irqs register (0x30101028).So this CRC error generation method works.

    I have implemented CRC error generation before running this code, and I can read that there is a CRC error on the deserializer side.

  • Hi Wang Liu,

    Do you happen to have JTAG and CCS connected to this board? Then we can connect to mcu2_0 and put breakpoint on error callback.

    Btw, please confirm that you are using OpenVX node for this. Also Hopefully OpenVX node is registering and enabling error interrupts. 

    Regards,

    Brijesh