Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I2C communication between NRF52832 hangs #771

Open
ssysm opened this issue May 24, 2023 · 1 comment
Open

I2C communication between NRF52832 hangs #771

ssysm opened this issue May 24, 2023 · 1 comment
Labels

Comments

@ssysm
Copy link

ssysm commented May 24, 2023

Operating System

MacOS

IDE version

Arduino 2.1.0

Board

Feather 52832

BSP version

1.4.0

Sketch

Receiver:

#include <Wire.h>
#include <Adafruit_TinyUSB.h>

void setup()
{
  Serial.begin(115200);
  while(! Serial) delay(10);
  Wire.begin(0x50);
  Wire.onReceive(receiveEvent);
}

void loop()
{
  delay(100);
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
  while(1 < Wire.available()) // loop through all but the last
  {
    char c = Wire.read(); // receive byte as a character
    Serial.print(c);         // print the character
  }
  int x = Wire.read();    // receive byte as an integer
  Serial.println(x);         // print the integer
}

Sender:

#include <Wire.h>

void setup()
{
  Wire.begin(); // join i2c bus (address optional for main)
}

byte x = 0;

void loop()
{
  Wire.beginTransmission(0x50); // transmit to device #0x50
  Wire.write("x is ");        // sends five bytes
  Wire.write(x);              // sends one byte  
  Wire.endTransmission();    // stop transmitting

  x++;
  delay(500);
}

What happened ?

Two NRF52832 Feather is connected via I2C port. When sender is running without the receiver attached, the sketch is running fine. But when the receiver is attached, the sender hangs on endTramission.

How to reproduce ?

Connect Sender SCL, SDA to another NRF52832 SCL and SDA port. Connect a 2.2k Pull up resistor between SCL and VCC, SDA and VCC. Once receiver is attached, the sender will hang.

Debug Log

No response

Screenshots

I2C bus scope capture:
DS1Z_QuickPrint1

@ssysm ssysm added the Bug label May 24, 2023
@apoorv1in
Copy link

apoorv1in commented Jun 7, 2024

I see the Wire_nRF52.cpp does not have timeout implemented endTransmission() and requestFrom()
there are multiple while loops and none have timeout implemented. Under certain scenarios then the call never returns.

If i take reference from Arduino library it has the timeout https://github.com/arduino/ArduinoCore-avr/blob/master/libraries/Wire/src/utility/twi.c

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants