1. Количество проводов и пинов:
Параметр | I2C | SPI |
---|---|---|
Основные линии | 2 провода: SDA (данные), SCL (такт) | 4 провода: MOSI (выход), MISO (вход), SCK (такт), SS (выбор устройства) |
Дополнительно | Нужны pull-up резисторы (~4.7 кОм) | Для каждого устройства требуется отдельный SS (CS) пин. |
-
I2C экономит пины, но требует резисторов.
-
SPI использует больше пинов, особенно при подключении нескольких устройств.
2. Скорость передачи:
Параметр | I2C | SPI |
---|---|---|
Стандартная | До 400 кГц (режим Fast Mode) | До 10+ МГц (зависит от микроконтроллера) |
Преимущество | Подходит для медленных устройств | Идеален для высокоскоростных задач (например, видео или графика). |
-
SPI значительно быстрее, но требует больше ресурсов.
3. Адресация устройств:
Параметр | I2C | SPI |
---|---|---|
Адресация | У каждого устройства уникальный 7/10-битный адрес | Нет адресов — выбор устройства через SS (CS) пин. |
Мультимастер | Поддерживается | Редко поддерживается. |
-
В I2C можно подключить несколько устройств на одну шину (например, датчик + дисплей).
-
В SPI для каждого устройства требуется отдельный SS пин.
4. Сложность реализации:
Параметр | I2C | SPI |
---|---|---|
Протокол | Сложнее: требуется управление старт/стоп битами, подтверждениями (ACK/NACK). | Проще: данные передаются в реальном времени по тактовому сигналу. |
Библиотеки |
Wire.h (встроенная в Arduino IDE) |
SPI.h (встроенная, но часто требуется ручная настройка CS). |
-
I2C проще в разводке, но сложнее в протоколе.
-
SPI проще в коде, но сложнее при подключении множества устройств.
5. Энергопотребление:
-
I2C потребляет меньше энергии в режиме ожидания.
-
SPI может быть энергозатратным из-за высокой скорости и активных линий.
6. Примеры использования:
Интерфейс | Где применяется | Примеры дисплеев |
---|---|---|
I2C | Низкоскоростные устройства, экономия пинов. | Символьные LCD (через адаптер), OLED (SSD1306), датчики. |
SPI | Высокоскоростные задачи, графика. | TFT (ILI9341), графические LCD, LED-матрицы. |
7. Плюсы и минусы:
Интерфейс | Плюсы | Минусы |
---|---|---|
I2C | Минимум проводов, поддержка множества устройств. | Медленнее, требуется адресация. |
SPI | Высокая скорость, простота протокола. | Много пинов, сложность при масштабировании. |
Когда выбрать I2C:
-
Нужно подключить несколько устройств с минимальным количеством проводов.
-
Скорость не критична (например, вывод текста на OLED).
-
Проект с ограниченным количеством пинов Arduino.
Когда выбрать SPI:
-
Требуется высокая скорость (анимация, графика на TFT).
-
Нет ограничений по количеству пинов.
-
Работа с памятью или другими SPI-устройствами.
Советы:
-
Некоторые дисплеи (например, OLED) поддерживают оба интерфейса — выбор зависит от ваших задач.
-
Для I2C проверяйте адреса устройств с помощью
I2C Scanner
. -
В SPI избегайте длинных проводов — возможны помехи.