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.

OPT3101: I2C setup problem

Part Number: OPT3101

Tool/software:

Hello,

I have designed a PCB for the OPT3101 and followed the design guidelines in the data sheet. I want to control this chip from another PCB which is the main board in my application. This main board is already communicating with other I2C slaves and everything is working perfectly. 

When I try to communicate with the OPT3101 however, I have some issues. The communication is working and there is an ACK off both side. I can read all the register, but they are not changing when I try to write a new value. I can see the data being transmitted and acknowledge with an oscilloscope and a logic analyzer.

I then tried to replace my Main MCU board by an Arduino UNO and it worked well. I then made few test using one after the other as I2C master for my OPT3101 PCB.

Here are the issues, lead I found:

- When I connect my oscilloscope probe (in 1x config) to the SDA line only when the chip is connected to the arduino, the registers are not updated when I change them. However, if I change the config in 10x on my probe, everything is working. If I connect both SDA and SCL, everything is working even in 1x configuration mode. 

- The Arduino UNO works in 5V and has an internal pull-up by default. My main MCU work in 3.3 V and the SDA and SCL line are pulled up with 10K resistors. When I remove the internal pull-up resistor of the Arduino and pull the line to 3.3 it is not working anymore. But I still see the correct messages on my oscilloscope. When I add a resistor on my main MCU to pull the line to 3.6V, the register update correctly but randomly (not always). I thought that, it was because of the VIH of the MCU or the OPT3101 chip, but both are powered in 3.3V in my application, meaning that the VIH is around 2.3V which is low enough to detect a logic 1.

- When I use the Arduino and not my main MCU, the update could work sometimes even with the probe on the SDA in x1, but it was depending on the length and position of my wire.

I think that the problem is related to the capacitance of the I2C bus, but I followed all the design rules of the OPT3101, and it doesn't explain why the I2C com is sometimes working with the line pulled to 3.6V and not when pulled to 3.3V. I don't understand then where it comes from. Do you have an idea? Maybe it is something totally different?

I attach below the schematics of the OPT3101 PCB that I designed. (The OPT3101 PCB is powered by 5V like my main board but the Main MCU and the OPT3101 are powered by 3.3V. There is an LDO on both boards)

  • Hi Antoine,

    Which registers are not updating? Please verify if it's a read only or write/read register. 

    Might be a good idea to get several oscilloscope captures of the device with the MCU and Arduino to get a better picture of what is happening. 

    You may try to confirm the pull up resistor as well. 

    Thank you. 

    Wenjuan

  • Hi Wenjuan,

    All the register that I try to change are not updating. Those are read and write registers, and they are updating when I use the Arduino board as the master of the i2C com.

    I did capture several transmissions with an oscilloscope but both Arduino and the MCU communication looked similar. Something like that.

    The data is clear and make sens. The level are coherent too. The only difference when it works is that the high level is 3.6V and not 3.3V. However, both the OPT3101 and the MCU are powered in 3.3V, so 3.3V as High logic should be large enough.

    I checked the pull-up and I tried to lower it (Default is 10K and I decreased it down to 1.6K) but it didn't change anything.

    I turned on the internal LDO by connecting REG_MODE to IOVDD on the OPT3101 chip. Do you think that this can affect the VIH of the chip?

    Thank you,

    Antoine

  • Hi Antoine,

    It doesn't seem the device have incorrect hardware. 

    Does the device work stably at 3.6V? 

    What if you use off-chip regulator?

    Thank you. 

    Wenjuan

  • Hi Wenjuan,

    The chip is powered by 3.3V from an off chip LDO which is on the PCB board of the OPT3101 chip. 

    The 3.6V is the potential at which I pulled the I2C line for the device to work (I used a 50K resistor connected to the Vin, which is 5V, in addition to my original 10K resistor on 3.3V). I cannot pull it more since pins of OPT3101 can not accept more than 3.6V

    Best,

    Antoine

  • Hi Antoine,

    From the oscilloscope picture, it looks like you are communicating with OPT3101 and setting the resistor values. 

    Could you please share how does the oscilloscope output look like at 3.3V with the same setting as 3.6V?

    Thank you. 

    Wenjuan

  • Hi Wenjuan,

    I finally used another sensor for my application.

    But thank you for your help! I appreciate it! 

    Antoine

  • Antoine,

    Thank you for the updates. 

    Let us know if you need explore OPT3101 in future.

    Best regards,

    Wenjuan