2021-03-09 08:42 AM
Hi everyone,
Do you know if I can drive a 1.8V I2C bus if my uc is powered in 3.3V?
Thanks for your answer.
2021-03-09 09:15 AM
Let's hope 12.8 V is a misprint and you really mean 2.8 V
I2C drivers are open-drain, so as long as you use external pull-up resistors things should be fine.
You might need to run the bus more slowly than would normally be dictated by the (stray) capacitance because you need to reliably wait until the line floats back above the logic threshold of any 3.3 V devices connected to the bus. You don't say which stm32. The data-sheet for your stm32 will say worst-case (highest) logic-high threshold for the pins you are using for I2C.
Hope this helps,
Danish
2021-03-09 10:32 AM
Thanks for your answer.
Effectively, I mean 1.8V like in the title. Also, I use a STM32L462 and externals pull-up.
Effectively, I have found information in the data sheet. For the stm32, the logic-high threshold is computed with this formula: 0.49 * VDD +0.26.
In my case the threshold level is 1.877.
I think that my problem become from that.
Thank for your help.
Daniel
2021-03-10 05:05 AM
Could you pull-up to (approximately) 1.8 + 0.3 V = 2.1 V?
This will only be 0.3 V above the Vdd of your low-voltage devices, so shouldn't turn-on the ESD protection diodes or cause any other issues.
But it will be above the stm32 threshold from that formula.
How do you get 2.1 V?
Instead of each pull-up resistor, have a pull-up to 3.3 V and a pull-down to 0 V on each of SCL and SDA.
e.g. 5.6k pull-up and 10k pull-down will give 2.11 V at 3.6 k impedance.
Of course this wastes power, approx half a milliamp.
If you pull to between 1.8 and 3.3 V there will be less power wastage, but you have to consider if the 1.8 V line will always sink that current which you are feeding in from the potential divider.
Depending on your budget and design-requirements, you could also consider I2C level-shifters which do exist.
Regards,
Danish