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.

RTOS/CC2640R2F: Are internal pull up resistors enabled when using I2C?

Part Number: CC2640R2F
Other Parts Discussed in Thread: LAUNCHXL-CC2640R2

Tool/software: TI-RTOS

I'm connecting VL6180X proximity sensor via I2C to LAUNCHXL-CC2640R2. CC2640R2F is the I2C master, VL6180X is the only slave on the I2C bus.

Per VL6180X datasheet, it's VDD = 2.8V , from an LDO (LDO input =3.3V, output = 2.8V). There are SDA and SCL 1.8K pull up resistors to the 2.8V

The CC2640R2F works on VDD = 3.3V (VIH = 0.8 * VDD = 2.64V , so 2.8V should be OK)

While the I2C communication is OK, I sometimes get a "laser safety error" status bit from the VL6180X.

I Measured the VL6180X VDD, got 3.3V when SDA and SCL wires are connected, and 2.8V when SDA and SCL wires are disconnected.

I noticed the 3.3K pull up resistors on the LAUNCHXL-CC2640R2 board, removed them, and now I get 3.1V on the VL6180X VDD. It actually toggling between 2.8V and 3.1V while the I2C communication is running, I guess it depends on the VL6180X activity / consumption states.

I'm using the I2C_init(), I2C_Params_init(), I2C_open(), I2C_transfer() functions, as I found in the i2ctmp007_CC2640R2_LAUNCHXL_tirtos_ccs code example.

I assume that apart from open-drain output stage, the internal pull up resistors are enabled, causing current flow via the VL6180X I/O clamping diodes into the VDD rail.

1. Is my assumption correct?

2. If so, is there a way to disable the internal pull up resistors in I2C?

  • Not sure if I fully understand the question . You need external pull ups to VDD for I2C to work. Are you here asking about if internal pull ups are placed in parallel with the external?

    Why not run the LP on 2.8 V to avoid the issue?
  • 1. Yes, I have external pull up resistors to 2.8V
    2. Yes, I'm asking if internal pull ups are placed in parallel with the external pull ups (not exactly parallel, as the externals are on 2.8V and the internals are on 3.3V).
    3. In case the the answer to (2) is yes, then I'm asking if the internal pull ups can be disabled.
    4. Some other GPIOs should drive LEDs, 2.8V would be too low for them, I prefer to stay with 3.3V on the CC2640R2F.
  • If you look in I2CCC26XX_initIO in I2CC26XX.c the pins are setup:

        /* Configure I2C pins SDA and SCL*/
        i2cPinTable[i++] = i2cPins.pinSDA | PIN_INPUT_EN | PIN_PULLUP | PIN_OPENDRAIN;
        i2cPinTable[i++] = i2cPins.pinSCL | PIN_INPUT_EN | PIN_PULLUP | PIN_OPENDRAIN;

    If you don't want internal pull-ups it should be possible to pull this file into the project and change the setup of the pins.


  • Yes, that did the trick.

    After pulling this file into the project and commenting out the two PIN_PULLUP, the VL6180X VDD stays 2.8V

    Thanks!