diff options
| -rw-r--r-- | ports/esp32/machine_i2c.c | 12 | ||||
| -rw-r--r-- | ports/esp32/mpconfigport.h | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/ports/esp32/machine_i2c.c b/ports/esp32/machine_i2c.c index d9003f45b..b037202e8 100644 --- a/ports/esp32/machine_i2c.c +++ b/ports/esp32/machine_i2c.c @@ -79,10 +79,20 @@ int machine_hw_i2c_transfer(mp_obj_base_t *self_in, uint16_t addr, size_t n, mp_ machine_hw_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in); i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + int data_len = 0; + + if (flags & MP_MACHINE_I2C_FLAG_WRITE1) { + i2c_master_start(cmd); + i2c_master_write_byte(cmd, addr << 1, true); + i2c_master_write(cmd, bufs->buf, bufs->len, true); + data_len += bufs->len; + --n; + ++bufs; + } + i2c_master_start(cmd); i2c_master_write_byte(cmd, addr << 1 | (flags & MP_MACHINE_I2C_FLAG_READ), true); - int data_len = 0; for (; n--; ++bufs) { if (flags & MP_MACHINE_I2C_FLAG_READ) { i2c_master_read(cmd, bufs->buf, bufs->len, n == 0 ? I2C_MASTER_LAST_NACK : I2C_MASTER_ACK); diff --git a/ports/esp32/mpconfigport.h b/ports/esp32/mpconfigport.h index 6f4241330..fd810e07b 100644 --- a/ports/esp32/mpconfigport.h +++ b/ports/esp32/mpconfigport.h @@ -87,6 +87,7 @@ #define MICROPY_PY_MACHINE_PWM_DUTY_U16_NS (1) #define MICROPY_PY_MACHINE_PWM_INCLUDEFILE "ports/esp32/machine_pwm.c" #define MICROPY_PY_MACHINE_I2C (1) +#define MICROPY_PY_MACHINE_I2C_TRANSFER_WRITE1 (1) #define MICROPY_PY_MACHINE_SOFTI2C (1) #define MICROPY_PY_MACHINE_SPI (1) #define MICROPY_PY_MACHINE_SPI_MSB (0) |
