Perhaps the best you can hope for is to use a version of:(From : \arduino-1.5.1r2\hardware\arduino\sam\libraries\Wire\Wire.cpp)static inline bool TWI_WaitTransferComplete(Twi *_twi, uint32_t _timeout)and/orstatic inline bool TWI_WaitByteSent(Twi *_twi, uint32_t _timeout)

This checks for the byte being sent, and if an NACK hasn't been received (which is good). You would need to invert the return value...

//Service note: Wire.endTransmission(false) does not work as advertised. A STOP is always generated. // not only that, but NACK's are ignored too. // //The Problem: A NACK (slave not found) error is only available after a STOP bit has been issued. // Cannot detect a bad address until we complete the whole process. //Worse: The NACK flag is reset everytime any part of the Status register is read by code. TWI_StartWrite(WIRE_INTERFACE, i2c_addr, 0, 0, i2c_register); Embiic_WaitByteSent(); i=0; while (i < numOfBytes) { TWI_WriteByte(WIRE_INTERFACE, params[i++]); if (i < (numOfBytes - 1)) { //cannot check the i2c status register on the last transmit, need to Embiic_WaitByteSent(); // preserve any flagged NACK's } } TWI_Stop(WIRE_INTERFACE); if (!Embiic_CheckTXCOMP()) { //look for TX Completion, and check the NACK flag. Error_Code = 2110; }

I'm fiddling with the Wire.cpp code myself now, based on Chris' notes. One thing that stands out on top of everything else (and which doesn't appear to be specifically mentioned in these threads) is that sendStop is being ignored *entirely* right now... endTransmission() is effectively identical to endTransmission(sendStop) for all values of sendStop when it comes to the Due "sam" library.