Connect the GND between the boards.
The GND is connected between the two boards (always was).
Is your picture wrong ? The Black square is the Adafruit Sense board with nRF52840 processor ?
No the picture is supposed to show how the pins on the M0 clone board are connected to its microcontroller (the Atmel CPU). I was worried that since it is not an original board, it might have a different wiring on the board compared to other schematics of M0 boards. Sorry if that confused you.
Make a sketch on the M0 with only
Wire.begin(slave_address)[...] The Master should see all the onboard I2C devices. Can you also see the M0 Arduino board appear and disappear if you connect and disconnect it ?
To be honest I do not know how to implement an I2C scan. But I suppose that observing the traces with the oscilloscope should do the job if set it on a single trigger event on the falling edge.
For comparison, I used
pinMode(PIN_WIRE_SDA, OUTPUT);
pinMode(PIN_WIRE_SCL, OUTPUT);
digitalWrite(PIN_WIRE_SCL, LOW);
digitalWrite(PIN_WIRE_SDA, LOW);
to test the trigger. This works fine, i.e. I see the falling edge on my oscilloscope. If I repeate the process with a single Wire.begin(slave_address) only, then the oscilloscope is never triggered. Is that sufficient?
A slave can not output anything by itself because every transmission is started by a master.
interesting, I did not know that the I2C works in that way. Based on this new insight, I tried the following: I entered the I2C as master with my M0 board to see whether it outputs something. Result: Yes it does.
But this does not answer the question why I never receive anything with Wire.read() inside my callbacks.