I2c scann not working

I have a nano matter.
I have nothing connected to it other than usb c.

I want to connect an OLED i2c display i bought. Before i connect it i want to run the i2c scanner to confirm the address.

The few examples i find compile and run but they say there is a device on every address.
Like this: (truncated)
I2C device found at address 0x5E !
I2C device found at address 0x5F !
I2C device found at address 0x60 !
I2C device found at address 0x61 !
I2C device found at address 0x62 !
I2C device found at address 0x63 !
I2C device found at address 0x64 !
I2C device found at address 0x65 !

I am using the latest IDE 2.3.3.
The manual doesn't say anything about i2c.

Are the typical arduino examples not compatible with nano matter?

link please

You have to have it connected for the scanner to find it.

Well I have learned here about a new board which the OP has got hold of: Arduino Nano Matter — Arduino Official Store !

Maybe it needs pullup resistors on the I2C pins to stop the false detections.

Incompatibilities are a feature of new boards.

@6v6gt and @JohnLincoln

My question would be why the micro can find devices on every address possible (and in sequence) if nothing is connected.

Could be a faulty I2C scanner code which we cannot see.
Or a short circuit (5V GND?) on the data line, so it always "answers"?

1 Like

This is a more direct link to the documentation for the Nano Matter: https://docs.arduino.cc/hardware/nano-matter/

From the Pinout https://docs.arduino.cc/resources/pinouts/ABX00112-full-pinout.pdf, there appears to be two I2C busses which have been broken out.

Maybe try adapting the Wire.begin() statement in the scanner code. Something like: Wire.begin(A4,A5); // SDA, SCL

EDIT

Here is an I2C example from the Nano Matter Github repository: arduino/libraries/Matter/examples/matter_air_quality_sensor/matter_air_quality_sensor.ino at main · SiliconLabs/arduino · GitHub

The sequence is easy enough to explain because a standard I2C scanner (here is one: Arduino Playground - I2cScanner) builds an address starting at 1, tries it, then proceeds likewise until 127 . I don't know enough to explain the systematic false detections in this case, though.

 // --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  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("Unknown 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
}

Provide a picture of the wired hardware.

I know that. but I wanted to run the program to make sure it's working which it looks like it doesnt since it 'detectes' all addresses

Yes, I realise that now. Sorry for 'stating the obvious'.

Was there any resolution to this? I'm trying the same on Wire and Wire1 and on two different boards. There is literally nothing connected to it and it's finding things on every address.

it went away when i connected things up completely. i have a feeling with nothing connected it will fail maybe because things are terminated.

I2C / SMBUS is an open drain interface. This means that while there is a logic low level defined, there is no logic high but rather high impedance. For this reason, external pull-up resistors are required on the SCL / SDA lines to soft park the lines. If you are running without true I2C hardware mated to the board and the pull-ups are missing then it is just noise being falsely detected by the processor. You should find that the phantom I2C nodes will disappear once you apply the required pull-up resistors of say 2k2 - 10k each on the SCL and SDA lines.