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.

TDA4VEN-Q1: Capture node block and dequeue nothing

Part Number: TDA4VEN-Q1


Tool/software:

Hi TI experts,

We are trying to bring up camera, but capture node block and dequeue noting.

We can measure the correct mipi signal on J37 expansion using an oscilloscope, and we confirm that the register configuration is normal (the same register configuration can bring up normally on the VM EVM board)

Can you please help me to check my code and figure out something abnormal?

Camera parameters:

resolution:1280*1280

fps:30fps

datatype:yuv422(uyvy)

#include "app_capture_module.h"
#include <iss_sensors.h>
#include <iss_sensor_if.h>

#define MAX_FNAME (256)

static vx_status configure_capture_params(vx_context context, CaptureObj *captureObj, SensorObj *sensorObj)
{
    vx_status status = VX_SUCCESS;

    //vx_uint32 num_capt_instances = 0;
    vx_int32 id, lane;
   // int32_t ch_mask = sensorObj->ch_mask;
    int indexId = 0;
    int chIdx = 0;

    if(status == VX_SUCCESS)
    {
        captureObj->capture_format = VX_DF_IMAGE_UYVY;

        tivx_capture_params_init(&captureObj->params);

        // if (captureObj->enable_error_detection || captureObj->test_mode)
        // {
            captureObj->params.timeout        = 200;
            captureObj->params.timeoutInitial = 500;
       // }
        captureObj->params.numInst  = 1;
        captureObj->params.numCh    = 4;

        for(id = 0; id < 1; id++)
        {
            captureObj->params.instId[id]                       = id;
            captureObj->params.instCfg[id].enableCsiv2p0Support = (uint32_t)vx_true_e;
            captureObj->params.instCfg[id].numDataLanes         = 4;
            //APP_PRINTF("captureObj->params.numDataLanes = %d \n", captureObj->params.instCfg[id].numDataLanes);
            captureObj->params.instCfg[id].laneBandSpeed        = TIVX_CAPTURE_LANE_BAND_SPEED_1040_TO_1200_MBPS;

           chIdx = 0;
            for (lane = 0; lane < captureObj->params.instCfg[id].numDataLanes; lane++)
            {
                captureObj->params.instCfg[id].dataLanesMap[lane] = lane + 1;
                printf("zzzzzzzzzzzcaptureObj->params.dataLanesMap[%d] = %d \n",
                            lane,
                            captureObj->params.instCfg[id].dataLanesMap[lane]);
            }

            for (indexId = 0U; indexId < NUM_CAPT_CHANNELS; indexId++)
			{
				captureObj->params.chVcNum[chIdx]   = indexId;
				captureObj->params.chInstMap[chIdx] = id;
				chIdx++;
			}
        }

        captureObj->config = vxCreateUserDataObject(context, "tivx_capture_params_t", sizeof(tivx_capture_params_t), &captureObj->params);
        status = vxGetStatus((vx_reference)captureObj->config);
    }

    if(status != VX_SUCCESS)
    {
        printf("[CAPTURE_MODULE] - Unable to create capture config object! \n");
    }
    else
    {
        vxSetReferenceName((vx_reference)captureObj->config, "capture_node_config");
    }

    return status;
}

static vx_status create_capture_output(vx_context context, CaptureObj *captureObj, SensorObj *sensorObj,  int32_t bufq_depth)
{
    vx_status status = VX_SUCCESS;

  //  IssSensor_CreateParams *sensorParams = &sensorObj->sensorParams;
    vx_int32 q;

        vx_image cap_yuv_image = vxCreateImage(context,  1280, 1280, VX_DF_IMAGE_UYVY);
        status = vxGetStatus((vx_reference)cap_yuv_image);

        if(status == VX_SUCCESS)
        {
            for(q = 0; q < bufq_depth; q++)
            {
                captureObj->raw_image_arr[q] = vxCreateObjectArray(context, (vx_reference)cap_yuv_image, 4);
                status = vxGetStatus((vx_reference)captureObj->raw_image_arr[q]);
                if(status != VX_SUCCESS)
                {
                    printf("[CAPTURE-MODULE] Unable to create YUV image object array! \n");
                    break;
                }
                else
                {
                    vx_char name[VX_MAX_REFERENCE_NAME];

                    snprintf(name, VX_MAX_REFERENCE_NAME, "capture_node_raw_image_arr_%d", q);

                    vxSetReferenceName((vx_reference)captureObj->raw_image_arr[q], name);
                }
            }
            vxReleaseImage(&cap_yuv_image);
        }
        else
        {
            printf("[CAPTURE-MODULE] Unable to create YUV image object! \n");
        }
 //   }

    return status;
}

vx_status app_init_capture(vx_context context, CaptureObj *captureObj, SensorObj *sensorObj, char *objName, int32_t bufq_depth)
{
    vx_status status = VX_SUCCESS;

    status = configure_capture_params(context, captureObj, sensorObj);

    if(status == VX_SUCCESS)
    {
        status = create_capture_output(context, captureObj, sensorObj, bufq_depth);
    }

    return (status);
}

vx_status app_create_graph_capture(vx_graph graph, CaptureObj *captureObj)
{
    vx_status status = VX_SUCCESS;

    captureObj->node = tivxCaptureNode(graph, captureObj->config, captureObj->raw_image_arr[0]);
    status = vxGetStatus((vx_reference)captureObj->node);

    if(status == VX_SUCCESS)
    {
        vxSetReferenceName((vx_reference)captureObj->node, "capture_node");
        vxSetNodeTarget(captureObj->node, VX_TARGET_STRING, TIVX_TARGET_CAPTURE1);

        if(captureObj->en_out_capture_write == 1)
        {
            status = app_create_graph_capture_write_output(graph, captureObj);
        }
    }
    else
    {
        printf("[CAPTURE-MODULE] Unable to create capture node! \n");
    }

    return status;
}
/*
 *
 * Copyright (c) 2020 Texas Instruments Incorporated
 *
 * All rights reserved not granted herein.
 *
 * Limited License.
 *
 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
 * license under copyrights and patents it now or hereafter owns or controls to make,
 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
 * terms herein.  With respect to the foregoing patent license, such license is granted
 * solely to the extent that any such patent is necessary to Utilize the software alone.
 * The patent license shall not apply to any combinations which include this software,
 * other than combinations with devices manufactured by or for TI ("TI Devices").
 * No hardware patent is licensed hereunder.
 *
 * Redistributions must preserve existing copyright notices and reproduce this license
 * (including the above copyright notice and the disclaimer and (if applicable) source
 * code license limitations below) in the documentation and/or other materials provided
 * with the distribution
 *
 * Redistribution and use in binary form, without modification, are permitted provided
 * that the following conditions are met:
 *
 * *       No reverse engineering, decompilation, or disassembly of this software is
 * permitted with respect to any software provided in binary form.
 *
 * *       any redistribution and use are licensed by TI for use only with TI Devices.
 *
 * *       Nothing shall obligate TI to provide you with source code for the software
 * licensed and provided to you in object code.
 *
 * If software source code is provided to you, modification and redistribution of the
 * source code are permitted provided that the following conditions are met:
 *
 * *       any redistribution and use of the source code, including any resulting derivative
 * works, are licensed by TI for use only with TI Devices.
 *
 * *       any redistribution and use of any object code compiled from the source code
 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
 *
 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
 *
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * DISCLAIMER.
 *
 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */

