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.

TDA4VM: The issue with insufficient bandwidth on the 960

Part Number: TDA4VM

Tool/software:

Hi expert,

I am currently facing an issue with insufficient bandwidth on the 960. Here are the details:

Currently, I am probably using a single CSI-2 output port to transmit 4 video streams. How can I configure it to use 2 CSI-2 output ports to transmit 2 video streams respectively? Maybe this can solve my current problem. Thanks!

  • Hi Ying Li,

    This question is more for UB960, than TDA4 device, so reassigning it. 

    Regards,

    Brijesh

  • Hi,

    Do I need to make another list? Thanks!

  • Hi Ying Li,

    You can use both CSI-2 TX ports to transmit 2 video streams each, as following:

    After you configure all other registers that you want to configure, and configure the SER + Image sensor, write:

    Write to DES reg 0x20 = 0xFC ## Route RX port0 and 1 to CSI-2 Tx port0, and route RX port2 and 3 to CSI-2 Tx port1

    Write to DES reg 0x20 = 0x0C ## Enable Forwarding of all Rx ports to Tx.

  • Hi,

    Thank you very much for your help. After the 0x20 register is configured successfully, only CSI-2 Tx port 0 can output two video streams, while port 1 fails to output.

    1. I configured it in the 960 driver code before starting the video stream.

    2. Do I need to modify the device tree? I added port5, but I'm not sure how to fill in the information inside port5. I tried to refer to port4, but all tests failed.

    I hope I can get your help. Thank you!
  • Hello Ying Li,

    Have you enabled the second CSI-2 Tx port? You should do that in register 0x33 as following:

    Write DES reg 0x32 to 0x13 ## enable I2C write to CSI-2 Tx ports 0 and 1

    write DES reg 0x33[0] to 1 ## enable the CSI-2 Tx ports 0 and 1

    and then

    Write to DES reg 0x20 = 0xFC ## Route RX port0 and 1 to CSI-2 Tx port0, and route RX port2 and 3 to CSI-2 Tx port1

    Write to DES reg 0x20 = 0x0C ## Enable Forwarding of all Rx ports to Tx.

  • Hi,

    1. I have followed the steps you mentioned. But it failed to solve the problem. Here are the register values read when my video stream starts and stops.The registers seem to be fine.
    2. Does the device tree really not need to be modified?

    Thanks!

     --------------0x32:13
    [    5.891366] -----------------0x33:40
    
    
    Setting pipeline to PLAYING ...
    New clock: GstSystemClock
    [  390.462558] ---------------0x20:f0
    [  390.470417] -----------------0x33:41
    [  390.473981] enable RX port 0
    [  390.477203] ---------------0x20:f0
    [  390.480946] ---------------0x20:fc
    [  390.484688] ---------------0x20:c
    [  390.862125] enable RX port 1
    [  390.865350] ---------------0x20:fc
    [  390.869008] ---------------0x20:fc
    [  390.872748] ---------------0x20:c
    [  391.146986] ds90ub960 5-003d: rx0 CSI error: 0xc
    [  391.151604] ds90ub960 5-003d: rx0 CSI checksum error
    [  391.156563] ds90ub960 5-003d: rx0 CSI length error
    [  391.250129] enable RX port 2
    [  391.253346] ---------------0x20:fc
    [  391.256999] ---------------0x20:fc
    [  391.260739] ---------------0x20:c
    IttCtrl_registerHandler: command echo registered at location 0
    IttCtrl_registerHandler: command iss_read_2a_params registered at location 1
    IttCtrl_registerHandler: command iss_write_2a_params registered at location 2
    IttCtrl_registerHandler: command iss_raw_save registered at location 3
    IttCtrl_registerHandler: command iss_yuv_save registered at location 4
    IttCtrl_registerHandler: command iss_read_sensor_reg registered at location 5
    IttCtrl_registerHandler: command iss_write_sensor_reg registered at location 6
    IttCtrl_registerHandler: command dev_ctrl reg[  391.690986] ds90ub960 5-003d: rx2 CSI error: 0xc
    istered at location 7
    IttCtrl_registerHandler: command iss_sen[  391.698846] ds90ub960 5-003d: rx2 CSI checksum error
    d_dcc_file registered at location 8
     NETWORK: Opened at IP Add[  391.709360] ds90ub960 5-003d: rx2 CSI length error
    r = 192.168.10.99, socket port=5000!!!
    Redistribute latency...
    handling interrupt.:99.
    Interrupt: Stopping pipeline ...
    Execution ended after 0:00:03.348225805
    Setting pipeline to NULL ...
    [  393.779373] ---------------0x20:1c
    [  393.803359] ---------------0x20:3c
    [  393.827340] ---------------0x20:7c
    [  393.830736] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    [  393.835163] -----------------0x33:40
    Freeing pipeline ...
    

  • HI,

    Not sure what you mean by device tree modification?

    Can you share the complete script you are using for initializing the imager, SER and DES?

    Can you also provide register dump from the DES, for all enabled RX ports? This can be done by writing reg 0x4C to the right RX port and then dump. after that change 4C to the next RX port and dump... etc

  • HI,

    Not sure if the script you mentioned is this one. 

    Also, may I ask how to provide the register dump from the DES for all enabled RX ports? I'm not familiar with the operation. Could you please teach me how to do that? Thank you very much!

    #!/bin/bash
    
    GREEN='\033[0;32m'
    NOCOLOR='\033[0m'
    
    IMX390_CAM_FMT="${IMX390_CAM_FMT:-[fmt:SRGGB12_1X12/1936x1100 field: none]}"
    OX03C10_CAM_FMT="${OX03C10_CAM_FMT:-[fmt:SBGGR12_1X12/1920x1280 field: none]}"
    
    declare -A ALL_UB960_FMT_STR
    declare -A ALL_CDNS_FMT_STR
    declare -A ALL_CSI2RX_FMT_STR
    
    setup_routes(){
        for i in "${!ALL_UB960_FMT_STR[@]}"
        do
            id="$(cut -d',' -f1 <<<"$i")"
            name="$(cut -d',' -f2 <<<"$i")"
            # UB960 ROUTING & FORMATS
            media-ctl -d $id -R "'$name' [${ALL_UB960_FMT_STR[$i]}]"
    
            for name in `media-ctl -d $id -p | grep entity | grep ov2312 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "ov2312 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                media-ctl -d $id -V "'$UB960_NAME':$UB960_PAD/0 $OV2312_CAM_FMT"
                media-ctl -d $id -V "'$UB960_NAME':$UB960_PAD/1 $OV2312_CAM_FMT"
            done
    
            for name in `media-ctl -d $id -p | grep entity | grep imx390 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "imx390 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                media-ctl -d $id -V "'$UB960_NAME':$UB960_PAD $IMX390_CAM_FMT"
            done
    
            for name in `media-ctl -d $id -p | grep entity | grep ox03c10 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "ox03c10 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                media-ctl -d $id -V "'$UB960_NAME':$UB960_PAD $OX03C10_CAM_FMT"
            done
        done
    
        # CDNS ROUTING
        for i in "${!ALL_CDNS_FMT_STR[@]}"
        do
            id="$(cut -d',' -f1 <<<"$i")"
            name="$(cut -d',' -f2 <<<"$i")"
            # CDNS ROUTING & FORMATS
            media-ctl -d $id -R "'$name' [${ALL_CDNS_FMT_STR[$i]}]"
    
            for name in `media-ctl -d $id -p | grep entity | grep ov2312 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "ov2312 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                CSI_PAD0=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/0.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                CSI_PAD1=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/1.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                CSI_BRIDGE_NAME=`media-ctl -d $id -p -e "$UB960_NAME" | grep csi-bridge | cut -d "\"" -f 2`
                media-ctl -d $id -V "'$CSI_BRIDGE_NAME':0/$CSI_PAD0 $OV2312_CAM_FMT"
                media-ctl -d $id -V "'$CSI_BRIDGE_NAME':0/$CSI_PAD1 $OV2312_CAM_FMT"
            done
    
            for name in `media-ctl -d $id -p | grep entity | grep imx390 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "imx390 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                CSI_PAD=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                CSI_BRIDGE_NAME=`media-ctl -d $id -p -e "$UB960_NAME" | grep csi-bridge | cut -d "\"" -f 2`
                media-ctl -d $id -V "'$CSI_BRIDGE_NAME':0/$CSI_PAD $IMX390_CAM_FMT"
            done
    	
            for name in `media-ctl -d $id -p | grep entity | grep ox03c10 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "ox03c10 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                CSI_PAD=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                CSI_BRIDGE_NAME=`media-ctl -d $id -p -e "$UB960_NAME" | grep csi-bridge | cut -d "\"" -f 2`
                media-ctl -d $id -V "'$CSI_BRIDGE_NAME':0/$CSI_PAD $OX03C10_CAM_FMT"
            done
        done
    
        # CSI2RX ROUTING
        for i in "${!ALL_CSI2RX_FMT_STR[@]}"
        do
            id="$(cut -d',' -f1 <<<"$i")"
            name="$(cut -d',' -f2 <<<"$i")"
            CSI2RX_NAME=$name
            media-ctl -d $id -R "'$name' [${ALL_CSI2RX_FMT_STR[$i]}]"
            # CSI2RX ROUTING & FORMATS
            for name in `media-ctl -d $id -p | grep entity | grep ov2312 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "ov2312 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                CSI_PAD0=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/0.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                CSI_PAD1=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/1.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                media-ctl -d $id -V "'$CSI2RX_NAME':0/$CSI_PAD0 $OV2312_CAM_FMT"
                media-ctl -d $id -V "'$CSI2RX_NAME':0/$CSI_PAD1 $OV2312_CAM_FMT"
            done
    
            for name in `media-ctl -d $id -p | grep entity | grep imx390 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "imx390 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                CSI_PAD=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                media-ctl -d $id -V "'$CSI2RX_NAME':0/$CSI_PAD $IMX390_CAM_FMT"
            done
    
    	    for name in `media-ctl -d $id -p | grep entity | grep ox03c10 | cut -d ' ' -f 5`; do
                UB953_NAME=`media-ctl -d $id -p -e "ox03c10 $name" | grep ub953 | cut -d "\"" -f 2`
                UB960_NAME=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
                UB960_PAD=`media-ctl -d $id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
                CSI_PAD=`media-ctl -d $id -p -e "$UB960_NAME" | grep $UB960_PAD/.*[ACTIVE] | cut -d "/" -f 3 | awk '{print $1}'`
                media-ctl -d $id -V "'$CSI2RX_NAME':0/$CSI_PAD $OX03C10_CAM_FMT"
            done
        done
    }
    
    
    
    setup_ox03c10(){
        i=0
        for media_id in {0..3}; do
        # UB953 FORMATS
        UB960_FMT_STR=""
        CDNS_FMT_STR=""
        CSI2RX_FMT_STR=""
        for name in `media-ctl -d $media_id -p | grep entity | grep ox03c10 | cut -d ' ' -f 5`; do
    
            CAM_SUBDEV=`media-ctl -d $media_id -p -e "ox03c10 $name" | grep v4l-subdev | awk '{print $4}'`
            v4l2-ctl -d $CAM_SUBDEV --set-ctrl wide_dynamic_range=0
    
            UB953_NAME=`media-ctl -d $media_id -p -e "ox03c10 $name" | grep ub953 | cut -d "\"" -f 2`
            media-ctl -d $media_id -V "'$UB953_NAME':0 $OX03C10_CAM_FMT"
    
            UB960_NAME=`media-ctl -d $media_id -p -e "$UB953_NAME" | grep ub960 | cut -d "\"" -f 2`
            UB960_PAD=`media-ctl -d $media_id -p -e "$UB953_NAME" | grep ub960 | cut -d : -f 2 | awk '{print $1}'`
    
            CSI_BRIDGE_NAME=`media-ctl -d $media_id -p -e "$UB960_NAME" | grep csi-bridge | cut -d "\"" -f 2`
    
            CSI2RX_NAME=`media-ctl -d $media_id -p -e "$CSI_BRIDGE_NAME" | grep "ticsi2rx\"" | cut -d "\"" -f 2`
    
            LAST_PAD=`echo ${ALL_UB960_FMT_STR[$media_id,$UB960_NAME]} | rev | cut -d'/' -f 1 | rev`
            LAST_PAD=${LAST_PAD:0:1}
            if [[ "$LAST_PAD" == "" ]] ; then
                NEXT_PAD=$UB960_PAD
            else
                NEXT_PAD=$(($LAST_PAD+1))
            fi
    
            CSI2RX_CONTEXT_NAME="$CSI2RX_NAME context $((NEXT_PAD+1))"
    
            UB960_FMT_STR="${UB960_PAD}/0 -> 4/$(($NEXT_PAD)) [1]"
            CDNS_FMT_STR="0/${NEXT_PAD} -> 1/$(($NEXT_PAD)) [1]"
            CSI2RX_FMT_STR="0/${NEXT_PAD} -> $(($NEXT_PAD+2))/0 [1]"
    
            # Append UB960 Routes
            if [[ -v "ALL_UB960_FMT_STR[$media_id,$UB960_NAME]" ]] ; then
                ALL_UB960_FMT_STR[$media_id,$UB960_NAME]="${ALL_UB960_FMT_STR[$media_id,$UB960_NAME]}, $UB960_FMT_STR"
            else
                ALL_UB960_FMT_STR[$media_id,$UB960_NAME]="$UB960_FMT_STR"
            fi
    
            # Append CDNS Routes
            if [[ -v "ALL_CDNS_FMT_STR[$media_id,$CSI_BRIDGE_NAME]" ]] ; then
                ALL_CDNS_FMT_STR[$media_id,$CSI_BRIDGE_NAME]="${ALL_CDNS_FMT_STR[$media_id,$CSI_BRIDGE_NAME]}, $CDNS_FMT_STR"
            else
                ALL_CDNS_FMT_STR[$media_id,$CSI_BRIDGE_NAME]="$CDNS_FMT_STR"
            fi
    
            # Append CSIRX Routes
            if [[ -v "ALL_CSI2RX_FMT_STR[$media_id,$CSI2RX_NAME]" ]] ; then
                ALL_CSI2RX_FMT_STR[$media_id,$CSI2RX_NAME]="${ALL_CSI2RX_FMT_STR[$media_id,$CSI2RX_NAME]}, $CSI2RX_FMT_STR"
            else
                ALL_CSI2RX_FMT_STR[$media_id,$CSI2RX_NAME]="$CSI2RX_FMT_STR"
            fi
            CAM_DEV=`media-ctl -d $media_id -p -e "$CSI2RX_CONTEXT_NAME" | grep video | awk '{print $4}'`
            CAM_DEV_NAME=/dev/video-ox03c10-cam$i
    
            CAM_SUBDEV_NAME=/dev/v4l-ox03c10-subdev$i
    
            ln -snf $CAM_DEV $CAM_DEV_NAME
            ln -snf $CAM_SUBDEV $CAM_SUBDEV_NAME
    
            v4l2-ctl -d $CAM_SUBDEV_NAME --set-ctrl red_balance=256
            v4l2-ctl -d $CAM_SUBDEV_NAME --set-ctrl blue_balance=256
    
            CAM_RESOLUTION=`echo $OX03C10_CAM_FMT | cut -d / -f 2 | cut -d " " -f 1`
            CAM_FMT=`echo $OX03C10_CAM_FMT | cut -d : -f 2 | cut -d _ -f 1`
            yavta -s $CAM_RESOLUTION -f $CAM_FMT $CAM_DEV &> /dev/null
    
            echo -e "${GREEN}OX03C10 Camera $i detected${NOCOLOR}"
            echo "    device = $CAM_DEV_NAME"
            echo "    name = ox03c10"
            echo "    format = $OX03C10_CAM_FMT"
            echo "    subdev_id = $CAM_SUBDEV_NAME"
            echo "    isp_required = yes"
            echo "    ldc_required = yes"
    
            ((i++))
        done
        done
    }
    
    
    
    
    
    setup_USB_camera(){
        ls /dev/v4l/by-path/*usb*video-index0 > /dev/null 2>&1
        if [ "$?" == "0" ]; then
            USB_CAM_ARR=(`ls /dev/v4l/by-path/*usb*video-index0`)
            count=0
            for i in ${USB_CAM_ARR[@]}
            do
                USB_CAM_DEV=`readlink -f $i`
                USB_CAM_NAME=/dev/video-usb-cam$count
                ln -snf $USB_CAM_DEV $USB_CAM_NAME
                echo -e "${GREEN}USB Camera $count detected${NOCOLOR}"
                echo "    device = $USB_CAM_NAME"
                echo "    format = jpeg"
                count=$(($count + 1))
            done
        fi
    }
    
    setup_USB_camera
    setup_ox03c10
    setup_imx390
    setup_routes
    

  • Hello,

    to get register dump from all RX ports, do the following:

    If your camera is connected to UB960 RX port0, then before reading the below listed registers you must write DES reg 0x4C = 0x01. If using RX port1 then 0x4C = 0x12, for RX port2 write 0x4C = 0x24, and for RX port3 write 0x4C = 0x36. after that read the listed registers:

    0x02-0x06, 0x0C, 0x1F-0x24, 0x32-0x37, 0x40-0x49, 0x4B-0x58, 0x5B-0x6D, 0x70-0x76, 0x7A-0x7D, 0xA5, 0xB9, 0xD2-0xDB.

  • Hi,

    Thank you for your guidance. Here are the register values printed after starting the video stream in the 960 driver. Could you please help me check it?

    [   89.646045] ----------RX port:2
    [   89.649229] --------reg:02--val:1e
    [   89.652758] --------reg:03--val:40
    [   89.656286] --------reg:04--val:d0
    [   89.659815] --------reg:05--val:01
    [   89.663343] --------reg:06--val:00
    [   89.666872] --------reg:0c--val:0f
    [   89.670397] --------reg:1f--val:00
    [   89.673911] --------reg:20--val:0c
    [   89.677439] --------reg:21--val:03
    [   89.680963] --------reg:22--val:00
    [   89.684489] --------reg:23--val:00
    [   89.688013] --------reg:24--val:00
    [   89.691541] --------reg:32--val:13
    [   89.695064] --------reg:33--val:41
    [   89.698591] --------reg:34--val:00
    [   89.702175] --------reg:35--val:11
    [   89.705690] --------reg:36--val:00
    [   89.709220] --------reg:37--val:03
    [   89.712747] --------reg:40--val:00
    [   89.716273] --------reg:41--val:a9
    [   89.719799] --------reg:42--val:71
    [   89.723327] --------reg:43--val:01
    [   89.726852] --------reg:44--val:00
    [   89.730380] --------reg:45--val:00
    [   89.733894] --------reg:46--val:20
    [   89.737418] --------reg:47--val:00
    [   89.740947] --------reg:48--val:00
    [   89.744470] --------reg:49--val:00
    [   89.747997] --------reg:4b--val:12
    [   89.751520] --------reg:4c--val:24
    [   89.755046] --------reg:4d--val:83
    [   89.758570] --------reg:4e--val:04
    [   89.762088] --------reg:4f--val:64
    [   89.765603] --------reg:50--val:00
    [   89.769126] --------reg:51--val:00
    [   89.772653] --------reg:52--val:00
    [   89.776178] --------reg:53--val:03
    [   89.779703] --------reg:54--val:00
    [   89.783228] --------reg:55--val:00
    [   89.786752] --------reg:56--val:00
    [   89.790279] --------reg:57--val:00
    [   89.793793] --------reg:58--val:5e
    [   89.797316] --------reg:5b--val:30
    [   89.800844] --------reg:5c--val:8c
    [   89.804370] --------reg:5d--val:6c
    [   89.807897] --------reg:5e--val:00
    [   89.811419] --------reg:5f--val:00
    [   89.814946] --------reg:60--val:00
    [   89.818469] --------reg:61--val:00
    [   89.821982] --------reg:62--val:00
    [   89.825507] --------reg:63--val:00
    [   89.829030] --------reg:64--val:00
    [   89.832556] --------reg:65--val:98
    [   89.836081] --------reg:66--val:00
    [   89.839606] --------reg:67--val:00
    [   89.843129] --------reg:68--val:00
    [   89.846656] --------reg:69--val:00
    [   89.850179] --------reg:6a--val:00
    [   89.853693] --------reg:6b--val:00
    [   89.857218] --------reg:6c--val:00
    [   89.860741] --------reg:6d--val:7c
    [   89.864268] --------reg:70--val:ab
    [   89.867794] --------reg:71--val:ac
    [   89.871320] --------reg:72--val:aa
    [   89.874846] --------reg:73--val:05
    [   89.878371] --------reg:74--val:06
    [   89.881885] --------reg:75--val:0b
    [   89.885409] --------reg:76--val:40
    [   89.888952] --------reg:7a--val:00
    [   89.892481] --------reg:7b--val:00
    [   89.896007] --------reg:7c--val:20
    [   89.899530] --------reg:7d--val:00
    [   89.903057] --------reg:a5--val:19
    [   89.906581] --------reg:b9--val:33
    [   89.910096] --------reg:d2--val:94
    [   89.913611] --------reg:d3--val:00
    [   89.917136] --------reg:d4--val:60
    [   89.920660] --------reg:d5--val:e0
    [   89.924188] --------reg:d6--val:00
    [   89.927712] --------reg:d7--val:02
    [   89.931237] --------reg:d8--val:07
    [   89.934759] --------reg:d9--val:7f
    [   89.938287] --------reg:da--val:00
    [   89.941801] --------reg:db--val:00
     

    Here are the register values printed after disabling the video stream.

    xxxxxxxxxxxxxx disable_streams!
    [  102.588299] ----------nport:4
    [  102.591488] --------reg:02--val:1e
    [  102.595015] --------reg:03--val:40
    [  102.598541] --------reg:04--val:d0
    [  102.602058] --------reg:05--val:01
    [  102.605573] --------reg:06--val:00
    [  102.609095] --------reg:0c--val:0f
    [  102.612621] --------reg:1f--val:00
    [  102.616143] --------reg:20--val:fc
    [  102.619667] --------reg:21--val:03
    [  102.623190] --------reg:22--val:00
    [  102.626714] --------reg:23--val:00
    [  102.630236] --------reg:24--val:00
    [  102.633750] --------reg:32--val:13
    [  102.637273] --------reg:33--val:40
    [  102.640799] --------reg:34--val:00
    [  102.644325] --------reg:35--val:10
    [  102.647847] --------reg:36--val:00
    [  102.651370] --------reg:37--val:02
    [  102.654892] --------reg:40--val:00
    [  102.658415] --------reg:41--val:a9
    [  102.661930] --------reg:42--val:71
    [  102.665453] --------reg:43--val:01
    [  102.668976] --------reg:44--val:00
    [  102.672498] --------reg:45--val:00
    [  102.676021] --------reg:46--val:20
    [  102.679543] --------reg:47--val:00
    [  102.683066] --------reg:48--val:00
    [  102.686587] --------reg:49--val:00
    [  102.690114] --------reg:4b--val:12
    [  102.693628] --------reg:4c--val:10
    [  102.697150] --------reg:4d--val:43
    [  102.700674] --------reg:4e--val:04
    [  102.704195] --------reg:4f--val:64
    [  102.707718] --------reg:50--val:ff
    [  102.711240] --------reg:51--val:00
    [  102.714763] --------reg:52--val:00
    [  102.718284] --------reg:53--val:04
    [  102.721798] --------reg:54--val:00
    [  102.725322] --------reg:55--val:00
    [  102.728844] --------reg:56--val:00
    [  102.732367] --------reg:57--val:00
    [  102.735889] --------reg:58--val:5e
    [  102.739412] --------reg:5b--val:30
    [  102.742933] --------reg:5c--val:8a
    [  102.746457] --------reg:5d--val:6c
    [  102.749971] --------reg:5e--val:00
    [  102.753491] --------reg:5f--val:00
    [  102.757015] --------reg:60--val:00
    [  102.760536] --------reg:61--val:00
    [  102.764059] --------reg:62--val:00
    [  102.767580] --------reg:63--val:00
    [  102.771103] --------reg:64--val:00
    [  102.774626] --------reg:65--val:96
    [  102.778142] --------reg:66--val:00
    [  102.781656] --------reg:67--val:00
    [  102.785178] --------reg:68--val:00
    [  102.788700] --------reg:69--val:00
    [  102.792223] --------reg:6a--val:00
    [  102.795761] --------reg:6b--val:00
    [  102.799422] --------reg:6c--val:00
    [  102.802944] --------reg:6d--val:7c
    [  102.806468] --------reg:70--val:6b
    [  102.809981] --------reg:71--val:6c
    [  102.813502] --------reg:72--val:55
    [  102.817024] --------reg:73--val:05
    [  102.820545] --------reg:74--val:06
    [  102.824067] --------reg:75--val:0b
    [  102.827592] --------reg:76--val:40
    [  102.831175] --------reg:7a--val:00
    [  102.834704] --------reg:7b--val:00
    [  102.838228] --------reg:7c--val:20
    [  102.841742] --------reg:7d--val:00
    [  102.845263] --------reg:a5--val:19
    [  102.848789] --------reg:b9--val:33
    [  102.852311] --------reg:d2--val:94
    [  102.855834] --------reg:d3--val:00
    [  102.859355] --------reg:d4--val:60
    [  102.862878] --------reg:d5--val:e0
    [  102.866399] --------reg:d6--val:00
    [  102.869912] --------reg:d7--val:02
    [  102.873435] --------reg:d8--val:07
    [  102.876956] --------reg:d9--val:7f
    [  102.880478] --------reg:da--val:00
    [  102.883999] --------reg:db--val:00
    

    Thank you again!

  • Hello Ying-Li,

    Looking at your registers you have provided, I do not see a single error. You have stable LOCK and RX PASS. Also, I can see you are receiving data, and this data is being outputted correctly at the CSI Tx output. 

    You have configured correctly that RX0 and RX1 data go to CSI Tx0, and data from RX2 and Rx3 go CSI Tx1.

    Hence, not sure what is the problem on your system? Please double check your SoC configurations and it is configured to receive the right CSI rate at 1.6Gbps/lane with non-continuous CSI clk (as configured on the UB960 register 0x33)

  • Hi,

    Sorry, I'm a bit confused with the information right now. Can we analyze this issue from the beginning?

    I am currently debugging the video stream output of four sensors on this TDA4-EVM board. The sensor is OX03C10, with output configuration of 1920×1280, 30 fps, raw12. The serializer is ds90ub953. Currently, when outputting 4-channel video streams simultaneously, the UB960 driver reports

    "[  922.764084] ds90ub960 5-003d: rx0 buffer error

    [  922.769119] ds90ub960 5-003d: rx1 buffer error

    [  923.318153] ds90ub960 5-003d: rx2 buffer error

    [  922.774152] ds90ub960 5-003d: rx3 buffer error" .What do you think is causing this error, and how can it be resolved? My original intention is to solve this problem.

    Thanks!

  • Hello Ying Li,

    Can you explain if these errors are coming from the UB960 or from the TDA4? If from the TDA4, what is the actual error to display this message?

    Can you configure the UB960 register 0x33[1] = 1 to enable CSI continuous clk mode.

  • Hi,

    The above error originates from the 960 driver. Additionally, when the video stream is started, the value of register 0x33 in UB960 is 0x41, and when the video stream is stopped, the value is 0x40. That seems correct.

    I suspect the error is caused by bandwidth limitation. Reducing the frame rate can minimize such errors, but it fails to meet my current requirements. My sensor is OX03C10, with output configuration of 1920×1280, 30 fps, raw12. The serializer is ds90ub953. 

    I am using the development board shown in the image below. Thank you very much!

  • Hi,

    My problem has been solved. I used the two ub960 chips on this deserializer board to transmit two video streams respectively. Thank you very much for your help these days.

  • Hi,

    The above error originates from the 960 driver. Additionally, when the video stream is started, the value of register 0x33 in UB960 is 0x41, and when the video stream is stopped, the value is 0x40. That seems correct.

    Having 0x33 = 0x41 means the CSI Tx port is enabled, and the value of 0x33 = 0x40 means the CSI Tx is disabled. It does not mean you have error.

    Try to set it to 0x41 again and see if you receive data again.

  • Hi Ying,

    Glad to see your issue is solved.