The big problem on my end is looking at my scope trace, it's not clear to me what he saw that was wrong, so I'm not sure if I saw the scope trace from i2ctransfer if I'd know if it was working or not.
See the Wikipedia article on
I²C, especially the line state table.
Here is basically what we expect to see on the scope for the write part (I think; I usually let Sigrok/PulseView decode I²C for me):
SDA: ▔▔▔▔ ▔╲▁▁▁ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳▁▁▁╳ ╳▁▁▁╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳───╳ ╳▁▁▁╳ ╳▁▁▁╱▔ ▔▔▔▔SCL: ▔▔▔▔ ▔▔▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁╱▔╲▁ ▁▁╱▔▔▔ ▔▔▔▔ Idle Start Addr0 Addr1 Addr2 Addr3 Addr4 Addr5 Addr6 WRITE ACK W0 W1 W2 W3 W4 W5 W6 W7 ACK Stop Idlebut the thing is, during the ACKs, it is the MEMS device that pulls SDA low (with host side SDA floating). If the MEMS device does not pull SDA low, you get a NAK, and the write fails.
(During ╳, you can have "glitches" or "spikes", especially at ACK/NAK, because that's where the other side is supposed to pull the SDA line down. During the middle horizontal line, the signal can be high or low, but should stay so without glitches.)
The read part can be separate, or instead of a Stop, you can get a repeated Start. Then, the same seven address bits, and then READ (SDA high instead of low), followed by eight data bits, ACK, eight data bits, NAK, and STOP.
If you do not have one, I recommend you get one of the cheap "saleae logic" clones off eBay –– they're direct implementations of the Cypress FX2 application schematic, and work fine under
sigrok. (Sigrok uses its own fx2lafw firmware for these, so when you are using such a clone, you're not actually violating any Saleae's rights; just rip off any stickers that have "Saleae" on them.)
These are 8-channel logic analyzers with max. 24 MHz sample rate, for about $15 or so shipped, and when used with Sigrok, rely on the Cypress appnote/example circuit and completely open software ONLY. For I2C, Sigrok has a protocol decoder, so the user interface will show a graph of the logic levels (digital, so high or low only), and interpret it for you also (it even tells you which are address and which are data bits, what the address or data value is, and so on).
You can get a "proper" logic analyzer, but for I2C and UARTs and SPI for up to say 4 MHz or so, a cheap Cypress FX2 one has sufficed for me. (Although I use Linux exclusively, I've been told the
PulseView release binaries Sigrok offers work fine in Windows also.)