Add waits after i2c reg writes.
1 files changed, 3 insertions(+), 0 deletions(-)

M platform_samd_i2c.c
M platform_samd_i2c.c +3 -0
@@ 409,6 409,7 @@ static void
 private_send_stop(uint8_t sercom_no)
 {
   I2CS[sercom_no].dev->I2CM.CTRLB.reg |= SERCOM_I2CM_CTRLB_CMD(3);
+  I2C_SYSOPBUSY(I2CS[sercom_no].dev);
 }
 
 static void

          
@@ 468,6 469,7 @@ i2c_sercom_handler(D21_I2C_BUS_t *self)
     if (self->request.txlen > 0) {
       // continuing the data transfer
       dev->I2CM.DATA.reg = *self->request.tx;
+      I2C_SYSOPBUSY(dev);
       self->request.tx++;
       self->request.txlen--;
     } else {

          
@@ 497,6 499,7 @@ i2c_sercom_handler(D21_I2C_BUS_t *self)
           ctl_events_set_clear(&self->events, TRANSFER_DONE_EVENT, 0);
         }
 
+        I2C_SYSOPBUSY(dev);
         *self->request.rx = dev->I2CM.DATA.reg;
         self->request.rx++;
         self->request.rxlen--;