Tool/software:
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Tool/software:
Which version of SDK are you using?
As a workaround, please enable MFCLK and set it as I2C clock source.
Let me check with my team for the root cause.
I tried with the MFCLK enabled and now it seems to work. But we still need a solution for using only the SysClock for improving the power consumption.
Also related to the I2C speed, in the datasheet, the range for register CLKDIV is 0-7. if RATIO = 0 => 4Mhz/10 = 400 khz. but with this configuration the I2C doesn't work at all. Is the value 0 not a valid configuration?
The root cause is the async fast clock request.
When enabling I2C controller mode, it will keep requesting for fast clock, which will pull the SYSOSC from 4M to 32M.
So if you want to use low power mode, you need to disable the async fast clock request(modify the CLKCFG register).
For more content about async fast clock request, please refer to the Page 144 of TRM.
We tried to disable the async fast clock request, and the I2C is working using the bus clock.
Unfortunately, by doing this the GPIO interrupt is not working anymore. As an answer I found this specified in the datasheet:
Is there another way we are missing, or the only way is to enable MFCLK and let async fast clock request on?
You can disable I2C async fast clock request only by configuring I2Cx BLOCKASYNC