Thanks,
Using DEBUG and break point, I easily ends up with SDA line lock down. The BBF bit stays to one forever. Its really not GPIO driver driven but it work and it unlock the I2C bus.I understand from your answer that the controller can't be force to "clock" the SCL line. I agree with the "user code" part but the driver need to be interrogated and return something like "I can't solve this one?".
#define I2C_MASTER_SDA_PIN_1 PTA-> PSOR |= 0x00000004
#define I2C_MASTER_SDA_PIN_0 PTA-> PCOR |= 0x00000004
#define I2C_MASTER_SCL_PIN_1 PTA-> PSOR |= 0x00000008
#define I2C_MASTER_SCL_PIN_0 PTA-> PCOR |= 0x00000008
#define I2C_MASTER_SDA_PIN_AS_IN (PTA-> PDDR = (PTA-> PDDR &(~(1U << 2))) | (0 << 2))
#define I2C_MASTER_SDA_PIN_AS_OUT (PTA-> PDDR = (PTA-> PDDR &(~(1U << 2))) | (1 << 2))
#define I2C_MASTER_SCL_PIN_AS_IN (PTA-> PDDR = (PTA-> PDDR &(~(1U << 3))) | (0 << 3))
#define I2C_MASTER_SCL_PIN_AS_OUT (PTA-> PDDR = (PTA-> PDDR &(~(1U << 3))) | (1 << 3))
#define I2C_MASTER_SDA_PIN_AS_GPIO PORTA-> PCR[2] = (PORTA-> PCR[2] &(~(PORT_PCR_MUX_MASK))) | PORT_PCR_MUX(PORT_MUX_AS_GPIO)
#define I2C_MASTER_SCL_PIN_AS_GPIO PORTA-> PCR[3] = (PORTA-> PCR[3] &(~(PORT_PCR_MUX_MASK))) | PORT_PCR_MUX(PORT_MUX_AS_GPIO)
#define I2C_MASTER_SDA_PIN_AS_I2C PORTA-> PCR[2] = (PORTA-> PCR[2] &(~(PORT_PCR_MUX_MASK))) | PORT_PCR_MUX(PORT_MUX_ALT3)
#define I2C_MASTER_SCL_PIN_AS_I2C PORTA-> PCR[3] = (PORTA-> PCR[3] &(~(PORT_PCR_MUX_MASK))) | PORT_PCR_MUX(PORT_MUX_ALT3)
#define I2C_MASTER_SDA_PIN_STATE (PTA-> PDIR &(1U << 2))
I do add this on all my I2C implementation.