Serial Peripheral Interface

SPI(Serial Peripheral Interface, SPI bus - послідовний периферійний інтерфейс, шина SPI) - послідовний синхронний стандарт передачі даних в режимі повного дуплексу, призначений для забезпечення простого і недорогого високошвидкісного сполучення мікроконтролерів і периферії. SPI також іноді називають чотирипровідним (англ. four-wire) інтерфейсом.

На відміну від стандартного послідовного порту (англ. standard serial port), SPI є синхронним інтерфейсом, в якому будь-яка передача синхронізована із загальним тактовим сигналом, що генерується провідним пристроєм (процесором). Приймаюча (відома) периферія синхронізує отримання бітової послідовності тактовим сигналом. До одного послідовного інтерфейсу периферійного провідного пристрою-мікросхеми може приєднуватися кілька мікросхем. Провідний пристрій вибирає ведене для передачі активуючи сигнал «вибір кристала» (англ. chip select) на веденій мікросхемі. Периферія, не вибрана процесором, не бере участі у передачі SPI.

Зміст

У SPI використовуються чотири цифрові сигнали:

  • MOSI - вихід ведучого, вхід веденого (Master Out Slave In). Служить передачі від провідного пристрою веденому.
  • MISO - вхід ведучого, вихід веденого (Master In Slave Out). Служить передачі від провідного пристрою.
  • SCLK або SCK — послідовний тактовий сигнал (Serial Clock). Служить передачі тактового сигналу для ведених пристроїв.
  • CS або SS - вибір мікросхеми, вибір веденого (англ. Chip Select, Slave Select).

Конкретні імена портів інтерфейсу SPI можуть різнитися залежно від виробника апаратних засобів, у своїй можливі таківаріанти:

  • MOSI: SIMO, SDI (на пристрої), DO, DON, SI, MRSR;
  • MISO: SOMI, SDO (на пристрої), DI, DIN, SO, MTST;
  • SCLK: SCK, CLK;
  • SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.

Частота прямих бітових інтервалів в лініях передачі даних визначається синхросигналом SCK, який генерує провідний пристрій, ведені пристрої використовують синхросигнал для визначення моментів зміни бітів на лінії даних, при цьому ведені пристрої ніяк не можуть впливати на частоту бітових інтервалів. Як у провідному пристрої, так і у веденому пристрої є лічильник імпульсів синхронізації (бітів). Лічильник у веденому пристрої дозволяє останньому визначити момент закінчення передачі пакета. Лічильник скидається при вимкненні підсистеми SPI, така можливість завжди є у провідному пристрої. У веденому пристрої лічильник зазвичай скидається деактивацією інтерфейсного сигналу SS.

Так як дії ведучого та веденого пристрою тактуються одним і тим же сигналом, то до стабільності цього сигналу не пред'являється жодних вимог, за винятком обмеження на тривалість напівперіодів, яка визначається максимальною робочою частотою повільнішого пристрою. Це дозволяє використовувати SPI у системах із низькостабільною тактовою частотою, а також полегшує програмну емуляцію провідного пристрою.

Передача здійснюється пакетами. Довжина пакета, як правило, становить 1 байт (8 біт), при цьому відомі реалізації SPI з іншою довжиною пакета, наприклад, 4 біти. Провідний пристрій ініціює цикл зв'язку встановленням низького рівня на виведенні вибору підпорядкованого пристрою (SS) того пристрою, з яким необхідно встановити з'єднання. При низькому рівні сигналу SS:

  • схемотехніка веденого пристрою знаходиться в активному стані;
  • висновок MISO перетворюється на режим «вихід»;
  • тактовий сигнал SCLK від провідного пристрою сприймається веденим і викликає зчитування на вході MOSI значень переданих від провідного бітів та зсув регістру веденого пристрою.

