[Particle Core] - I2C boot loop


#1

Hello everyone,
I just deployed on my Particle Core the following code:

void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
     Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

I connected D0 and D1 to 3.3V with a 4.7k pull-up resistors and I put on the I2C bus a BME280.
It boots in some seconds and than starts flashing red (10 blinks that should correspond to assertion failure). After flashing red it reboots and than goes on error again.
The very strange thing is that if I disconnect any loads on the D0 and D1 pins, I start the Core and I connect pull-up resistors and my I2C device, the Core does not crash and prints on the console the address of the BME280.
Seems a very strange situation, any suggestion on how to start the Core with I2C devices already connected?

Thanks in advance


#2

Is it SOS (=9) +10 blinks or SOS (9) + 1?

Also, what system version are you targeting?

Try adding a delay(5000) in setup() and check the serial output if you can.


#3

Thanks for your reply.
It’s SOS + 10 blinks.
I tried to target many firmware versions (0.6.2, 0.5.4, 0.4.6) but always same error.
I also tried to add a delay as suggested, but the behaviour is the same. I suppose the crash is caused by Wire.begin();


#4

Are you sure you have 4k7’s and not some other much smaller value?


#5

Yes, I’m sure. I also tried with 10k resistors but the behaviour is the same.


#6

Mysterious, your scanner code looks pretty standard and I can assure you Photons startup with I2C devices connected at boot with no issues whatsoever. If you’re using some kind of BME280 module like this https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout/overview you should check if you need the tie-ups or not or if there were some other configuration steps needed.
Is there anything else in your circuit or code that you are leaving out for simplicity?


#7

I also tried to remove all I2C devices on the bus. There is just the Core and 2 resistor 4.7k connected to the 3V3 line. Still the same error. No idea on what elso to do.


#8

@nycluca, if you try another single I2C device on the bus, other than the BME280, does that make any difference? Can you post a picture of your setup?


#9

Here there are the 2 photos of I2C device connected and unconnected.


#10

You have clock and data swapped around.
https://docs.particle.io/reference/firmware/photon/#wire-i2c-

Data is D0
Clock is D1


#11

You’re right but even swapping them I get the same error. :pensive: