I2C stops working on nRF9160-DK board version 1.1.0 when SW9 is switched to non default 3V position

I have ported a sample program and library from Arduino to Zephyr and start the code in asset_tracker_v2 main(). This is what I am testing: E-paper Display Kit - Ynvisible. The recommendation from Ynvisible is to run their hardware at 3.3 volts. It actually works on the nRF9160-DK version 1.1.0 with SW9 set to the 1.8v VDD position, using P0-31 for SCL, P0-30 for SDA, and P1 for GND and VDD.

But when I switch S9 to 3.0v VDD, I get I/O errors from I2C: 

*** Booting nRF Connect SDK v2.5.0 ***
The I2C scanner started
Value of NRF_TWIM2->PSEL.SCL : 31
Value of NRF_TWIM2->PSEL.SDA : 30
Value of NRF_TWIM2->FREQUENCY: 26738688
26738688 -> 100k
YNV_ECD display i=-99
[00:00:01.254,272] <err> i2c_nrfx_twim: Error on I2C line occurred for message 0
YNV_ECD::sendData i2c_write rc=-5
[00:00:05.754,882] <err> i2c_nrfx_twim: Error on I2C line occurred for message 0
YNV_ECD::sendData i2c_write rc=-5

I didn't spot anything obvious in the DK user manual explaining why I2C would stop working. It seems strange that my I2C device would work fine at 1.8v but not at 2.9-3.0 volts when it is spec'd to work at 3.3 VDC. What am I missing? Do I need to reconfigure something else on the DK board? Thank you.

Burt

ps, using SDK v2.5.0

  • If you read the datasheets of the E-paper, you may get aware, that there are two versions, the old gen1 with 3v, and a new gen2 with 1.5V. If you operate a gen2 with 3V, then you're out of spec.

    In my experience, the nRF9160-DK itself works well using i2c with either 1.8V or 3V, as long as the connected i2c device supports that as well. Sometimes you need to care, if a device uses different voltage levels for power supply and I/O, that's all in the datasheets. 

  • Hello Achim,

    Thank you for your quick reply. But I need more help! The e-paper itself may run at 1.5 volts, but I am using their test kit that has an I2C adapter and the instructions specify 3.3 volts: How to Set Up Ynvisible's Segment Display | Ynvisible. That link mentions an older kit that specified a 5-volt power connection. Now, before testing on the nRF9160 I had successfully tested on an Arduino board, using 3.3 volt power.

    I had made one nRF9160DK error when I opened this ticket. I had programmed the nRF9160dk_nrf52840 to the hci_lpuart sample for some other work. But I used the Programmer to both realize this mistake and reprogram back to nrf9160_dk_board_controller_fw_2.0.1.hex. Reprogramming did not help.

    Here is my program top level. The first number I try to display does appear, even though I cannot display more than that given the -EIO errors.

    Can the board be damaged by programming hci_lpuart? If so, I'd better work with the supplier for money back.

    I will have to try this using an older DK board (I have 0.9.0 and 0.8.3). And I may look around the house for other I2C devices and possibly try a small program for them.

    I appreciate any more help, anything you can think of that might apply.

    Best Regards,

    Burt

  • Hi Burt,

    > Now, before testing on the nRF9160 I had successfully tested on an Arduino board, using 3.3 volt power.

    That's promising. So, which I/O pins on the nRF9160-DK are you using? Maybe you try, if a 10K pull-ups helps.

  • Hello Achim,

    I am getting a different result on the 0.9.0 nrf9160-DK: I do not get any I/O errors, regardless of the SW9 voltage setting. Oh, I am using pins P19 pins 9 (SDA) and 10 (SCL). They are marked P0.30 and P0.31. Note that on the 1.1.0 board this P19 is relabeled as P4 and still has P0.30 and P0.31. Although I do not get any I/O errors using the 0.9.0 board, many times the display does not change numbers (sequence -99...0...99 incrementing once every 5 seconds). Randomly it cooperates. That must be the lack of pull up resistors on that board.

    At one point this morning I accidentally reverse powered the Ynvisible adapter board. I thought I had toasted it but then I tried it on my 5 Arduino boards, and it is fine, everywhere. It never fails to count there. But they did trick me on the Arduino DUE by moving the standard I2C port to different pins (looking carefully one sees that the "regular" pins are no longer SCL and SDA but are SCL1 and SDA1).

    I see that the circuitry on the nRF9160-DK board changed for SDA and SCL between 0.9.0 and 1.1.0. I do not have a good understanding of the 1.1.0 circuitry although I tried to casually read the datasheet for the PCAL6408A. I half understand the circuitry: they added pullup resistors and an analog switch and the PCAL6408A.

    I am still baffled why the 1.1.0 board works only with the low VDD of 1.8 volts. Please help me understand the circuitry to the level of detail required to understand what is going on. Thanks.

    Burt

  • Hi Burt,

    I'm just an other user, which used the DK with i2C and 1.8V or 3.0V. In my experience, that worked quite well. But for more details about the nRF9160-DK i2c or expert questions, I'm the wrong ;-).  

Related