user34852: I'm working on a project where I have to communicate to several devices over I2C using a Genuino 101. Now I'm trying to get data off the bus but wire.available() stays at 0, even though my trace clearly shows there's data being sent.

with the following timings


Because the wire is never available my readbuf will always be empty.
Rdbuf[0] is: 0 Hex is: 0
Rdbuf[1] is: 0 Hex is: 0

I'm using the following code to read from the I2C bus.
void i2cRead(unsigned char device, unsigned char memory, int len, unsigned char * rdBuf) {
  ushort memstart = memory;
  bool available = true;;
  while (len > 0 && available) {
    available = false;
    ushort blockSize;
    /*If the number of bytes is smaller than the block size, read that size*/
    (len < RD_BLCK_SIZE) ? blockSize = len : blockSize = RD_BLCK_SIZE;
    Wire.beginTransmission(static_cast<int>(device));
    //send i2c START command
    Wire.write(memory);
    //Write memory address
    Wire.endTransmission();
    //send i2c STOP command
    Wire.requestFrom(static_cast<int>(device), blockSize,true);
    //Request blockSize bytes from the device
    /* for every byte in the response add that byte to the read buffer */
    while (Wire.available() && (len != 0)) {
      available = true;
      rdBuf[memory - memstart] = Wire.read();
      memory++;
      len--;
    }
  }
}

I'm not quite sure what I'm doing wrong, any help would be much appreciated.
Edit:
Below is an image of the current (minimal) setup. On the left there's the board with the ADC and multiplexer visible.

The third set of wires goes to my protocol analyzer.

user34852: Since this has been reopened i figured i'd post what the problem was, in the end and what i did to fix it.
it turns out, that even though the documentation of the Curie tells us to apply a level shifter for i2c communications, this level shifter is already in-place on the genuino 101.
skimming over the documentation of the 101, i had overlooked this.
The fix, in the end was removing the level shifter.

34852: <p>I'm working on a project where I have to communicate to several devices over I2C using a Genuino 101. Now I'm trying to get data off the bus but <code>wire.available()</code> stays at 0, even though my trace clearly shows there's data being sent.</p>
<p><a href="https://i.stack.imgur.com/UVF5L.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/UVF5L.png" alt=" i2c trace" /></a></p>
<p>with the following timings</p>
<p><a href="https://i.stack.imgur.com/ZyYa6.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZyYa6.png" alt="enter image description here" /></a></p>
<p><a href="https://i.stack.imgur.com/kasgb.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/kasgb.jpg" alt="timings" /></a></p>
<p>Because the wire is never available my readbuf will always be empty.</p>
<pre><code>Rdbuf[0] is: 0 Hex is: 0
Rdbuf[1] is: 0 Hex is: 0
</code></pre>
<p>I'm using the following code to read from the I2C bus.</p>
<pre><code>void i2cRead(unsigned char device, unsigned char memory, int len, unsigned char * rdBuf) {
  ushort memstart = memory;
  bool available = true;;
  while (len &gt; 0 &amp;&amp; available) {
    available = false;
    ushort blockSize;
    /*If the number of bytes is smaller than the block size, read that size*/
    (len &lt; RD_BLCK_SIZE) ? blockSize = len : blockSize = RD_BLCK_SIZE;
    Wire.beginTransmission(static_cast&lt;int&gt;(device));
    //send i2c START command
    Wire.write(memory);
    //Write memory address
    Wire.endTransmission();
    //send i2c STOP command
    Wire.requestFrom(static_cast&lt;int&gt;(device), blockSize,true);
    //Request blockSize bytes from the device
    /* for every byte in the response add that byte to the read buffer */
    while (Wire.available() &amp;&amp; (len != 0)) {
      available = true;
      rdBuf[memory - memstart] = Wire.read();
      memory++;
      len--;
    }
  }
}
</code></pre>
<p>I'm not quite sure what I'm doing wrong, any help would be much appreciated.</p>
<h1>Edit:</h1>
<p>Below is an image of the current (minimal) setup. On the left there's the board with the ADC and multiplexer visible.</p>
<p><a href="https://i.stack.imgur.com/kasgb.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/kasgb.jpg" alt="Arduino setup" /></a></p>
<p>The third set of wires goes to my protocol analyzer.</p>
 34852: <p>Since this has been reopened i figured i'd post what the problem was, in the end and what i did to fix it.</p>

<p>it turns out, that even though the documentation of the Curie tells us to apply a level shifter for i2c communications, this level shifter is already in-place on the genuino 101.</p>

<p>skimming over the documentation of the 101, i had overlooked this.
The fix, in the end was removing the level shifter.</p>