Дані, що підлягають передачі, провідне та ведене пристрої поміщають у зсувні регістри. Після цього провідний пристрій починає генерувати імпульси синхронізації лінії SCLK, що призводить до взаємного обміну даними. Передача даних здійснюється біт за бітом від провідного лінії MOSI і від веденого лінії MISO. Передача здійснюється, як правило, починаючи зі старших бітів, але деякі виробники допускають зміну порядку передачі бітів програмними методами. Після передачі кожного пакета даних провідний пристрій з метою синхронізації веденого пристрою може перевести лінію SS у високий стан.

Можливі чотири комбінації фази (CPHA) та полярності (CPOL) сигналу SCLK по відношенню до сигналів даних. Режими роботи визначаються комбінацією біт CPHA та CPOL:

  • CPOL = 0 – сигнал синхронізації починається з низького рівня;
  • CPOL = 1 - сигнал синхронізації починається з високого рівня;
  • CPHA = 0 - вибірка даних проводиться по передньому фронту сигналу синхронізації;
  • CPHA = 1 - вибірка даних проводиться по задньому фронту сигналу синхронізації.

Для позначення режимів роботи інтерфейсу SPI прийнято таку угоду:

  • режим 0 (CPOL = 0, CPHA = 0);
  • режим 1 (CPOL = 0, CPHA = 1);
  • режим 2 (CPOL = 1, CPHA = 0);
  • режим 3 (CPOL = 1, CPHA = 1).

У найпростішому випадку до провідного пристрою підключено єдиний ведений пристрійпотрібен двосторонній обмін даними. У такому разі використовується трипровідна схема підключення. Інтерфейс SPI дозволяє підключати до одного провідного пристрою кілька ведених пристроїв, причому підключення може бути здійснено кількома способами.

Перший спосіб дозволяє реалізувати радіальну структуру зв'язку (топологія типу "зірка"), його прийнято вважати основним способом підключення кількох ведених пристроїв. В даному випадку для обміну більш ніж з одним керованим пристроєм провідний пристрій повинен формувати відповідну кількість сигналів вибору керованого пристрою ( SS ). При обміні даними з веденим пристроєм, відповідний йому сигнал SS переводиться в активний (низький) стан, при цьому решта всіх сигналів SS знаходяться в неактивному (високому) стані. Виводи даних MISO ведених пристроїв з'єднані паралельно, при цьому вони перебувають у неактивному стані, а перед початком обміну один із виходів (вибраного веденого пристрою) переходить в активний режим.

Другий спосіб дозволяє реалізувати структуру зв'язку типу «кільце». В даному випадку для активації одночасно кількох ведених пристроїв використовується один сигнал SS , а висновки всіх даних пристроїв з'єднані послідовно і утворюють замкнутий ланцюг. При передачі пакета від провідного пристрою цей пакет отримує перший ведений пристрій, який, у свою чергу, транслює свій пакет наступного веденого пристрою і так далі. Щоб пакет від провідного пристрою досяг певного веденого пристрою, провідний пристрій повинен відправити ще кілька пакетів.

Переваги

Недоліки

  • Необхідно більше висновків, ніж інтерфейсу I²C.
  • Пристрій не може керувати потоком даних.
  • Немає підтвердження прийомуданих із боку веденого пристрою (провідний пристрій може передавати дані «у нікуди»).
  • Немає визначеного стандартом протоколу виявлення помилок.
  • Відсутність офіційного стандарту, що унеможливлює сертифікацію пристроїв.
  • По дальності передачі даних інтерфейс SPI поступається таким стандартам, як UART та CAN.
  • Наявність безлічі варіантів реалізації інтерфейсу.
  • Відсутність підтримки гарячого підключення пристроїв.

Нижче наведено приклад програмної реалізації SPI майстра мовою Сі. Лінія CS (chip select, вибір мікросхеми) повинна бути активована (у більшості випадків – притягнута до низького рівня), перед тим, як розпочнеться обмін даними, та деактивована після закінчення обміну. Більшість пристроїв вимагають кілька сеансів передачі з активною лінією CS. Ця функція може бути викликана кілька разів, доки лінія активна.