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.

DS90UB954-Q1: Clock timing setting for Test pattern Generation RAW10 1920x1080@30FPS 4 lane from Deser

Part Number: DS90UB954-Q1
Other Parts Discussed in Thread: ALP

Hello Ti,
We are currently trying to generate a 1920×1080 @ 30 FPS RAW10, 4 lane settings test pattern from the deserializer side to Qualcomm QCS5430 chipset. We are getting SOF and EOF at our soc side but frame request are failing. I have attached the sensor.XML file containing the register sequence we use on the Qualcomm side for camera bring-up. Could you please review it and let us know if any modifications are required? I have attached failure dmesg logs for your reference.
There are few parameters which needs to be set, can you check and let me know if any parameter value need to be changed? Specially blanking and outputpixelclock. We have 26Mhz external clock at deserilizer. And what CSI_TX_SPEED needs to set?
Looking forward to your guidance.kernel_sofdi_jun3.txt ds90ub954_ar0544_sensor.xml 
  • Hello Reena,

    Could you please clarify what you mean when you say: 'We are getting SOF and EOF at our soc side but frame request are failing.'

    Usually if the SoC is receiving both the start and end of frame, then that means they are receiving the full CSI data for the video frame.

    I am still looking through the data you have sent, but during an initial pass, I did not find anything too alarming. I cross referenced your PATGEN parameters with ALP's generated configuration and the values were very similar except for only a couple registers, 0x0B and 0x0D.

    Additionally, your CSI rate is set to 800 Mbps/lane which is relatively close to the video bandwidth of PATGEN. You could increase this to 1.6 Gbps/lane by setting 0x1F = 0x00 to see if this helps.

    Best,

    Ethan Woods

  • Hi Ethan,

    Thanks for your response. I did not find anyone using TI chipsets with the Mobile series of Qualcomm. It might be being used in the Automotive series of Qualcomm, but i do not have any reference. In Qualcomm, there is a specific sequence that needs to be followed, and I should get data as well with that sequence as well.

    During camera bring-up, we typically prepare a sensor.xml file that contains the following register sequences:
    • Init Settings – Common register configurations applicable across all modes
    • Mode-wise Settings – Register configurations specific to each camera mode
    • Stream-On Settings – Registers that trigger streaming
    • Stream-Off Settings – Registers that stop or pause streaming

      As you might have already seen my sensor.xml file, I have kept pattern enable in stream on function, I am not sure whether this is correct or not, and i am not sure that i will deserialiser will start sending frames after pattern enable (B1,01)(B2,01). Can you explain to me how and when exactly the deserializer will start sending pattern generation data on MIPI CSI port? Is there any register which i can set, and after setting that how much time need to wait?
    • Just after triggering stream on I am reading few registers back from deserializer,



    • Getting 0x35, 0x36, and 0x37 - 00, that means streaming is not started. Can you tell me what value should be there? From the Qualcomm side log, I can see a few SOF and EOF at starting but then when it is actually time to process it, frames are not coming, the function is waiting for 1.4 second and after that it failed with a timeout error. 

      5780:05-15 06:12:10.369 4700 4726 V CamX : [ VERB]4700 4726 [UTILS ] camxhashmap.cpp:204 GetInPlace() Key not found
      5781:05-15 06:12:10.370 4700 4726 V CamX : [ VERB]4700 4726 [CORE ] camxnode.cpp:2569 ProcessRequest() partialTagCount = 0 partialPublishedSet.size=0
      5782:05-15 06:12:10.370 4700 4726 I CamX : [ INFO]4700 4726 [CORE ] camxnode.cpp:2581 ProcessRequest() Raw_Sensor0 Complete ProcessRequest 5
      6141:05-15 06:12:11.676 4700 4700 I CamX : [ INFO]4700 4700 [CORE ] camxsession.cpp:3071 ProcessCaptureRequest() Raw: PCR wait for seqId 5 DONE - Result CamxResultETimeout, Live pending requests 5/6, Wait time 1400 (0) msec
      6142:05-15 06:12:11.677 4700 4700 I CamX : [ INFO]4700 4700 [CORE ] camxsession.h:3015 CanSystemEventBeForwarded() checking 0xb4000073c2465e60
      6143:05-15 06:12:11.677 4700 4700 I CamX : [CORE_CFG]4700 4700 [CORE ] camxsession.h:2603 SetSessionTriggeringRecovery() Session 0xb4000073c2465e60 is triggering recovery
      6144:05-15 06:12:11.677 4700 4700 I CamX : [CORE_CFG]4700 4700 [CORE ] camxpipeline.h:1495 SetPipelineTriggeringRecovery() Pipeline Raw is triggering recovery
      6145:05-15 06:12:11.677 4700 4700 I CamX : [CORE_CFG]4700 4700 [CORE ] camxsession.cpp:5571 HandleSystemEventCb() Triggering System Event: Session:0xb4000073c2465e60, Node:Unknown(-1), Instance:-1, Pipeline:Unknown(-1) DumpOnly:0

      Can we have a call, if possible? I am getting SOF in async mode only.

      Thanks & Regards,
      Reena Patel
  • Hi Reena,

    I believe the problem lies with how your CSI configuration is set on the DS90UB954. If your SoC is set for 4-lane MIPI CSI operation but the DES is set to 2-lane MIPI CSI output (seen by your register dump 0x33 = 0x21), then this could cause the errors seen above. You would likely see the first SoF and maybe an EoF, but further CSI data would be incorrect since there would be a lane mismatch/desync.

    Please try setting CSI_CTL register (0x33) to 0x01 for 4-lane CSI output on the 954 and let me know if this works.

    Can you explain to me how and when exactly the deserializer will start sending pattern generation data on MIPI CSI port? Is there any register which i can set, and after setting that how much time need to wait?

    Pattern generation is enabled during the write to PATGEN register PGEN_CTL (Indirect Address Page 0x00; Register 0x01). However, data is not actually forwarded until CSI forwarding is enabled in the CSI_CTL register (0x33). Further information on pattern generation can be found in the 954 Datasheet, Section 7.5.11.

    PATGEN is enabled as soon as the write to the PGEN_CTL and CSI output/forwarding begins as soon as the CSI_ENABLE (0x33[0]) is set. Since you have enabled CSI output in the script before anything else, you will not see data being forwarded until pattern generation is enabled further down in the script. So, enabling PATGEN in the 'Stream-On Settings' is fine.

    Getting 0x35, 0x36, and 0x37 - 00, that means streaming is not started. Can you tell me what value should be there?

    Register 0x35 is the CSI_STS register, which should report 0x01 if the CSI transmitter is receiving valid data that is forwarded from one of the RX Input Ports. 0x36 and 0x37 are CSI Interrupt registers which must be enabled first for there to be an output on them. More information on these registers can be found within the DS90UB954 Datasheet.

    If the fix above did not work and this needs to escalate to a call, please reach out to me at e-woods@ti.com and we can set up a meeting.

    Best,

    Ethan Woods

  • Hello Ethan,

    My mistake, actually. I have attached my old register read screenshot when I was trying with the lane 2 configuration. But right now, I have updated the register and set it for 4 lanes. 

    currently after setting B1-01 B2-01, i have kept 10ms of delay and after that continuosly reading this register sequence, and still getting 0x00 status. Could it be hardware issue or still in register sequence?

    <?xml version="1.0" encoding="utf-8" ?>
    <!--========================================================================-->
    <!-- Copyright (c) 2017-2021 Qualcomm Technologies, Inc.                    -->
    <!-- All Rights Reserved.                                                   -->
    <!-- Confidential and Proprietary - Qualcomm Technologies, Inc.             -->
    <!--========================================================================-->
    <sensorDriverData
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="../../../../api/sensor/camxsensordriver.xsd">
      <module_version major_revision="1" minor_revision="0" incr_revision="0"/>
    
      <!--Sensor slave information --> 
      <slaveInfo>
        <!--Name of the sensor -->
        <sensorName>ds90ub954_ar0544</sensorName>
        <!--8-bit or 10-bit write slave address -->
        <slaveAddress>0x60</slaveAddress>
        <!--Register address / data size in bytes -->
        <regAddrType range="[1,4]">1</regAddrType>
        <!--Register address / data size in bytes -->
        <regDataType range="[1,4]">1</regDataType>
        <!--Register address for sensor Id -->
        <sensorIdRegAddr>0x03</sensorIdRegAddr>
        <!--Sensor Id -->
        <sensorId>0x20</sensorId>
        <!--Mask for sensor id. Sensor Id may only be few bits -->
        <sensorIdMask>4294967295</sensorIdMask>
        <!--I2C frequency mode of slave
            Supported modes are: STANDARD (100 KHz), FAST (400 KHz), FAST_PLUS (1 MHz), CUSTOM (Custom frequency in DTSI), rapidise - can be tested with FAST_PLUS -->
        <i2cFrequencyMode>FAST</i2cFrequencyMode>
        <!--Sequence of power configuration type and configuration value required to control power to the device -->
        <powerUpSequence>
          <!--Power setting configuration
              Contains: configType, configValue and delay in milli seconds -->
          <powerSetting>
            <configType>VANA</configType>
            <configValue>0</configValue>
            <delayMs>3</delayMs>
          </powerSetting>
           <powerSetting>
            <configType>CUSTOM_GPIO1</configType>
            <configValue>1</configValue>
            <delayMs>5</delayMs>
          </powerSetting>
          <powerSetting>
            <configType>MCLK</configType>
            <configValue>24000000</configValue>
            <delayMs>1</delayMs>
          </powerSetting>
        </powerUpSequence>
        <powerDownSequence>
          <powerSetting>
            <configType>MCLK</configType>
            <configValue>0</configValue> 
            <delayMs>1</delayMs>
          </powerSetting>
           <powerSetting>
            <configType>CUSTOM_GPIO1</configType>
            <configValue>0</configValue>
            <delayMs>5</delayMs>
          </powerSetting>
          <powerSetting>
            <configType>VANA</configType>
            <configValue>0</configValue>
            <delayMs>1</delayMs>
          </powerSetting>
        </powerDownSequence>
      </slaveInfo>
      <!--Addresses for various sensor registers -->
      <regAddrInfo>
        <!--Register address to program width -->
        <xOutput></xOutput>
        <!--Register address to program height -->
        <yOutput></yOutput>
        <!--Register address to program Frame length lines -->
        <frameLengthLines></frameLengthLines>
        <!--Register address to program Line length pixel clock -->
        <lineLengthPixelClock></lineLengthPixelClock>
        <!--Register address to program coarse integration time -->
        <coarseIntgTimeAddr></coarseIntgTimeAddr>
        <!--Register address to program short coarse integration time
            This address is optional and must be provided if supported by sensor -->
        <shortCoarseIntgTimeAddr></shortCoarseIntgTimeAddr>
        <!-- Register address to program global gain channel -->
        <globalGainAddr></globalGainAddr>
        <!--Register address to program short global gain channel
            This address is optional and must be provided if supported by sensor -->
        <shortGlobalGainAddr></shortGlobalGainAddr>
        <!--Register address to program digital gloabl gain channel
            This address is optional and must be provided if supported by sensor -->
        <digitalGlobalGainAddr></digitalGlobalGainAddr>
        <!--Register address to program manual test pattern value for Red channel -->
        <testPatternRAddr></testPatternRAddr>
        <!--Register address to program manual test pattern value for Green Red channel -->
        <testPatternGRAddr></testPatternGRAddr>
        <!--Register address to program manual test pattern value for Blue channel -->
        <testPatternBAddr></testPatternBAddr>
        <!--Register address to program manual test pattern value for Green Blue channel -->
        <testPatternGBAddr></testPatternGBAddr>
       </regAddrInfo>      
       <resolutionInfo>
          <!--res0 MIPI output for NORMAL mode (WxH: 1600 * 1200, V1xH1, @30fps) (reg_A from ver1.00-4.01_200129)-->
          <resolutionData>
            <!--Color filter arrangement of the sensor
                Supported filter arrangements are: BAYER_BGGR, BAYER_GBRG, BAYER_GRBG, BAYER_RGGB, BAYER_Y, YUV_UYVY, YUV_YUYV -->
            <colorFilterArrangement>BAYER_RGGB</colorFilterArrangement>
            <!--Stream information -->
            <streamInfo>
              <streamConfiguration>
                <!--Virtual Channel of the data
                    Valid values for virtual channel are: 0, 1, 2 and 3 -->
                <vc>0</vc>
                <!--Data type of the stream. Default value is 0x2B (10-bit RAW) -->
                <dt>0x2B</dt>
                <!--Frame dimension: contains xStart, yStart, width and height -->
                <frameDimension>
                  <xStart>0</xStart>
                  <yStart>0</yStart>
                  <width>1920</width>
                  <height>1080</height>
                </frameDimension>
                <!--Bit width of the data -->
                <bitWidth>10</bitWidth>
              <!--Type of the stream
                  Supported stream types are: BLOB, IMAGE, PDAF, HDR, META, IMAGE_LONG -->
                <type>IMAGE</type>
              </streamConfiguration>
            </streamInfo>
            <!--Line length pixel clock of frame
                Typically this value is the active width + blanking width -->
            <lineLengthPixelClock>2200</lineLengthPixelClock>
            <!--Frame length lines of frame
              Typically this value is the active height + blanking height -->
            <frameLengthLines>1125</frameLengthLines>
            <!--Minimum horizontal blanking interval in pixels -->
            <minHorizontalBlanking>280</minHorizontalBlanking>
            <!--Minimum horizontal blanking interval in lines -->
            <minVerticalBlanking>45</minVerticalBlanking>
            <!--Output pixel clock -->
            <outputPixelClock>74250000</outputPixelClock>
            <!--Horizontal binning value -->
            <horizontalBinning>1</horizontalBinning>
            <!--Vertical binning value -->
            <verticalBinning>1</verticalBinning>
            <!--Maximum frame rate -->
            <frameRate>30</frameRate>
            <!--Number of lanes in which the data is streamed -->
            <downScaleFactor>1.0</downScaleFactor>
            <laneCount>4</laneCount>
            <!--Settle time in nano seconds -->
            <settleTimeNs>25</settleTimeNs>
            <!--Flag to know if the sensor is a 3phase sensor --> 
           <is3Phase>0</is3Phase>
           <!-- PTRN_GEN : Indirect access select -->
           <resSettings>
              <!-- Digital reset of Deser -->
             <regSetting>
                <slaveAddr>0x60</slaveAddr>
                <registerAddr>0x01</registerAddr>
                <registerData>0x01</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
                <regDataType range="[1,4]">1</regDataType>
                <operation>WRITE</operation>
                <delayUs>0x1000</delayUs>
              </regSetting>
              <!-- CSI_CTL - 2 lanes, Normal mode, CSI non continous mode, Enable CSI output  -->
              <regSetting>
                <slaveAddr>0x60</slaveAddr>
                <registerAddr>0x33</registerAddr>
                <registerData>0x01</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
                 <regDataType range="[1,4]">1</regDataType>
                <operation>WRITE</operation>
                <delayUs>0x10</delayUs>
              </regSetting>
              <!--Force ref clock of external clock -->
              <!--regSetting>
                <slaveAddr>0x60</slaveAddr>
                <registerAddr>0x02</registerAddr>
                <registerData>0x1F</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
                <regDataType range="[1,4]">1</regDataType>
                <operation>WRITE</operation>
                <delayUs>0x10</delayUs>
              </regSetting-->
              <!-- Disable RX Port forwarding on RX0 and RX1 first -->
              <regSetting>
                <slaveAddr>0x60</slaveAddr>
                <registerAddr>0x20</registerAddr>
                <registerData>0x30</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
                <regDataType range="[1,4]">1</regDataType> 
                <operation>WRITE</operation>
                <delayUs>0x10</delayUs>
             </regSetting>
              <!-- CSI_TX_SPEED - 800 Mbps serial rate -->
             <!--regSetting>
               <slaveAddr>0x60</slaveAddr>
               <registerAddr>0x1F</registerAddr>
               <registerData>0x02</registerData>
               <regAddrType range="[1,4]">1</regAddrType>
               <regDataType range="[1,4]">1</regDataType>
               <operation>WRITE</operation>
               <delayUs>0x100</delayUs>
             </regSetting-->
    	 <regSetting>
               <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB0</registerAddr>
    	   <registerData>0x00</registerData>
               <regAddrType range="[1,4]">1</regAddrType>
               <regDataType range="[1,4]">1</regDataType>
               <operation>WRITE</operation>
               <delayUs>0x10</delayUs>
             </regSetting>
    	<!-- PTRN_GEN : 8 Color bar, 5 block size -->
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x02</registerData>
    	   <regAddrType range="[1,4]">1</regAddrType>
    	   <regDataType range="[1,4]">1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>0x0</delayUs>
    	 </regSetting>
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB2</registerAddr>
    	   <registerData>0x35</registerData>
    	   <regAddrType range="[1,4]">1</regAddrType>
    	   <regDataType range="[1,4]">1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>0x0</delayUs>
    	  </regSetting>
    	<!-- PTRN_GEN : CSI2 DT - RAW10 VC 0-->
    	<regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x03</registerData>
    	   <regAddrType range="[1,4]">1</regAddrType>
    	   <regDataType range="[1,4]">1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x2B</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	   <!-- PTRN_GEN :  line size 2400, considering (1920*5)/4-->
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
     	    <registerAddr>0xB1</registerAddr>
    	    <registerData>0x04</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x09</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
    	    <registerData>0x05</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x60</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <!-- Color Bar size = 300, considering 2400/8 -->
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x06</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x01</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x07</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x2C</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <!-- Active lines per frame = 1080 = 0x0438 -->
    	   <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x08</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x04</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x09</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x38</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <!-- Total lines = 1125 = 0x0465 -->
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x0A</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x04</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x0B</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x62</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <!--Line period - 2963, considering 1/(30x1125x10ns)-->
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x0C</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x0B</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
              <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x0D</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x9B</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <!-- Vertical Back Porch : 36-->
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x0E</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x24</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <!-- Vertical Front Porch : 4-->
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x0F</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x04</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x10</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0xAA</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x11</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x33</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x12</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0xF0</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x13</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x7F</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x14</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x55</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x15</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0xCC</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x16</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x0F</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x17</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x80</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x18</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x19</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x1A</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x1B</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x1C</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x1D</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB1</registerAddr>
     	    <registerData>0x1E</registerData>
                <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	    <slaveAddr>0x60</slaveAddr>
    	    <registerAddr>0xB2</registerAddr>
    	    <registerData>0x00</registerData>
    	    <regAddrType range="[1,4]">1</regAddrType>
    	    <regDataType range="[1,4]">1</regDataType>
    	    <operation>WRITE</operation>
    	    <delayUs>0x0</delayUs>
    	  </regSetting>
    	  <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>1</delayUs>
    	 </regSetting>
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB2</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>10000</delayUs>
    	 </regSetting>
          </resSettings>
          <cropInfo>
            <left>0</left>
            <right>0</right>
            <top>0</top>
            <bottom>0</bottom>
          </cropInfo>
          <!--List of features / capabilities supported by sensor -->
          <capability>NORMAL</capability>
        <exposureInfo>
          <!-- element for exposure type for which this information is being updated -->
            <exposureType>DEFAULT</exposureType>
            <!-- element for coarseIntgTimeAddr -->
            <coarseIntgTimeAddr>0x0202</coarseIntgTimeAddr>
            <!-- element for analog globalGainAddr -->
            <globalGainAddr>0x3410</globalGainAddr>
            <!-- element for digitalGlobalGainAddr -->
            <digitalGlobalGainAddr>0x36C0</digitalGlobalGainAddr>
            <!-- element for maximum linecount -->
            <maxLineCount>3050</maxLineCount>
            <!-- element for minimum linecount -->
            <minLineCount>8</minLineCount>
          </exposureInfo>
        </resolutionData>
      </resolutionInfo>
      <!--Exposure control information -->
      <exposureControlInfo>
        <maxAnalogGain>50.625</maxAnalogGain>
        <maxDigitalGain>0</maxDigitalGain>
        <verticalOffset>10</verticalOffset>
        <maxLineCount>65535</maxLineCount>
        <minLineCount>1</minLineCount>
        <!--Conversion factor to convert real digital gain to register digital gain -->
        <realToRegDigitalGainConversionFactor>1</realToRegDigitalGainConversionFactor>
        <realToRegGain>0</realToRegGain>
        <regToRealGain>0</regToRealGain>
        </exposureControlInfo>
        <streamOnSettings>
          <!-- PTRN_GEN : Pattern generation enable -->
            <!--regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>1</delayUs>
    	 </regSetting>
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB2</registerAddr>
    	   <registerData>0x00</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>1</delayUs>
    	 </regSetting-->
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>1</delayUs>
    	 </regSetting>
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB2</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>10000</delayUs>
    	 </regSetting>
        </streamOnSettings>
        <streamOffSettings>
      <!-- PTRN_GEN : Pattern generation enable -->
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>10</delayUs>
    	 </regSetting>
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB2</registerAddr>
    	   <registerData>0x00</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>20</delayUs>
    	 </regSetting>
      </streamOffSettings>
      <!--Sequence of register settings to configure the device -->
      <groupHoldOnSettings>
      </groupHoldOnSettings>
      <groupHoldOffSettings>
      </groupHoldOffSettings>
      <initSettings>
        <initSetting>
        </initSetting>
      </initSettings>
      <testPatternInfo>
        <testPatternData>
          <mode>OFF</mode>
          <settings>
            <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB1</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>10</delayUs>
    	 </regSetting>
    	 <regSetting>
    	   <slaveAddr>0x60</slaveAddr>
    	   <registerAddr>0xB2</registerAddr>
    	   <registerData>0x01</registerData>
    	   <regAddrType>1</regAddrType>
    	   <regDataType>1</regDataType>
    	   <operation>WRITE</operation>
    	   <delayUs>2000</delayUs>
    	 </regSetting>
          </settings>
        </testPatternData>
      </testPatternInfo>
      <gmslInfo>
        <isGmslModule>0</isGmslModule>
        <!--Gmsl dual mode version index. this should be same as dual mode INIT, RES etc version -->
        <desSlaveAddr></desSlaveAddr>
        <desRevAddr></desRevAddr>
        <desChipIdAddr></desChipIdAddr>
        <serSlaveAddr></serSlaveAddr>
        <serChipIdAddr></serChipIdAddr>
        <sensorSlaveAddr></sensorSlaveAddr>
        <sensorChipIdAddr></sensorChipIdAddr>
        <serAliasInfo>
          <aliasAddr></aliasAddr>
        </serAliasInfo>
        <sensorAliasInfo>
          <aliasAddr></aliasAddr>
        </sensorAliasInfo>
         <enablePortAClockSettings>
        </enablePortAClockSettings>
        <sensorAStartSettings>
        </sensorAStartSettings>
        <streamOnSettings>
          <gmslSetting>
          </gmslSetting>
        </streamOnSettings>
        <streamOffSettings>
          <gmslSetting>
          </gmslSetting>
        </streamOffSettings>
      </gmslInfo>
      <colorLevelInfo>
        <!--White level value -->
        <whiteLevel>1023</whiteLevel>
        <!--Pedestal value for Red channel -->
        <rPedestal>64</rPedestal>
        <!--Pedestal value for GreenRed channel -->
        <grPedestal>64</grPedestal>
        <!--Pedestal value for Blue channel -->
        <bPedestal>64</bPedestal>
        <!--Pedestal value for Green Blue channel -->
        <gbPedestal>64</gbPedestal>
      </colorLevelInfo>
      <opticalBlackRegionInfo>
        <!--Frame dimension: contains xStart, yStart, width and height -->
        <dimension>
          <xStart>0</xStart>
          <yStart>0</yStart>
          <width>0</width>
          <height>0</height>
        </dimension>
      </opticalBlackRegionInfo>
      <!--Information about the pixel array
          Active dimension and dummy pixels width are provided -->
      <pixelArrayInfo>
        <!--Width and height of the frame or subframe -->
        <activeDimension>
          <width>1920</width>
          <height>1080</height>
        </activeDimension>
        <!--Dummy pixels surrounding the active pixel array -->
        <dummyInfo>
          <left>0</left>
          <right>0</right>
          <top>0</top>
          <bottom>0</bottom>
        </dummyInfo>
      </pixelArrayInfo>
      <!--Application delay information -->
      <delayInfo>
        <!--Number of frames required to apply the linecount -->
        <linecount>0</linecount>
        <!--Number of frames required to apply the gain -->
        <gain>0</gain>
        <!--Maximum pipeline delay in number of frames -->
        <maxPipeline>2</maxPipeline>
        <!--Number of frames to skip -->
        <frameSkip>1</frameSkip>
      </delayInfo>
      <sensorProperty>
        <!--Pixel size in micro meters -->
        <pixelSize>1.4</pixelSize>
        <!--Crop factor -->
        <cropFactor>1.0</cropFactor>
        <!--Sensing method of senosor
            Supported sensing methods: UNDEFINED, ONE_CHIP_COLOR_AREA, TWO_CHIP_COLOR_AREA
            THREE_CHIP_COLOR_AREA, COLOR_SEQUENCE_AREA, TRILINEAR, COLOR_SEQUENCE_LINEAR -->
        <sensingMethod>ONE_CHIP_COLOR_AREA</sensingMethod>
      </sensorProperty>
      <noiseCoefficent>
        <gradient_S>3.738032e-06</gradient_S>
        <offset_S>3.651935e-04</offset_S>
        <gradient_O>4.499952e-07</gradient_O>
        <offset_O>-2.968624e-04</offset_O>
      </noiseCoefficent>
    </sensorDriverData>
    

    You can check my latest XML file as well.

    Thank you,

    Reena Patel

  • Hi Reena,

    Looking at your configuration, I do not see anything wrong enough where you should be getting no data at all. You have correctly disabled RX Inputs and enabled CSI forwarding with 4 lane operation at 800 Mbps/lane, which is nowhere near the bandwidth of the PATGEN. Your PATGEN configuration is just slightly different than the one I have generated through ALP, but this should not matter. I see in multiple places you have enabled PATGEN (0xb1 = 0x01, 0xb2= 0x01) which should not cause any problems, but there are some cases where the delays are very short. Still, I don't think this should be an issue, so I believe there is something else going on.

    Unfortunately, this device does not have the ability to detect if it is outputting valid CSI data (via PATGEN) since the device is monitoring inputs on an RX Port. PATGEN is not passed through the RX Port so there is no way to tell if it is on or not. Register 0x35 (CSI_STS) will only report 0x01 if there is valid CSI data being received on an RX Input Port.

    With this being said, I have seen in register 0x04 (DEVICE_STS) that you have a passing LOCK status, which means you are locked to a Serializer. Is your connected Serializer capable of outputting PATGEN (FPD3+, not DVP SER)? This would be a better way to test your setup since we can detect if data is coming through the Deserializer, but it requires slightly more configuration.

    Since PATGEN on the Deserializer bypasses the RX Inputs (and therefore debug registers), it is hard to diagnose specifically what is happening. The script configuration is correct and should be outputting data so there is something else going on.

    If possible, could you also provide a full register dump, rather than just the registers you have above? This should be for the main page and the PATGEN indirect page (0xB0 = 0x00). If possible, this register dump should take place when PATGEN is enabled and you should be seeing output. This could allow me to look a little deeper for any possible issues. For reference, I ran your exact configuration on the EVM in our lab through ALP and was able to observe CSI output. Additionally, as a sanity check for me, how many MIPI CSI lanes is the SoC configured to? The DES output and SoC input need to have matching CSI lane count or there will be sync issues.

    Best,

    Ethan Woods

  • Hey Ethan, 

    Thank you for your response. These two days, actually, I did not get a chance to work on the same task. I will share a new update tomorrow after testing.

    Thank you.

  • Hello Reena,

    Thanks for your feedback. I will await your response.

    If you get a chance to test Serializer PATGEN or need some additional help with configuration, please let me know how it goes!

    Ethan Woods

  • Hi Ethan,

    I have an update to share with you. As you said, I tried pattern generation from the serializer, and it works as well. After that, I tried to stream our camera as well, which is also working. I have two modes of our camera,

    1) 2592x1944 Raw 10, FPS 30

    2) 1920x1080 Raw 10, FPS 30

    Both mode we have tested earlier through direct MIPI, both are working. Yesterday, we streamed 1920x1080 as well. However, 2592x1944 is not working. Getting 1 SOF, but not EOF, then getting the second SOF as well.

    this are my working settings from mipi end, which i have tried to configure through GMSL as well,

    <streamInfo>
    <streamConfiguration>
    <!--Virtual Channel of the data
    Valid values for virtual channel are: 0, 1, 2 and 3 -->
    <vc>0</vc>
    <!--Data type of the stream. Default value is 0x2B (10-bit RAW) -->
    <dt>43</dt>
    <!--Frame dimension: contains xStart, yStart, width and height -->
    <frameDimension>
    <xStart>0</xStart>
    <yStart>0</yStart>
    <width>2592</width>
    <height>1944</height>
    </frameDimension>
    <!--Bit width of the data -->
    <bitWidth>10</bitWidth>
    <!--Type of the stream
    Supported stream types are: BLOB, IMAGE, PDAF, HDR, META, IMAGE_LONG -->
    <type>IMAGE</type>
    </streamConfiguration>
    </streamInfo>
    <!--Line length pixel clock of frame
    Typically this value is the active width + blanking width -->
    <lineLengthPixelClock>7436</lineLengthPixelClock>
    <!--Frame length lines of frame
    Typically this value is the active height + blanking height -->
    <frameLengthLines>1976</frameLengthLines>
    <!--Minimum horizontal blanking interval in pixels -->
    <minHorizontalBlanking>4844</minHorizontalBlanking>
    <!--Minimum horizontal blanking interval in lines -->
    <minVerticalBlanking>32</minVerticalBlanking>
    <!--Output pixel clock -->
    <outputPixelClock>80000000</outputPixelClock>
    <!--Horizontal binning value -->
    <horizontalBinning>1</horizontalBinning>
    <!--Vertical binning value -->
    <verticalBinning>1</verticalBinning>
    <frameRate>30</frameRate>
    <downScaleFactor>1.0</downScaleFactor>
    <laneCount>2</laneCount>
    <!--Settle time in nano seconds -->
    <settleTimeNs>14</settleTimeNs>

    can you first check if there is bandwidth issue or out of limit for either serializer or deserializer. our camera supports 2 lane only, therefore 2 lane connected with serializer and deserializer to soc 2 lane, we have configured.

    Thank you,

    Reena Patel

  • Hi Reena,

    Thanks for the update. Glad to hear Serializer PATGEN was working alongside your first lower resolution camera.

    I believe the problem lies with the bandwidth of the higher resolution steam, specifically with only being able to use 2-lanes. The DS90UB953 (which I am assuming you are using since the paired Deserializer is the DS90UB954) only supports up to 832 Mbps/lane. The estimated bandwidth of the 2592x1944 Raw 10, FPS 30 stream is around 1.88 Gbps, which requires at least 944 Mbps/lane in a 2-lane configuration.

    This means that the DS90UB953, specifically in 2-lane mode, cannot handle this resolution since it violates the maximum lane rate of 832 Mbps/lane. The Deserializer can run up to 1.6 Gbps/lane, but the Serializer cannot.

    Best,

    Ethan Woods