diff --git a/cpu/kinetis_common/periph/i2c.c b/cpu/kinetis_common/periph/i2c.c index dffdc85d01d5020bad876b626a1b48d76797033e..98c75a23a6ef8ee4d9685ecaf41ecbc7b66d2b98 100644 --- a/cpu/kinetis_common/periph/i2c.c +++ b/cpu/kinetis_common/periph/i2c.c @@ -33,8 +33,15 @@ #include "periph/i2c.h" #define ENABLE_DEBUG (0) +/* Define ENABLE_TRACE to 1 to enable printing of all TX/RX bytes to UART for extra verbose debugging */ +#define ENABLE_TRACE (0) #include "debug.h" +#if ENABLE_TRACE +#define TRACE(...) DEBUG(__VA_ARGS__) +#else +#define TRACE(...) +#endif /* guard file in case no I2C device is defined */ #if I2C_NUMOF @@ -76,6 +83,7 @@ int i2c_release(i2c_t dev) int i2c_init_master(i2c_t dev, i2c_speed_t speed) { + DEBUG("i2c_init_master: %lu, %lu\n", (unsigned long)dev, (unsigned long) speed); I2C_Type *i2c; PORT_Type *i2c_port; int pin_scl = 0; @@ -175,6 +183,7 @@ static inline int _i2c_start(I2C_Type *dev, uint8_t address, uint8_t rw_flag) { /* bus free ? */ if (dev->S & I2C_S_BUSY_MASK) { + DEBUG("i2c:_start: bus busy\n"); return -1; } @@ -186,6 +195,7 @@ static inline int _i2c_start(I2C_Type *dev, uint8_t address, uint8_t rw_flag) /* wait for bus-busy to be set */ while (!(dev->S & I2C_S_BUSY_MASK)) { if (_i2c_arbitration_lost(dev)) { + DEBUG("i2c:_start: arbitration lost\n"); return -1; } } @@ -196,11 +206,13 @@ static inline int _i2c_start(I2C_Type *dev, uint8_t address, uint8_t rw_flag) dev->S = I2C_S_IICIF_MASK; if (_i2c_arbitration_lost(dev)) { + DEBUG("i2c:_start: arbitration lost late\n"); return -1; } /* check for receive acknowledge */ if (dev->S & I2C_S_RXAK_MASK) { + DEBUG("i2c:_start: no addr ack\n"); return -1; } @@ -219,11 +231,13 @@ static inline int _i2c_restart(I2C_Type *dev, uint8_t address, uint8_t rw_flag) dev->S = I2C_S_IICIF_MASK; if (_i2c_arbitration_lost(dev)) { + DEBUG("i2c:_restart: arbitration lost\n"); return -1; } /* check for receive acknowledge */ if (dev->S & I2C_S_RXAK_MASK) { + DEBUG("i2c:_restart: no addr ack\n"); return -1; } @@ -251,6 +265,7 @@ static inline int _i2c_receive(I2C_Type *dev, uint8_t *data, int length) dev->S = I2C_S_IICIF_MASK; if (_i2c_arbitration_lost(dev)) { + DEBUG("i2c:_receive: arbitration lost (to go=%d)\n", length); return -1; } @@ -268,6 +283,7 @@ static inline int _i2c_receive(I2C_Type *dev, uint8_t *data, int length) } data[n] = (char)dev->D; + TRACE("i2c: rx: %02x\n", (unsigned int)data[n]); n++; } @@ -279,6 +295,7 @@ static inline int _i2c_transmit(I2C_Type *dev, uint8_t *data, int length) int n = 0; while (length > 0) { + TRACE("i2c: tx: %02x\n", (unsigned int)data[n]); dev->D = data[n]; while (!(dev->S & I2C_S_IICIF_MASK));