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.

DS90UB960-Q1: DS90UB960 Configuration Reference Example

Part Number: DS90UB960-Q1

Tool/software:

Hi, experts

On the TDA4VEN we used your serial deserialiser solution for getting data from the camera, the data flow is as follows:

OVX1F(x4) --> DS90UB933 --> DS90UB960 --> TDA4VEN(CSIRX).

Sensor output format: 1280×960@30fps, YUV422, 8bit

Please provide the configuration file of the deserialiser DS90UB960 for reference, thank you!

Best Regards,

Bing

  • Hi Bing,

    Thanks for this question. We're happy to help with this configuration. Do you have any feedback on how CSI ports will be used here? It's important to understand which CSI ports will be used, along with what rate.

    Best,

    Thomas

  • Hi,Thomas

    I'm using csirx0, which has a rate of 1.5G.

    Best Regards,

    Bing

  • I'm using csirx0,

    ub960(port0) --> tda4ven(csirx0)

  • Hi Bing,

    Thank you for this background. Is anything needed to start streaming of the sensor? For example some sensors which we've worked with use GPIO1 of the serializer to start streaming.

    Best,

    Thomas

  • Hi,Thomas

    For example some sensors which we've worked with use GPIO1 of the serializer to start streaming.

    We use GPIO1 as well.

    We'll use internal sync for now and external sync later. External sync requires the SOC to output a PWM to the UB960, right?

    We set GPIO0 of UB960 to receive external PWM signals, so please provide me examples of both internal and external synchronisation, thanks!

    Best Regards,

    Bing

  • Hi Bing,

    Thanks for the details. Will provide script updates tomorrow.

    Best,

    Thomas

  • Hi,Thomas

    Thanks for the support, I'm waiting for the script you gave!

    Best Regards,

    Bing

  • Hi,Thomas

    This is my configure script, I can't get the image to come out, I don't know what's wrong.

    #!/bin/sh
    
    #UB960: 0x30          UB933: 0xb0        Sensor: 0x6c
    
    # TDA4VEN main_i2c0, regs 0x20000000
    
    TI960=0x30
    
    
    WriteI2C()
    {
        i2ctransfer -y -f 1 w2@$1 $2 $3
        sleep 0.1
    }
    
    WriteI2C $TI960 0x01 0x02 # reset all digital part
    sleep 1
    
    ## Internally generated framesync configuration
    WriteI2C $TI960 0x0C 0x0F   # enable RX0-3
    WriteI2C $TI960 0x4C 0x0F   # write enable for RX0-4 registers
    WriteI2C $TI960 0x1F 0x00   # set CSI-2 Transmitter Speed 1.6G
    WriteI2C $TI960 0x4C 0x01   # page to port RX0
    WriteI2C $TI960 0x6E 0xA9   # set RX0 SER GPIO1 output framesync signal
    WriteI2C $TI960 0x4C 0x12   # page to port RX1
    WriteI2C $TI960 0x6E 0xA9   # set RX1 SER GPIO1 output framesync signal
    WriteI2C $TI960 0x4C 0x24   # page to port RX2
    WriteI2C $TI960 0x6E 0xA9   # set RX2 SER GPIO1 output framesync signal
    WriteI2C $TI960 0x4C 0x38   # page to port RX3
    WriteI2C $TI960 0x6E 0xA9   # set RX3 SER GPIO1 output framesync signal
    # set Internally Generated FrameSync 30Hz, 2778 counts
    WriteI2C $TI960 0x19 0x03   # FS_HIGH_TIME_1
    WriteI2C $TI960 0x1A 0x9D   # FS_HIGH_TIME_0
    WriteI2C $TI960 0x1B 0x07   # FS_LOW_TIME_1
    WriteI2C $TI960 0x1C 0x3A   # FS_LOW_TIME_0
    WriteI2C $TI960 0x18 0x01   # enable framesync
    
    
    ## RX0-3 I2C pass through and slave ID configuration
    WriteI2C $TI960 0x4C 0x01   # page to port RX0
    WriteI2C $TI960 0x58 0x58   # enable passthrough
    WriteI2C $TI960 0x5C 0xB0   # set serializer alias
    WriteI2C $TI960 0x5D 0x6C   # imager slave ID, port0
    WriteI2C $TI960 0x65 0x6C   # imager slave alias, port0
    WriteI2C $TI960 0x6D 0x7F   # set Input Mode,raw10
    WriteI2C $TI960 0x7C 0xC1   # set frame valid polarity to active high
    
    WriteI2C $TI960 0x4C 0x12   # page to port RX1
    WriteI2C $TI960 0x58 0x58   # enable passthrough
    WriteI2C $TI960 0x5C 0xB0   # set serializer alias
    WriteI2C $TI960 0x5D 0x6C   # imager slave ID, port1
    WriteI2C $TI960 0x65 0x6C   # imager slave alias, port1
    WriteI2C $TI960 0x6D 0x7F   # set Input Mode,raw10
    WriteI2C $TI960 0x7C 0xC1   # set frame valid polarity to active high
    
    WriteI2C $TI960 0x4C 0x24   # page to port RX2
    WriteI2C $TI960 0x58 0x58   # enable passthrough
    WriteI2C $TI960 0x5C 0xB0   # set serializer alias
    WriteI2C $TI960 0x5D 0x6C   # imager slave ID, port2
    WriteI2C $TI960 0x65 0x6C   # imager slave alias, port2
    WriteI2C $TI960 0x6D 0x7F   # set Input Mode,raw10
    WriteI2C $TI960 0x7C 0xC1   # set frame valid polarity to active high
    
    WriteI2C $TI960 0x4C 0x38   # page to port RX3
    WriteI2C $TI960 0x58 0x58   # enable passthrough
    WriteI2C $TI960 0x5C 0xB0   # set serializer alias
    WriteI2C $TI960 0x5D 0x6C   # imager slave ID, port3
    WriteI2C $TI960 0x65 0x6C   # imager slave alias, port3
    WriteI2C $TI960 0x6D 0x7F   # set Input Mode,raw10
    WriteI2C $TI960 0x7C 0xC1   # set frame valid polarity to active high
    
    
    ## CSI output configuration for basic synchronized forwarding
    WriteI2C $TI960 0x4C 0x01   # page to port RX0
    WriteI2C $TI960 0x70 0x1F   # RAW10_datatype_yuv422b10_VC0
    WriteI2C $TI960 0x7C 0xC1   # RAW10 use lower 8bit
    WriteI2C $TI960 0x4C 0x12   # page to port RX1
    WriteI2C $TI960 0x70 0x5F   # RAW10_datatype_yuv422b10_VC1
    WriteI2C $TI960 0x7C 0xC1   # RAW10 use lower 8bit
    WriteI2C $TI960 0x4C 0x24   # page to port RX2
    WriteI2C $TI960 0x70 0x9F   # RAW10_datatype_yuv422b10_VC2
    WriteI2C $TI960 0x7C 0xC1   # RAW10 use lower 8bit
    WriteI2C $TI960 0x4C 0x38   # page to port RX3
    WriteI2C $TI960 0x70 0xDF   # RAW10_datatype_yuv422b10_VC3
    WriteI2C $TI960 0x7C 0xC1   # RAW10 use lower 8bit
    WriteI2C $TI960 0x20 0x00   # [3:0]: 0: CSI-2 port 0; 1: CSI-2 port 1
    WriteI2C $TI960 0x21 0x04   # enable basic Synchronized forwarding for CSI port 0&1
    WriteI2C $TI960 0x32 0x01   # read from CSI port0, write to CSI port0
    WriteI2C $TI960 0x33 0x03   # enable CSI port0
    #WriteI2C $TI960 0x32 0x12   # read from CSI port1, write to CSI port1
    #WriteI2C $TI960 0x33 0x03   # enable CSI port1
    

    960 regs:

    933 regs:

    Best Regards,

    Bing

  • Hi Bing,

    Thanks, I've been having some issues on my bench side so it's helpful to see the script from your side as well.

    Do you have the status of the other ports as well on your system? A few comments included below:

    • Alias for each port should be set separately, this will allow access to each individual serializer.
    • With resolution YUV422 8 bit, we should set register 0x70 = 0x1E for the CSI data type. Could you confirm if this is correct? I see 0x1F in your script.

    Is the issue that there is no video on your side?

    Best,

    Thomas

  • Hi,Thomas

    With resolution YUV422 8 bit, we should set register 0x70 = 0x1E for the CSI data type. Could you confirm if this is correct? I see 0x1F in your script.

    It worked fine after I changed it to 0x1E.

    I was planning to implement a kind of hot-plugging and found that after I unplugged any of the camera modules(UB933+image sensor) all the camera displays were not working properly, even though the other three camera modules were there, why is that?

    Also, can you suggest a feasible way of hot-swapping, as long as it detects the unplugging and plugging in of the camera module.

    Best Regards,

    Bing

  • Hi Bing,

    Glad that it works better after changing data type. 

    For the synchronized forwarding modes, some of these do require specific methods do require forwarding to be disabled if link is lost. Could you please read register 0x22, 0x35 and 0x37 before and after hot plug is done? I suspect that since a stream is lost the synchronization of streams has also been lost.

    Best,

    Thomas

  • Hi,Thomas

    As per your request, the readings are as follows:

    Under normal circumstances:

    0x22 = 0x01

    0x35 = 0x03

    0x37 = 0x0F

    Unplug a camera:

    0x22 = 0x04

    0x35 = 0x00

    0x37 = 0x0B

    Best Regards,

    Bing

  • Hi Bing,

    Thanks for your quick response here.

    UB960 0x22 (FWD_STS) - sync status changes from CSI0 port video sync to sync failure when camera is removed.

    UB960 0x35 (CSI_STS) - initially TX port sync asserted & TX port pass asserted - these drop after camera is unplugged

    When the hot plug is done, would it be possible to disable forwarding of the port which is no longer used in register 0x20? 

    Best,

    Thomas

  • Hi,Thomas

    When the hot plug is done, would it be possible to disable forwarding of the port which is no longer used in register 0x20? 

    Thank you for your support, the hot plug function is now working.

    Best Regards,

    Bing