#include <utils/draw2d/include/draw2d.h>
#include <utils/perf_stats/include/app_perf_stats.h>
#include <utils/console_io/include/app_get.h>
#include <utils/grpx/include/app_grpx.h>
#include <utils/hwa/include/app_hwa_api.h>
#include <VX/vx_khr_pipelining.h>
#include <TI/video_io_kernels.h>

#include "app_common.h"
#include "app_sensor_module.h"
#include "app_capture_module.h"
#include "app_obj_arr_split_module.h"
#include "app_viss_module.h"
#include "app_aewb_module.h"
#include "app_ldc_module.h"
#include "app_img_mosaic_module.h"
#include "app_display_module.h"
#include "app_test.h"

#define CAPTURE_BUFFER_Q_DEPTH  (4)
#define APP_BUFFER_Q_DEPTH      (4)
#define APP_PIPELINE_DEPTH      (4)

//#define APP_TIVX_LOG_RT_ENABLE

typedef struct {

    SensorObj     sensorObj;
    CaptureObj    captureObj;
    ObjArrSplitObj  objArrSplitObj;
    VISSObj       vissObj;
    AEWBObj       aewbObj;
    LDCObj        ldcObj;
    VISSObj       vissObj1;
    AEWBObj       aewbObj1;
    LDCObj        ldcObj1;
    ImgMosaicObj  imgMosaicObj;
    DisplayObj    displayObj;

    vx_char output_file_path[APP_MAX_FILE_PATH];

    /* OpenVX references */
    vx_context context;
    vx_graph   graph;

    vx_int32 en_out_img_write;
    vx_int32 test_mode;

    vx_uint32 is_interactive;

    vx_uint32 num_frames_to_run;

    vx_uint32 num_frames_to_write;
    vx_uint32 num_frames_to_skip;

    tivx_task task;
    vx_uint32 stop_task;
    vx_uint32 stop_task_done;

    app_perf_point_t total_perf;
    app_perf_point_t fileio_perf;
    app_perf_point_t draw_perf;

    int32_t enable_ldc;
    int32_t enable_viss;
    int32_t enable_split_graph;
    int32_t enable_aewb;
    int32_t enable_mosaic;

    int32_t pipeline;

    int32_t enqueueCnt;
    int32_t dequeueCnt;

    int32_t write_file;

    vx_uint32 enable_configure_hwa_freq;
    vx_uint32 hwa_freq_config;
    vx_uint32 bypass_split_graph;

} AppObj;

AppObj gAppObj;

//static void app_parse_cmd_line_args(AppObj *obj, vx_int32 argc, vx_char *argv[]);
static vx_status app_init(AppObj *obj);
static void app_deinit(AppObj *obj);
static vx_status app_create_graph(AppObj *obj);
static vx_status app_verify_graph(AppObj *obj);
static vx_status app_run_graph(AppObj *obj);
static vx_status app_run_graph_interactive(AppObj *obj);
static void app_delete_graph(AppObj *obj);
//static void app_default_param_set(AppObj *obj);
//static void app_update_param_set(AppObj *obj);
static void app_pipeline_params_defaults(AppObj *obj);
static void add_graph_parameter_by_node_index(vx_graph graph, vx_node node, vx_uint32 node_parameter_index);
//static vx_int32 calc_grid_size(vx_uint32 ch);
// static void set_img_mosaic_params(ImgMosaicObj *imgMosaicObj, vx_uint32 in_width, vx_uint32 in_height, vx_int32 numCh, ObjArrSplitObj *objArrSplitObj, int32_t enable_split_graph);
//static void app_draw_graphics(Draw2D_Handle *handle, Draw2D_BufInfo *draw2dBufInfo, uint32_t update_type);

// static void app_show_usage(vx_int32 argc, vx_char* argv[])
// {
//     printf("\n");
//     printf(" Camera Demo - (c) Texas Instruments 2020\n");
//     printf(" ========================================================\n");
//     printf("\n");
//     printf(" Usage,\n");
//     printf("  %s --cfg <config file>\n", argv[0]);
//     printf("\n");
// }

static char menu[] = {
    "\n"
    "\n ========================="
    "\n Demo : Camera Demo"
    "\n ========================="
    "\n"
    "\n s: Save CSIx, VISS and LDC outputs"
    "\n"
    "\n p: Print performance statistics"
    "\n"
    "\n x: Exit"
    "\n"
    "\n Enter Choice: "
};


// static void app_run_task(void *app_var)
// {
//     AppObj *obj = (AppObj *)app_var;
//     vx_status status = VX_SUCCESS;
//     while((!obj->stop_task) && (status == VX_SUCCESS))
//     {
//         status = app_run_graph(obj);
//     }
//     obj->stop_task_done = 1;
// }

static void app_run_task(void *app_var)
{
     AppObj *obj = (AppObj *)app_var;
    tivxTaskWaitMsecs(20000);
    printf("111111111111111111111111111111111111111\n");
    app_delete_graph(obj);

    APP_PRINTF("App Delete Graph Done! \n");

    app_deinit(obj);

    APP_PRINTF("App De-init Done! \n");

}

static int32_t app_run_task_create(AppObj *obj)
{
    tivx_task_create_params_t params;
    vx_status status;

    tivxTaskSetDefaultCreateParams(&params);
    params.task_main = app_run_task;
    params.app_var = obj;

    obj->stop_task_done = 0;
    obj->stop_task = 0;

    status = tivxTaskCreate(&obj->task, &params);

    return status;
}

static void app_run_task_delete(AppObj *obj)
{
    while(obj->stop_task_done==0)
    {
        tivxTaskWaitMsecs(100);
    }

    tivxTaskDelete(&obj->task);
}

