diff --git a/src/lib/drivers/device/nuttx/I2C.cpp b/src/lib/drivers/device/nuttx/I2C.cpp index b7054b3d36..5c1c3616cd 100644 --- a/src/lib/drivers/device/nuttx/I2C.cpp +++ b/src/lib/drivers/device/nuttx/I2C.cpp @@ -216,6 +216,29 @@ I2C::transfer(const uint8_t *send, const unsigned send_len, uint8_t *recv, const int ret_transfer = I2C_TRANSFER(_dev, &msgv[0], msgs); if (ret_transfer != 0) { + + switch (ret_transfer) { + case -EAGAIN: + PX4_WARN("I2C bus: %d, Addr: %X, Arbitration Lost", get_device_bus(), get_device_address()); + break; + + case -EIO: + PX4_WARN("I2C bus: %d, Addr: %X, Overrun/Underrun", get_device_bus(), get_device_address()); + break; + + case -EADDRNOTAVAIL: + //PX4_WARN("I2C bus: %d, Addr: %X, Address NACK", get_device_bus(), get_device_address()); + break; + + case -ECOMM: + PX4_WARN("I2C bus: %d, Addr: %X, Data NACK", get_device_bus(), get_device_address()); + break; + + case -EBUSY: + PX4_WARN("I2C bus: %d, Addr: %X, Bus busy", get_device_bus(), get_device_address()); + break; + } + DEVICE_DEBUG("I2C transfer failed, result %d", ret_transfer); ret = PX4_ERROR;