On I2cMaster::reset there is no actual reset of the I2C peripheral.
If there are some connectivity problems with I2C lines, this could lead, that no event is generated, transaction is not finished and peripheral stays in hanging state.
I think, resetting peripheral needs to be added to the reset routine.
I2C2->CR1 &= ~I2C_CR1_PE;
modm::delay(5us);
I2C2->CR1 |= I2C_CR1_PE;
On I2cMaster::reset there is no actual reset of the I2C peripheral.
If there are some connectivity problems with I2C lines, this could lead, that no event is generated, transaction is not finished and peripheral stays in hanging state.
I think, resetting peripheral needs to be added to the reset routine.