static vx_status app_run_graph_interactive(AppObj *obj)
{
    vx_status status;
    uint32_t done = 0;

    char ch;
    FILE *fp;
    app_perf_point_t *perf_arr[1];

    status = app_run_task_create(obj);
    if(status == VX_FAILURE)
    {
        printf("app_tidl: ERROR: Unable to create task\n");
    }
    else
    {
        appPerfStatsResetAll();
        while(!done)
        {
            printf(menu);
            ch = getchar();
            printf("\n");

            switch(ch)
            {
                case 'p':
                    appPerfStatsPrintAll();
                    status = tivx_utils_graph_perf_print(obj->graph);
                    appPerfPointPrint(&obj->fileio_perf);
                    appPerfPointPrint(&obj->total_perf);
                    printf("\n");
                    appPerfPointPrintFPS(&obj->total_perf);
                    appPerfPointReset(&obj->total_perf);
                    printf("\n");

                    vx_reference refs[1];
                    refs[0] = (vx_reference)obj->captureObj.raw_image_arr[0];
                    if (status == VX_SUCCESS)
                    {
                        status = tivxNodeSendCommand(obj->captureObj.node, 0u,
                                    TIVX_CAPTURE_PRINT_STATISTICS,
                                    refs, 1u);
                    }
                    break;
                case 'e':
                    perf_arr[0] = &obj->total_perf;
                    fp = appPerfStatsExportOpenFile(".", "basic_demos_app_multi_cam");
                    if (NULL != fp)
                    {
                        appPerfStatsExportAll(fp, perf_arr, 1);
                        if (status == VX_SUCCESS)
                        {
                            status = tivx_utils_graph_perf_export(fp, obj->graph);
                        }
                        appPerfStatsExportCloseFile(fp);
                        appPerfStatsResetAll();
                    }
                    else
                    {
                        printf("fp is null\n");
                    }
                    break;
                case 's':
                    obj->write_file = 1;
                    break;
                case 'x':
                    obj->stop_task = 1;
                    done = 1;
                    break;
            }
        }
        app_run_task_delete(obj);
    }
    return status;
}


vx_int32 app_multi_cam_main(vx_int32 argc, vx_char* argv[])
{
    vx_status status = VX_SUCCESS;

    AppObj *obj = &gAppObj;

    if (status == VX_SUCCESS)
    {
        status = app_init(obj);
        printf("app_init done !!! \n");
    }
    if(status == VX_SUCCESS)
    {
        APP_PRINTF("App Init Done! \n");

        status = app_create_graph(obj);

        if(status == VX_SUCCESS)
        {
            APP_PRINTF("App Create Graph Done! \n");

            status = app_verify_graph(obj);

            if(status == VX_SUCCESS)
            {
                APP_PRINTF("App Verify Graph Done! \n");

                if (status == VX_SUCCESS)
                {
                        status = app_run_graph(obj);
                }
            }
        }

        APP_PRINTF("App Run Graph Done! \n");
    }

    app_delete_graph(obj);

    APP_PRINTF("App Delete Graph Done! \n");

    app_deinit(obj);

    APP_PRINTF("App De-init Done! \n");

    if(obj->test_mode == 1)
    {
        if((vx_false_e == test_result) || (status != VX_SUCCESS))
        {
            printf("\n\nTEST FAILED\n\n");
            print_new_checksum_structs();
            status = (status == VX_SUCCESS) ? VX_FAILURE : status;
        }
        else
        {
            printf("\n\nTEST PASSED\n\n");
        }
    }
    return status;
}

static vx_status app_init(AppObj *obj)
{
    vx_status status = VX_SUCCESS;

    if (status == VX_SUCCESS)
    {
        /* Create OpenVx Context */
        obj->context = vxCreateContext();
        status = vxGetStatus((vx_reference)obj->context);
        APP_PRINTF("Creating context done!\n");
    }

    if (status == VX_SUCCESS)
    {
        tivxHwaLoadKernels(obj->context);
        tivxExtLoadKernels(obj->context);
        tivxVideoIOLoadKernels(obj->context);
        tivxImagingLoadKernels(obj->context);
        tivxFileIOLoadKernels(obj->context);
        APP_PRINTF("Kernel loading done!\n");
    }

    /* Initialize modules */
    if (status == VX_SUCCESS)
    {
        //app_serdes_sensor();
       // app_init_sensor(&obj->sensorObj, "sensor_obj");
    }

    if (status == VX_SUCCESS)
    {
        APP_PRINTF("Sensor init done!\n");
        status = app_init_capture(obj->context, &obj->captureObj, &obj->sensorObj, "capture_obj", CAPTURE_BUFFER_Q_DEPTH);
    }

    return status;
}

static void app_deinit(AppObj *obj)
{

    app_deinit_capture(&obj->captureObj, CAPTURE_BUFFER_Q_DEPTH);
    APP_PRINTF("Capture deinit done!\n");

    appGrpxDeInit();

    tivxHwaUnLoadKernels(obj->context);
    tivxExtUnLoadKernels(obj->context);
    tivxVideoIOUnLoadKernels(obj->context);
    tivxImagingUnLoadKernels(obj->context);
    tivxFileIOUnLoadKernels(obj->context);
    APP_PRINTF("Kernels unload done!\n");

    vxReleaseContext(&obj->context);
    APP_PRINTF("Release context done!\n");
}

static void app_delete_graph(AppObj *obj)
{

    #ifdef APP_TIVX_LOG_RT_ENABLE
    tivxLogRtTraceExportToFile("app_multicam.bin");
    tivxLogRtTraceDisable(obj->graph);
    #endif

    app_delete_capture(&obj->captureObj);
    APP_PRINTF("Capture delete done!\n");

    vxReleaseGraph(&obj->graph);
    APP_PRINTF("Graph delete done!\n");
}

