From e1359519abe1b47f3c4c0879175cd050648a119b Mon Sep 17 00:00:00 2001 From: Andreas Urke Date: Tue, 9 Aug 2016 00:25:37 +0200 Subject: [PATCH 1/2] Fix i2c multiple write bug, as reported by Ron Segal: https://sourceforge.net/p/contiki/mailman/message/34633862/ --- platform/srf06-cc26xx/sensortag/board-i2c.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/platform/srf06-cc26xx/sensortag/board-i2c.c b/platform/srf06-cc26xx/sensortag/board-i2c.c index cf74e2a93..ba9eddddd 100644 --- a/platform/srf06-cc26xx/sensortag/board-i2c.c +++ b/platform/srf06-cc26xx/sensortag/board-i2c.c @@ -256,12 +256,11 @@ board_i2c_write_read(uint8_t *wdata, uint8_t wlen, uint8_t *rdata, uint8_t rlen) for(i = 1; i < wlen && success; i++) { /* Write next byte */ ti_lib_i2c_master_data_put(I2C0_BASE, wdata[i]); - if(i < wlen - 1) { - /* Clear START */ - ti_lib_i2c_master_control(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); - while(ti_lib_i2c_master_busy(I2C0_BASE)); - success = i2c_status(); - } + + /* Clear START */ + ti_lib_i2c_master_control(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); + while(ti_lib_i2c_master_busy(I2C0_BASE)); + success = i2c_status(); } if(!success) { return false; From 8128986ccd7271324bc1601a9ec02dcbbbbcc529 Mon Sep 17 00:00:00 2001 From: Andreas Urke Date: Tue, 9 Aug 2016 00:41:19 +0200 Subject: [PATCH 2/2] Remove unecessary bool --- platform/srf06-cc26xx/sensortag/board-i2c.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/platform/srf06-cc26xx/sensortag/board-i2c.c b/platform/srf06-cc26xx/sensortag/board-i2c.c index ba9eddddd..17486d65b 100644 --- a/platform/srf06-cc26xx/sensortag/board-i2c.c +++ b/platform/srf06-cc26xx/sensortag/board-i2c.c @@ -174,8 +174,6 @@ board_i2c_write(uint8_t *data, uint8_t len) bool board_i2c_write_single(uint8_t data) { - bool success; - /* Write slave address */ ti_lib_i2c_master_slave_addr_set(I2C0_BASE, slave_addr, false); @@ -188,9 +186,8 @@ board_i2c_write_single(uint8_t data) /* Assert RUN + START + STOP */ ti_lib_i2c_master_control(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND); while(ti_lib_i2c_master_busy(I2C0_BASE)); - success = i2c_status(); - return success; + return i2c_status(); } /*---------------------------------------------------------------------------*/ bool