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.

DS90UB928Q-Q1: How to write White balance LUTs via I2C

Part Number: DS90UB928Q-Q1

Hello Champs

 

My customer asked following questions about DS90UB928Q-Q1 LUTs.

 

Q.1) Is it possible to write white balance LUTs from local MCU directly connected to DS90UB928Q-Q1 vi I2C?

 

Q.2) If answer for above question is Yes, can you provide detailed sequence to write LUT table via I2C?

 

Best regards,

Nobuo Fujihara

  • Hello, we received your query. We will review and get back to you.
  • Hello,
    Yes it is possible to write registers on the DS90UB928Q-Q1 deserializer locally or remotely from the serializer. Please see section " 8.3.11.1.2 Enabling White Balance" in the datasheet for details on how to enable.
  • Hi Liam,

    I have the similar question too. The datasheet did not explain properly the write sequence, it is too general. Can you explain more details about:

    A)For initial LUT loading: I'm doing it in 5 write packets
    1) [slave address] [white balance register = 0x2A] [white balance off = 0x00]
    2) [slave address] [white balance register = 0x2A] [red page select = 0x40] [256 bytes red data......]
    3) [slave address] [white balance register = 0x2A] [green page select = 0x40] [256 bytes green data......]
    4) [slave address] [white balance register = 0x2A] [blue page select = 0x40] [256 bytes blue data......]
    5) [slave address] [white balance register = 0x2A] [white balance on = 0x20]
    am I correct?

    B)for partial reloading, in datasheet mentioned about we are allow to update some part of the LUT, what is the sequence? can we select the specific address in the LUT page?

    Thanks & Regards
  • Hello,

    No, you would need to load each of the 256 registers for each with a series of writes.

    for example psuedocode:

    rx_addr = 0x58 #deser slave address
    WriteI2C(rx_addr,0x2A, 0x70)
    WriteI2C(rx_addr,0x00, 0x00)
    WriteI2C(rx_addr,0x01, 0x01)
    WriteI2C(rx_addr,0x02, 0x02)
    #........etc until
    WriteI2C(rx_addr,0xFF, 0xFF)

    # then next page
    WriteI2C(rx_addr,0x2A, 0xB0)
    WriteI2C(rx_addr,0x00, 0x00)
    WriteI2C(rx_addr,0x01, 0x01)
    WriteI2C(rx_addr,0x02, 0x02)
    #........etc until
    WriteI2C(rx_addr,0xFF, 0xFF)

    # then last page
    WriteI2C(rx_addr,0x2A, 0xF0)
    WriteI2C(rx_addr,0x00, 0x00)
    WriteI2C(rx_addr,0x01, 0x01)
    WriteI2C(rx_addr,0x02, 0x02)
    #........etc until
    WriteI2C(rx_addr,0xFF, 0xFF)

    #Then enable WB
    WriteI2C(rx_addr,0x2A, 0x20)