static vx_status app_create_graph(AppObj *obj)
{
    vx_status status = VX_SUCCESS;
    vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[2] = {0};
    vx_int32 graph_parameter_index;

    obj->graph = vxCreateGraph(obj->context);
    status = vxGetStatus((vx_reference)obj->graph);
    if (status == VX_SUCCESS)
    {
        status = vxSetReferenceName((vx_reference)obj->graph, "app_multi_cam_graph");
        APP_PRINTF("Graph create done!\n");
    }

    if(status == VX_SUCCESS)
    {
        status = app_create_graph_capture(obj->graph, &obj->captureObj);
        APP_PRINTF("Capture graph done!\n");
    }

    if(status == VX_SUCCESS)
    {
        graph_parameter_index = 0;
        add_graph_parameter_by_node_index(obj->graph, obj->captureObj.node, 1);
        obj->captureObj.graph_parameter_index = graph_parameter_index;
        graph_parameters_queue_params_list[graph_parameter_index].graph_parameter_index = graph_parameter_index;
        graph_parameters_queue_params_list[graph_parameter_index].refs_list_size = CAPTURE_BUFFER_Q_DEPTH;
        graph_parameters_queue_params_list[graph_parameter_index].refs_list = (vx_reference*)&obj->captureObj.raw_image_arr[0];
        graph_parameter_index++;

        status = vxSetGraphScheduleConfig(obj->graph,
                VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO,
                graph_parameter_index,
                graph_parameters_queue_params_list);

        if (status == VX_SUCCESS)
        {
            status = tivxSetGraphPipelineDepth(obj->graph, APP_PIPELINE_DEPTH);
        }

        status = vxRegisterEvent((vx_reference)obj->graph, VX_EVENT_GRAPH_PARAMETER_CONSUMED, obj->captureObj.graph_parameter_index, obj->captureObj.graph_parameter_index);


    }

    return status;
}

static vx_status app_verify_graph(AppObj *obj)
{
    vx_status status = VX_SUCCESS;

	// // register events for svcamera unplug  
	 //status = vxRegisterEvent((vx_reference)obj->captureObj.node, VX_EVENT_NODE_ERROR, 5 ,6);

	 status = vxVerifyGraph(obj->graph);

    tivxTaskWaitMsecs(100);

	//status = vxRegisterEvent((vx_reference)graph0Obj->captureObj.node, VX_EVENT_NODE_ERROR, 5 ,6);
	/* Allocating black frame for HOTPLUG*/
	//  vx_bool is_invalid;
	// vx_pixel_value_t init_val;
	// init_val.YUV[0]  = 0U;
	// init_val.YUV[1]  = 128U;
	// init_val.YUV[2]  = 128U;
	// obj->captureObj.black_image = vxCreateUniformImage(obj->context, 1280, 1280, VX_DF_IMAGE_UYVY, &init_val);

	//  tivxCaptureRegisterErrorFrame(obj->captureObj.node, (vx_reference)obj->captureObj.black_image);
	// vxQueryReference((vx_reference)obj->captureObj.black_image, TIVX_REFERENCE_INVALID, &is_invalid, sizeof(is_invalid));

	// vxEnableEvents(obj->context);

    if(status == VX_SUCCESS)
    {
        APP_PRINTF("Graph verify done!\n");
    }

    /* wait a while for prints to flush */
    tivxTaskWaitMsecs(100);

    return status;
}

static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 frame_id)
{
    vx_status status = VX_SUCCESS;
	vx_image frame_cap;
    vx_uint32 num_refs;
	static vx_uint64 nFrameId = 0;
	static vx_uint64 nLastFrameId = 0;
	static vx_uint64 nTime = 0;
	static vx_uint64 nLastTime = 0;
	vx_event_t event;

    printf("app_run_graph_for_one_frame_pipeline in pipeline is [%d]!\n", obj->pipeline);
    if(obj->pipeline < 0) {
        if(status == VX_SUCCESS) {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, obj->captureObj.graph_parameter_index, (vx_reference*)&obj->captureObj.raw_image_arr[APP_PIPELINE_DEPTH + obj->pipeline], 1);
        }
        obj->pipeline++;
    } else if(obj->pipeline >= 0) {
        printf("app_run_graph_for_one_frame_pipeline 1111111111!\n");
		vxWaitEvent(obj->context, &event, vx_false_e);
		if(event.app_value == obj->captureObj.graph_parameter_index) {
			vxGraphParameterDequeueDoneRef(obj->graph, obj->captureObj.graph_parameter_index, (vx_reference*)&frame_cap, 1, &num_refs);
			vxGraphParameterEnqueueReadyRef(obj->graph, obj->captureObj.graph_parameter_index, (vx_reference*)&frame_cap, 1);
		}

        printf("app_run_graph_for_one_frame_pipeline !\n");
		nTime = tivxPlatformGetTimeInUsecs();
		if (nTime - nLastTime >= 10000000) {
			APP_PRINTF("----------capture frame rate: %.2f\n", (nFrameId - nLastFrameId)*1000000.0/(nTime - nLastTime));
			nLastFrameId = nFrameId;
			nLastTime = nTime;
		}
		nFrameId++;
    }

    return status;
}

static vx_status app_run_graph(AppObj *obj)
{
    vx_status status = VX_SUCCESS;

    SensorObj *sensorObj = &obj->sensorObj;
    vx_int32 frame_id;
    int32_t ch_mask = obj->sensorObj.ch_mask;

    app_pipeline_params_defaults(obj);
    APP_PRINTF("app_pipeline_params_defaults returned\n");

    if(NULL == sensorObj->sensor_name)
    {
        printf("sensor name is NULL \n");
        return VX_FAILURE;
    }

    app_serdes_sensor();

    obj->num_frames_to_run = 0xffffffff;
    for(frame_id = 0; frame_id < obj->num_frames_to_run; frame_id++)
    {
        if (status == VX_SUCCESS)
        {
            status = app_run_graph_for_one_frame_pipeline(obj, frame_id);
        }

        /* user asked to stop processing */
        if(obj->stop_task)
          break;
    }

    if (status == VX_SUCCESS)
    {
        status = vxWaitGraph(obj->graph);
    }
    obj->stop_task = 1;

    if (status == VX_SUCCESS)
    {
        status = appStopImageSensor(obj->sensorObj.sensor_name, ch_mask);
    }

    return status;
}

static void app_pipeline_params_defaults(AppObj *obj)
{
    obj->pipeline       = -CAPTURE_BUFFER_Q_DEPTH;
    obj->enqueueCnt     = 0;
    obj->dequeueCnt     = 0;
}

/*
 * Utility API used to add a graph parameter from a node, node parameter index
 */
static void add_graph_parameter_by_node_index(vx_graph graph, vx_node node, vx_uint32 node_parameter_index)
{
    vx_parameter parameter = vxGetParameterByIndex(node, node_parameter_index);

    vxAddParameterToGraph(graph, parameter);
    vxReleaseParameter(&parameter);
}

