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.

DS90UB635-Q1: DS90UB635-Q1 and DS90UB638-Q register configuration files

Part Number: DS90UB635-Q1

Tool/software:

Hi Ti Teams,

We need the register configuration files of DS90UB635-Q1 and DS90UB638-Q

our setting as below:

Output from our camera

Resolution:1600*1300

Frame rate: 30 frames

Output format: YUV 8bit UYVY

mipi:CSI-2/2Lane

Please help provide how to setting software or firmware document on DS90UB635-Q1 and DS90UB638-Q , Thank you so much.

  • Hi Lee,

    Please note that as long as the SER and DES are on the correct mode_sel they should lock without software. You will need to configure just need to configure registers associated to the settings you need. 

    We will work on the script and provide by Tuesday. 

    Glenn 

  • Hi Glenn,

    Thank you so much.

  • Hi Lee, 

    The team will provide an update on this script tomorrow. 

    Best,

    Zoe

  • Hi Lee,

    Included below is the script: 

    # Set up IDs
    UB635 = 0x30
    UB638 = 0x60
    SerAlias = 0x1A


    #Setup I2C
    board.WriteI2C(UB638, 0x4C, 0x01) #Port 0 select

    #Setup Aliases (SerAlias)
    board.WriteI2C(UB638, 0x5C, SerAlias)

    #Enabling I2C Pass Through
    temp = board.ReadI2C(UB638, 0x58) 
    temp = temp | 0x40
    board.WriteI2C(UB638, 0x58, temp)


    #Configure Ser
    temp2 = board.ReadI2C(SerAlias, 0x02)
    temp2 = temp2 & 0xDF | 0x40
    board.WriteI2C(SerAlias, 0x02, temp2) #Continuous Clock, 2-Lane Configuration, Default Settings for everything else


    #Configure Des
    #Forwarding Setup
    board.WriteI2C(UB638, 0x1F, 0x02) #800 Mbps serial rate
    board.WriteI2C(UB638, 0x33, 0x23) #Continuous Clock, 2-Lane Configuration, CSI Output Enabled, Default Settings for everything else
    board.WriteI2C(UB638, 0x20, 0x20) #Enabling Forwarding for Rx Port 0

    Best,

    Carter

  • Hi Carter Sir,

    My register configuration setting as below, but still have some error, please help suggest some information for us, Thank you so much.

    ////DOTHINKEY 2.2 sensor ini format(Start from 2014.11.06)
    ////H62_720_102_60.ini
    ////www.dothinkey.com
    ////Preview Type : 0:DVP Raw 10 bit; 1:Raw 8 bit; 2:YUV422; 3:RAW16
    ////Preview Type : 4:RGB565; 5:Pixart SPI; 6:MIPI 10bit; 7:MIPI 12bit; 8: MTK SPI
    ////port : 0:MIPI; 1:Parallel; 2:MTK; 3:SPI; 4:TEST; 5: HISPI; 6 : Z2P//Z4P
    ////I2C Mode : 0:Normal 8Addr,8Data; 1:Samsung 8 Addr,8Data; 2:Micron 8 Addr,16Data
    ////I2C Mode : 3:Stmicro 16Addr,8Data;4:Micron2 16 Addr,16Data
    ////Out Format : 0:YCbYCr//RG_GB; 1:YCrYCb//GR_BG; 2:CbYCrY//GB_RG; 3:CrYCbY//BG_GR
    ////MCLK Speed : in KHZ,like this:24M,value is 24000
    ////pin : BIT0 pwdn; BIT1:reset
    ////avdd : in mV, like this:2.8V, value is 2800
    ////dovdd : in mV, like this:2.8V, value is 2800
    ////dvdd : in mV, like this:2.8V, value is 2800
    ////Quick_w : Quick Preview width
    ////Quick_h : Quick Preview height
    ////[Quick_ParaList]: Quick Preview resolution sensor settings


    [DataBase]
    DBName = Dothinkey2

    [Vendor]
    VendorName = OV

    [Sensor]
    SensorName = TI635-TI638
    width = 1600
    height = 1300

    port =0
    type =2
    pin =3

    SlaveID = 0x60

    mode = 3

    FlagReg = 0x00
    FlagMask = 0xff
    FlagData = 0x60
    FlagReg1 = 0x00
    FlagMask1 = 0xff
    FlagData1 = 0x60

    outformat = 2
    ////Quick Preview width and height...
    Quick_w = 0
    Quick_h = 0

    ////Sensor MCLK clk in KHZ...
    //mclk = 24000

    ////Sensor Power Voltage in mV...
    //avdd = 1800
    //dovdd = 3300
    //dvdd = 1800
    //
    //Ext0 = 0
    //Ext1 = 0
    //Ext2 = 0

    [ParaList]
    0xfff8,0x60
    0x4C,0x01 //Port 0 select
    0x1F,0x02 //800 Mbps serial rate
    0x33,0x23 //Continuous Clock, 2-Lane Configuration, CSI Output Enabled
    0x20,0x20 //Enabling Forwarding for Rx Port 0
    0x03,0x03 

  • Hello Lee, 

    Do you know what type of problem is occurring? Additionally, are you able to provide a schematic of your setup?

    Best,

    Carter Langston

  • Hi Carter Sir,

    My settings are as follows, please help check if there are any problems and give me some suggestions, thank you very much.

    My test tools:

    test result:

    MIPI waveform output by TI638, all 4 Lanes have waveforms:

    My tool setting:

    My tool reg. setting:

    ////DOTHINKEY 2.2 sensor ini format(Start from 2014.11.06)
    ////H62_720_102_60.ini
    ////www.dothinkey.com
    ////Preview Type : 0:DVP Raw 10 bit; 1:Raw 8 bit; 2:YUV422; 3:RAW16
    ////Preview Type : 4:RGB565; 5:Pixart SPI; 6:MIPI 10bit; 7:MIPI 12bit; 8: MTK SPI
    ////port : 0:MIPI; 1:Parallel; 2:MTK; 3:SPI; 4:TEST; 5: HISPI; 6 : Z2P//Z4P
    ////I2C Mode : 0:Normal 8Addr,8Data; 1:Samsung 8 Addr,8Data; 2:Micron 8 Addr,16Data
    ////I2C Mode : 3:Stmicro 16Addr,8Data;4:Micron2 16 Addr,16Data
    ////Out Format : 0:YCbYCr//RG_GB; 1:YCrYCb//GR_BG; 2:CbYCrY//GB_RG; 3:CrYCbY//BG_GR
    ////MCLK Speed : in KHZ,like this:24M,value is 24000
    ////pin : BIT0 pwdn; BIT1:reset
    ////avdd : in mV, like this:2.8V, value is 2800
    ////dovdd : in mV, like this:2.8V, value is 2800
    ////dvdd : in mV, like this:2.8V, value is 2800
    ////Quick_w : Quick Preview width
    ////Quick_h : Quick Preview height
    ////[Quick_ParaList]: Quick Preview resolution sensor settings


    [DataBase]
    DBName = Dothinkey2

    [Vendor]
    VendorName = TI

    [Sensor]
    SensorName = TI935-TI954
    width = 1600
    height = 1300
    port = 0
    type = 2
    pin = 3
    SlaveID = 0x60
    mode = 0
    FlagReg = 0x00
    FlagMask = 0x00
    FlagData = 0x00
    FlagReg1 = 0x00
    FlagMask1 = 0x00
    FlagData1 = 0x00

    outformat = 2
    ////Quick Preview width and height...
    Quick_w = 0
    Quick_h = 0

    ////Sensor MCLK clk in KHZ...
    mclk = 24000

    ////Sensor Power Voltage in mV...
    avdd = 3300
    dovdd = 2800
    dvdd = 1800

    Ext0 = 0
    Ext1 = 0
    Ext2 = 0

    [ParaList]
    //0x4c,0x01
    //0x58,0x5e //0x5a
    //0x5c,0x30
    //0x5d,0x34
    //0x65,0x34
    //0x7c,0x00
    //0xfff8,0x30
    //0xffff,0x500
    //0x02,0x73
    //0x0e,0x80
    //0x0d,0x08

    0xffff,0xff,
    0x02,0x1e, //I2c_Master_enable and output enable
    0x4c,0x01, //write enable Sel: 01(port0) or 10(port1)
    0x20,0x20, //disable for RX_Port1
    0x1f,0x02, //CSI_TX_SPEED sel:800Mbps
    0x32,0x01, //
    0x33,0x03, //CSI output enable
    0x58,0x1e,//0xbd, pass-through enable and back channel Frequency sel
    0x5b,0x30, //automatically load remote serializer ID
    0x5c,0x30, //SER_ALIAS_ID
    0x5d,0x48, //specified remote slave device ID 0x34
    0x65,0x48, //SlaveAlias[0]Register

    //TX SlaveID =0x30
    0xfff8,0x30,
    0xffff,0x20,
    //0x06,0x49, //
    //0x07,0xf2, //
    0x0b,0x7f, // 13
    0x0c,0x7f, //26
    0x02,0x73,
    0x0e,0x80,//0xc0, 80
    0x0D,0x08,//0x0c, 08
    //0x02,0x73,//
    0xffff,0x10,
    //0x0D,0x04, //
    0xffff,0x100,

  • Hi Carter:

      I also update customer HW Mode trapping as below

    (1) CSI-2 Non-synchronous – FPD-Link III Clock reference derived from internal AON clock. mode

    (2) IDX configuration as below. 

  • Hello Lee,

    I will take a look at the provided information, consult with the team, and provide an update by the end of the day tomorrow.

    Best,

    Carter

  • Hello Lee, 

    Are you able to provide register dumps, the initialization script that is being run, and the sensor settings? This will help determine the problem that is occurring.

    Best,

    Carter 

  • Hi Carter Sir,

    initialization script are as follows, Please help check, Thank you so much.

    file name: ti635_ti638 - 1600x1300p.ini

         
    ////DOTHINKEY 2.2 sensor ini format(Start from 2014.11.06)
    ////H62_720_102_60.ini
    ////www.dothinkey.com
    ////Preview Type    : 0:DVP Raw 10 bit; 1:Raw 8 bit; 2:YUV422; 3:RAW16
    ////Preview Type    : 4:RGB565; 5:Pixart SPI; 6:MIPI 10bit; 7:MIPI 12bit; 8: MTK SPI
    ////port            : 0:MIPI; 1:Parallel; 2:MTK; 3:SPI; 4:TEST; 5: HISPI; 6 : Z2P//Z4P
    ////I2C Mode        : 0:Normal 8Addr,8Data;  1:Samsung 8 Addr,8Data; 2:Micron 8 Addr,16Data
    ////I2C Mode        : 3:Stmicro 16Addr,8Data;4:Micron2 16 Addr,16Data
    ////Out Format      : 0:YCbYCr//RG_GB; 1:YCrYCb//GR_BG; 2:CbYCrY//GB_RG; 3:CrYCbY//BG_GR
    ////MCLK Speed      : in KHZ,like this:24M,value is 24000
    ////pin             : BIT0 pwdn; BIT1:reset
    ////avdd            : in mV, like this:2.8V, value is 2800
    ////dovdd           : in mV, like this:2.8V, value is 2800
    ////dvdd            : in mV, like this:2.8V, value is 2800
    ////Quick_w         : Quick Preview width
    ////Quick_h         : Quick Preview height
    ////[Quick_ParaList]: Quick Preview resolution sensor settings
    
    
    [DataBase]
    DBName     = Dothinkey2
    
    [Vendor]
    VendorName = TI
    
    [Sensor]
    SensorName = TI935-TI954
    width      = 1600
    height     = 1300
    port       = 0
    type       = 2
    pin        = 3
    SlaveID    = 0x60
    mode       = 0
    FlagReg    = 0x00
    FlagMask   = 0x00
    FlagData   = 0x00
    FlagReg1   = 0x00   
    FlagMask1  = 0x00 
    FlagData1  = 0x00   
    
    outformat  = 2
    ////Quick Preview width and height...
    Quick_w    = 0
    Quick_h    = 0
    
    ////Sensor MCLK clk in KHZ...
    mclk       = 24000
    
    ////Sensor Power Voltage in mV...
    avdd       = 3300
    dovdd      = 2800
    dvdd       = 1800
    
    Ext0       = 0
    Ext1       = 0
    Ext2       = 0
    
    [ParaList] 
    //0x4c,0x01
    //0x58,0x5e   //0x5a
    //0x5c,0x30
    //0x5d,0x34
    //0x65,0x34
    //0x7c,0x00
    //0xfff8,0x30
    //0xffff,0x500
    //0x02,0x73
    //0x0e,0x80
    //0x0d,0x08
    
    0xffff,0xff,         
    0x02,0x1e, //I2c_Master_enable and output enable         
    0x4c,0x01, //write enable Sel: 01(port0) or 10(port1)        
    0x20,0x20, //disable for RX_Port1	         
    0x1f,0x02, //CSI_TX_SPEED sel:800Mbps	         
    0x32,0x01,  //         
    0x33,0x03, //CSI output enable	         
    0x58,0x1e,//0xbd, pass-through enable and back channel Frequency sel    
    0x5b,0x30, //automatically load remote serializer ID          
    0x5c,0x30,  //SER_ALIAS_ID         
    0x5d,0x48,  //specified remote slave device ID 0x34        
    0x65,0x48,  //SlaveAlias[0]Register    
       
    //TX SlaveID =0x30   
    0xfff8,0x30,         
    0xffff,0x20,         
    //0x06,0x49, //        
    //0x07,0xf2,  //       
    0x0b,0x7f, // 13         
    0x0c,0x7f,  //26         
    0x02,0x73,           
    0x0e,0x80,//0xc0,   80 
    0x0D,0x08,//0x0c,    08
    //0x02,0x73,//         
    0xffff,0x10,         
    //0x0D,0x04, //        
    0xffff,0x100,

    file name: ti635_ti638 - 1600x1300p -1.ini

         
    ////DOTHINKEY 2.2 sensor ini format(Start from 2014.11.06)
    ////H62_720_102_60.ini
    ////www.dothinkey.com
    ////Preview Type    : 0:DVP Raw 10 bit; 1:Raw 8 bit; 2:YUV422; 3:RAW16
    ////Preview Type    : 4:RGB565; 5:Pixart SPI; 6:MIPI 10bit; 7:MIPI 12bit; 8: MTK SPI
    ////port            : 0:MIPI; 1:Parallel; 2:MTK; 3:SPI; 4:TEST; 5: HISPI; 6 : Z2P//Z4P
    ////I2C Mode        : 0:Normal 8Addr,8Data;  1:Samsung 8 Addr,8Data; 2:Micron 8 Addr,16Data
    ////I2C Mode        : 3:Stmicro 16Addr,8Data;4:Micron2 16 Addr,16Data
    ////Out Format      : 0:YCbYCr//RG_GB; 1:YCrYCb//GR_BG; 2:CbYCrY//GB_RG; 3:CrYCbY//BG_GR
    ////MCLK Speed      : in KHZ,like this:24M,value is 24000
    ////pin             : BIT0 pwdn; BIT1:reset
    ////avdd            : in mV, like this:2.8V, value is 2800
    ////dovdd           : in mV, like this:2.8V, value is 2800
    ////dvdd            : in mV, like this:2.8V, value is 2800
    ////Quick_w         : Quick Preview width
    ////Quick_h         : Quick Preview height
    ////[Quick_ParaList]: Quick Preview resolution sensor settings
    
    
    [DataBase]
    DBName     = Dothinkey2
    
    [Vendor]
    VendorName = TI
    
    [Sensor]
    SensorName = TI935-TI954
    width      = 1600
    height     = 1300
    port       = 0
    type       = 2
    pin        = 3
    SlaveID    = 0x60
    mode       = 0
    FlagReg    = 0x00
    FlagMask   = 0x00
    FlagData   = 0x00
    FlagReg1   = 0x00   
    FlagMask1  = 0x00 
    FlagData1  = 0x00   
    
    outformat  = 2
    ////Quick Preview width and height...
    Quick_w    = 0
    Quick_h    = 0
    
    ////Sensor MCLK clk in KHZ...
    mclk       = 24000
    
    ////Sensor Power Voltage in mV...
    avdd       = 3300
    dovdd      = 2800
    dvdd       = 1800
    
    Ext0       = 0
    Ext1       = 0
    Ext2       = 0
    
    [ParaList] 
    0xfff8,0x60
    0x4c,0x01
    0x0c,0x83
    0x6D,0x78
    0x20,0x20
    0x1f,0x02
    0x33,0x03
    0x58,0x5a
    0x5c,0x30
    0x5d,0x48
    0x65,0x48

    file name: ti935_ti954.ini

         
    ////DOTHINKEY 2.2 sensor ini format(Start from 2014.11.06)
    ////H62_720_102_60.ini
    ////www.dothinkey.com
    ////Preview Type    : 0:DVP Raw 10 bit; 1:Raw 8 bit; 2:YUV422; 3:RAW16
    ////Preview Type    : 4:RGB565; 5:Pixart SPI; 6:MIPI 10bit; 7:MIPI 12bit; 8: MTK SPI
    ////port            : 0:MIPI; 1:Parallel; 2:MTK; 3:SPI; 4:TEST; 5: HISPI; 6 : Z2P//Z4P
    ////I2C Mode        : 0:Normal 8Addr,8Data;  1:Samsung 8 Addr,8Data; 2:Micron 8 Addr,16Data
    ////I2C Mode        : 3:Stmicro 16Addr,8Data;4:Micron2 16 Addr,16Data
    ////Out Format      : 0:YCbYCr//RG_GB; 1:YCrYCb//GR_BG; 2:CbYCrY//GB_RG; 3:CrYCbY//BG_GR
    ////MCLK Speed      : in KHZ,like this:24M,value is 24000
    ////pin             : BIT0 pwdn; BIT1:reset
    ////avdd            : in mV, like this:2.8V, value is 2800
    ////dovdd           : in mV, like this:2.8V, value is 2800
    ////dvdd            : in mV, like this:2.8V, value is 2800
    ////Quick_w         : Quick Preview width
    ////Quick_h         : Quick Preview height
    ////[Quick_ParaList]: Quick Preview resolution sensor settings
    
    
    [DataBase]
    DBName     = Dothinkey2
    
    [Vendor]
    VendorName = TI
    
    [Sensor]
    SensorName = TI935-TI954
    width      = 1600
    height     = 1080
    port       = 0
    type       = 2
    pin        = 3
    SlaveID    = 0x60
    mode       = 0
    FlagReg    = 0x00
    FlagMask   = 0x00
    FlagData   = 0x00
    FlagReg1   = 0x00   
    FlagMask1  = 0x00 
    FlagData1  = 0x00   
    
    outformat  = 2
    ////Quick Preview width and height...
    Quick_w    = 0
    Quick_h    = 0
    
    ////Sensor MCLK clk in KHZ...
    mclk       = 24000
    
    ////Sensor Power Voltage in mV...
    avdd       = 3300
    dovdd      = 2800
    dvdd       = 1800
    
    Ext0       = 0
    Ext1       = 0
    Ext2       = 0
    
    [ParaList] 
    //0x4c,0x01
    //0x58,0x5e   //0x5a
    //0x5c,0x30
    //0x5d,0x34
    //0x65,0x34
    //0x7c,0x00
    //0xfff8,0x30
    //0xffff,0x500
    //0x02,0x73
    //0x0e,0x80
    //0x0d,0x08
    
    0xffff,0xff,         
    0x02,0x3f, //I2c_Master_enable and output enable         
    0x4c,0x01, //write enable Sel: 01(port0) or 10(port1)        
    0x20,0x20, //disable for RX_Port1	         
    0x1f,0x02, //CSI_TX_SPEED sel:800Mbps	         
    0x32,0x01,  //         
    0x33,0x01, //CSI output enable	         
    0x58,0x5e,//0xbd, pass-through enable and back channel Frequency sel    
    0x5b,0x30, //automatically load remote serializer ID          
    0x5c,0x30,  //SER_ALIAS_ID         
    0x5d,0x48,  //specified remote slave device ID 0x34        
    0x65,0x48,  //SlaveAlias[0]Register    
       
    //TX SlaveID =0x30   
    0xfff8,0x30,         
    0xffff,0x20,         
    0x06,0x49, //        
    0x07,0xf2,  //       
    0x0b,0x13,           
    0x0c,0x26,           
    0x02,0x73,           
    0x0e,0xc0,//0xc0,   80 
    0x0D,0x0c,//0x0c,    08
    0x02,0x73,//         
    0xffff,0x10,         
    0x0D,0x04, //        
    0xffff,0x100,

  • Hello Carter:

       I also attached customer tested 635-> 638 the output display abnormally (white -black screen as below).  need your teams help give us which register tuning guideline we can fixed the issues. thank you

     

  • Hello Lee,

    Is this problem occurring when a specific script provided above is run? I will compare the provided scripts with the script I provided at the beginning of the thread and note any differences by the end of the day tomorrow.

    Best,

    Carter

  • Hello Lee,

    After reading through the provided scripts I have noticed several discrepancies between them and the script provided at the beginning of the thread.

    Please make sure to follow the order of execution used in the script provided:

    Select Port 0

    Setup any Serializer Aliases

    Enable I2C Passthrough (Some scripts do not enable this)

    Configure Serializer

    Configure the Deserializer (Select CSI Serial Rate, Enable Forwarding for Port 0)

    In the scripts sent, these steps were dispersed throughout the script and executed in a different order.


    Furthermore:


    Script 1 and 2 enable a 4-lane CSI Lane Configuration which differs from the 2-Lane configuration enabled in the script provided. Is this intended?
    The serializer must be configured based on the image sensor configuration.


    Additionally:

    In Script 1, register 0x32 is restricted but the script tries to write to it.

    In Script 1 and 2, bit 1 of the RX_PORT_CTL Register (0x0C) is not set to 0

    Are you able to provide register dumps for both the Serializer and Deserializer with the correct port selected?

    Best,

    Carter Langston

  • ti635 dump register
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    
    00: 30 00 32 4b 00 03 41 28 fe 1e 10 7f 7f f0 0f 00    
    10: 00 00 00 00 00 20 18 3c 80 62 62 62 00 00 00 00    
    20: 00 00 00 00 00 02 00 00 67 33 01 00 00 00 00 00    
    30: 00 20 09 04 00 10 00 7a 00 00 00 00 00 00 00 00    
    40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    
    50: 20 c0 45 00 00 00 00 00 07 07 07 00 00 00 00 00    
    60: 00 1e 80 0c 3b cb 00 32 00 00 00 00 00 00 00 00    
    70: 00 00 25 00 00 00 00 00 00 00 e4 00 00 00 00 00    
    80: 00 00 00 00 00 00 90 00 00 00 00 00 05 00 00 00    
    90: 32 e3 64 01 00 00 00 00 00 00 06 00 26 00 00 0d    
    a0: 00 0d 0d 0c 0d 10 42 10 10 10 03 01 00 00 00 00    
    b0: 04 4a 3f 00 00 00 00 00 00 00 00 00 00 00 00 00    
    c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    
    d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    
    e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    
    f0: 5f 55 42 39 35 33 00 00 00 00 00 00 00 00 00 00    
    
    ti638 dump register
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 
    00: 7a 00 1e 20 df 01 00 fe 1c 10 7a 7a 83 09 0a 7f 
    10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 02 
    20: 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    30: 00 00 00 03 40 01 00 03 00 00 00 01 14 6f 00 40 
    40: 00 a7 71 01 00 00 00 00 00 00 00 12 01 13 4d 31 
    50: 20 00 00 05 00 00 00 00 5a 00 00 30 24 48 00 00 
    60: 00 00 00 00 00 48 00 00 00 00 00 00 00 78 88 88 
    70: 2b 2c e4 05 14 0c 80 c5 00 01 0c ff 20 00 00 00 
    80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    a0: 02 0f 00 00 08 19 00 00 00 00 00 00 00 00 00 00 
    b0: 08 14 3f 08 25 00 18 00 f8 33 83 74 80 00 00 00 
    c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    d0: 00 43 94 06 60 f2 00 00 00 00 00 08 00 00 00 00 
    e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    f0: 5f 55 42 39 35 34 00 00 00 00 00 00 00 00 00 00 

    Hi Carter,

    Pls help to check the dump regsister from 635/638。

    and I've tried to set pattern gen from ti635, pls help to check the pattern color is correct or not, thx!!

  • Hello Lee,


    The pattern generation indicates that the issue is on the CSI input to the serializer. The register dumps indicate that the serializer is not configured correctly. The imager is setup in a 2-lane Configuration, however, the way the serializer is configured it is looking for 4 lanes, which is where the error is being produced. The register that can be used to correctly configure the serializer is 0x02.

    Best,
    Carter Langston

  • Hi Carter.

    Thanks for you helping.

    Could you kindly point out which registers show the serializer is not configured correctly?

    I've checked CSI related registers such as 0x5c~0x5f and 0x60~0x64, but can't find out that the 2-lane configuration from imageer.

    thx!!

  • Hi,

    The imager is setup in a 2-lane configuration and the serializer is configured in a 4-lane configuration. This is where the error is being produced.

    We need the register configuration files of DS90UB635-Q1 and DS90UB638-Q

    our setting as below:

    Output from our camera

    Resolution:1600*1300

    Frame rate: 30 frames

    Output format: YUV 8bit UYVY

    mipi:CSI-2/2Lane

    The 2-lane configuration is from the imager being used.

    This is the register where the serializer CSI-2 Data lane configuration can be set up. Currently the serializer is setup in a 4-lane configuration which does not match the imager.

    Best,

    Carter

  • Hi Cater,

    Thx for helpling.

    After recheck the initial configuration from Lee, the confguration of mipi lanes from imager is actually 4 lane, 0x02 of ti635 was also 4 lane and correct.

    We can also check related csi-2 registers(0x5c~0x5f and 0x60~0x64) dump from ti635 were normal and no error found...

    Is there any info or detail need to recheck ?

    thx 

  • Hi Carter Sir,

    We have TI FPTLINK 953/954 patgen file for OmniVision OV10640, We want change to OmniVision OV490, now we need to know how to setting registers,Thank you so much.

     OmniVision OV490 datasheet as below:

    OV490-Product-Specification-BGA_Version-2-21_Decai.pdf

    //TI FPTLINK 953/954 patgen file for OmniVision OV10640 as below:

    import time
    #reset and initialize OVT10640 from DES using REV-E2 953

    # Set up IDs
    UB954 = 0x7A
    UB953ID = 0x30
    UB953 = 0x18
    OVTID = 0x60
    OVT = 0xC4

    # Set up Port0
    board.WriteI2C(UB954, 0x4C, 0x01)

    # Set up Back Channel Config (0x58)
    board.WriteI2C(UB954,0x58,0x5E)

    # Set up SER ID
    #board.WriteI2C(UB954,0x5B,UB953ID)
    # Set up SER Alias ID
    board.WriteI2C(UB954,0x5C,UB953)
    # Set up Slave/Camera ID
    board.WriteI2C(UB954,0x5D,OVTID)
    # Set up Slave/Camera Alias ID
    board.WriteI2C(UB954,0x65,OVT)

    # Set GPIO2 and GPIO3 to outputs, where GPIO2 = RESET and GPIO3 = PWDN
    board.WriteI2C(UB953,0x0E,0xC0)
    # Set GPIO2 and GPIO3 to High - bring OVT10640 out of power down mode
    board.WriteI2C(UB953,0x0D,0x0C)
    time.sleep(0.1)
    # Bring GPIO3 low to place 10640 in reset
    board.WriteI2C(UB953,0x0D,0x08)
    time.sleep(1)
    # Bring GPIO3 high again to prepare 10640 for initialization
    board.WriteI2C(UB953,0x0D,0x0C)
    print "OVT10640 Reset"

    #Initialize OVT10640
    board.WriteI2C(OVT,0x30, [0x13,0x01])
    time.sleep(0.1)

    board.WriteI2C(OVT,0x32, [0x8a,0x01])
    board.WriteI2C(OVT,0x31, [0x3f,0x80])
    board.WriteI2C(OVT,0x31, [0x32,0x24])
    board.WriteI2C(OVT,0x30, [0x00,0x03])
    board.WriteI2C(OVT,0x30, [0x01,0x34])
    board.WriteI2C(OVT,0x30, [0x02,0x07])
    board.WriteI2C(OVT,0x30, [0x04,0x03])
    board.WriteI2C(OVT,0x30, [0x05,0x34])
    board.WriteI2C(OVT,0x30, [0x06,0x07])
    board.WriteI2C(OVT,0x30, [0x07,0x01])
    board.WriteI2C(OVT,0x30, [0x14,0x03])
    board.WriteI2C(OVT,0x30, [0x23,0x05])
    board.WriteI2C(OVT,0x30, [0x32,0x34])
    board.WriteI2C(OVT,0x30, [0x33,0xfb])
    board.WriteI2C(OVT,0x30, [0x54,0x00])
    board.WriteI2C(OVT,0x30, [0x55,0x0F])
    board.WriteI2C(OVT,0x30, [0x56,0x01])
    board.WriteI2C(OVT,0x30, [0x57,0xFF])
    board.WriteI2C(OVT,0x30, [0x58,0xbf])
    board.WriteI2C(OVT,0x30, [0x59,0x44])
    board.WriteI2C(OVT,0x30, [0x5a,0x02])
    board.WriteI2C(OVT,0x30, [0x5b,0x00])
    board.WriteI2C(OVT,0x30, [0x5c,0x30])
    board.WriteI2C(OVT,0x30, [0x5d,0x1d])
    board.WriteI2C(OVT,0x30, [0x5e,0x16])
    board.WriteI2C(OVT,0x30, [0x5f,0x18])
    board.WriteI2C(OVT,0x30, [0x60,0xf9])
    board.WriteI2C(OVT,0x30, [0x61,0xf0])
    board.WriteI2C(OVT,0x30, [0x8c,0x03])
    board.WriteI2C(OVT,0x30, [0x8f,0x10])
    board.WriteI2C(OVT,0x30, [0x90,0x00])
    board.WriteI2C(OVT,0x30, [0x91,0x0C])
    board.WriteI2C(OVT,0x30, [0xeb,0x00])
    board.WriteI2C(OVT,0x30, [0xa3,0x08])
    board.WriteI2C(OVT,0x30, [0xad,0x03])
    board.WriteI2C(OVT,0x30, [0xae,0x80])
    board.WriteI2C(OVT,0x30, [0xaf,0x80])
    board.WriteI2C(OVT,0x30, [0xb0,0xff])
    board.WriteI2C(OVT,0x30, [0xb1,0x3f])
    board.WriteI2C(OVT,0x30, [0xb2,0x22])
    board.WriteI2C(OVT,0x30, [0xb9,0x22])
    board.WriteI2C(OVT,0x30, [0xbb,0x00])
    board.WriteI2C(OVT,0x30, [0xbc,0x00])
    board.WriteI2C(OVT,0x30, [0xbd,0x00])
    board.WriteI2C(OVT,0x30, [0xbe,0x00])
    board.WriteI2C(OVT,0x30, [0xbf,0x00])
    board.WriteI2C(OVT,0x30, [0xc0,0x00])
    board.WriteI2C(OVT,0x30, [0xc1,0x00])
    board.WriteI2C(OVT,0x30, [0xc2,0x00])
    board.WriteI2C(OVT,0x30, [0xc3,0x00])
    board.WriteI2C(OVT,0x30, [0xc4,0x80])
    board.WriteI2C(OVT,0x30, [0xc5,0x00])
    board.WriteI2C(OVT,0x30, [0xc6,0x80])
    board.WriteI2C(OVT,0x30, [0xc7,0x00])
    board.WriteI2C(OVT,0x30, [0xc8,0x80])
    board.WriteI2C(OVT,0x31, [0x19,0x45])
    board.WriteI2C(OVT,0x31, [0x1a,0x01])
    board.WriteI2C(OVT,0x31, [0x1b,0x4a])
    board.WriteI2C(OVT,0x30, [0x74,0x00])
    board.WriteI2C(OVT,0x30, [0x75,0x00])
    board.WriteI2C(OVT,0x30, [0x76,0x00])
    board.WriteI2C(OVT,0x30, [0x77,0x40])
    board.WriteI2C(OVT,0x30, [0x78,0x05])
    board.WriteI2C(OVT,0x30, [0x79,0x07])
    board.WriteI2C(OVT,0x30, [0x7a,0x03])
    board.WriteI2C(OVT,0x30, [0x7b,0xff])
    board.WriteI2C(OVT,0x30, [0x7c,0x05])
    board.WriteI2C(OVT,0x30, [0x7d,0x08])
    board.WriteI2C(OVT,0x30, [0x7e,0x03])
    board.WriteI2C(OVT,0x30, [0x7f,0xc0])
    board.WriteI2C(OVT,0x30, [0x80,0x05])
    board.WriteI2C(OVT,0x30, [0x81,0xc8])
    board.WriteI2C(OVT,0x30, [0x82,0x03])
    board.WriteI2C(OVT,0x30, [0x83,0xd0])
    board.WriteI2C(OVT,0x30, [0x84,0x00])
    board.WriteI2C(OVT,0x30, [0x85,0x00])
    board.WriteI2C(OVT,0x30, [0x86,0x00])
    board.WriteI2C(OVT,0x30, [0x87,0x00])
    board.WriteI2C(OVT,0x30, [0x88,0x00])
    board.WriteI2C(OVT,0x30, [0x89,0x40])
    board.WriteI2C(OVT,0x30, [0x8d,0x92])
    board.WriteI2C(OVT,0x30, [0x94,0xa5])
    board.WriteI2C(OVT,0x30, [0xe6,0x04])
    board.WriteI2C(OVT,0x30, [0xe7,0x4c])
    board.WriteI2C(OVT,0x30, [0xe8,0x04])
    board.WriteI2C(OVT,0x30, [0xe9,0x4c])
    board.WriteI2C(OVT,0x30, [0xe9,0x05])
    board.WriteI2C(OVT,0x30, [0xec,0x01])
    board.WriteI2C(OVT,0x30, [0xfa,0x06])
    board.WriteI2C(OVT,0x31, [0x20,0x00])
    board.WriteI2C(OVT,0x31, [0x21,0x01])
    board.WriteI2C(OVT,0x31, [0x22,0x00])
    board.WriteI2C(OVT,0x31, [0x27,0x63])
    board.WriteI2C(OVT,0x31, [0x28,0xc0])
    board.WriteI2C(OVT,0x31, [0x29,0x00])
    board.WriteI2C(OVT,0x31, [0xbe,0x00])
    board.WriteI2C(OVT,0x30, [0xa5,0x78])
    board.WriteI2C(OVT,0x30, [0xa6,0x40])
    board.WriteI2C(OVT,0x30, [0xa7,0x78])
    board.WriteI2C(OVT,0x30, [0xa8,0x80])
    board.WriteI2C(OVT,0x30, [0xa9,0x78])
    board.WriteI2C(OVT,0x30, [0xaa,0xe0])
    board.WriteI2C(OVT,0x30, [0xab,0x79])
    board.WriteI2C(OVT,0x30, [0xac,0xc0])
    board.WriteI2C(OVT,0x34, [0x40,0x04])
    board.WriteI2C(OVT,0x34, [0x44,0x28])
    board.WriteI2C(OVT,0x34, [0x4e,0x2c])
    board.WriteI2C(OVT,0x34, [0x57,0x33])
    board.WriteI2C(OVT,0x34, [0x5e,0x38])
    board.WriteI2C(OVT,0x34, [0x61,0xa8])
    board.WriteI2C(OVT,0x70, [0x02,0xaa])
    board.WriteI2C(OVT,0x70, [0x01,0xdf])
    board.WriteI2C(OVT,0x70, [0x48,0x00])
    board.WriteI2C(OVT,0x70, [0x49,0x02])
    board.WriteI2C(OVT,0x70, [0x4a,0x02])
    board.WriteI2C(OVT,0x70, [0x4b,0x00])
    board.WriteI2C(OVT,0x70, [0x4c,0x01])
    board.WriteI2C(OVT,0x70, [0x4d,0x00])
    board.WriteI2C(OVT,0x70, [0x43,0x04])
    board.WriteI2C(OVT,0x70, [0x40,0x3c])
    board.WriteI2C(OVT,0x70, [0x47,0x00])
    board.WriteI2C(OVT,0x70, [0x44,0x01])
    board.WriteI2C(OVT,0x70, [0x00,0x1f])
    board.WriteI2C(OVT,0x70, [0x84,0x01])
    board.WriteI2C(OVT,0x70, [0x85,0x03])
    board.WriteI2C(OVT,0x70, [0x86,0x02])
    board.WriteI2C(OVT,0x70, [0x87,0x40])
    board.WriteI2C(OVT,0x70, [0x88,0x01])
    board.WriteI2C(OVT,0x70, [0x89,0x20])
    board.WriteI2C(OVT,0x70, [0x7f,0x04])
    board.WriteI2C(OVT,0x70, [0x7c,0x3c])
    board.WriteI2C(OVT,0x70, [0x83,0x00])
    board.WriteI2C(OVT,0x70, [0x80,0x01])
    board.WriteI2C(OVT,0x70, [0x03,0xdf])
    board.WriteI2C(OVT,0x70, [0xc0,0x00])
    board.WriteI2C(OVT,0x70, [0xc1,0x02])
    board.WriteI2C(OVT,0x70, [0xc2,0x02])
    board.WriteI2C(OVT,0x70, [0xc3,0x00])
    board.WriteI2C(OVT,0x70, [0xc4,0x01])
    board.WriteI2C(OVT,0x70, [0xc5,0x00])
    board.WriteI2C(OVT,0x70, [0xb8,0x03])
    board.WriteI2C(OVT,0x70, [0xb9,0x98])
    board.WriteI2C(OVT,0x70, [0xbc,0x00])
    board.WriteI2C(OVT,0x70, [0xbd,0x80])
    board.WriteI2C(OVT,0x70, [0x04,0x02])
    board.WriteI2C(OVT,0x70, [0x05,0x00])
    board.WriteI2C(OVT,0x70, [0x06,0x01])
    board.WriteI2C(OVT,0x70, [0x07,0x80])
    board.WriteI2C(OVT,0x70, [0x08,0x02])
    board.WriteI2C(OVT,0x70, [0x09,0x00])
    board.WriteI2C(OVT,0x70, [0x0a,0x04])
    board.WriteI2C(OVT,0x70, [0x0b,0x00])
    board.WriteI2C(OVT,0x70, [0x0e,0x00])
    board.WriteI2C(OVT,0x70, [0x0f,0x60])
    board.WriteI2C(OVT,0x70, [0x1a,0x02])
    board.WriteI2C(OVT,0x70, [0x1b,0x00])
    board.WriteI2C(OVT,0x70, [0x1c,0x01])
    board.WriteI2C(OVT,0x70, [0x1d,0x80])
    board.WriteI2C(OVT,0x70, [0x1e,0x02])
    board.WriteI2C(OVT,0x70, [0x1f,0x00])
    board.WriteI2C(OVT,0x70, [0x20,0x04])
    board.WriteI2C(OVT,0x70, [0x21,0x00])
    board.WriteI2C(OVT,0x70, [0x24,0x00])
    board.WriteI2C(OVT,0x70, [0x25,0x60])
    board.WriteI2C(OVT,0x70, [0xe7,0x00])
    board.WriteI2C(OVT,0x70, [0xe4,0x10])
    board.WriteI2C(OVT,0x70, [0xe5,0x00])
    board.WriteI2C(OVT,0x70, [0xe6,0x00])
    board.WriteI2C(OVT,0x70, [0xeb,0x00])
    board.WriteI2C(OVT,0x70, [0xe8,0x10])
    board.WriteI2C(OVT,0x70, [0xe9,0x00])
    board.WriteI2C(OVT,0x70, [0xea,0x00])
    board.WriteI2C(OVT,0x70, [0xef,0x00])
    board.WriteI2C(OVT,0x70, [0xec,0xfd])
    board.WriteI2C(OVT,0x70, [0xed,0x00])
    board.WriteI2C(OVT,0x70, [0xee,0x00])
    board.WriteI2C(OVT,0x70, [0xeb,0x00])
    board.WriteI2C(OVT,0x70, [0xf0,0xfd])
    board.WriteI2C(OVT,0x70, [0xf1,0x00])
    board.WriteI2C(OVT,0x70, [0xf2,0x00])
    board.WriteI2C(OVT,0x30, [0xfb,0x06])
    board.WriteI2C(OVT,0x30, [0xfc,0x80])
    board.WriteI2C(OVT,0x30, [0xfd,0x02])
    board.WriteI2C(OVT,0x30, [0xfe,0x93])
    board.WriteI2C(OVT,0x60, [0x00,0xc1])
    board.WriteI2C(OVT,0x60, [0x01,0xb9])
    board.WriteI2C(OVT,0x60, [0x02,0xba])
    board.WriteI2C(OVT,0x60, [0x03,0xa4])
    board.WriteI2C(OVT,0x60, [0x04,0xb5])
    board.WriteI2C(OVT,0x60, [0x05,0xa0])
    board.WriteI2C(OVT,0x60, [0x06,0x82])
    board.WriteI2C(OVT,0x60, [0x07,0xa7])
    board.WriteI2C(OVT,0x60, [0x08,0xb7])
    board.WriteI2C(OVT,0x60, [0x09,0x5c])
    board.WriteI2C(OVT,0x60, [0x0a,0x9e])
    board.WriteI2C(OVT,0x60, [0x0b,0xc0])
    board.WriteI2C(OVT,0x60, [0x0c,0xd2])
    board.WriteI2C(OVT,0x60, [0x0d,0x33])
    board.WriteI2C(OVT,0x60, [0x0e,0xcc])
    board.WriteI2C(OVT,0x60, [0x0f,0xde])
    board.WriteI2C(OVT,0x60, [0x10,0xc1])
    board.WriteI2C(OVT,0x60, [0x11,0xab])
    board.WriteI2C(OVT,0x60, [0x12,0xb7])
    board.WriteI2C(OVT,0x60, [0x13,0x00])
    board.WriteI2C(OVT,0x60, [0x14,0x00])
    board.WriteI2C(OVT,0x60, [0x15,0x00])
    board.WriteI2C(OVT,0x60, [0x16,0x00])
    board.WriteI2C(OVT,0x60, [0x17,0x00])
    board.WriteI2C(OVT,0x60, [0x18,0x00])
    board.WriteI2C(OVT,0x60, [0x19,0x00])
    board.WriteI2C(OVT,0x60, [0x1a,0x00])
    board.WriteI2C(OVT,0x60, [0x1b,0x00])
    board.WriteI2C(OVT,0x60, [0x1c,0x00])
    board.WriteI2C(OVT,0x60, [0x1d,0xc5])
    board.WriteI2C(OVT,0x60, [0x1e,0x54])
    board.WriteI2C(OVT,0x60, [0x1f,0x9c])
    board.WriteI2C(OVT,0x60, [0x20,0x94])
    board.WriteI2C(OVT,0x60, [0x21,0x90])
    board.WriteI2C(OVT,0x60, [0x22,0x2a])
    board.WriteI2C(OVT,0x60, [0x23,0x61])
    board.WriteI2C(OVT,0x60, [0x24,0xd2])
    board.WriteI2C(OVT,0x60, [0x25,0xcc])
    board.WriteI2C(OVT,0x60, [0x26,0x02])
    board.WriteI2C(OVT,0x60, [0x27,0x35])
    board.WriteI2C(OVT,0x60, [0x28,0xb1])
    board.WriteI2C(OVT,0x60, [0x29,0xb2])
    board.WriteI2C(OVT,0x60, [0x2a,0xb3])
    board.WriteI2C(OVT,0x60, [0x2b,0xd2])
    board.WriteI2C(OVT,0x60, [0x2c,0xd3])
    board.WriteI2C(OVT,0x60, [0x2d,0x0A])
    board.WriteI2C(OVT,0x60, [0x2e,0x31])
    board.WriteI2C(OVT,0x60, [0x2f,0xcc])
    board.WriteI2C(OVT,0x60, [0x30,0x05])
    board.WriteI2C(OVT,0x60, [0x31,0xc4])
    board.WriteI2C(OVT,0x60, [0x32,0xd2])
    board.WriteI2C(OVT,0x60, [0x33,0xce])
    board.WriteI2C(OVT,0x60, [0x34,0x17])
    board.WriteI2C(OVT,0x60, [0x35,0xcf])
    board.WriteI2C(OVT,0x60, [0x36,0x1d])
    board.WriteI2C(OVT,0x60, [0x37,0xd0])
    board.WriteI2C(OVT,0x60, [0x38,0x23])
    board.WriteI2C(OVT,0x60, [0x39,0xd2])
    board.WriteI2C(OVT,0x60, [0x3a,0xbc])
    board.WriteI2C(OVT,0x60, [0x3b,0xcc])
    board.WriteI2C(OVT,0x60, [0x3c,0x51])
    board.WriteI2C(OVT,0x60, [0x3d,0xc5])
    board.WriteI2C(OVT,0x60, [0x3e,0xd2])
    board.WriteI2C(OVT,0x60, [0x3f,0x00])
    board.WriteI2C(OVT,0x60, [0x40,0x2b])
    board.WriteI2C(OVT,0x60, [0x41,0xcc])
    board.WriteI2C(OVT,0x60, [0x42,0x09])
    board.WriteI2C(OVT,0x60, [0x43,0xd2])
    board.WriteI2C(OVT,0x60, [0x44,0x1a])
    board.WriteI2C(OVT,0x60, [0x45,0xcc])
    board.WriteI2C(OVT,0x60, [0x46,0xeb])
    board.WriteI2C(OVT,0x60, [0x47,0x12])
    board.WriteI2C(OVT,0x60, [0x48,0x2a])
    board.WriteI2C(OVT,0x60, [0x49,0xba])
    board.WriteI2C(OVT,0x60, [0x4a,0x56])
    board.WriteI2C(OVT,0x60, [0x4b,0xd3])
    board.WriteI2C(OVT,0x60, [0x4c,0x27])
    board.WriteI2C(OVT,0x60, [0x4d,0x54])
    board.WriteI2C(OVT,0x60, [0x4e,0xd4])
    board.WriteI2C(OVT,0x60, [0x4f,0xc1])
    board.WriteI2C(OVT,0x60, [0x50,0x26])
    board.WriteI2C(OVT,0x60, [0x51,0xd2])
    board.WriteI2C(OVT,0x60, [0x52,0x01])
    board.WriteI2C(OVT,0x60, [0x53,0xd3])
    board.WriteI2C(OVT,0x60, [0x54,0x2f])
    board.WriteI2C(OVT,0x60, [0x55,0x27])
    board.WriteI2C(OVT,0x60, [0x56,0x08])
    board.WriteI2C(OVT,0x60, [0x57,0x1a])
    board.WriteI2C(OVT,0x60, [0x58,0xcc])
    board.WriteI2C(OVT,0x60, [0x59,0xd9])
    board.WriteI2C(OVT,0x60, [0x5a,0x12])
    board.WriteI2C(OVT,0x60, [0x5b,0x2c])
    board.WriteI2C(OVT,0x60, [0x5c,0x11])
    board.WriteI2C(OVT,0x60, [0x5d,0x60])
    board.WriteI2C(OVT,0x60, [0x5e,0x50])
    board.WriteI2C(OVT,0x60, [0x5f,0xc2])
    board.WriteI2C(OVT,0x60, [0x60,0xb9])
    board.WriteI2C(OVT,0x60, [0x61,0xa5])
    board.WriteI2C(OVT,0x60, [0x62,0xb5])
    board.WriteI2C(OVT,0x60, [0x63,0xa0])
    board.WriteI2C(OVT,0x60, [0x64,0x82])
    board.WriteI2C(OVT,0x60, [0x65,0x5c])
    board.WriteI2C(OVT,0x60, [0x66,0xd4])
    board.WriteI2C(OVT,0x60, [0x67,0xc1])
    board.WriteI2C(OVT,0x60, [0x68,0xd4])
    board.WriteI2C(OVT,0x60, [0x69,0xc1])
    board.WriteI2C(OVT,0x60, [0x6a,0xd3])
    board.WriteI2C(OVT,0x60, [0x6b,0x01])
    board.WriteI2C(OVT,0x60, [0x6c,0x7c])
    board.WriteI2C(OVT,0x60, [0x6d,0x74])
    board.WriteI2C(OVT,0x60, [0x6e,0x00])
    board.WriteI2C(OVT,0x60, [0x6f,0x2a])
    board.WriteI2C(OVT,0x60, [0x70,0x61])
    board.WriteI2C(OVT,0x60, [0x71,0xd2])
    board.WriteI2C(OVT,0x60, [0x72,0xcc])
    board.WriteI2C(OVT,0x60, [0x73,0xde])
    board.WriteI2C(OVT,0x60, [0x74,0xc6])
    board.WriteI2C(OVT,0x60, [0x75,0xd2])
    board.WriteI2C(OVT,0x60, [0x76,0xcc])
    board.WriteI2C(OVT,0x60, [0x77,0x02])
    board.WriteI2C(OVT,0x60, [0x78,0x35])
    board.WriteI2C(OVT,0x60, [0x79,0xd3])
    board.WriteI2C(OVT,0x60, [0x7a,0x0F])
    board.WriteI2C(OVT,0x60, [0x7b,0x31])
    board.WriteI2C(OVT,0x60, [0x7c,0xcc])
    board.WriteI2C(OVT,0x60, [0x7d,0x05])
    board.WriteI2C(OVT,0x60, [0x7e,0xc5])
    board.WriteI2C(OVT,0x60, [0x7f,0xd2])
    board.WriteI2C(OVT,0x60, [0x80,0xbb])
    board.WriteI2C(OVT,0x60, [0x81,0xcc])
    board.WriteI2C(OVT,0x60, [0x82,0x17])
    board.WriteI2C(OVT,0x60, [0x83,0xd2])
    board.WriteI2C(OVT,0x60, [0x84,0xbd])
    board.WriteI2C(OVT,0x60, [0x85,0xcc])
    board.WriteI2C(OVT,0x60, [0x86,0x51])
    board.WriteI2C(OVT,0x60, [0x87,0xc6])
    board.WriteI2C(OVT,0x60, [0x88,0xd2])
    board.WriteI2C(OVT,0x60, [0x89,0x2b])
    board.WriteI2C(OVT,0x60, [0x8a,0xcc])
    board.WriteI2C(OVT,0x60, [0x8b,0x09])
    board.WriteI2C(OVT,0x60, [0x8c,0xd2])
    board.WriteI2C(OVT,0x60, [0x8d,0x1a])
    board.WriteI2C(OVT,0x60, [0x8e,0xcc])
    board.WriteI2C(OVT,0x60, [0x8f,0xeb])
    board.WriteI2C(OVT,0x60, [0x90,0x71])
    board.WriteI2C(OVT,0x60, [0x91,0x12])
    board.WriteI2C(OVT,0x60, [0x92,0x2a])
    board.WriteI2C(OVT,0x60, [0x93,0xd3])
    board.WriteI2C(OVT,0x60, [0x94,0x24])
    board.WriteI2C(OVT,0x60, [0x95,0x00])
    board.WriteI2C(OVT,0x60, [0x96,0x00])
    board.WriteI2C(OVT,0x60, [0x97,0x70])
    board.WriteI2C(OVT,0x60, [0x98,0xca])
    board.WriteI2C(OVT,0x60, [0x99,0x26])
    board.WriteI2C(OVT,0x60, [0x9a,0xd2])
    board.WriteI2C(OVT,0x60, [0x9b,0x01])
    board.WriteI2C(OVT,0x60, [0x9c,0xd3])
    board.WriteI2C(OVT,0x60, [0x9d,0x2f])
    board.WriteI2C(OVT,0x60, [0x9e,0x27])
    board.WriteI2C(OVT,0x60, [0x9f,0x08])
    board.WriteI2C(OVT,0x60, [0xa0,0x1a])
    board.WriteI2C(OVT,0x60, [0xa1,0x12])
    board.WriteI2C(OVT,0x60, [0xa2,0xcc])
    board.WriteI2C(OVT,0x60, [0xa3,0xd9])
    board.WriteI2C(OVT,0x60, [0xa4,0x60])
    board.WriteI2C(OVT,0x60, [0xa5,0x2c])
    board.WriteI2C(OVT,0x60, [0xa6,0x11])
    board.WriteI2C(OVT,0x60, [0xa7,0x50])
    board.WriteI2C(OVT,0x60, [0xa8,0x00])
    board.WriteI2C(OVT,0x60, [0xa9,0x00])
    board.WriteI2C(OVT,0x60, [0xaa,0xc0])
    board.WriteI2C(OVT,0x60, [0xab,0xb9])
    board.WriteI2C(OVT,0x60, [0xac,0xa3])
    board.WriteI2C(OVT,0x60, [0xad,0xb5])
    board.WriteI2C(OVT,0x60, [0xae,0xb5])
    board.WriteI2C(OVT,0x60, [0xaf,0x00])
    board.WriteI2C(OVT,0x60, [0xb0,0xa0])
    board.WriteI2C(OVT,0x60, [0xb1,0x82])
    board.WriteI2C(OVT,0x60, [0xb2,0x5c])
    board.WriteI2C(OVT,0x60, [0xb3,0xd4])
    board.WriteI2C(OVT,0x60, [0xb4,0xa6])
    board.WriteI2C(OVT,0x60, [0xb5,0x9d])
    board.WriteI2C(OVT,0x60, [0xb6,0xd3])
    board.WriteI2C(OVT,0x60, [0xb7,0x34])
    board.WriteI2C(OVT,0x60, [0xb8,0xb0])
    board.WriteI2C(OVT,0x60, [0xb9,0xb7])
    board.WriteI2C(OVT,0x60, [0xba,0x00])
    board.WriteI2C(OVT,0x60, [0xbb,0xd3])
    board.WriteI2C(OVT,0x60, [0xbc,0x0A])
    board.WriteI2C(OVT,0x60, [0xbd,0xd3])
    board.WriteI2C(OVT,0x60, [0xbe,0x10])
    board.WriteI2C(OVT,0x60, [0xbf,0x9c])
    board.WriteI2C(OVT,0x60, [0xc0,0x94])
    board.WriteI2C(OVT,0x60, [0xc1,0x90])
    board.WriteI2C(OVT,0x60, [0xc2,0xc8])
    board.WriteI2C(OVT,0x60, [0xc3,0xba])
    board.WriteI2C(OVT,0x60, [0xc4,0x7c])
    board.WriteI2C(OVT,0x60, [0xc5,0x74])
    board.WriteI2C(OVT,0x60, [0xc6,0x00])
    board.WriteI2C(OVT,0x60, [0xc7,0x2a])
    board.WriteI2C(OVT,0x60, [0xc8,0x61])
    board.WriteI2C(OVT,0x60, [0xc9,0x00])
    board.WriteI2C(OVT,0x60, [0xca,0xd2])
    board.WriteI2C(OVT,0x60, [0xcb,0xcc])
    board.WriteI2C(OVT,0x60, [0xcc,0xde])
    board.WriteI2C(OVT,0x60, [0xcd,0xc4])
    board.WriteI2C(OVT,0x60, [0xce,0xd2])
    board.WriteI2C(OVT,0x60, [0xcf,0xcc])
    board.WriteI2C(OVT,0x60, [0xd0,0x02])
    board.WriteI2C(OVT,0x60, [0xd1,0x35])
    board.WriteI2C(OVT,0x60, [0xd2,0xd2])
    board.WriteI2C(OVT,0x60, [0xd3,0xcc])
    board.WriteI2C(OVT,0x60, [0xd4,0x14])
    board.WriteI2C(OVT,0x60, [0xd5,0xd3])
    board.WriteI2C(OVT,0x60, [0xd6,0x09])
    board.WriteI2C(OVT,0x60, [0xd7,0x31])
    board.WriteI2C(OVT,0x60, [0xd8,0xd2])
    board.WriteI2C(OVT,0x60, [0xd9,0xcc])
    board.WriteI2C(OVT,0x60, [0xda,0x05])
    board.WriteI2C(OVT,0x60, [0xdb,0xd2])
    board.WriteI2C(OVT,0x60, [0xdc,0xbb])
    board.WriteI2C(OVT,0x60, [0xdd,0xcc])
    board.WriteI2C(OVT,0x60, [0xde,0x19])
    board.WriteI2C(OVT,0x60, [0xdf,0xd2])
    board.WriteI2C(OVT,0x60, [0xe0,0xbe])
    board.WriteI2C(OVT,0x60, [0xe1,0xce])
    board.WriteI2C(OVT,0x60, [0xe2,0x51])
    board.WriteI2C(OVT,0x60, [0xe3,0xcf])
    board.WriteI2C(OVT,0x60, [0xe4,0x54])
    board.WriteI2C(OVT,0x60, [0xe5,0xd0])
    board.WriteI2C(OVT,0x60, [0xe6,0x58])
    board.WriteI2C(OVT,0x60, [0xe7,0xd3])
    board.WriteI2C(OVT,0x60, [0xe8,0x01])
    board.WriteI2C(OVT,0x60, [0xe9,0x2b])
    board.WriteI2C(OVT,0x60, [0xea,0xcc])
    board.WriteI2C(OVT,0x60, [0xeb,0x09])
    board.WriteI2C(OVT,0x60, [0xec,0xd2])
    board.WriteI2C(OVT,0x60, [0xed,0xd9])
    board.WriteI2C(OVT,0x60, [0xee,0xd3])
    board.WriteI2C(OVT,0x60, [0xef,0xda])
    board.WriteI2C(OVT,0x60, [0xf0,0xd7])
    board.WriteI2C(OVT,0x60, [0xf1,0x1a])
    board.WriteI2C(OVT,0x60, [0xf2,0xcc])
    board.WriteI2C(OVT,0x60, [0xf3,0xeb])
    board.WriteI2C(OVT,0x60, [0xf4,0x12])
    board.WriteI2C(OVT,0x60, [0xf5,0xd4])
    board.WriteI2C(OVT,0x60, [0xf6,0xaf])
    board.WriteI2C(OVT,0x60, [0xf7,0x27])
    board.WriteI2C(OVT,0x60, [0xf8,0x00])
    board.WriteI2C(OVT,0x60, [0xf9,0xd2])
    board.WriteI2C(OVT,0x60, [0xfa,0xd3])
    board.WriteI2C(OVT,0x60, [0xfb,0x3b])
    board.WriteI2C(OVT,0x60, [0xfc,0xd9])
    board.WriteI2C(OVT,0x60, [0xfd,0xe0])
    board.WriteI2C(OVT,0x60, [0xfe,0xda])
    board.WriteI2C(OVT,0x60, [0xff,0xe4])
    board.WriteI2C(OVT,0x61, [0x00,0x1a])
    board.WriteI2C(OVT,0x61, [0x01,0x12])
    board.WriteI2C(OVT,0x61, [0x02,0xcc])
    board.WriteI2C(OVT,0x61, [0x03,0xd9])
    board.WriteI2C(OVT,0x61, [0x04,0x60])
    board.WriteI2C(OVT,0x61, [0x05,0x10])
    board.WriteI2C(OVT,0x61, [0x06,0x2c])
    board.WriteI2C(OVT,0x61, [0x07,0x5d])
    board.WriteI2C(OVT,0x61, [0x08,0xd3])
    board.WriteI2C(OVT,0x61, [0x09,0x0A])
    board.WriteI2C(OVT,0x61, [0x0a,0x5c])
    board.WriteI2C(OVT,0x61, [0x0b,0x01])
    board.WriteI2C(OVT,0x61, [0x0c,0x50])
    board.WriteI2C(OVT,0x61, [0x0d,0x11])
    board.WriteI2C(OVT,0x61, [0x0e,0xd6])
    board.WriteI2C(OVT,0x61, [0x0f,0xb7])
    board.WriteI2C(OVT,0x61, [0x10,0xb9])
    board.WriteI2C(OVT,0x61, [0x11,0xba])
    board.WriteI2C(OVT,0x61, [0x12,0xaf])
    board.WriteI2C(OVT,0x61, [0x13,0xdc])
    board.WriteI2C(OVT,0x61, [0x14,0xcb])
    board.WriteI2C(OVT,0x61, [0x15,0xc3])
    board.WriteI2C(OVT,0x61, [0x16,0xb9])
    board.WriteI2C(OVT,0x61, [0x17,0xa4])
    board.WriteI2C(OVT,0x61, [0x18,0xb5])
    board.WriteI2C(OVT,0x61, [0x19,0x5c])
    board.WriteI2C(OVT,0x61, [0x1a,0x12])
    board.WriteI2C(OVT,0x61, [0x1b,0x2a])
    board.WriteI2C(OVT,0x61, [0x1c,0x61])
    board.WriteI2C(OVT,0x61, [0x1d,0xd2])
    board.WriteI2C(OVT,0x61, [0x1e,0xcc])
    board.WriteI2C(OVT,0x61, [0x1f,0xe2])
    board.WriteI2C(OVT,0x61, [0x20,0x35])
    board.WriteI2C(OVT,0x61, [0x21,0xc7])
    board.WriteI2C(OVT,0x61, [0x22,0xd2])
    board.WriteI2C(OVT,0x61, [0x23,0x31])
    board.WriteI2C(OVT,0x61, [0x24,0xcc])
    board.WriteI2C(OVT,0x61, [0x25,0x05])
    board.WriteI2C(OVT,0x61, [0x26,0xc6])
    board.WriteI2C(OVT,0x61, [0x27,0xbb])
    board.WriteI2C(OVT,0x61, [0x28,0xd2])
    board.WriteI2C(OVT,0x61, [0x29,0xcc])
    board.WriteI2C(OVT,0x61, [0x2a,0x17])
    board.WriteI2C(OVT,0x61, [0x2b,0xd2])
    board.WriteI2C(OVT,0x61, [0x2c,0xbe])
    board.WriteI2C(OVT,0x61, [0x2d,0xcc])
    board.WriteI2C(OVT,0x61, [0x2e,0x51])
    board.WriteI2C(OVT,0x61, [0x2f,0xc7])
    board.WriteI2C(OVT,0x61, [0x30,0xd2])
    board.WriteI2C(OVT,0x61, [0x31,0xcc])
    board.WriteI2C(OVT,0x61, [0x32,0x09])
    board.WriteI2C(OVT,0x61, [0x33,0xb4])
    board.WriteI2C(OVT,0x61, [0x34,0xb7])
    board.WriteI2C(OVT,0x61, [0x35,0x94])
    board.WriteI2C(OVT,0x61, [0x36,0xd2])
    board.WriteI2C(OVT,0x61, [0x37,0x12])
    board.WriteI2C(OVT,0x61, [0x38,0x26])
    board.WriteI2C(OVT,0x61, [0x39,0x42])
    board.WriteI2C(OVT,0x61, [0x3a,0x46])
    board.WriteI2C(OVT,0x61, [0x3b,0x42])
    board.WriteI2C(OVT,0x61, [0x3c,0xd3])
    board.WriteI2C(OVT,0x61, [0x3d,0x20])
    board.WriteI2C(OVT,0x61, [0x3e,0x27])
    board.WriteI2C(OVT,0x61, [0x3f,0x00])
    board.WriteI2C(OVT,0x61, [0x40,0x1a])
    board.WriteI2C(OVT,0x61, [0x41,0xcc])
    board.WriteI2C(OVT,0x61, [0x42,0xd9])
    board.WriteI2C(OVT,0x61, [0x43,0x60])
    board.WriteI2C(OVT,0x61, [0x44,0x2c])
    board.WriteI2C(OVT,0x61, [0x45,0x11])
    board.WriteI2C(OVT,0x61, [0x46,0x40])
    board.WriteI2C(OVT,0x61, [0x47,0x50])
    board.WriteI2C(OVT,0x61, [0x48,0xb8])
    board.WriteI2C(OVT,0x61, [0x49,0x90])
    board.WriteI2C(OVT,0x61, [0x4a,0xd5])
    board.WriteI2C(OVT,0x61, [0x4b,0x00])
    board.WriteI2C(OVT,0x61, [0x4c,0xba])
    board.WriteI2C(OVT,0x61, [0x4d,0x00])
    board.WriteI2C(OVT,0x61, [0x4e,0x00])
    board.WriteI2C(OVT,0x61, [0x4f,0x00])
    board.WriteI2C(OVT,0x61, [0x50,0x00])
    board.WriteI2C(OVT,0x61, [0x51,0x00])
    board.WriteI2C(OVT,0x61, [0x52,0x00])
    board.WriteI2C(OVT,0x61, [0x53,0xaa])
    board.WriteI2C(OVT,0x61, [0x54,0xb7])
    board.WriteI2C(OVT,0x61, [0x55,0x00])
    board.WriteI2C(OVT,0x61, [0x56,0x00])
    board.WriteI2C(OVT,0x61, [0x57,0x00])
    board.WriteI2C(OVT,0x61, [0x58,0x00])
    board.WriteI2C(OVT,0x61, [0x59,0xa6])
    board.WriteI2C(OVT,0x61, [0x5a,0xb7])
    board.WriteI2C(OVT,0x61, [0x5b,0x00])
    board.WriteI2C(OVT,0x61, [0x5c,0xd5])
    board.WriteI2C(OVT,0x61, [0x5d,0x00])
    board.WriteI2C(OVT,0x61, [0x5e,0x71])
    board.WriteI2C(OVT,0x61, [0x5f,0xd3])
    board.WriteI2C(OVT,0x61, [0x60,0x3e])
    board.WriteI2C(OVT,0x61, [0x61,0xba])
    board.WriteI2C(OVT,0x61, [0x62,0x00])
    board.WriteI2C(OVT,0x61, [0x63,0x00])
    board.WriteI2C(OVT,0x61, [0x64,0x00])
    board.WriteI2C(OVT,0x61, [0x65,0x00])
    board.WriteI2C(OVT,0x61, [0x66,0xd3])
    board.WriteI2C(OVT,0x61, [0x67,0x10])
    board.WriteI2C(OVT,0x61, [0x68,0x70])
    board.WriteI2C(OVT,0x61, [0x69,0x00])
    board.WriteI2C(OVT,0x61, [0x6a,0x00])
    board.WriteI2C(OVT,0x61, [0x6b,0x00])
    board.WriteI2C(OVT,0x61, [0x6c,0x00])
    board.WriteI2C(OVT,0x61, [0x6d,0xd5])
    board.WriteI2C(OVT,0x61, [0x6e,0xba])
    board.WriteI2C(OVT,0x61, [0x6f,0xb0])
    board.WriteI2C(OVT,0x61, [0x70,0xb7])
    board.WriteI2C(OVT,0x61, [0x71,0x00])
    board.WriteI2C(OVT,0x61, [0x72,0x9d])
    board.WriteI2C(OVT,0x61, [0x73,0xd3])
    board.WriteI2C(OVT,0x61, [0x74,0x0A])
    board.WriteI2C(OVT,0x61, [0x75,0x9d])
    board.WriteI2C(OVT,0x61, [0x76,0x9d])
    board.WriteI2C(OVT,0x61, [0x77,0xd3])
    board.WriteI2C(OVT,0x61, [0x78,0x10])
    board.WriteI2C(OVT,0x61, [0x79,0x9c])
    board.WriteI2C(OVT,0x61, [0x7a,0x94])
    board.WriteI2C(OVT,0x61, [0x7b,0x90])
    board.WriteI2C(OVT,0x61, [0x7c,0xc8])
    board.WriteI2C(OVT,0x61, [0x7d,0xba])
    board.WriteI2C(OVT,0x61, [0x7e,0xd2])
    board.WriteI2C(OVT,0x61, [0x7f,0x30])
    board.WriteI2C(OVT,0x61, [0x80,0xd5])
    board.WriteI2C(OVT,0x61, [0x81,0x00])
    board.WriteI2C(OVT,0x61, [0x82,0xba])
    board.WriteI2C(OVT,0x61, [0x83,0xb0])
    board.WriteI2C(OVT,0x61, [0x84,0xb7])
    board.WriteI2C(OVT,0x61, [0x85,0x00])
    board.WriteI2C(OVT,0x61, [0x86,0x9d])
    board.WriteI2C(OVT,0x61, [0x87,0xd3])
    board.WriteI2C(OVT,0x61, [0x88,0x0A])
    board.WriteI2C(OVT,0x61, [0x89,0x9d])
    board.WriteI2C(OVT,0x61, [0x8a,0x9d])
    board.WriteI2C(OVT,0x61, [0x8b,0xd3])
    board.WriteI2C(OVT,0x61, [0x8c,0x10])
    board.WriteI2C(OVT,0x61, [0x8d,0x9c])
    board.WriteI2C(OVT,0x61, [0x8e,0x94])
    board.WriteI2C(OVT,0x61, [0x8f,0x90])
    board.WriteI2C(OVT,0x61, [0x90,0xc8])
    board.WriteI2C(OVT,0x61, [0x91,0xba])
    board.WriteI2C(OVT,0x61, [0x92,0xd5])
    board.WriteI2C(OVT,0x61, [0x93,0x00])
    board.WriteI2C(OVT,0x61, [0x94,0xba])
    board.WriteI2C(OVT,0x61, [0x95,0xb0])
    board.WriteI2C(OVT,0x61, [0x96,0xb7])
    board.WriteI2C(OVT,0x61, [0x97,0x00])
    board.WriteI2C(OVT,0x61, [0x98,0x9d])
    board.WriteI2C(OVT,0x61, [0x99,0xd3])
    board.WriteI2C(OVT,0x61, [0x9a,0x0A])
    board.WriteI2C(OVT,0x61, [0x9b,0x9d])
    board.WriteI2C(OVT,0x61, [0x9c,0x9d])
    board.WriteI2C(OVT,0x61, [0x9d,0xd3])
    board.WriteI2C(OVT,0x61, [0x9e,0x10])
    board.WriteI2C(OVT,0x61, [0x9f,0x9c])
    board.WriteI2C(OVT,0x61, [0xa0,0x94])
    board.WriteI2C(OVT,0x61, [0xa1,0x90])
    board.WriteI2C(OVT,0x61, [0xa2,0xc9])
    board.WriteI2C(OVT,0x61, [0xa3,0xba])
    board.WriteI2C(OVT,0x61, [0xa4,0xd5])
    board.WriteI2C(OVT,0x61, [0xa5,0x00])
    board.WriteI2C(OVT,0x61, [0xa6,0x00])
    board.WriteI2C(OVT,0x61, [0xa7,0x1a])
    board.WriteI2C(OVT,0x61, [0xa8,0x12])
    board.WriteI2C(OVT,0x61, [0xa9,0xcc])
    board.WriteI2C(OVT,0x61, [0xaa,0xeb])
    board.WriteI2C(OVT,0x61, [0xab,0xd2])
    board.WriteI2C(OVT,0x61, [0xac,0xd5])
    board.WriteI2C(OVT,0x61, [0xad,0x00])
    board.WriteI2C(OVT,0x61, [0xae,0x00])
    board.WriteI2C(OVT,0x61, [0xaf,0x1a])
    board.WriteI2C(OVT,0x61, [0xb0,0x12])
    board.WriteI2C(OVT,0x61, [0xb1,0xcc])
    board.WriteI2C(OVT,0x61, [0xb2,0xeb])
    board.WriteI2C(OVT,0x61, [0xb3,0xd2])
    board.WriteI2C(OVT,0x61, [0xb4,0x1a])
    board.WriteI2C(OVT,0x61, [0xb5,0x12])
    board.WriteI2C(OVT,0x61, [0xb6,0xcc])
    board.WriteI2C(OVT,0x61, [0xb7,0xeb])
    board.WriteI2C(OVT,0x61, [0xb8,0xd2])
    board.WriteI2C(OVT,0x61, [0xb9,0x1a])
    board.WriteI2C(OVT,0x61, [0xba,0x12])
    board.WriteI2C(OVT,0x61, [0xbb,0xcc])
    board.WriteI2C(OVT,0x61, [0xbc,0xeb])
    board.WriteI2C(OVT,0x61, [0xbd,0xd2])
    board.WriteI2C(OVT,0x61, [0xbe,0xd5])
    board.WriteI2C(OVT,0x61, [0xbf,0x00])
    board.WriteI2C(OVT,0x61, [0xc0,0x00])
    board.WriteI2C(OVT,0x61, [0xc1,0x1a])
    board.WriteI2C(OVT,0x61, [0xc2,0xcc])
    board.WriteI2C(OVT,0x61, [0xc3,0xf0])
    board.WriteI2C(OVT,0x61, [0xc4,0x12])
    board.WriteI2C(OVT,0x61, [0xc5,0xd2])
    board.WriteI2C(OVT,0x61, [0xc6,0xd5])
    board.WriteI2C(OVT,0x61, [0xc7,0x00])
    board.WriteI2C(OVT,0x61, [0xc8,0x00])
    board.WriteI2C(OVT,0x61, [0xc9,0x1a])
    board.WriteI2C(OVT,0x61, [0xca,0xcc])
    board.WriteI2C(OVT,0x61, [0xcb,0xf0])
    board.WriteI2C(OVT,0x61, [0xcc,0x12])
    board.WriteI2C(OVT,0x61, [0xcd,0xd2])
    board.WriteI2C(OVT,0x61, [0xce,0x1a])
    board.WriteI2C(OVT,0x61, [0xcf,0xcc])
    board.WriteI2C(OVT,0x61, [0xd0,0xf0])
    board.WriteI2C(OVT,0x61, [0xd1,0x12])
    board.WriteI2C(OVT,0x61, [0xd2,0xd2])
    board.WriteI2C(OVT,0x61, [0xd3,0x1a])
    board.WriteI2C(OVT,0x61, [0xd4,0xcc])
    board.WriteI2C(OVT,0x61, [0xd5,0xf0])
    board.WriteI2C(OVT,0x61, [0xd6,0x12])
    board.WriteI2C(OVT,0x61, [0xd7,0xd2])
    board.WriteI2C(OVT,0x61, [0xd8,0xd5])
    board.WriteI2C(OVT,0x64, [0x00,0x00])
    board.WriteI2C(OVT,0x64, [0x01,0x08])
    board.WriteI2C(OVT,0x64, [0x02,0x00])
    board.WriteI2C(OVT,0x64, [0x03,0xff])
    board.WriteI2C(OVT,0x64, [0x04,0x04])
    board.WriteI2C(OVT,0x64, [0x05,0x61])
    board.WriteI2C(OVT,0x64, [0x06,0x04])
    board.WriteI2C(OVT,0x64, [0x07,0x70])
    board.WriteI2C(OVT,0x64, [0x08,0x00])
    board.WriteI2C(OVT,0x64, [0x09,0xff])
    board.WriteI2C(OVT,0x64, [0x0a,0x05])
    board.WriteI2C(OVT,0x64, [0x0b,0x14])
    board.WriteI2C(OVT,0x64, [0x0c,0x04])
    board.WriteI2C(OVT,0x64, [0x0d,0x70])
    board.WriteI2C(OVT,0x64, [0x0e,0x05])
    board.WriteI2C(OVT,0x64, [0x0f,0x74])
    board.WriteI2C(OVT,0x64, [0x10,0x00])
    board.WriteI2C(OVT,0x64, [0x11,0xff])
    board.WriteI2C(OVT,0x64, [0x12,0x05])
    board.WriteI2C(OVT,0x64, [0x13,0x54])
    board.WriteI2C(OVT,0x64, [0x14,0x04])
    board.WriteI2C(OVT,0x64, [0x15,0x30])
    board.WriteI2C(OVT,0x64, [0x16,0x05])
    board.WriteI2C(OVT,0x64, [0x17,0x44])
    board.WriteI2C(OVT,0x64, [0x18,0x05])
    board.WriteI2C(OVT,0x64, [0x19,0x47])
    board.WriteI2C(OVT,0x64, [0x1a,0x00])
    board.WriteI2C(OVT,0x64, [0x1b,0xff])
    board.WriteI2C(OVT,0x64, [0x1c,0x04])
    board.WriteI2C(OVT,0x64, [0x1d,0x31])
    board.WriteI2C(OVT,0x64, [0x1e,0x04])
    board.WriteI2C(OVT,0x64, [0x1f,0x30])
    board.WriteI2C(OVT,0x64, [0x20,0x00])
    board.WriteI2C(OVT,0x64, [0x21,0xff])
    board.WriteI2C(OVT,0x64, [0x22,0x04])
    board.WriteI2C(OVT,0x64, [0x23,0x20])
    board.WriteI2C(OVT,0x64, [0x24,0x05])
    board.WriteI2C(OVT,0x64, [0x25,0x06])
    board.WriteI2C(OVT,0x64, [0x26,0x00])
    board.WriteI2C(OVT,0x64, [0x27,0xff])
    board.WriteI2C(OVT,0x64, [0x28,0x08])
    board.WriteI2C(OVT,0x64, [0x29,0x29])
    board.WriteI2C(OVT,0x64, [0x2a,0x08])
    board.WriteI2C(OVT,0x64, [0x2b,0x30])
    board.WriteI2C(OVT,0x64, [0x2c,0x00])
    board.WriteI2C(OVT,0x64, [0x2d,0xff])
    board.WriteI2C(OVT,0x64, [0x2e,0x08])
    board.WriteI2C(OVT,0x64, [0x2f,0x29])
    board.WriteI2C(OVT,0x64, [0x30,0x08])
    board.WriteI2C(OVT,0x64, [0x31,0x30])
    board.WriteI2C(OVT,0x64, [0x32,0x06])
    board.WriteI2C(OVT,0x64, [0x33,0x20])
    board.WriteI2C(OVT,0x64, [0x34,0x07])
    board.WriteI2C(OVT,0x64, [0x35,0x00])
    board.WriteI2C(OVT,0x64, [0x36,0x08])
    board.WriteI2C(OVT,0x64, [0x37,0x3f])
    board.WriteI2C(OVT,0x64, [0x38,0x00])
    board.WriteI2C(OVT,0x64, [0x39,0xff])
    board.WriteI2C(OVT,0x64, [0x3a,0x08])
    board.WriteI2C(OVT,0x64, [0x3b,0x29])
    board.WriteI2C(OVT,0x64, [0x3c,0x08])
    board.WriteI2C(OVT,0x64, [0x3d,0x35])
    board.WriteI2C(OVT,0x64, [0x3e,0x06])
    board.WriteI2C(OVT,0x64, [0x3f,0x10])
    board.WriteI2C(OVT,0x64, [0x40,0x07])
    board.WriteI2C(OVT,0x64, [0x41,0x00])
    board.WriteI2C(OVT,0x64, [0x42,0x08])
    board.WriteI2C(OVT,0x64, [0x43,0x3f])
    board.WriteI2C(OVT,0x64, [0x44,0x00])
    board.WriteI2C(OVT,0x64, [0x45,0xff])
    board.WriteI2C(OVT,0x64, [0x46,0x08])
    board.WriteI2C(OVT,0x64, [0x47,0x29])
    board.WriteI2C(OVT,0x64, [0x48,0x08])
    board.WriteI2C(OVT,0x64, [0x49,0x3a])
    board.WriteI2C(OVT,0x64, [0x4a,0x06])
    board.WriteI2C(OVT,0x64, [0x4b,0x00])
    board.WriteI2C(OVT,0x64, [0x4c,0x07])
    board.WriteI2C(OVT,0x64, [0x4d,0x00])
    board.WriteI2C(OVT,0x64, [0x4e,0x08])
    board.WriteI2C(OVT,0x64, [0x4f,0x3f])
    board.WriteI2C(OVT,0x64, [0x50,0x00])
    board.WriteI2C(OVT,0x64, [0x51,0xff])
    board.WriteI2C(OVT,0x64, [0x52,0x06])
    board.WriteI2C(OVT,0x64, [0x53,0x00])
    board.WriteI2C(OVT,0x64, [0x54,0x07])
    board.WriteI2C(OVT,0x64, [0x55,0x05])
    board.WriteI2C(OVT,0x64, [0x56,0x01])
    board.WriteI2C(OVT,0x64, [0x57,0xaf])
    board.WriteI2C(OVT,0x64, [0x58,0x01])
    board.WriteI2C(OVT,0x64, [0x59,0x0F])
    board.WriteI2C(OVT,0x64, [0x5a,0x01])
    board.WriteI2C(OVT,0x64, [0x5b,0x90])
    board.WriteI2C(OVT,0x64, [0x5c,0x01])
    board.WriteI2C(OVT,0x64, [0x5d,0xc8])
    board.WriteI2C(OVT,0x64, [0x5e,0x00])
    board.WriteI2C(OVT,0x64, [0x5f,0xff])
    board.WriteI2C(OVT,0x64, [0x60,0x01])
    board.WriteI2C(OVT,0x64, [0x61,0xac])
    board.WriteI2C(OVT,0x64, [0x62,0x01])
    board.WriteI2C(OVT,0x64, [0x63,0x0C])
    board.WriteI2C(OVT,0x64, [0x64,0x01])
    board.WriteI2C(OVT,0x64, [0x65,0x90])
    board.WriteI2C(OVT,0x64, [0x66,0x01])
    board.WriteI2C(OVT,0x64, [0x67,0xe8])
    board.WriteI2C(OVT,0x64, [0x68,0x00])
    board.WriteI2C(OVT,0x64, [0x69,0xff])
    board.WriteI2C(OVT,0x64, [0x6a,0x01])
    board.WriteI2C(OVT,0x64, [0x6b,0xad])
    board.WriteI2C(OVT,0x64, [0x6c,0x01])
    board.WriteI2C(OVT,0x64, [0x6d,0x0D])
    board.WriteI2C(OVT,0x64, [0x6e,0x01])
    board.WriteI2C(OVT,0x64, [0x6f,0x90])
    board.WriteI2C(OVT,0x64, [0x70,0x01])
    board.WriteI2C(OVT,0x64, [0x71,0xe8])
    board.WriteI2C(OVT,0x64, [0x72,0x00])
    board.WriteI2C(OVT,0x64, [0x73,0xff])
    board.WriteI2C(OVT,0x64, [0x74,0x01])
    board.WriteI2C(OVT,0x64, [0x75,0xae])
    board.WriteI2C(OVT,0x64, [0x76,0x01])
    board.WriteI2C(OVT,0x64, [0x77,0x0E])
    board.WriteI2C(OVT,0x64, [0x78,0x01])
    board.WriteI2C(OVT,0x64, [0x79,0x90])
    board.WriteI2C(OVT,0x64, [0x7a,0x01])
    board.WriteI2C(OVT,0x64, [0x7b,0xe8])
    board.WriteI2C(OVT,0x64, [0x7c,0x00])
    board.WriteI2C(OVT,0x64, [0x7d,0xff])
    board.WriteI2C(OVT,0x64, [0x7e,0x01])
    board.WriteI2C(OVT,0x64, [0x7f,0xb0])
    board.WriteI2C(OVT,0x64, [0x80,0x01])
    board.WriteI2C(OVT,0x64, [0x81,0xb1])
    board.WriteI2C(OVT,0x64, [0x82,0x01])
    board.WriteI2C(OVT,0x64, [0x83,0xb2])
    board.WriteI2C(OVT,0x64, [0x84,0x01])
    board.WriteI2C(OVT,0x64, [0x85,0xb3])
    board.WriteI2C(OVT,0x64, [0x86,0x01])
    board.WriteI2C(OVT,0x64, [0x87,0xb4])
    board.WriteI2C(OVT,0x64, [0x88,0x01])
    board.WriteI2C(OVT,0x64, [0x89,0xb5])
    board.WriteI2C(OVT,0x64, [0x8a,0x01])
    board.WriteI2C(OVT,0x64, [0x8b,0xb6])
    board.WriteI2C(OVT,0x64, [0x8c,0x01])
    board.WriteI2C(OVT,0x64, [0x8d,0xb7])
    board.WriteI2C(OVT,0x64, [0x8e,0x01])
    board.WriteI2C(OVT,0x64, [0x8f,0xb8])
    board.WriteI2C(OVT,0x64, [0x90,0x01])
    board.WriteI2C(OVT,0x64, [0x91,0xb9])
    board.WriteI2C(OVT,0x64, [0x92,0x01])
    board.WriteI2C(OVT,0x64, [0x93,0xba])
    board.WriteI2C(OVT,0x64, [0x94,0x01])
    board.WriteI2C(OVT,0x64, [0x95,0xbb])
    board.WriteI2C(OVT,0x64, [0x96,0x01])
    board.WriteI2C(OVT,0x64, [0x97,0xbc])
    board.WriteI2C(OVT,0x64, [0x98,0x01])
    board.WriteI2C(OVT,0x64, [0x99,0xbd])
    board.WriteI2C(OVT,0x64, [0x9a,0x01])
    board.WriteI2C(OVT,0x64, [0x9b,0xbe])
    board.WriteI2C(OVT,0x64, [0x9c,0x01])
    board.WriteI2C(OVT,0x64, [0x9d,0xbf])
    board.WriteI2C(OVT,0x64, [0x9e,0x01])
    board.WriteI2C(OVT,0x64, [0x9f,0xc0])
    board.WriteI2C(OVT,0x64, [0xa0,0x00])
    board.WriteI2C(OVT,0x64, [0xa1,0xff])
    board.WriteI2C(OVT,0x64, [0xa2,0x06])
    board.WriteI2C(OVT,0x64, [0xa3,0x00])
    board.WriteI2C(OVT,0x64, [0xa4,0x01])
    board.WriteI2C(OVT,0x64, [0xa5,0xf6])
    board.WriteI2C(OVT,0x64, [0xa6,0x00])
    board.WriteI2C(OVT,0x64, [0xa7,0xff])
    board.WriteI2C(OVT,0x64, [0xa8,0x06])
    board.WriteI2C(OVT,0x64, [0xa9,0x10])
    board.WriteI2C(OVT,0x64, [0xaa,0x01])
    board.WriteI2C(OVT,0x64, [0xab,0xf6])
    board.WriteI2C(OVT,0x64, [0xac,0x06])
    board.WriteI2C(OVT,0x64, [0xad,0x00])
    board.WriteI2C(OVT,0x64, [0xae,0x00])
    board.WriteI2C(OVT,0x64, [0xaf,0xff])
    board.WriteI2C(OVT,0x64, [0xb0,0x06])
    board.WriteI2C(OVT,0x64, [0xb1,0x20])
    board.WriteI2C(OVT,0x64, [0xb2,0x01])
    board.WriteI2C(OVT,0x64, [0xb3,0xf6])
    board.WriteI2C(OVT,0x64, [0xb4,0x06])
    board.WriteI2C(OVT,0x64, [0xb5,0x00])
    board.WriteI2C(OVT,0x64, [0xb6,0x00])
    board.WriteI2C(OVT,0x64, [0xb7,0xff])
    board.WriteI2C(OVT,0x64, [0xb8,0x04])
    board.WriteI2C(OVT,0x64, [0xb9,0x31])
    board.WriteI2C(OVT,0x64, [0xba,0x04])
    board.WriteI2C(OVT,0x64, [0xbb,0x30])
    board.WriteI2C(OVT,0x64, [0xbc,0x01])
    board.WriteI2C(OVT,0x64, [0xbd,0x20])
    board.WriteI2C(OVT,0x64, [0xbe,0x01])
    board.WriteI2C(OVT,0x64, [0xbf,0x31])
    board.WriteI2C(OVT,0x64, [0xc0,0x01])
    board.WriteI2C(OVT,0x64, [0xc1,0x32])
    board.WriteI2C(OVT,0x64, [0xc2,0x01])
    board.WriteI2C(OVT,0x64, [0xc3,0x33])
    board.WriteI2C(OVT,0x64, [0xc4,0x01])
    board.WriteI2C(OVT,0x64, [0xc5,0x34])
    board.WriteI2C(OVT,0x64, [0xc6,0x01])
    board.WriteI2C(OVT,0x64, [0xc7,0x35])
    board.WriteI2C(OVT,0x64, [0xc8,0x01])
    board.WriteI2C(OVT,0x64, [0xc9,0x36])
    board.WriteI2C(OVT,0x64, [0xca,0x01])
    board.WriteI2C(OVT,0x64, [0xcb,0x37])
    board.WriteI2C(OVT,0x64, [0xcc,0x01])
    board.WriteI2C(OVT,0x64, [0xcd,0x38])
    board.WriteI2C(OVT,0x64, [0xce,0x01])
    board.WriteI2C(OVT,0x64, [0xcf,0x39])
    board.WriteI2C(OVT,0x64, [0xd0,0x01])
    board.WriteI2C(OVT,0x64, [0xd1,0x3a])
    board.WriteI2C(OVT,0x64, [0xd2,0x01])
    board.WriteI2C(OVT,0x64, [0xd3,0x3b])
    board.WriteI2C(OVT,0x64, [0xd4,0x01])
    board.WriteI2C(OVT,0x64, [0xd5,0x3c])
    board.WriteI2C(OVT,0x64, [0xd6,0x01])
    board.WriteI2C(OVT,0x64, [0xd7,0x3d])
    board.WriteI2C(OVT,0x64, [0xd8,0x01])
    board.WriteI2C(OVT,0x64, [0xd9,0x3e])
    board.WriteI2C(OVT,0x64, [0xda,0x01])
    board.WriteI2C(OVT,0x64, [0xdb,0x3f])
    board.WriteI2C(OVT,0x64, [0xdc,0x02])
    board.WriteI2C(OVT,0x64, [0xdd,0xa0])
    board.WriteI2C(OVT,0x64, [0xde,0x00])
    board.WriteI2C(OVT,0x64, [0xdf,0xff])
    board.WriteI2C(OVT,0x64, [0xe0,0x04])
    board.WriteI2C(OVT,0x64, [0xe1,0x31])
    board.WriteI2C(OVT,0x64, [0xe2,0x04])
    board.WriteI2C(OVT,0x64, [0xe3,0x30])
    board.WriteI2C(OVT,0x64, [0xe4,0x01])
    board.WriteI2C(OVT,0x64, [0xe5,0x00])
    board.WriteI2C(OVT,0x64, [0xe6,0x01])
    board.WriteI2C(OVT,0x64, [0xe7,0x11])
    board.WriteI2C(OVT,0x64, [0xe8,0x01])
    board.WriteI2C(OVT,0x64, [0xe9,0x12])
    board.WriteI2C(OVT,0x64, [0xea,0x01])
    board.WriteI2C(OVT,0x64, [0xeb,0x13])
    board.WriteI2C(OVT,0x64, [0xec,0x01])
    board.WriteI2C(OVT,0x64, [0xed,0x14])
    board.WriteI2C(OVT,0x64, [0xee,0x01])
    board.WriteI2C(OVT,0x64, [0xef,0x15])
    board.WriteI2C(OVT,0x64, [0xf0,0x01])
    board.WriteI2C(OVT,0x64, [0xf1,0x16])
    board.WriteI2C(OVT,0x64, [0xf2,0x01])
    board.WriteI2C(OVT,0x64, [0xf3,0x17])
    board.WriteI2C(OVT,0x64, [0xf4,0x01])
    board.WriteI2C(OVT,0x64, [0xf5,0x18])
    board.WriteI2C(OVT,0x64, [0xf6,0x01])
    board.WriteI2C(OVT,0x64, [0xf7,0x19])
    board.WriteI2C(OVT,0x64, [0xf8,0x01])
    board.WriteI2C(OVT,0x64, [0xf9,0x1a])
    board.WriteI2C(OVT,0x64, [0xfa,0x01])
    board.WriteI2C(OVT,0x64, [0xfb,0x1b])
    board.WriteI2C(OVT,0x64, [0xfc,0x01])
    board.WriteI2C(OVT,0x64, [0xfd,0x1c])
    board.WriteI2C(OVT,0x64, [0xfe,0x01])
    board.WriteI2C(OVT,0x64, [0xff,0x1d])
    board.WriteI2C(OVT,0x65, [0x00,0x01])
    board.WriteI2C(OVT,0x65, [0x01,0x1e])
    board.WriteI2C(OVT,0x65, [0x02,0x01])
    board.WriteI2C(OVT,0x65, [0x03,0x1f])
    board.WriteI2C(OVT,0x65, [0x04,0x02])
    board.WriteI2C(OVT,0x65, [0x05,0xa0])
    board.WriteI2C(OVT,0x65, [0x06,0x00])
    board.WriteI2C(OVT,0x65, [0x07,0xff])
    board.WriteI2C(OVT,0x65, [0x08,0x03])
    board.WriteI2C(OVT,0x65, [0x09,0x0b])
    board.WriteI2C(OVT,0x65, [0x0a,0x05])
    board.WriteI2C(OVT,0x65, [0x0b,0x86])
    board.WriteI2C(OVT,0x65, [0x0c,0x00])
    board.WriteI2C(OVT,0x65, [0x0d,0x00])
    board.WriteI2C(OVT,0x65, [0x0e,0x05])
    board.WriteI2C(OVT,0x65, [0x0f,0x06])
    board.WriteI2C(OVT,0x65, [0x10,0x00])
    board.WriteI2C(OVT,0x65, [0x11,0x04])
    board.WriteI2C(OVT,0x65, [0x12,0x05])
    board.WriteI2C(OVT,0x65, [0x13,0x04])
    board.WriteI2C(OVT,0x65, [0x14,0x00])
    board.WriteI2C(OVT,0x65, [0x15,0x04])
    board.WriteI2C(OVT,0x65, [0x16,0x05])
    board.WriteI2C(OVT,0x65, [0x17,0x00])
    board.WriteI2C(OVT,0x65, [0x18,0x05])
    board.WriteI2C(OVT,0x65, [0x19,0x08])
    board.WriteI2C(OVT,0x65, [0x1a,0x03])
    board.WriteI2C(OVT,0x65, [0x1b,0x9a])
    board.WriteI2C(OVT,0x65, [0x1c,0x05])
    board.WriteI2C(OVT,0x65, [0x1d,0x86])
    board.WriteI2C(OVT,0x65, [0x1e,0x00])
    board.WriteI2C(OVT,0x65, [0x1f,0x00])
    board.WriteI2C(OVT,0x65, [0x20,0x05])
    board.WriteI2C(OVT,0x65, [0x21,0x06])
    board.WriteI2C(OVT,0x65, [0x22,0x00])
    board.WriteI2C(OVT,0x65, [0x23,0x01])
    board.WriteI2C(OVT,0x65, [0x24,0x05])
    board.WriteI2C(OVT,0x65, [0x25,0x04])
    board.WriteI2C(OVT,0x65, [0x26,0x00])
    board.WriteI2C(OVT,0x65, [0x27,0x04])
    board.WriteI2C(OVT,0x65, [0x28,0x05])
    board.WriteI2C(OVT,0x65, [0x29,0x00])
    board.WriteI2C(OVT,0x65, [0x2a,0x05])
    board.WriteI2C(OVT,0x65, [0x2b,0x08])
    board.WriteI2C(OVT,0x65, [0x2c,0x03])
    board.WriteI2C(OVT,0x65, [0x2d,0x99])
    board.WriteI2C(OVT,0x65, [0x2e,0x05])
    board.WriteI2C(OVT,0x65, [0x2f,0x06])
    board.WriteI2C(OVT,0x65, [0x30,0x00])
    board.WriteI2C(OVT,0x65, [0x31,0x00])
    board.WriteI2C(OVT,0x65, [0x32,0x05])
    board.WriteI2C(OVT,0x65, [0x33,0x04])
    board.WriteI2C(OVT,0x65, [0x34,0x00])
    board.WriteI2C(OVT,0x65, [0x35,0x04])
    board.WriteI2C(OVT,0x65, [0x36,0x05])
    board.WriteI2C(OVT,0x65, [0x37,0x00])
    board.WriteI2C(OVT,0x65, [0x38,0x05])
    board.WriteI2C(OVT,0x65, [0x39,0x08])
    board.WriteI2C(OVT,0x65, [0x3a,0x03])
    board.WriteI2C(OVT,0x65, [0x3b,0x98])
    board.WriteI2C(OVT,0x65, [0x3c,0x05])
    board.WriteI2C(OVT,0x65, [0x3d,0x06])
    board.WriteI2C(OVT,0x65, [0x3e,0x00])
    board.WriteI2C(OVT,0x65, [0x3f,0x00])
    board.WriteI2C(OVT,0x65, [0x40,0x05])
    board.WriteI2C(OVT,0x65, [0x41,0x04])
    board.WriteI2C(OVT,0x65, [0x42,0x00])
    board.WriteI2C(OVT,0x65, [0x43,0x04])
    board.WriteI2C(OVT,0x65, [0x44,0x05])
    board.WriteI2C(OVT,0x65, [0x45,0x00])
    board.WriteI2C(OVT,0x65, [0x46,0x05])
    board.WriteI2C(OVT,0x65, [0x47,0x08])
    board.WriteI2C(OVT,0x65, [0x48,0x03])
    board.WriteI2C(OVT,0x65, [0x49,0x97])
    board.WriteI2C(OVT,0x65, [0x4a,0x05])
    board.WriteI2C(OVT,0x65, [0x4b,0x06])
    board.WriteI2C(OVT,0x65, [0x4c,0x05])
    board.WriteI2C(OVT,0x65, [0x4d,0x04])
    board.WriteI2C(OVT,0x65, [0x4e,0x00])
    board.WriteI2C(OVT,0x65, [0x4f,0x04])
    board.WriteI2C(OVT,0x65, [0x50,0x05])
    board.WriteI2C(OVT,0x65, [0x51,0x00])
    board.WriteI2C(OVT,0x65, [0x52,0x05])
    board.WriteI2C(OVT,0x65, [0x53,0x08])
    board.WriteI2C(OVT,0x65, [0x54,0x03])
    board.WriteI2C(OVT,0x65, [0x55,0x96])
    board.WriteI2C(OVT,0x65, [0x56,0x05])
    board.WriteI2C(OVT,0x65, [0x57,0x06])
    board.WriteI2C(OVT,0x65, [0x58,0x05])
    board.WriteI2C(OVT,0x65, [0x59,0x04])
    board.WriteI2C(OVT,0x65, [0x5a,0x00])
    board.WriteI2C(OVT,0x65, [0x5b,0x04])
    board.WriteI2C(OVT,0x65, [0x5c,0x05])
    board.WriteI2C(OVT,0x65, [0x5d,0x00])
    board.WriteI2C(OVT,0x65, [0x5e,0x05])
    board.WriteI2C(OVT,0x65, [0x5f,0x08])
    board.WriteI2C(OVT,0x65, [0x60,0x03])
    board.WriteI2C(OVT,0x65, [0x61,0x95])
    board.WriteI2C(OVT,0x65, [0x62,0x05])
    board.WriteI2C(OVT,0x65, [0x63,0x06])
    board.WriteI2C(OVT,0x65, [0x64,0x05])
    board.WriteI2C(OVT,0x65, [0x65,0x04])
    board.WriteI2C(OVT,0x65, [0x66,0x00])
    board.WriteI2C(OVT,0x65, [0x67,0x04])
    board.WriteI2C(OVT,0x65, [0x68,0x05])
    board.WriteI2C(OVT,0x65, [0x69,0x00])
    board.WriteI2C(OVT,0x65, [0x6a,0x05])
    board.WriteI2C(OVT,0x65, [0x6b,0x08])
    board.WriteI2C(OVT,0x65, [0x6c,0x03])
    board.WriteI2C(OVT,0x65, [0x6d,0x94])
    board.WriteI2C(OVT,0x65, [0x6e,0x05])
    board.WriteI2C(OVT,0x65, [0x6f,0x06])
    board.WriteI2C(OVT,0x65, [0x70,0x00])
    board.WriteI2C(OVT,0x65, [0x71,0x00])
    board.WriteI2C(OVT,0x65, [0x72,0x05])
    board.WriteI2C(OVT,0x65, [0x73,0x04])
    board.WriteI2C(OVT,0x65, [0x74,0x00])
    board.WriteI2C(OVT,0x65, [0x75,0x04])
    board.WriteI2C(OVT,0x65, [0x76,0x05])
    board.WriteI2C(OVT,0x65, [0x77,0x00])
    board.WriteI2C(OVT,0x65, [0x78,0x05])
    board.WriteI2C(OVT,0x65, [0x79,0x08])
    board.WriteI2C(OVT,0x65, [0x7a,0x03])
    board.WriteI2C(OVT,0x65, [0x7b,0x93])
    board.WriteI2C(OVT,0x65, [0x7c,0x05])
    board.WriteI2C(OVT,0x65, [0x7d,0x06])
    board.WriteI2C(OVT,0x65, [0x7e,0x00])
    board.WriteI2C(OVT,0x65, [0x7f,0x00])
    board.WriteI2C(OVT,0x65, [0x80,0x05])
    board.WriteI2C(OVT,0x65, [0x81,0x04])
    board.WriteI2C(OVT,0x65, [0x82,0x00])
    board.WriteI2C(OVT,0x65, [0x83,0x04])
    board.WriteI2C(OVT,0x65, [0x84,0x05])
    board.WriteI2C(OVT,0x65, [0x85,0x00])
    board.WriteI2C(OVT,0x65, [0x86,0x05])
    board.WriteI2C(OVT,0x65, [0x87,0x08])
    board.WriteI2C(OVT,0x65, [0x88,0x03])
    board.WriteI2C(OVT,0x65, [0x89,0x92])
    board.WriteI2C(OVT,0x65, [0x8a,0x05])
    board.WriteI2C(OVT,0x65, [0x8b,0x06])
    board.WriteI2C(OVT,0x65, [0x8c,0x05])
    board.WriteI2C(OVT,0x65, [0x8d,0x04])
    board.WriteI2C(OVT,0x65, [0x8e,0x00])
    board.WriteI2C(OVT,0x65, [0x8f,0x04])
    board.WriteI2C(OVT,0x65, [0x90,0x05])
    board.WriteI2C(OVT,0x65, [0x91,0x00])
    board.WriteI2C(OVT,0x65, [0x92,0x05])
    board.WriteI2C(OVT,0x65, [0x93,0x08])
    board.WriteI2C(OVT,0x65, [0x94,0x03])
    board.WriteI2C(OVT,0x65, [0x95,0x91])
    board.WriteI2C(OVT,0x65, [0x96,0x05])
    board.WriteI2C(OVT,0x65, [0x97,0x06])
    board.WriteI2C(OVT,0x65, [0x98,0x05])
    board.WriteI2C(OVT,0x65, [0x99,0x04])
    board.WriteI2C(OVT,0x65, [0x9a,0x00])
    board.WriteI2C(OVT,0x65, [0x9b,0x04])
    board.WriteI2C(OVT,0x65, [0x9c,0x05])
    board.WriteI2C(OVT,0x65, [0x9d,0x00])
    board.WriteI2C(OVT,0x65, [0x9e,0x05])
    board.WriteI2C(OVT,0x65, [0x9f,0x08])
    board.WriteI2C(OVT,0x65, [0xa0,0x03])
    board.WriteI2C(OVT,0x65, [0xa1,0x90])
    board.WriteI2C(OVT,0x65, [0xa2,0x05])
    board.WriteI2C(OVT,0x65, [0xa3,0x06])
    board.WriteI2C(OVT,0x65, [0xa4,0x05])
    board.WriteI2C(OVT,0x65, [0xa5,0x04])
    board.WriteI2C(OVT,0x65, [0xa6,0x00])
    board.WriteI2C(OVT,0x65, [0xa7,0x04])
    board.WriteI2C(OVT,0x65, [0xa8,0x05])
    board.WriteI2C(OVT,0x65, [0xa9,0x00])
    board.WriteI2C(OVT,0x65, [0xaa,0x05])
    board.WriteI2C(OVT,0x65, [0xab,0x08])
    board.WriteI2C(OVT,0x65, [0xac,0x02])
    board.WriteI2C(OVT,0x65, [0xad,0x90])
    board.WriteI2C(OVT,0x65, [0xae,0x05])
    board.WriteI2C(OVT,0x65, [0xaf,0x06])
    board.WriteI2C(OVT,0x65, [0xb0,0x00])
    board.WriteI2C(OVT,0x65, [0xb1,0xff])
    board.WriteI2C(OVT,0x65, [0xb2,0x04])
    board.WriteI2C(OVT,0x65, [0xb3,0x20])
    board.WriteI2C(OVT,0x65, [0xb4,0x05])
    board.WriteI2C(OVT,0x65, [0xb5,0x06])
    board.WriteI2C(OVT,0x65, [0xb6,0x08])
    board.WriteI2C(OVT,0x65, [0xb7,0x84])
    board.WriteI2C(OVT,0x65, [0xb8,0x04])
    board.WriteI2C(OVT,0x65, [0xb9,0x04])
    board.WriteI2C(OVT,0x65, [0xba,0x00])
    board.WriteI2C(OVT,0x65, [0xbb,0xff])
    board.WriteI2C(OVT,0x65, [0xbc,0x08])
    board.WriteI2C(OVT,0x65, [0xbd,0x72])
    board.WriteI2C(OVT,0x65, [0xbe,0x04])
    board.WriteI2C(OVT,0x65, [0xbf,0x0C])
    board.WriteI2C(OVT,0x65, [0xc0,0x04])
    board.WriteI2C(OVT,0x65, [0xc1,0x04])
    board.WriteI2C(OVT,0x65, [0xc2,0x00])
    board.WriteI2C(OVT,0x65, [0xc3,0xff])
    board.WriteI2C(OVT,0x65, [0xc4,0x04])
    board.WriteI2C(OVT,0x65, [0xc5,0x45])
    board.WriteI2C(OVT,0x65, [0xc6,0x04])
    board.WriteI2C(OVT,0x65, [0xc7,0x54])
    board.WriteI2C(OVT,0x65, [0xc8,0x08])
    board.WriteI2C(OVT,0x65, [0xc9,0x72])
    board.WriteI2C(OVT,0x65, [0xca,0x00])
    board.WriteI2C(OVT,0x65, [0xcb,0xff])
    board.WriteI2C(OVT,0x65, [0xcc,0x04])
    board.WriteI2C(OVT,0x65, [0xcd,0x20])
    board.WriteI2C(OVT,0x65, [0xce,0x05])
    board.WriteI2C(OVT,0x65, [0xcf,0x06])
    board.WriteI2C(OVT,0x65, [0xd0,0x08])
    board.WriteI2C(OVT,0x65, [0xd1,0x96])
    board.WriteI2C(OVT,0x65, [0xd2,0x08])
    board.WriteI2C(OVT,0x65, [0xd3,0x5e])
    board.WriteI2C(OVT,0x65, [0xd4,0x00])
    board.WriteI2C(OVT,0x65, [0xd5,0xff])
    board.WriteI2C(OVT,0x65, [0xd6,0x04])
    board.WriteI2C(OVT,0x65, [0xd7,0x20])
    board.WriteI2C(OVT,0x65, [0xd8,0x05])
    board.WriteI2C(OVT,0x65, [0xd9,0x06])
    board.WriteI2C(OVT,0x65, [0xda,0x08])
    board.WriteI2C(OVT,0x65, [0xdb,0x96])
    board.WriteI2C(OVT,0x65, [0xdc,0x08])
    board.WriteI2C(OVT,0x65, [0xdd,0x5c])
    board.WriteI2C(OVT,0x65, [0xde,0x00])
    board.WriteI2C(OVT,0x65, [0xdf,0xff])
    board.WriteI2C(OVT,0x65, [0xe0,0x04])
    board.WriteI2C(OVT,0x65, [0xe1,0x20])
    board.WriteI2C(OVT,0x65, [0xe2,0x05])
    board.WriteI2C(OVT,0x65, [0xe3,0x06])
    board.WriteI2C(OVT,0x65, [0xe4,0x08])
    board.WriteI2C(OVT,0x65, [0xe5,0x84])
    board.WriteI2C(OVT,0x65, [0xe6,0x08])
    board.WriteI2C(OVT,0x65, [0xe7,0x70])
    board.WriteI2C(OVT,0x65, [0xe8,0x00])
    board.WriteI2C(OVT,0x65, [0xe9,0xff])
    board.WriteI2C(OVT,0x65, [0xea,0x00])
    board.WriteI2C(OVT,0x65, [0xeb,0xff])
    board.WriteI2C(OVT,0x65, [0xec,0x00])
    board.WriteI2C(OVT,0x65, [0xed,0xff])
    board.WriteI2C(OVT,0x30, [0xeb,0x04])
    board.WriteI2C(OVT,0x30, [0xed,0x5a])
    board.WriteI2C(OVT,0x30, [0xee,0x01])
    board.WriteI2C(OVT,0x30, [0xef,0x80])
    board.WriteI2C(OVT,0x30, [0xf1,0x5a])
    board.WriteI2C(OVT,0x30, [0x3a,0x04])
    board.WriteI2C(OVT,0x30, [0x3b,0x7f])
    board.WriteI2C(OVT,0x30, [0x3c,0xfe])
    board.WriteI2C(OVT,0x30, [0x3d,0x19])
    board.WriteI2C(OVT,0x30, [0x3e,0xd7])
    board.WriteI2C(OVT,0x30, [0x3f,0x09])
    board.WriteI2C(OVT,0x30, [0x40,0x78])
    board.WriteI2C(OVT,0x30, [0x42,0x05])
    board.WriteI2C(OVT,0x32, [0x8a,0x00])
    board.WriteI2C(OVT,0x31, [0xbf,0x9f])
    board.WriteI2C(OVT,0x31, [0xc0,0xff])
    board.WriteI2C(OVT,0x30, [0x12,0x01])
    board.WriteI2C(OVT,0x30, [0x12,0x00])
    board.WriteI2C(OVT,0x30, [0x00,0x03])
    board.WriteI2C(OVT,0x30, [0x01,0x30])
    board.WriteI2C(OVT,0x30, [0x02,0x07])
    board.WriteI2C(OVT,0x30, [0x04,0x03])
    board.WriteI2C(OVT,0x30, [0x05,0x30])
    board.WriteI2C(OVT,0x30, [0x06,0x07])
    board.WriteI2C(OVT,0x30, [0x8f,0x10])
    board.WriteI2C(OVT,0x31, [0x27,0x63])
    board.WriteI2C(OVT,0x30, [0x74,0x00])
    board.WriteI2C(OVT,0x30, [0x75,0x00])
    board.WriteI2C(OVT,0x30, [0x76,0x00])
    board.WriteI2C(OVT,0x30, [0x77,0x02])
    board.WriteI2C(OVT,0x30, [0x78,0x05])
    board.WriteI2C(OVT,0x30, [0x79,0x07])
    board.WriteI2C(OVT,0x30, [0x7a,0x04])
    board.WriteI2C(OVT,0x30, [0x7b,0x41])
    board.WriteI2C(OVT,0x30, [0x7c,0x05])
    board.WriteI2C(OVT,0x30, [0x7d,0x00])
    board.WriteI2C(OVT,0x30, [0x7e,0x04])
    board.WriteI2C(OVT,0x30, [0x7f,0x38])
    board.WriteI2C(OVT,0x30, [0x80,0x05])
    board.WriteI2C(OVT,0x30, [0x81,0xa9])
    board.WriteI2C(OVT,0x30, [0x82,0x04])
    board.WriteI2C(OVT,0x30, [0x83,0x50])
    board.WriteI2C(OVT,0x30, [0x84,0x00])
    board.WriteI2C(OVT,0x30, [0x85,0x04])
    board.WriteI2C(OVT,0x30, [0x86,0x00])
    board.WriteI2C(OVT,0x30, [0x87,0x04])
    board.WriteI2C(OVT,0x34, [0x44,0x28])
    board.WriteI2C(OVT,0x30, [0x91,0x00])
    board.WriteI2C(OVT,0x31, [0x19,0x55])
    board.WriteI2C(OVT,0x30, [0x12,0x01])
    board.WriteI2C(OVT,0x30, [0x12,0x00])
    board.WriteI2C(OVT,0x30, [0x00,0x03])
    board.WriteI2C(OVT,0x30, [0x01,0x30])
    board.WriteI2C(OVT,0x30, [0x02,0x07])
    board.WriteI2C(OVT,0x30, [0x04,0x03])
    board.WriteI2C(OVT,0x30, [0x05,0x30])
    board.WriteI2C(OVT,0x30, [0x06,0x07])
    board.WriteI2C(OVT,0x30, [0x8f,0x10])
    board.WriteI2C(OVT,0x31, [0x27,0x63])
    board.WriteI2C(OVT,0x30, [0x74,0x00])
    board.WriteI2C(OVT,0x30, [0x75,0x00])
    board.WriteI2C(OVT,0x30, [0x76,0x00])
    board.WriteI2C(OVT,0x30, [0x77,0x02])
    board.WriteI2C(OVT,0x30, [0x78,0x05])
    board.WriteI2C(OVT,0x30, [0x79,0x07])
    board.WriteI2C(OVT,0x30, [0x7a,0x04])
    board.WriteI2C(OVT,0x30, [0x7b,0x41])
    board.WriteI2C(OVT,0x30, [0x7c,0x05])
    board.WriteI2C(OVT,0x30, [0x7d,0x00])
    board.WriteI2C(OVT,0x30, [0x7e,0x04])
    board.WriteI2C(OVT,0x30, [0x7f,0x38])
    board.WriteI2C(OVT,0x30, [0x80,0x05])
    board.WriteI2C(OVT,0x30, [0x81,0xB2])
    board.WriteI2C(OVT,0x30, [0x82,0x04])
    board.WriteI2C(OVT,0x30, [0x83,0x74])
    board.WriteI2C(OVT,0x30, [0x84,0x00])
    board.WriteI2C(OVT,0x30, [0x85,0x04])
    board.WriteI2C(OVT,0x30, [0x86,0x00])
    board.WriteI2C(OVT,0x30, [0x87,0x04])
    board.WriteI2C(OVT,0x34, [0x6d,0x28])
    board.WriteI2C(OVT,0x34, [0x44,0x48])
    board.WriteI2C(OVT,0x30, [0x91,0x0C])
    board.WriteI2C(OVT,0x31, [0x19,0x55])
    board.WriteI2C(OVT,0x30, [0x12,0x01])

    board.WriteI2C(OVT,0x31, [0x29,0x80]) # patgen

    time.sleep(1)

    # Seeing if CSI data is transmitting
    print "CSI Error = ",hex(board.ReadI2C(UB953, 0x5C, 1))
    print "Packet Header data = ", hex(board.ReadI2C(UB953, 0x61, 1))
    print "Packer Header Word Count 0 = ", hex(board.ReadI2C(UB953, 0x62, 1))
    print "Packer Header Word Count 1 = ", hex(board.ReadI2C(UB953, 0x63, 1))

  • Hello,

    We want change to OmniVision OV490, now we need to know how to setting registers,Thank you so much.

    Please reach out to the image sensor provider for sensor configuration.

    I would like to confirm your imager settings. Please correct me if any of the information below is wrong:

    Imager Output:

    Resolution:1600*1300

    Frame rate: 30 frames

    Output format: YUV 8bit UYVY

    mipi: CSI-2, 4-Lane Configuration

    Is there any info or detail need to recheck ?

    Can you clarify whether the register dump provided previously was with the imager on and data being received from the imager?

    Best,
    Carter Langston

  • Hi Carter Sir,

    Yes, this is our setting,our dump as below, Thank you so much

    Imager Output:

    Resolution:1600*1300

    Frame rate: 30 frames

    Output format: YUV 8bit UYVY

    mipi: CSI-2, 4-Lane Configuration

     

    register dump as below

    ti635 dump register
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: 30 00 32 4b 00 03 41 28 fe 1e 10 7f 7f f0 0f 00
    10: 00 00 00 00 00 20 18 3c 80 62 62 62 00 00 00 00
    20: 00 00 00 00 00 02 00 00 67 33 01 00 00 00 00 00
    30: 00 20 09 04 00 10 00 7a 00 00 00 00 00 00 00 00
    40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    50: 20 c0 45 00 00 00 00 00 07 07 07 00 00 00 00 00
    60: 00 1e 80 0c 3b cb 00 32 00 00 00 00 00 00 00 00
    70: 00 00 25 00 00 00 00 00 00 00 e4 00 00 00 00 00
    80: 00 00 00 00 00 00 90 00 00 00 00 00 05 00 00 00
    90: 32 e3 64 01 00 00 00 00 00 00 06 00 26 00 00 0d
    a0: 00 0d 0d 0c 0d 10 42 10 10 10 03 01 00 00 00 00
    b0: 04 4a 3f 00 00 00 00 00 00 00 00 00 00 00 00 00
    c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    f0: 5f 55 42 39 35 33 00 00 00 00 00 00 00 00 00 00

    ti638 dump register
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: 7a 00 1e 20 df 01 00 fe 1c 10 7a 7a 83 09 0a 7f
    10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 02
    20: 20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    30: 00 00 00 03 40 01 00 03 00 00 00 01 14 6f 00 40
    40: 00 a7 71 01 00 00 00 00 00 00 00 12 01 13 4d 31
    50: 20 00 00 05 00 00 00 00 5a 00 00 30 24 48 00 00
    60: 00 00 00 00 00 48 00 00 00 00 00 00 00 78 88 88
    70: 2b 2c e4 05 14 0c 80 c5 00 01 0c ff 20 00 00 00
    80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    a0: 02 0f 00 00 08 19 00 00 00 00 00 00 00 00 00 00
    b0: 08 14 3f 08 25 00 18 00 f8 33 83 74 80 00 00 00
    c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    d0: 00 43 94 06 60 f2 00 00 00 00 00 08 00 00 00 00
    e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    f0: 5f 55 42 39 35 34 00 00 00 00 00 00 00 00 00 00

  • Hello Lee,

    Is the register dump provided above with the imager on and data being received from the imager?

    Best,

    Carter

  • Hi Carter

    "Is the register dump provided above with the imager on and data being received from the imager?"

    >> Yes

    Is there any ti635/638 mipi csi related sts register abnormal ?? 

    thx!!

  • Hi,

    Thank you for the confirmation on how the register dump was collected. 

    Reviewing the register dumps, there are some errors being asserted here regarding CSI transmission from the serializer. Are these errors being cleared prior to the register dump? If errors are only being reported during initialization, these errors can be cleared on read. 

    In the register dump, errors are being flagged in 0x54 SENSOR_STS_3 on the deserializer including CSI control error and CSI start of transmission errors from the serializer. 

    Adding some additional questions to this thread: 

    1. Currently the serializer is configured for four lane CSI-2 data with a non-continuous CSI clock. Does this align with the image sensor being used? 
    2. Has the image sensor been tested directly to confirm the output is correct? 
      1. If this is not feasible, would you be able to map FrameValid and LineValid to a GPIO on the 954 to confirm timing for the received video packets? 
      2. Is Pattern Generator an available feature on the image sensor? If so, would you be able to test with this feature and provide the results? 

    Best,

    Zoe

  • Hi Zoe, 

    Thanks for replying.

    About the parts of csi error, I've recheck the SENSOR_STS_3 on the deserializer (0x54) again.

    It shows 0 actually, beacuase the register table from Lee pasted was not well formated...(Please check the previous one I pasted infront of Lee, they are same).   

    1. Currently the serializer is configured for four lane CSI-2 data with a non-continuous CSI clock. Does this align with the image sensor being used? 
      >> As the ti635 dump registers show that the 0x02 is 0x32, which means csi mipi was configured contuinuous clk mode and 4 lane, and we'ved checked the mipi waveform was correct.

    2. Has the image sensor been tested directly to confirm the output is correct?
      >> The camera module maker claims that they used same imager firmware(same mipi output) to 2 different modules which using different serdes solution(one of them are ti635/ti38), the other one could show the image correctly from host side. 

      a. If this is not feasible, would you be able to map FrameValid and LineValid to a GPIO on the 954 to confirm timing for the received video packets? 

      >> I would to try this method, would you show me the actual steps how to map FrameValud and LineValued to a GPIO?? does ti638 could do the same feautre? casue we dont have ti954.

      b. Is Pattern Generator an available feature on the image sensor? If so, would you be able to test with this feature and provide the results? 

      >> Yes, pattern generator from imager is one of way, we're trying to verify. If anty result, will update to this thread.
  • Hi,

    Thanks for the update and clarification on the register dumps. With this in mind, there doesn't appear to be any errors detected on the SerDes side which may indicate an issue with the image sensor itself, as the pattern generator from the serializer also appeared normal. 

    Mapping FrameValid and LineValid to a GPIO is useful to confirm the received video timings. This can be done by setting GPIOx_PIN_CTL to 0xE1 for outputting the LineValid signal and 0xC1 for FrameValid. 

    Best,

    Zoe

  • HI Zoe,

    Update the test result of pattern generator from imager.

    a. imager pattern gen with 635/638 serdes, host sided shows a while image as below top side.

    b. imager pattern gen with other serdes, host side shows correct bar image as below bottom side.

    The a/b  actually are twin camera module (same keyparts) with different serdes solution.  The imager was configured through spi flash fw.

    After this pattern gen test and the abnormal img from this thread, we found the pixel value was extend from left side to right side as below, that is why we got a total while img with this kind of pattern img.

    if any pls let me know, thx!!

  • Hi,

    Thanks for the update! Via the register dumps it appears the issue is likely on the image sensor side. Is the there a schematic available for the UB635 being used in this case? Is the CLK_OUT from the 635 being used as the oscillator for the imager? 

    Best,

    Zoe

  • Hi Zoe

    The imager used externel clk source not from 635 CLK_OUT.


    Just crop the CLK_OUT parts for reference, if any pls let me know.

  • Hi Zoe,

    Thanks for the update! Via the register dumps it appears the issue is likely on the image sensor side. 

    >> Is there any resgister stats shows that the imager cause this issue?

    Thx!

  • Hello,

    The previous pattern generator image that was shared displayed correctly (the color bars previously provided). Given this is from the serializer, it points to a potential issue on the image sensor side / CSI RX of the serializer. Please feel free to correct if this was actually from the UB638. 

    Would you be able to share the schematic for the serializer for some context on the system? 

    Best,

    Zoe