Spi flash сигнали за нормальної роботи. Що таке SPI-інтерфейс

SPI (Serial Peripheral Interface) – послідовний синхронний стандарт передачі даних у режимі повного дуплексу, розроблений компанією Motorola для забезпечення простого та недорогого сполучення мікроконтролерів та периферії. SPI також іноді називають чотирипровідним (англ. four-wire) інтерфейсом. SPI є синхронним протоколом, в якому будь-яка передача синхронізована із загальним тактовим сигналом, що генерується провідним пристроєм (процесором). Приймаюча периферія (відома) синхронізує отримання бітової послідовності тактовим сигналом. До одного послідовного інтерфейсу периферійного провідного пристрою-мікросхеми може приєднуватися кілька мікросхем. Провідний пристрій вибирає ведене передачі, активуючи сигнал «вибір кристала» (chip select) на веденій мікросхемі. Периферія, не вибрана процесором, не бере участь у передачі SPI.
У SPI використовуються чотири цифрові сигнали:

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

Залежно від комбінацій полярності та фази синхроімпульсів можливі чотири режими роботи SPI.

Режим SPI Тимчасова діаграма
Режим SPI0

Режим SPI1
Активний рівень імпульсів - високий.

Режим SPI2

Спочатку замикання, потім зсув.

Режим SPI3
Активний рівень імпульсів - низький.
Спочатку зрушення, потім замикання.

У таблиці прийнято:

  • MSB - старший біт;
  • LSB – молодший біт.

Майстру доводиться налаштовуватись на той режим, який використовується веденим.
При обміні даними за інтерфейсом SPI мікроконтролер може працювати як провідний (режим Master) або як ведений (режим Slave). При цьому користувач може задавати такі параметри:

  • режим роботи відповідно до таблиці;
  • швидкість передачі;
  • формат передачі (від молодшого біта до старшого чи навпаки).

З'єднання двох мікроконтролерів структурою ведучий – ведений за інтерфейсом SPI здійснюється за наступною схемою.

Висновки SCK, CS для провідного мікроконтролера є виходами, а веденого мікроконтролера – входами.

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

Одночасно з передачею даних від ведучого до веденого відбувається передача і у зворотному напрямку, за умови, що на вході SS веденого є напруга низького рівня. Таким чином, у кожному циклі зсуву відбувається обмін даними між пристроями. Наприкінці кожного циклу прапор переривання встановлюється в «1» як у провідному мікроконтролері, і у веденом. Прийняті байти зберігаються у приймальних буферах для подальшого використання.

При прийомі даних прийнятий байт повинен бути прочитаний з регістра даних SPI до того, як зсувний регістр надійде останній біт наступного байта. В іншому випадку перший байт буде втрачено.

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

Якщо мікроконтролер перебуває в режимі Master, напрямок передачі даних через виведення SS визначається користувачем. Якщо висновок налаштований як вихід, він працює як лінія виведення загального призначення та не впливає на роботу модуля SPI. Як правило, в цьому випадку він використовується для керування виведенням мікроконтролера SS, що працює в режимі Slave.

Якщо висновок налаштований як вхід, то для забезпечення нормальної роботи модуля SPI на нього має бути подана напруга високого рівня. Подача на цей вхід напруги низького рівня від будь-якої зовнішньої схеми буде сприйнята модулем SPI як вибір мікроконтролера як ведений (при цьому йому починають передаватися дані).

Приклад використання інтерфейсу SPI для мікроконтролерів STM32 добре описаний