Regards.

  • Hi,

    Can you confirm that the landband speed set at the transmitter end lies between the set range TIVX_CAPTURE_LANE_BAND_SPEED_1040_TO_1200_MBPS ?

    This is typically passed from the created sensor driver structure.

    Have you created a driver for the imager in the imaging repo?

    Can you confirm if there is a serdes involved here in between imager and soc?

    Regards,

    Nikhil

  • Hi Nikhil,

    Can you confirm that the landband speed set at the transmitter end lies between the set range TIVX_CAPTURE_LANE_BAND_SPEED_1040_TO_1200_MBPS ?

    This is typically passed from the created sensor driver structure.

    I think it should be right.I refer to the settings on the VM capture node, which are also like this.

    Have you created a driver for the imager in the imaging repo?

    I only added a register configuration function in the ImageSensor_RemoteServiceHandler() function.

    This is the log generated by the capture node during runtime.

    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=5) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
       396.203807 s: GTC Frequency = 200 MHz
    APP: Init ... Done !!!
       396.208033 s:  VX_ZONE_INIT:Enabled
       396.208075 s:  VX_ZONE_ERROR:Enabled
       396.208085 s:  VX_ZONE_WARNING:Enabled
       396.210216 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-0
       396.210372 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-1
       396.210502 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-2
       396.210609 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-3
       396.210624 s:  VX_ZONE_INIT:[tivxInitLocal:136] Initialization Done !!!
       396.213601 s:  VX_ZONE_INIT:[tivxHostInitLocal:101] Initialization Done for HOST !!!
    appInit done !!!
    Creating context done!
    Kernel loading done!
    app_init done !!!
    App Init Done!
    Graph create done!
    Capture graph done!
    App Create Graph Done!
    Graph verify done!
    App Verify Graph Done!
    app_pipeline_params_defaults returned
    ISS: Serdes cfg ... !!!
    Sensor init done!
    [MCU2_0]    397.434298 s: appU964U953Config instance is [0]
    [MCU2_0]    397.434400 s: Write 0x01 to TCA9543APWR (0x70) successful!!!
    [MCU2_0]    397.434521 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x1
    [MCU2_0]    397.534185 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x1
    [MCU2_0]    397.534306 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    397.634188 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    397.634306 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb0
    [MCU2_0]    397.734197 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb0
    [MCU2_0]    397.734314 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    397.834206 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    397.834325 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    397.934213 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    397.934330 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    398.034222 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    398.034341 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    398.134229 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    398.134349 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0x1e
    [MCU2_0]    398.234237 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0x1e
    [MCU2_0]    398.234355 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0x0
    [MCU2_0]    398.334244 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0x0
    [MCU2_0]    398.334363 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    398.434253 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    398.434371 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x12
    [MCU2_0]    398.534260 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x12
    [MCU2_0]    398.534379 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    398.634269 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    398.634387 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb2
    [MCU2_0]    398.734276 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb2
    [MCU2_0]    398.734394 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    398.834284 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    398.834401 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    398.934292 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    398.934411 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    399.034301 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    399.034419 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    399.134309 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    399.134426 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0x5e
    [MCU2_0]    399.234317 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0x5e
    [MCU2_0]    399.234436 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0x55
    [MCU2_0]    399.334325 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0x55
    [MCU2_0]    399.334444 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    399.434333 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    399.434451 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x24
    [MCU2_0]    399.534341 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x24
    [MCU2_0]    399.534460 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    399.634348 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    399.634466 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb4
    [MCU2_0]    399.734357 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb4
    [MCU2_0]    399.734475 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    399.834365 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    399.834483 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    399.934373 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    399.934492 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    400.034381 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    400.034500 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    400.134390 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    400.134508 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0x9e
    [MCU2_0]    400.234398 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0x9e
    [MCU2_0]    400.234516 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0xaa
    [MCU2_0]    400.334405 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0xaa
    [MCU2_0]    400.334523 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    400.434413 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    400.434531 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x38
    [MCU2_0]    400.534420 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x38
    [MCU2_0]    400.534538 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    400.634429 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    400.634548 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb6
    [MCU2_0]    400.734437 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb6
    [MCU2_0]    400.734555 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    400.834445 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    400.834563 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    400.934454 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    400.934573 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    401.034461 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    401.034581 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    401.134470 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    401.134589 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0xde
    [MCU2_0]    401.234477 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0xde
    [MCU2_0]    401.234595 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0xff
    [MCU2_0]    401.334486 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0xff
    [MCU2_0]    401.334602 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    401.434494 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    401.434612 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 32: Value:0x1
    [MCU2_0]    401.534500 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 32: Value:0x1
    [MCU2_0]    401.534618 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 33: Value:0x3
    [MCU2_0]    401.634509 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 33: Value:0x3
    [MCU2_0]    401.634628 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 20: Value:0x0
    [MCU2_0]    401.734517 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 20: Value:0x0
    [MCU2_0]    401.734635 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa0
    [MCU2_0]    401.834524 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa0
    [MCU2_0]    401.834643 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 19: Value:0xc
    [MCU2_0]    401.934533 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 19: Value:0xc
    [MCU2_0]    401.934650 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1a: Value:0x81
    [MCU2_0]    402.034541 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1a: Value:0x81
    [MCU2_0]    402.034659 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1b: Value:0x60
    [MCU2_0]    402.134549 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1b: Value:0x60
    [MCU2_0]    402.134667 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1c: Value:0x0
    [MCU2_0]    402.234557 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1c: Value:0x0
    [MCU2_0]    402.134667 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1f: Value:0x1
    [MCU2_0]    402.234557 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1f: Value:0x1
    [MCU2_0]    402.234675 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 18: Value:0x1
    [MCU2_0]    402.334566 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 18: Value:0x1
    [MCU2_0]    402.334684 s:  REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register c: Value:0xf
    [MCU2_0]    402.434572 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register c: Value:0xf
    [MCU2_0]    402.534559 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register e: Value:0xa0
    [MCU2_0]    402.634597 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register e: Value:0xa0
    [MCU2_0]    402.634724 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register 6: Value:0x42
    [MCU2_0]    402.734604 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register 6: Value:0x42
    [MCU2_0]    402.734730 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register 7: Value:0x28
    [MCU2_0]    402.834613 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register 7: Value:0x28
    [MCU2_0]    402.834741 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register e: Value:0x20
    [MCU2_0]    402.934622 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register e: Value:0x20
    [MCU2_0]    402.934750 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register e: Value:0xa0
    [MCU2_0]    403.034629 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register e: Value:0xa0
    [MCU2_0]    403.034756 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register 6: Value:0x42
    [MCU2_0]    403.134636 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register 6: Value:0x42
    [MCU2_0]    403.134762 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register 7: Value:0x28
    [MCU2_0]    403.234645 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register 7: Value:0x28
    [MCU2_0]    403.234772 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register e: Value:0x20
    [MCU2_0]    403.334653 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register e: Value:0x20
    [MCU2_0]    403.334781 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register e: Value:0xa0
    [MCU2_0]    403.434662 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register e: Value:0xa0
    [MCU2_0]    403.434789 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register 6: Value:0x42
    [MCU2_0]    403.534668 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register 6: Value:0x42
    [MCU2_0]    403.534794 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register 7: Value:0x28
    [MCU2_0]    403.634676 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register 7: Value:0x28
    [MCU2_0]    403.634802 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register e: Value:0x20
    [MCU2_0]    403.734685 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register e: Value:0x20
    [MCU2_0]    403.734811 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register e: Value:0xa0
    [MCU2_0]    403.834693 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register e: Value:0xa0
    [MCU2_0]    403.834821 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register 6: Value:0x42
    [MCU2_0]    403.934701 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register 6: Value:0x42
    [MCU2_0]    403.934828 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register 7: Value:0x28
    [MCU2_0]    404.034710 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register 7: Value:0x28
    [MCU2_0]    404.034836 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register e: Value:0x20
    [MCU2_0]    404.134717 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register e: Value:0x20
    [MCU2_0]    404.135255 s:  VX_ZONE_WARNING:[tivxCaptureSetTimeout:795]  CAPTURE: WARNING: Error frame not provided using tivxCaptureRegisterErrorFrame, defaulting to waiting forever !!!

    Can you confirm if there is a serdes involved here in between imager and soc?

    Using the same expansion board and camera, the capture node can run normally on VE EVM.

    Regards.

  • Hi Nikhil,

    Is there any update for this case.

    Our project is currently blocked due to bring up failed.

    Regards.

  • Hi,

    Sorry for the 

    I am suspecting the flow of configuration of the sensor here.

    Graph verify done!
    App Verify Graph Done!
    app_pipeline_params_defaults returned
    ISS: Serdes cfg ... !!!
    Sensor init done!

    May I know why have you configured the serdes so late (i.e. after verify graph)? Also may I know where and when is the sensor being initialized here?

    In the usual flow, the serdes and sensor is configured before creation of the capture node and the stream ON command to sensor and deserializer is sent after vxVerifygraph()

    Could you try this flow?

    Regards,

    Nikhil

  • Hi Nikhil,

    Following your suggestion, I advanced the configuration of the serdes registers before caputure initialization,but the result is still the same as before.

    root@j722s-evm:/opt/zwz_debug# ./vx_motovis_surround_view.out --cfg ../vision_apps/app_multi_cam.cfg
    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=5) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
       101.390577 s: GTC Frequency = 200 MHz
    APP: Init ... Done !!!
       101.395209 s:  VX_ZONE_INIT:Enabled
       101.395259 s:  VX_ZONE_ERROR:Enabled
       101.395269 s:  VX_ZONE_WARNING:Enabled
       101.397740 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-0
       101.397919 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-1
       101.398046 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-2
       101.398151 s:  VX_ZONE_INIT:[tivxPlatformCreateTargetId:116] Added target MPU-3
       101.398166 s:  VX_ZONE_INIT:[tivxInitLocal:136] Initialization Done !!!
       101.400804 s:  VX_ZONE_INIT:[tivxHostInitLocal:101] Initialization Done for HOST !!!
    appInit done !!!
    Creating context done!
    Kernel loading done!
    ISS: Serdes cfg ... !!!
    [MCU2_0]     94.858007 s: mcu20 appMain runing..........................!
    [MCU2_0]     95.858087 s: mcu20 appMain runing..........................!
    [MCU2_0]     96.858167 s: mcu20 appMain runing..........................!
    [MCU2_0]     97.858247 s: mcu20 appMain runing..........................!
    [MCU2_0]     98.858327 s: mcu20 appMain runing..........................!
    [MCU2_0]     99.858407 s: mcu20 appMain runing..........................!
    [MCU2_0]    100.858487 s: mcu20 appMain runing..........................!
    [MCU2_0]    101.409852 s: appU964U953Config instance is [0]
    [MCU2_0]    101.409947 s: Write 0x01 to TCA9543APWR (0x70) successful!!!
    [MCU2_0]    101.410065 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x1
    [MCU2_0]    101.509674 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x1
    [MCU2_0]    101.509793 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    101.609679 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    101.609798 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb0
    [MCU2_0]    101.709686 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb0
    [MCU2_0]    101.709804 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    101.809694 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    101.809812 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    101.858568 s: mcu20 appMain runing..........................!
    [MCU2_0]    101.909702 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    101.909819 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    102.009711 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    102.009827 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    102.109718 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    102.109836 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0x1e
    [MCU2_0]    102.209726 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0x1e
    [MCU2_0]    102.209843 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0x0
    [MCU2_0]    102.309735 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0x0
    [MCU2_0]    102.309851 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    102.409743 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    102.409860 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x12
    [MCU2_0]    102.509751 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x12
    [MCU2_0]    102.509868 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    102.609759 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    102.609876 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb2
    [MCU2_0]    102.709766 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb2
    [MCU2_0]    102.709884 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    102.809774 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    102.809893 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    102.858647 s: mcu20 appMain runing..........................!
    [MCU2_0]    102.909782 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    102.909899 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    103.009790 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    103.009908 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    103.109798 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    103.109915 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0x5e
    [MCU2_0]    103.209806 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0x5e
    [MCU2_0]    103.209924 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0x55
    [MCU2_0]    103.309815 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0x55
    [MCU2_0]    103.309933 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    103.409822 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    103.409939 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x24
    [MCU2_0]    103.509830 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x24
    [MCU2_0]    103.509947 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    103.609838 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    103.609955 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb4
    [MCU2_0]    103.709846 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb4
    [MCU2_0]    103.709964 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    103.809854 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    103.809971 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    103.858727 s: mcu20 appMain runing..........................!
    [MCU2_0]    103.909862 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    103.909979 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    104.009870 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    104.009987 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    104.109878 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    104.109995 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0x9e
    [MCU2_0]    104.209886 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0x9e
    [MCU2_0]    104.210003 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0xaa
    [MCU2_0]    104.309894 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0xaa
    [MCU2_0]    104.310011 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    104.409902 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    104.410018 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 4c: Value:0x38
    [MCU2_0]    104.509910 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 4c: Value:0x38
    [MCU2_0]    104.510027 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    104.609918 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 58: Value:0x5d
    [MCU2_0]    104.610034 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5c: Value:0xb6
    [MCU2_0]    104.709926 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5c: Value:0xb6
    [MCU2_0]    104.710043 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    104.809934 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 5f: Value:0xd8
    [MCU2_0]    104.810051 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    104.858807 s: mcu20 appMain runing..........................!
    [MCU2_0]    104.909942 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 67: Value:0xd8
    [MCU2_0]    104.910059 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    105.009950 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6d: Value:0x7c
    [MCU2_0]    105.010067 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    105.109959 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa8
    [MCU2_0]    105.110076 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 70: Value:0xde
    [MCU2_0]    105.209966 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 70: Value:0xde
    [MCU2_0]    105.210084 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 72: Value:0xff
    [MCU2_0]    105.309974 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 72: Value:0xff
    [MCU2_0]    105.310092 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    105.409982 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 7c: Value:0xc1
    [MCU2_0]    105.410100 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 32: Value:0x1
    [MCU2_0]    105.509990 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 32: Value:0x1
    [MCU2_0]    105.510107 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 33: Value:0x3
    [MCU2_0]    105.609998 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 33: Value:0x3
    [MCU2_0]    105.610115 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 20: Value:0x0
    [MCU2_0]    105.710006 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 20: Value:0x0
    [MCU2_0]    105.710124 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 6e: Value:0xa0
    [MCU2_0]    105.810014 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 6e: Value:0xa0
    [MCU2_0]    105.810132 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 19: Value:0xc
    [MCU2_0]    105.858887 s: mcu20 appMain runing..........................!
    [MCU2_0]    105.910023 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 19: Value:0xc
    [MCU2_0]    105.910140 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1a: Value:0x81
    [MCU2_0]    106.010030 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1a: Value:0x81
    [MCU2_0]    106.010147 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1b: Value:0x60
    [MCU2_0]    106.110038 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1b: Value:0x60
    [MCU2_0]    106.110155 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1c: Value:0x0
    [MCU2_0]    106.210047 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1c: Value:0x0
    [MCU2_0]    106.210164 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 1f: Value:0x1
    [MCU2_0]    106.310054 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 1f: Value:0x1
    [MCU2_0]    106.310172 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register 18: Value:0x1
    [MCU2_0]    106.410062 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register 18: Value:0x1
    [MCU2_0]    106.410179 s:  zwz REMOTE_SERVICE_SENSOR:Success to Set U964[0x3d] register c: Value:0xf
    [MCU2_0]    106.510071 s:  REMOTE_SERVICE_SENSOR:Success to Get U964[0x3d] register c: Value:0xf
    [MCU2_0]    106.610056 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register e: Value:0xa0
    [MCU2_0]    106.710095 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register e: Value:0xa0
    [MCU2_0]    106.710221 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register 6: Value:0x42
    [MCU2_0]    106.810103 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register 6: Value:0x42
    [MCU2_0]    106.810227 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register 7: Value:0x28
    ISS: ERROR: appSerdesImageSensor sensors success !!!
    app_serdes_sensor success!!!!!!!!!!!!!!!!!!
    zzzzzzzzzzzcaptureObj->params.dataLanesMap[0] = 1
    zzzzzzzzzzzcaptureObj->params.dataLanesMap[1] = 2
    zzzzzzzzzzzcaptureObj->params.dataLanesMap[2] = 3
    zzzzzzzzzzzcaptureObj->params.dataLanesMap[3] = 4
    app_init done !!!
    App Init Done!
    Graph create done!
    Capture graph done!
    App Create Graph Done!
    Graph verify done!
    App Verify Graph Done!
    app_pipeline_params_defaults returned
    [MCU2_0]    106.910110 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register 7: Value:0x28
    [MCU2_0]    106.910236 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x58] register e: Value:0x20
    [MCU2_0]    107.010119 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x58] register e: Value:0x20
    [MCU2_0]    107.010244 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register e: Value:0xa0
    [MCU2_0]    107.110126 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register e: Value:0xa0
    [MCU2_0]    107.110250 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register 6: Value:0x42
    [MCU2_0]    107.210135 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register 6: Value:0x42
    [MCU2_0]    107.210260 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register 7: Value:0x28
    [MCU2_0]    107.310142 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register 7: Value:0x28
    [MCU2_0]    107.310267 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x59] register e: Value:0x20
    [MCU2_0]    107.410150 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x59] register e: Value:0x20
    [MCU2_0]    107.410275 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register e: Value:0xa0
    [MCU2_0]    107.510159 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register e: Value:0xa0
    [MCU2_0]    107.510283 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register 6: Value:0x42
    [MCU2_0]    107.610167 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register 6: Value:0x42
    [MCU2_0]    107.610291 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register 7: Value:0x28
    [MCU2_0]    107.710175 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register 7: Value:0x28
    [MCU2_0]    107.710300 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5a] register e: Value:0x20
    [MCU2_0]    107.810184 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5a] register e: Value:0x20
    [MCU2_0]    107.810309 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register e: Value:0xa0
    [MCU2_0]    107.859047 s: mcu20 appMain runing..........................!
    [MCU2_0]    107.910191 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register e: Value:0xa0
    [MCU2_0]    107.910315 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register 6: Value:0x42
    [MCU2_0]    108.010198 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register 6: Value:0x42
    [MCU2_0]    108.010322 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register 7: Value:0x28
    [MCU2_0]    108.110207 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register 7: Value:0x28
    [MCU2_0]    108.110332 s:  REMOTE_SERVICE_SENSOR:Success to Set U953[0x5b] register e: Value:0x20
    [MCU2_0]    108.210214 s:  REMOTE_SERVICE_SENSOR:Success to Get U953[0x5b] register e: Value:0x20
    
    
    

    Regards.

  • Hi,

    Using the same expansion board and camera, the capture node can run normally on VE EVM.

    You mentioned the above that using this, you can stream on the EVM.

    May I know the difference between the current setup and the EVM?

    Regards,

    Nikhil

  • Hi,

    Using the same expansion board and camera, the capture node can run normally on VE EVM.

    You had mentioned the above.

    May I know what is the difference in the setup between the EVM and your current environment?

    Regards,

    nikhil

  • Hi Nikhil,

    I think the only difference is the hardware difference between the VE EVM board and the VEN EVM board. We use the same set of expansion boards and cameras. Otherwise, it's just a difference in the usage of the capture node, but I haven't noticed any exceptions in the code.

    Regards.

  • Hi,

    In that case, I would suggest reviewing the schematics of the interconnect of Serdes to csirx on the board and EVM.

    If it works on one but not the other, under the same transmitter with the same speed, then the HW polarity of the mipi data line needs to be checked to ensure p to p and n to n are connected

    Regards,

    Nikhil

  • Hi Nikhil,

    Customer previous using the TDA4VE EVM can bring up the camera successfully, but change to TDA4VEN EVM, they can't bring up, so you mean there is some difference between the VE and VM/VE CPB board design? 

    BR,

    Biao

  • Hi Biao,

    The single cam is tested on both the devices. However, I believe the SDKs being used here are respective to the devices right and not the same firmware being tried on both devices?

    Also, on TDA4VEN, we have connected and tested on fusion 1 board. Is the same being used here? Can you ensure that this board is placed correctly on the EVM (i.e. without any loose connections)

    Regards,

    Nikhil

  • Hi Nikhil,

    Is the same being used here? Can you ensure that this board is placed correctly on the EVM (i.e. without any loose connections)

    The connection between the boards is shown in the following picture.The serdes registers configuration is normal, and I can also measure the MiPI signal with an oscilloscope. I understand that there should be no problem with the connection between the boards.

    Regards.

  • Hi Nikhil,

    Can you help for this issue?

    BR,

    Biao 

  • Hi Xie,

    Pls see below reply from Bu expert:

    If dequeue blocks, it mean csirx is not capturing the data. Which sensor are they using? Have they taken care of below things?

     

    • Lane speed
    • Lane polarity
    • Number of lanes
    • Skew calibration in case lane speed > 1.5Gbps
    • Sensor/deserializer starting sequence

    BR,

    Biao

  • Hi Biao,

    The current serdes registers configuration are as bellow:per lane speed is 1.2Gbps(0x1f set 0x01), the active edge is rising edge(0x25 set by default), the number of lanes is 4 lanes(0x33 set 0x3),you can get more registers configuration detail via attachment.

    • Skew calibration in case lane speed > 1.5Gbps
    • Sensor/deserializer starting sequence

    I am not idea for this two options.I can bring up surround view demo in veco evm board with using the same fusion board and camera,I think there shouldn't be any problem with my register configuration.

    uint16_t u964_cfg[][3] =
    {
    
        //u964 reg cfg
        {0x4C,0x01,0x1}, //RX Port0 write enable
        {0x58,0x5D,0x1}, //I2C pass-through, BCC 25Mbps
        {0x5C,0xB0,0x1}, //953 address 
        
        {0x5F,0xD8,0x1},
        {0x67,0xD8,0x1},
        {0x6D,0x7C,0x1},
        {0x6E,0xA8,0x1}, //BC_GPIO0=0, GC_GPIO1=Fsync
        {0x70,0x1E,0x1}, //vc0,YUV422
        {0x72,0x00,0x1}, //vc0
        {0x7C,0xC1,0x1},
    
        {0x4C,0x12,0x1}, //RX Port1 write enable
        {0x58,0x5D,0x1}, //I2C pass-through, BCC 25Mbps
        {0x5C,0xB2,0x1}, //953 address 
        
        {0x5F,0xD8,0x1},
        {0x67,0xD8,0x1},
        {0x6D,0x7C,0x1},
        {0x6E,0xA8,0x1}, //BC_GPIO0=0, GC_GPIO1=Fsync
        {0x70,0x5E,0x1}, //vc0,YUV422
        {0x72,0x55,0x1}, //vc0
        {0x7C,0xC1,0x1},
    
        {0x4C,0x24,0x1}, //RX Port2 write enable
        {0x58,0x5D,0x1}, //I2C pass-through, BCC 25Mbps
        {0x5C,0xB4,0x1}, //953 address 
        
        {0x5F,0xD8,0x1},
        {0x67,0xD8,0x1},
        {0x6D,0x7C,0x1},
        {0x6E,0xA8,0x1}, //BC_GPIO0=0, GC_GPIO1=Fsync
        {0x70,0x9E,0x1}, //vc0,YUV422
        {0x72,0xaa,0x1}, //vc0
        {0x7C,0xC1,0x1},
    
        {0x4C,0x38,0x1}, //RX Port3 write enable
        {0x58,0x5D,0x1}, //I2C pass-through, BCC 25Mbps
        {0x5C,0xB6,0x1}, //953 address 
        
        {0x5F,0xD8,0x1},
        {0x67,0xD8,0x1},
        {0x6D,0x7C,0x1},
        {0x6E,0xA8,0x1}, //BC_GPIO0=0, GC_GPIO1=Fsync
        {0x70,0xDE,0x1}, //vc0,YUV422
        {0x72,0xff,0x1}, //vc0
        {0x7C,0xC1,0x1},
    
        {0x32,0x01,0x1},
        {0x33,0x03,0x1},// #CSI OUT ENABLE
        {0x20,0x00,0x1},// #CSI FORWARDING PORT0,1,2,3
    
        //frame sync settings, For 25-Mbps backchannel operation, 
        //the frame period is 1200 ns (30 bits x 40 ns/bit).
        //30fps, 33333333/1200=27777=0x6C81
        {0x6E,0xA0,0x1},
        {0x19,0x0C,0x1},//FS_HIGH_TIME_1
        {0x1A,0x81,0x1},//FS_HIGH_TIME_0
        {0x1B,0x60,0x1},//FS_LOW_TIME_1
        {0x1C,0x00,0x1},//FS_LOW_TIME_0 
        {0x1f,0x01,0x1},//land speed 1.2gbps  
        {0x18,0x01,0x1},//FrameSync Enable
        {0x0c,0x0F,0x1},
    };
    
    uint16_t u953_cfg[][3] =
    {
        {0x0E,0xA0,0x1},   
        {0x06,0x42,0x1},  //25MHz
        {0x07,0x28,0xA}, 
        {0x0E,0x20,0x1}, 
    };
    

    Regrads.

  • Hi,

    One difference that I see from the veco EVM and the J722s EVM, is the way the fusion board is powered on. 

    Can you please confirm if you had powered ON the fusion board, the same way you are doing now (i.e. externally) or was it via the EVM board (in veco) ?

    As per my understanding, currently, the fusion board is powered externally right? (As per the pic)

    After configuration of sensor and serdes, can you please confirm on J722s, if you are able to get data out of the UB964 Des?

    Also, the from the picture attached, it looks like fusion 1 board. (which had UB960 Des). Is this a different fusion board that has UB964 Des?

    Are you trying this on the latest SDK version (10.0) of J722s? If not, can you try the same?

    Regards,

    Nikhil