AnsweredAssumed Answered

Can't reset I2C in STM32F407 to release I2C lines

Question asked by Hess.Marco on Jan 12, 2017
Latest reply on Mar 18, 2018 by Martin Round

I am using an STM32F407 on a customer board and have trouble with the I2C handling.

 

I am using the latest HAL HAL_I2C_MasterTransmitIT and HAL_I2C_MasterReceiveIT to poll data from a sensor.

 

The problem is that after a while the I2C lines lock up (both SDA and SCL low) and the HAL_I2C_MasterTransmitIT returns errors.

 

I do detect the error and try to handle the problem by deinit the I2C. I then reconfigure the I/O to software handle some clocking that release SDA if it is stuck by a slave on the bus. At that point I can see that the lines go high again so it is the I2C peripheral in the STM that is pulling it low ( I can also see that on the scope with the low level slightly above ground while when the lines are pulled by a slave device, the go lower).

 

I then reinit the I2C peripheral but as soon as the I2C is activated and connected to the I/O lines, the SDA and SCL are pulled low again.

 

So I can't seem to reset the I2C without restarting the whole chip.

 

Is there a other way to properly reset the I2C?

 

Also, what can be causing this lockup in the first place?

Outcomes