diff --git a/extras/fsp b/extras/fsp index 8ec537bc8..5d13f916c 160000 --- a/extras/fsp +++ b/extras/fsp @@ -1 +1 @@ -Subproject commit 8ec537bc86b1b71203d72d0cbb28e6e75b353ebd +Subproject commit 5d13f916c72f9d1471864361dfaf8f492cab5979 diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 00233ab4d..976f41f35 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -405,6 +405,19 @@ void TwoWire::_begin(void) { init_ok = false; } } + + if (init_ok) { + // inspired by https://community.element14.com/products/roadtest/b/blog/posts/using-i2c-spi-and-dma-on-renesas-ra2l1-part-1 + // abort previous transactions + if (!is_sci) { + for (int i = 0; i < 20; i++) { + m_i2c_ctrl.p_reg->ICCR1_b.CLO = 1; + while (m_i2c_ctrl.p_reg->ICCR1_b.CLO) { + } + } + } + m_abort(&m_i2c_ctrl); + } } /* -------------------------------------------------------------------------- */ @@ -486,6 +499,10 @@ uint8_t TwoWire::read_from(uint8_t address, uint8_t* data, uint8_t length, unsig if(bus_status == WIRE_STATUS_RX_COMPLETED) { return length; } + + if(bus_status == WIRE_STATUS_UNSET) { + m_abort(&m_i2c_ctrl); + } return 0; /* ???????? return value ??????? */ } @@ -518,6 +535,7 @@ uint8_t TwoWire::write_to(uint8_t address, uint8_t* data, uint8_t length, unsign } else if(bus_status == WIRE_STATUS_UNSET) { rv = END_TX_TIMEOUT; + m_abort(&m_i2c_ctrl); } /* as far as I know is impossible to distinguish between NACK on ADDRESS and NACK on DATA */ diff --git a/variants/MINIMA/libs/libfsp.a b/variants/MINIMA/libs/libfsp.a index a962eb912..62a9a8436 100644 Binary files a/variants/MINIMA/libs/libfsp.a and b/variants/MINIMA/libs/libfsp.a differ diff --git a/variants/PORTENTA_C33/libs/libfsp.a b/variants/PORTENTA_C33/libs/libfsp.a index abb6f7d10..0c447a2cf 100644 Binary files a/variants/PORTENTA_C33/libs/libfsp.a and b/variants/PORTENTA_C33/libs/libfsp.a differ diff --git a/variants/UNOWIFIR4/libs/libfsp.a b/variants/UNOWIFIR4/libs/libfsp.a index a962eb912..62a9a8436 100644 Binary files a/variants/UNOWIFIR4/libs/libfsp.a and b/variants/UNOWIFIR4/libs/libfsp.a differ