Как-то раз на собеседовании у меня спросили про отличие I2C и SPI интерфейсов.
"Изи вопрос" подумал я и уверенно ответил, что SPI быстрее, чем I2C.
Последовавший вопрос "Почему?" я ожидал меньше всего и, откровенно говоря, он застал меня врасплох.
Какая в конце концов разница - почему?! Один быстрее, другой медленнее. Разве этого не достаточно?
Я пытался как-то выкрутиться, сообразить по ходу дела, но так и не смог выйти достойно выйти из ситуации.
После собеседования я всё-таки загуглил и теперь вот могу написать небольшой пост😀
На картинке изображено внутреннее строение драйверов SPI и I2C.
То, как они выглядят внутри микросхемы.
I2C - это open drain, т.е. он имеет внешний подтягивающий резистор (обычно 2.2к - 10к).
SPI - это push-pull, т.е. никаких резисторов в драйвере нет.
Поскольку дорожка, по которой идет сигнал, обладает паразитной емкостью, то чтобы переключить напряжение из логического 0 в логическую 1 нужно зарядить эту емкость.
В топологии I2C ток заряда ограничивает подтягивающий внешний резистор.
В топологии SPI ток заряда ограничен только внутренним драйвером.
Поэтому SPI и быстрее.
P.S. То собеседование я так и не прошел и вместо Казахстана уехал в Молдову🥲
Post #135
193
- 😁 3
- ❤ 1
- 👍 1
- 😢 1
- 🍌 1