з номіналами від 10 Ом до 1 МОм);

  • сполучні дроти (наприклад, ось такий гарний набір);
  • персональний комп'ютер із середовищем розробки Arduino IDE.
  • 1 Опис послідовногоінтерфейсу SPI

    SPI – Serial Peripheral Interface або «Послідовний периферійний інтерфейс»- це синхронний протокол передачі даних для поєднання провідного пристрою (Master)з периферійними пристроями(Slave). Провідним пристроєм часто мікроконтролер. Зв'язок між пристроями здійснюється за чотирма проводами, тому SPI іноді називають «чотирьохпровідний інтерфейс». Ось ці шини:

    Існує чотири режими передачі даних ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), обумовлені поєднанням полярності тактових імпульсів (працюємо за рівнем HIGH або LOW), Clock Polarity, CPOL, і фазою тактових імпульсів (синхронізація по передньому або задньому фронті тактового імпульсу), Clock Phase, CPHA.

    Малюнок пояснює цю таблицю.

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


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

    2 Реалізація інтерфейсу SPIна платах сімейства Arduino

    В Arduino шини інтерфейсу SPI знаходяться на певних портах. Кожна плата має свою відповідність висновків. Для зручності висновки продубльовані та винесені також на окремий роз'єм ICSP(In Circuit Serial Programming, програмування пристрою, включеного в ланцюг, за послідовним протоколом). Зверніть увагу, що на роз'ємі ICSP немає пін вибору веденого - SS, т.к. мається на увазі, що Arduino буде використовуватися як провідний пристрій у мережі. Але при необхідності ви можете призначити будь-який цифровий висновок Ардуїно як SS.

    На малюнку наведено стандартну відповідність висновків шин SPI для Arduino UNO і Nano.


    3 Бібліотека для роботиз інтерфейсом SPI

    Для Arduino написана спеціальна бібліотека, яка реалізує протокол SPI. Підключається вона так: на початку програми додаємо #include SPI.h.

    Щоб розпочати роботу за протоколом SPI, потрібно задати налаштування і потім ініціалізувати протокол за допомогою процедури SPI.beginTransaction(). Можна виконати це однією інструкцією: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    Це означає, що ми ініціалізуємо протокол SPI на частоті 14 МГц, передача даних, починаючи з MSB (найбільш значного біта), як SPI_MODE0.

    Після ініціалізації вибираємо ведений пристрій, переводячи відповідний пін SS у стан LOW.

    Потім передаємо веденому пристрою дані командою SPI.transfer().

    Після передачі повертаємо SS у стан HIGH.


    Робота з протоколом завершується командою SPI.endTransaction().

    Бажано мінімізувати час виконання між інструкціями SPI.beginTransaction() і SPI.endTransaction(), щоб не виникло накладок, якщо інший пристрій спробує ініціалізувати передачу даних, використовуючи інші налаштування.

    4 Підключення зсувного регіструдо Arduino

    Розглянемо практичне застосуванняінтерфейсу SPI. Запалюватимемо світлодіоди, керуючи 8-бітовим зсувним регістром по шині SPI. Підключимо до Arduino зсувний регістр 74HC595. До кожного з 8 виходів регістру через обмежувальний резистор підключимо по світлодіоду номіналом 220 Ом. Схема наводиться малюнку.


    5 Скетч для керування зсувним регістромза інтерфейсом SPI

    Напишемо такий скетч.

    #include const int pinSelect = 8; // пін вибору регістру void setup() ( SPI.begin(); // ініціалізація інтерфейсу SPI pinMode(pinSelect, OUTPUT); //digitalWrite(pinSelect, LOW); // Вибір веденого пристроїв (реєстру) SPI.transfer(0); // Очищаємо вміст регістра digitalWrite(pinSelect, HIGH); // Кінець передачі Serial.begin(9600); } void loop() ( for (int i=0; i )

    Спочатку підключимо бібліотеку SPI та ініціалізуємо інтерфейс SPI. Визначимо пін 8 як пін вибору веденого пристрою SS. Очистимо зсувний регістр, надіславши в нього значення "0". Ініціалізуємо послідовний порт.

    Щоб запалити певний світлодіод за допомогою зсувного регіструпотрібно подати на його вхід 8-розрядне число. Наприклад, щоб спалахнув перший світлодіод - подаємо двійкове число 00000001, щоб другий - 00000010, щоб третій - 00000100, і т.д. Ці двійкові числа при переведенні до десяткової системи числення утворюють таку послідовність: 1, 2, 4, 8, 16, 32, 64, 128 і є ступенями двійки від 0 до 7.

    Відповідно, у циклі loop()за кількістю світлодіодів робимо перерахунок від 0 до 7. Функція pow (підстава, ступінь)зводить 2 ступінь лічильника циклу. Мікроконтролери не дуже точно працюють з числами типу "double", тому для перетворення результату на ціле число використовуємо функцію округлення round(). І передаємо число, що вийшло, в зсувний регістр. Для наочності в монітор послідовного порту виводяться значення, які виходять за цієї операції: одиниця «біжить» по розрядах - світлодіоди спалахують хвилею.

    6 «Більна хвиля»зі світлодіодів

    Світлодіоди спалахують по черзі, і ми спостерігаємо «хвилю», що біжить, з вогників. Управління світлодіодами здійснюється за допомогою зсувного регістру, до якого ми підключилися за інтерфейсом SPI. В результаті для керування 8-ма світлодіодами задіяні всього 3 висновки Arduino.Якби ми підключали світлодіоди безпосередньо до цифрових портів Arduino, нам потрібно було б для кожного світлодіода використовувати окремий порт.

    Ми вивчили найпростіший приклад роботи Arduino із шиною SPI. Докладніше розглянемо роботу кількох зсувних регістрів за незалежного і каскадного підключення в окремій статті.

    SPI - Serial Peripheral Interface - послідовний

    периферійний інтерфейс

    SPI - послідовний синхронний стандарт передачі між мікросхемами як повного дуплекса.

    Спочатку цей інтерфейс був розроблений компанією Motorola для забезпечення простого та недорогого сполучення мікроконтролерів та периферії, а в даний час використовується в продукції багатьох виробників.

    Інтерфейс SPI, поряд з I2C, відноситься до найбільш широко використовуваних інтерфейсів для з'єднання мікросхем. Його найменування є абревіатурою від "Serial Peripheral Interface" (англ. SPI bus -

    шина SPI), що відображає його призначення – шина для підключення зовнішніх пристроїв. Шина SPI організована за принципом "провідний підлеглий". Як провідний шини зазвичай виступає мікроконтролер, але їм також може бути програмована логіка, DSPконтролер або спеціалізована ІС. Підключені до провідного шини зовнішні пристроїутворюють підлеглі шини. У тому ролі виступають різноманітних мікросхеми, зокрема. запам'ятовуючі пристрої (EEPROM, Flash-пам'ять, SRAM), годинник реального часу (RTC), АЦП/ЦАП, цифрові потенціометри, спеціалізовані контролери та ін.

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

    1. Електричне підключення

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

    у передачі по SPI.

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

    MOSI (Master Out Slave In) - вихід провідного пристрою (альтернативне позначення DO, SDO, DOUT), вхід веденого пристрою послідовного прийому даних (альтернативне позначення DI, SDI, DIN). Служить передачі від провідного пристрою веденому.

    MISO (Master In Slave Out) - вхід провідного пристрою послідовного прийому даних (альтернативне позначення DI, SDI, DIN), вихід веденого пристрою послідовної передачі даних (альтернативне позначення DO, SDO, DOUT). Служить передачі від провідного пристрою.

    SCLK (англ. Serial Clock) - послідовний тактовий сигнал (альтернативне позначення DCLOCK, CLK, SCK). Служить передачі тактового сигналу для ведених пристроїв.

    CS чи SS - вибір мікросхеми, вибір веденого пристрою

    (Англ. Chip Select, Slave Select).

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

    Мал. 1. Найпростіше підключення до шини SPI

    Тут, провідний шини передає дані по лінії MOSI синхронно зі згенерованим ним сигналом SCLK, а підлеглий захоплює передані біти даних по певних напрямках прийнятого сигналу синхронізації. Одночасно з цим підлеглий надсилає свою посилку даних. Подану схему можна спростити виключенням лінії MISO, якщо підпорядкована ІС, що використовується, не передбачає відповідну передачу даних або в ній немає потреби. Односторонню передачу даних можна зустріти у таких мікросхем як ЦАП, цифрові потенціометри, підсилювачі, що програмуються, і драйвери. Таким чином, варіант підключення підлеглої ІС вимагає 3 або 4 лінії зв'язку. Щоб підпорядкована ІС приймала та передавала дані, крім наявності сигналу синхронізації, необхідно також, щоб лінія SS була переведена в низький стан. В іншому випадку підпорядкована ІС буде неактивна. Коли використовується тільки одна зовнішня ІВ, може виникнути спокуса виключення та лінії SS за рахунок жорсткого встановлення низького рівня на вході вибору підлеглої мікросхеми. Таке рішення вкрай небажано може призвести до збоїв чи взагалі неможливості передачі, т.к. вхід вибору мікросхеми служить для перекладу ІС у її вихідний стан та іноді ініціює виведення першого біта даних.

    При необхідності підключення до шини SPI кількох мікросхем використовується або незалежне (паралельне) підключення (рис. 2), або каскадне (послідовне) (рис. 3).

    Мал. 2. Незалежне підключення до шини SPI

    Мал. 3. Каскадне підключення до шини SPI

    Незалежне підключення найпоширеніше, т.к. досягається при використанні будь-яких SPI-сумісних мікросхем. Тут, всі сигнали, крім вибору мікросхем, з'єднані паралельно, а провідний шини, перекладом того чи іншого сигналу SS в низький стан, задає, з якою підпорядкованою ІВ він обмінюватиметься даними. Головним недоліком такого підключення є необхідність у додаткових лініях для адресації підлеглих мікросхем (загальна кількість ліній зв'язку дорівнює 3+n, де n-кількість підлеглих мікросхем). Каскадне включення позбавлене цього недоліку, т.к. тут з

    кількох мікросхем утворюється один великий зсувний регістр. Для цього вихід передачі однієї ІС з'єднується з входом прийому даних інший, як показано на малюнку 3. Входи вибору мікросхем тут з'єднані паралельно і, таким чином, загальна кількість ліній зв'язку збережено рівним 4. Однак використання каскадного підключення можливе тільки в тому випадку, якщо його підтримка вказана в документації на мікросхеми, що використовуються. Щоб з'ясувати це важливо знати, що таке підключення по-англійськи називається "daisy-chaining".

    2. Протокол передачі

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

    CPOL - вихідний рівень сигналу синхронізації (якщо CPOL=0, то лінія синхронізації до початку циклу передачі і після його закінчення має низький рівень (тобто перший фронт наростаючий, а останній - падаючий), інакше, якщо CPOL=1, - високий (тобто. перший фронт, що падає, а останній - наростаючий);

    CPHA – фаза синхронізації; від цього параметра залежить, у якій послідовності виконується встановлення та вибірка даних (якщо CPHA=0, то по передньому фронту в циклі синхронізації буде виконуватися вибірка даних, а потім, по задньому фронті, - установка

    даних; якщо ж CPHA=1, то установка даних буде виконуватися по передньому фронту циклі синхронізації, а вибірка - по задньому).

    Провідна та підлегла мікросхеми, що працюють у різних режимах SPI, є несумісними, тому перед вибором підлеглих мікросхем важливо уточнити, які режими підтримуються провідним шини. Апаратні модулі SPI, інтегровані в мікроконтролери, в більшості випадків підтримують можливість вибору будь-якого режиму SPI і тому до них можливе підключення будь-яких підлеглих SPI-мікросхем (належить тільки до незалежного варіанту підключення). Крім того, протокол SPI у будь-якому з режимів легко реалізується програмно.

    Табл. 1. Режими SPI

    Тимчасова

    діаграма

    синхронізація

    3. Порівняння з шиною I2 C

    Як уже згадувалося, для стикування мікросхем не меншою популярністю користується двопровідна послідовна шина I2 C. Нижче можна ознайомитися з перевагами, які дає та чи інша послідовна шина.

    Переваги шини SPI

    Переваги шини I2C

    Гранична простота протоколу

    передачі фізично

    зумовлює високу надійність та

    швидкодія передачі. Граничне

    швидкодія шини SPI вимірюється

    Шина I2 C залишається двопровідною,

    десятками мегагерц і тому вона

    незалежно від кількості

    ідеальна для потокової передачі

    підключеної до неї мікросхем.

    великих обсягів даних та широко

    використовується у високошвидкісних

    ЦАП/АЦП, драйвери світлодіодні

    дисплеїв та мікросхем пам'яті

    Всі лінії шини SPI є

    односпрямованими, що суттєво

    Можливість мультимайстерні

    спрощує вирішення задачі

    роботи, коли до шини підключено

    перетворення рівнів та

    кілька провідних мікросхем.

    гальванічної ізоляції мікросхем

    Протокол I2C є більш

    стандартизованим, тому,

    Простота програмної реалізації

    користувач I2C-мікросхем більше

    протоколу SPI.

    захищений від проблем

    несумісності обраних

    компонентів.

    4. Похідні та сумісні протоколи

    MICROWIRE.

    Протокол MICROWIRE компанії National Semiconductor повністю ідентичний протоколу SPI у режимі 0 (CPOL = 0, CPHA = 0).

    3-провідний інтерфейс компанії Maxim

    Відмінність цього інтерфейсу полягає в тому, що замість повнодуплексної передачі по двох односпрямованих лініях тут виконується напівдуплексна передача по двонаправленій лінії DQ.

    QSPI

    Більш високорівневий протокол, ніж SPI, дозволяє автоматизувати передачу даних без участі ЦПУ.

    З іншого боку, інтерфейс SPI є основою побудови низки спеціалізованих інтерфейсів, зокрема. налагоджувальний інтерфейс JTAG та інтерфейси карт Flash-пам'яті, в т.ч. SD та MMC.

    Інструкція

    SPI - Serial Peripheral Interfaceабо "Послідовний периферійний інтерфейс"- це синхронний протокол передачі для поєднання провідного пристрою (Master) з периферійними пристроями (Slave). Провідним пристроєм часто є. Зв'язок між пристроями здійснюється за чотирма проводами, тому SPI іноді називають "чотирьохпровідний інтерфейс". Ось ці шини:
    MOSI (Master Out Slave In)- Лінія передачі даних від ведучого до ведених пристроїв;
    MISO (Master In Slave Out)- Лінія передачі від веденого до провідного пристрою;
    SCLK (Serial Clock)- тактові імпульси синхронізації, що генеруються провідним пристроєм;
    SS (Slave Select)- Лінія вибору веденого пристрою; коли на лінії "0", ведений пристрій "розуміє", що зараз звертаються до нього.
    Існує чотири режими передачі даних (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), обумовлені поєднанням полярності тактових імпульсів (працюємо за рівнем HIGH або LOW), Clock Polarity, CPOL, і фазою тактових імпульсів (синхронізація по передньому або задньому фронті тактового імпульсу), Clock Phase, CPHA.
    На малюнку показано два варіанти підключення пристроїв протоколу SPI: незалежне і каскадне. При незалежному підключенні до шини SPI провідний пристрій звертається до кожного керованого пристрою індивідуально. При каскадному – пристрої спрацьовують по черзі, каскадом.

    В Arduino шини інтерфейсу SPI знаходяться на певних портах. Кожна плата має свою відповідність висновків. Для зручності висновки продубльовані і винесені на окремий роз'єм ICSP (In Circuit Serial Programming, пристрої, включеного в ланцюг, за послідовним протоколом). Зверніть увагу, що на роз'ємі ICSP немає пін вибору веденого - SS, т.к. мається на увазі, що Arduino буде використовуватися як провідний пристрій у мережі. Але за потреби ви можете призначити будь-який висновок Ардуїно як SS.
    На малюнку наведено стандартну відповідність висновків шин SPI для Arduino UNO і Nano.

    Для Arduino написано спеціальну , яка реалізує протокол SPI. Підключається вона так: на початку програми додаємо #include SPI.h
    Щоб розпочати роботу за протоколом SPI, потрібно задати налаштування, а потім ініціалізувати протокол за допомогою процедури SPI.beginTransaction(). Можна виконати це однією інструкцією: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).
    Це означає, що ми ініціалізуємо протокол SPI на частоті 14 МГц, передача даних, починаючи з MSB (найбільш значного біта), як "0".
    Після ініціалізації вибираємо ведений пристрій, переводячи відповідний пін SS стан LOW.
    Потім передаємо веденому пристрою дані командою SPI.transfer().
    Після передачі повертаємо SS стан HIGH.
    Робота з протоколом завершується командою SPI.endTransaction(). Бажано мінімізувати час виконання між інструкціями SPI.beginTransaction() і SPI.endTransaction(), щоб не виникло накладок, якщо інший пристрій спробує ініціалізувати передачу даних, використовуючи інші налаштування.

    Розглянемо практичне застосування інтерфейсу SPI. Запалюватимемо світлодіоди, керуючи 8-бітовим зсувним регістром по шині SPI. Підключимо до Arduino регістр 74HC595. До кожного з 8 виходів підключимо по світлодіоду (через обмежувальний резистор). Схема наводиться малюнку.

    Напишемо такий скетч.
    Спочатку підключимо бібліотеку SPI та ініціалізуємо інтерфейс SPI. Визначимо пін 8 як пін вибору веденого пристрою. Очистимо зсувний регістр, надіславши в нього значення "0". Ініціалізуємо послідовний порт.
    Щоб запалити певний світлодіод за допомогою регістру зсуву, потрібно подати на його вхід 8-розрядне число. Наприклад, щоб спалахнув перший світлодіод - подаємо двійкове число 00000001, щоб другий - 00000010, щоб третій - 00000100, і т.д. Ці двійкові числа у перекладі в десяткову систему числення утворюють таку послідовність: 1, 2, 4, 8, 16, 32, 64, 128 і є ступенями від 0 до 7.
    Відповідно, у циклі loop() за кількістю світлодіодів робимо перерахунок від 0 до 7. Функція pow (підстава, ступінь)зводить 2 ступінь лічильника циклу. Мікроконтролери не дуже точно працюють з числами типу "double", тому для перетворення результату на ціле число використовуємо функцію округлення round(). І передаємо число, що вийшло, в зсувний регістр. Для наочності в моніторі послідовного порту виводяться значення, які виходять при цій операції: одиниця біжить по розрядах - світлодіоди спалахують хвилею.

    Вступ

    SPI (3-wire) – популярний інтерфейс для послідовного обміну даними між мікросхемами. Інтерфейс SPI, поряд з I 2 C, відноситься до найбільш широко використовуваних інтерфейсів для з'єднання мікросхем. Спочатку він був придуманий компанією Motorola, а зараз використовується в продукції багатьох виробників. Його найменування є абревіатурою від "Serial Peripheral Bus", що відображає його призначення – шина для підключення зовнішніх пристроїв. Шина SPI організована за принципом "провідний-підлеглий". Як провідний шини зазвичай виступає мікроконтролер, але їм також може бути програмована логіка, DSP-контролер або спеціалізована ІС. Підключені до провідного шини зовнішні пристрої утворюють підлеглі шини. У тому ролі виступають різноманітних мікросхеми, зокрема. запам'ятовуючі пристрої (EEPROM, Flash-пам'ять, SRAM), годинник реального часу (RTC), АЦП/ЦАП, цифрові потенціометри, спеціалізовані контролери та ін.

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

    Електричне підключення

    Існує три типи підключення до шини SPI, у кожному з яких беруть участь чотири сигнали (їх основне та альтернативні позначення див. в табл. 1). Найпростіше підключення, в якому беруть участь лише дві мікросхеми, показано на малюнку 1. Тут, провідний шини передає дані по лінії MOSI синхронно зі згенерованим ним сигналом SCLK, а підлеглий захоплює передані біти даних по певних напрямках прийнятого сигналу синхронізації. Одночасно з цим підлеглий надсилає свою посилку даних. Подану схему можна спростити виключенням лінії MISO, якщо підпорядкована ІС, що використовується, не передбачає відповідну передачу даних або в ній немає потреби. Односторонню передачу даних можна зустріти у таких мікросхем як ЦАП, цифрові потенціометри, підсилювачі, що програмуються, і драйвери. Таким чином, варіант підключення підлеглої ІС вимагає 3 або 4 лінії зв'язку. Щоб підпорядкована ІС приймала та передавала дані, крім наявності сигналу синхронізації, необхідно також, щоб лінія SS була переведена в низький стан. В іншому випадку підпорядкована ІС буде неактивна. Коли використовується тільки одна зовнішня ІВ, може виникнути спокуса виключення та лінії SS за рахунок жорсткого встановлення низького рівня на вході вибору підлеглої мікросхеми. Таке рішення вкрай небажано може призвести до збоїв чи взагалі неможливості передачі, т.к. вхід вибору мікросхеми служить для перекладу ІС у її вихідний стан та іноді ініціює виведення першого біта даних.


    Мал. 1. Найпростіше підключення до шини SPI

    При необхідності підключення до шини SPI кількох мікросхем використовується або незалежне (паралельне) підключення (рис. 2), або каскадне (послідовне) (рис. 3). Незалежне підключення найпоширеніше, т.к. досягається при використанні будь-яких SPI-сумісних мікросхем. Тут, всі сигнали, крім вибору мікросхем, з'єднані паралельно, а провідний шини, перекладом того чи іншого сигналу SS в низький стан, задає, з якою підпорядкованою ІВ він обмінюватиметься даними. Головним недоліком такого підключення є необхідність у додаткових лініях для адресації підлеглих мікросхем (загальна кількість ліній зв'язку дорівнює 3+n, де n-кількість підлеглих мікросхем). Каскадне включення позбавлене цього недоліку, т.к. тут із кількох мікросхем утворюється один великий зсувний регістр. Для цього вихід передачі однієї ІС з'єднується з входом прийому даних інший, як показано на малюнку 3. Входи вибору мікросхем тут з'єднані паралельно і, таким чином, загальна кількість ліній зв'язку збережено рівним 4. Однак використання каскадного підключення можливе тільки в тому випадку, якщо його підтримка вказана в документації на мікросхеми, що використовуються. Щоб з'ясувати це важливо знати, що таке підключення по-англійськи називається "daisy-chaining".


    Мал. 2. Незалежне підключення до шини SPI


    Мал. 3. Каскадне підключення до шини SPI

    Протокол передачі

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

    • CPOL - вихідний рівень сигналу синхронізації (якщо CPOL=0, то лінія синхронізації до початку циклу передачі і після його закінчення має низький рівень (тобто перший фронт наростаючий, а останній - падаючий), інакше, якщо CPOL=1, - високий (тобто. перший фронт, що падає, а останній - наростаючий);
    • CPHA – фаза синхронізації; від цього параметра залежить, в якій послідовності виконується установка та вибірка даних (якщо CPHA=0, то по передньому фронту в циклі синхронізації буде виконуватися вибірка даних, а потім, по задньому фронті, - установка даних; якщо ж CPHA=1, то установка даних виконуватиметься по передньому фронту в циклі синхронізації, а вибірка - по задньому). Інформація про режими SPI узагальнена в таблиці 2.

    Провідна та підлегла мікросхеми, що працюють у різних режимах SPI, є несумісними, тому перед вибором підлеглих мікросхем важливо уточнити, які режими підтримуються провідним шини. Апаратні модулі SPI, інтегровані в мікроконтролери, в більшості випадків підтримують можливість вибору будь-якого режиму SPI і тому до них можливе підключення будь-яких підлеглих SPI-мікросхем (належить тільки до незалежного варіанту підключення). Крім того, протокол SPI у будь-якому з режимів легко реалізується програмно.

    Порівняння з шиною I 2 C

    Як згадувалося, для стикування мікросхем не меншою популярністю користується 2-провідна послідовна шина I 2 C . Нижче можна ознайомитися з перевагами, які дає та чи інша послідовна шина.

    Переваги шини SPI Переваги шини I2C
    Гранична простота протоколу передачі фізично зумовлює високу надійність і швидкодію передачі. Гранична швидкодія шини SPI вимірюється десятками мегагерц і тому вона ідеальна для потокової передачі великих об'ємів даних і широко використовується в високошвидкісних ЦАП/АЦП, драйверах світлодіодних дисплеїв і мікросхемах пам'яті. Шина I 2 C залишається двопровідною, незалежно від кількості підключеної до неї мікросхем.
    Усі лінії шини SPI є односпрямованими, що суттєво спрощує вирішення завдання перетворення рівнів та гальванічної ізоляції мікросхем. Можливість мультимайстерної роботи, коли до шини підключено кілька провідних мікросхем.
    Простота програмної реалізації протоколу SPI. Протокол I2C є більш стандартизованим, тому користувач I2C-мікросхем більш захищений від проблем несумісності вибраних компонентів.

    Похідні та сумісні протоколи

    • MICROWIRE.

      Протокол MICROWIRE компанії National Semiconductor повністю ідентичний протоколу SPI у режимі 0 (CPOL = 0, CPHA = 0).

    • 3-провідний інтерфейс компанії Maxim

      Відмінність цього інтерфейсу полягає в тому, що замість повнодуплексної передачі по двох односпрямованих лініях тут виконується напівдуплексна передача по двонаправленій лінії DQ.

    • QSPI

      Більш високорівневий протокол, ніж SPI, дозволяє автоматизувати передачу даних без участі ЦПУ.

    З іншого боку, інтерфейс SPI є основою побудови низки спеціалізованих інтерфейсів, зокрема. налагоджувальний інтерфейс JTAG та інтерфейси карт Flash-пам'яті, в т.ч. SD та MMC.

    Табл. 1. Електричні сигнали шини SPI

    Ведучий шини Підлеглий шини
    Основне позначення Альтернативне позначення Опис Основне позначення Альтернативне позначення Опис
    MOSI DO, SDO, DOUT MOSI DI, SDI, DIN
    MISO DI, SDI, DIN Вхід послідовного прийому даних MISO DO, SDO, DOUT Вихід послідовної передачі
    SCLK DCLOCK, CLK, SCK Вихід синхронізації передачі даних SCLK DCLOCK, CLK, SCK Вхід синхронізації прийому даних
    SS CS Вихід вибору підлеглого (вибір мікросхеми) SS CS Вхід вибору підлеглого (вибір мікросхеми)


    Завантаження...
    Top