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: DS90UB954-Q1

Part Number: DS90UB954-Q1

Hi,

We're using DS90UB954-Q1  in our custom baseboard and right now writing interface code (in c/c++). i2c connection has been established and register r/w works fine  SlaveID[n] / SlaveAlias[n] seems not to work properly - or at least Debian 'i2cdetect ' can not detect them - whilst is detecting   e.g. SER_ALIAS_ID. Now we're searching any 'debug help' to solve interfacing issues. 

Google found me one day a thread from TI's forum saying that there excists a python code to interface DS90UB954/953, could it be possible to get that code somewhere? Any 'code' help from any source would be welcome. 

There seems to be also some linux- drivers available but as I understand they are not supported by TI?

Best Regards,

ristoH

  • Hi Risto,

    I've attached an example script for setting up 953 Patgen (from 954 side) to send a pattern to 954 for testing. You can also find example initialization scripts in the DS90UB96x EVM user guide section 1.10.10 starting on page 22, which I will also link below for you. 

    Since you are having issues with the slaveID/Alias being recognized, I would recommend verifying that I2C pass-through is enabled (register 0x58).

    You are correct TI does not provide drivers.

    User Guide 

    # Patgen YUV ColorBar 1920x1080p30 on 953/954
    # Version 0.92
    
    import time
    
    # 953 config
    runTime = 3
    
    Alias953 = 0x18
    DES954 = 0x60
    
    
    # Reset 954
    board.WriteI2C(DES954, 0x01, 0x01)
    time.sleep(1.0)
    # CSI enable , continuous clock, 4 lanes
    board.WriteI2C(DES954, 0x33, 0x03)
    time.sleep(0.1)
    # Set CSI_TX_SPEED to select 800Mbps
    board.WriteI2C(DES954, 0x1F, 0x02)
    time.sleep(0.1)
    # Port Control
    board.WriteI2C(DES954, 0x0C, 0x83)
    time.sleep(0.1)
    # Port Selection
    board.WriteI2C(DES954, 0x4C, 0x01)
    time.sleep(0.1)
    # set alias
    board.WriteI2C(DES954, 0x5C, 0x18)
    time.sleep(0.1)
    board.WriteI2C(DES954, 0x20,0x00) # forwarding of all RX to CSI0
    time.sleep(0.1)
    if (board.ReadI2C(Alias953, 0x00, 0x01) != 0x30):
    	print "953 ID Error"
    else:
    	print "953 ID Ok"
    
    # Reset 953
    board.WriteI2C(Alias953, 0x01, 0x01)
    time.sleep(1.0)	
    # enable pat gen
    board.WriteI2C(Alias953, 0xB0, 0x00)
    board.WriteI2C(Alias953, 0xB1, 0x01)
    board.WriteI2C(Alias953, 0xB2, 0x01) #enable pattern generator
    
    board.WriteI2C(Alias953, 0xB1, 0x02)
    board.WriteI2C(Alias953, 0xB2, 0x33) #fixed color pattern, 8 color bars, block size of 5
    
    board.WriteI2C(Alias953, 0xB1, 0x03)
    board.WriteI2C(Alias953, 0xB2, 0x1E) #CSI Data Identifier (0x24 = RGB888, 0x2C = RAW12, 0x2B = RAW10)
    
    board.WriteI2C(Alias953, 0xB1, 0x04)
    board.WriteI2C(Alias953, 0xB2, 0x0f) #line size (15:8)
    
    board.WriteI2C(Alias953, 0xB1, 0x05)
    board.WriteI2C(Alias953, 0xB2, 0x00) #line size (7:0)
    
    board.WriteI2C(Alias953, 0xB1, 0x06)
    board.WriteI2C(Alias953, 0xB2, 0x01) #bar size (15:8)
    
    board.WriteI2C(Alias953, 0xB1, 0x07)
    board.WriteI2C(Alias953, 0xB2, 0xe0) #bar size (7:0)
    
    board.WriteI2C(Alias953, 0xB1, 0x08)
    board.WriteI2C(Alias953, 0xB2, 0x04) #active lines per frame (15:8)
    
    board.WriteI2C(Alias953, 0xB1, 0x09)
    board.WriteI2C(Alias953, 0xB2, 0x38) #active lines per frame (7:0)
    
    board.WriteI2C(Alias953, 0xB1, 0x0a)
    board.WriteI2C(Alias953, 0xB2, 0x04) #total lines per frame (15:8)
    
    board.WriteI2C(Alias953, 0xB1, 0x0b)
    board.WriteI2C(Alias953, 0xB2, 0x65) #total lines per frame (7:0)
    
    board.WriteI2C(Alias953, 0xB1, 0x0c)
    board.WriteI2C(Alias953, 0xB2, 0x0b) #line period (15:8)
    
    board.WriteI2C(Alias953, 0xB1, 0x0d)
    board.WriteI2C(Alias953, 0xB2, 0x93) #line period (7:0)
    
    board.WriteI2C(Alias953, 0xB1, 0x0e)
    board.WriteI2C(Alias953, 0xB2, 0x21) #vertical back porch
    
    board.WriteI2C(Alias953, 0xB1, 0x0f)
    board.WriteI2C(Alias953, 0xB2, 0x0a) #vertical front porch
    
    board.WriteI2C(Alias953, 0xB1, 0x10) 
    board.WriteI2C(Alias953, 0xB2, 0x00) #1st byte of fixed color
    
    board.WriteI2C(Alias953, 0xB1, 0x11)
    board.WriteI2C(Alias953, 0xB2, 0x00) #2nd byte of fixed color
    
    board.WriteI2C(Alias953, 0xB1, 0x12)
    board.WriteI2C(Alias953, 0xB2, 0xFF) #3rd byte of fixed color
    
    # board.WriteI2C(0xB1, 0x13)
    # board.WriteI2C(0xB2, 0xff) #4th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x14)
    # board.WriteI2C(0xB2, 0xff) #5th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x15)
    # board.WriteI2C(0xB2, 0x00) #6th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x16)
    # board.WriteI2C(0xB2, 0x00) #7th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x17)
    # board.WriteI2C(0xB2, 0x0f) #8th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x18)
    # board.WriteI2C(0xB2, 0xf0) #9th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x19)
    # board.WriteI2C(0xB2, 0x00) #10th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x1A)
    # board.WriteI2C(0xB2, 0x00) #11th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x1B)
    # board.WriteI2C(0xB1, 0x3f) #12th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x1C)
    # board.WriteI2C(0xB2, 0xc0) #13th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x1D)
    # board.WriteI2C(0xB2, 0x00) #14th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x1E)
    # board.WriteI2C(0xB2, 0x00) #15th byte of fixed color
    
    # board.WriteI2C(0xB1, 0x1F)
    # board.WriteI2C(0xB2, 0x00) #16th byte of fixed color
    


    Regards,

    Darrah