3.21. Основи SPI¶
SPI (Serial Peripheral Interface) — це синхронна послідовна шина, розроблена для короткодистанційних, високошвидкісних з’єднань між одним контролером та одним або кількома периферійними пристроями на одній платі. Це стандартний інтерфейс для SD-карток, дисплеїв, флеш-пам’яті, АЦП і ЦАП, а також широкого спектру датчиків.
Там де UART не мав спільного тактового сигналу і відновлював синхронізацію безпосередньо з лінії даних, SPI використовує окремий тактовий провід поруч із лініями даних. Контролер керує тактовим сигналом з бажаною частотою, і кожен інший пристрій на шині зчитує дані в синхронізації з цим тактовим сигналом. Ніякого вгадування швидкості передачі і ніяких накладних витрат на кадрування — лише тактові фронти та біти.
3.21.1. Чотири дроти¶
Повнодуплексна шина SPI має чотири дроти:
SCK (послідовний тактовий сигнал). Керується контролером. Кожен біт синхронізується за фронтом або спадом цього сигналу.
MOSI (вихід контролера, вхід периферійного пристрою). Вихідна лінія контролера; периферійний пристрій зчитує з неї біти.
MISO (вхід контролера, вихід периферійного пристрою). Вихідна лінія периферійного пристрою; контролер зчитує з неї біти.
CS (вибір мікросхеми), іноді позначається SS (вибір периферійного пристрою). Окрема лінія для кожного периферійного пристрою. Контролер переводить CS у низький рівень, щоб почати транзакцію, і знову в високий, щоб її завершити; будь-який периферійний пристрій із знятим CS повністю ігнорує шину і перестає керувати своїм виходом MISO.
Один байт SPI: CS переходить в низький рівень для вибору периферійного пристрою, SCK синхронізує вісім бітів, а MOSI та MISO передають по одному байту в протилежних напрямках.¶
Кожен тактовий фронт одночасно переміщує по одному біту в кожному напрямку. Один імпульс SCK одночасно надсилає один біт по MOSI і отримує один біт по MISO — SPI є повнодуплексним на рівні проводів. Програмне забезпечення не зобов’язане використовувати обидва напрямки: транзакції лише на запис і лише на читання є звичайною практикою, а невикористана лінія або ігнорується, або утримується у високому рівні.
3.21.2. Полярність і фаза тактового сигналу¶
Два конфігураційних біти визначають, який саме тактовий фронт переміщує дані:
Полярність тактового сигналу (
polarity, інодіCPOL) — стан спокою SCK.0означає, що тактовий сигнал у стані спокою знаходиться на низькому рівні та імпульсує до високого;1означає, що тактовий сигнал у стані спокою знаходиться на високому рівні та імпульсує до низького.Фаза тактового сигналу (
phase, інодіCPHA) — який фронт зчитує дані.0зчитує на першому фронті кожного тактового імпульсу (передній фронт);1зчитує на другому фронті (задній фронт).
Разом вони утворюють чотири режими, що традиційно називаються від Mode 0 до Mode 3. Mode 0 (polarity=0, phase=0) є найпоширенішим і безпечним значенням за замовчуванням для невідомих пристроїв.
Ключове правило: обидва кінці повинні узгоджувати режим. Невідповідні режими дають сміттєві дані, навіть якщо тактовий сигнал і лінії даних підключені правильно; якщо пристрій повертає безглузді дані під час першої транзакції, режим — це перше, що слід перевірити.
3.21.3. Кілька периферійних пристроїв¶
Кілька периферійних пристроїв можуть спільно використовувати одні й ті самі лінії SCK, MOSI та MISO, за умови, що кожен має власну лінію CS, якою керує контролер:
Всі периферійні пристрої бачать однаковий тактовий сигнал та дані, але кожен слідкує за власним CS. Коли CS знятий (високий рівень), периферійний пристрій повністю ігнорує SCK та MOSI, і переводить MISO у стан високого імпедансу, щоб не конфліктувати з іншими пристроями за лінію.
Контролер стверджує рівно один CS одночасно, виконує транзакцію, і знімає CS, щоб звільнити шину.
Мікроконтролер з одним апаратним блоком SPI може спілкуватися з довільною кількістю периферійних пристроїв, залежно від кількості вільних виводів GPIO для ліній CS — на самій шині немає адресації.
3.21.4. Переваги та недоліки¶
Переваги та недоліки SPI випливають з його архітектури:
Швидкість. На коротких доріжках із простою узгодженням рівнів досяжні десятки мегагерц. SD-кард-рідери та SPI-дисплеї активно це використовують.
Простота на рівні проводів. Без адресації, підтверджень, спеціальних умов початку/кінця — лише біти на проводах, синхронізовані з тактовим сигналом.
Велика кількість виводів. Три спільні лінії плюс один CS на кожен периферійний пристрій. Плата з п’ятьма SPI-пристроями використовує вісім виводів (три + п’ять).
Коротка дальність. SPI розрахований на чисті, швидкі фронти, що означає короткі доріжки на одній платі. Для довших з’єднань I2C або одна з шин із кадруванням є кращим вибором.