Spi програмування Ардуіно

Дана бібліотека дозволяє Ардуіно взаємодіяти з різними SPI-пристроями, виступаючи при цьому в ролі ведучого пристрою.

Короткий вступ в інтерфейс SPI (Serial Peripheral Interface)

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

Згідно з протоколом SPI, одне з взаємодіючих пристроїв (зазвичай мікроконтролер) завжди є провідним і контролює ведені периферійні пристрої. Як правило, всі взаімодействющіе пристрої об'єднані трьома загальними лініями:

  • MISO (Master In Slave Out) - лінія для передачі даних від відомого пристрою (Slave) до ведучого (Master),
  • MOSI (Master Out Slave In) - лінія для передачі даних від провідного пристрою (Master) до веденим (Slave),
  • SCK (Serial Clock) - тактові імпульси, що генеруються провідним пристроєм (Master) для синхронізації процесу передачі даних.

Крім перерахованих, на кожен пристрій відводиться окрема лінія:

  • SS (Slave Select) - висновок, присутній на кожному відомому пристрої. Він призначений для активізації Майстром того чи іншого периферійного пристрою.

Периферійний пристрій (Slave) взаємодіє з провідним (Master) тоді, коли на виведення SS присутній низький рівень сигналу. В іншому випадку дані від Master-пристрої будуть ігноруватися. Така архітектура дозволяє взаємодіяти з декількома SPI-пристроями, підключеними до однієї і тієї ж шині: MISO, MOSI і SCK.

Перед тим, як відправляти дані новому SPI-пристрою, необхідно з'ясувати про нього кілька основних моментів:

  • Зрушення даних повинен здійснюватися, починаючи зі старшого біта (MSB) або з молодшого біта (LSB)? Порядок проходження даних контролюється функцією SPI.setBitOrder ().
  • При відсутності тактовихімпульсів лінія SCK повинна знаходитися в високому або низькому рівні? Зчитування даних відбувається по фронту або по спаду тактового імпульсу? Ці режими роботи контролюються функцією SPI.setDataMode ().
  • Яка повинна бути швидкість передачі даних по SPI? Цей параметр контролюється функцією SPI.setClockDivider ().

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

Грубо кажучи, існує чотири режими передачі даних, що відрізняються умовою зсуву даних (по фронту або по спаду синхро-імпульсів - так звана фаза), а також рівнем сигналу, в якому повинна знаходиться лінія SCK при відсутності синхро-імпульсів (полярність). Різні комбінації фази і полярності, що формують чотири режими передачі даних, зведені в таблицю:

Для зміни режиму передачі даних служить функція SPI.setDataMode ().

Кожне SPI-пристрій накладає певні обмеження на максимальну швидкість SPI-шини. Для коректної роботи периферійних пристроїв в бібліотеці передбачена функція SPI.setClockDivider (), що дозволяє змінювати тактову частоту шини (за замовчуванням 4 МГц).

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

Для отримання додаткової інформації про інтерфейс SPI, см. Сторінку Вікіпедії.

з'єднання

Нижче в таблиці наведено номери висновків, що використовуються шиною SPI в тих чи інших моделях Ардуіно:

Uno або Duemilanove

Mega1280 або Mega2560

Зверніть увагу, що на всіх платах висновки MISO, MOSI і SCK з'єднані з одними і тими ж контактами роз'єму ICSP. Таке розташування може бути зручно при створенні універсальних плат розширення, що працюють на всіх моделях Ардуіно.

Особливості роботи виведення SS в Ардуіно на базі AVR

У всіх моделей Ардуіно на основі мікроконтролерів AVR є висновок SS, який використовується в режимі роботи Slave (наприклад, при керуванні Ардуіно зовнішнім провідним пристроєм). Однак, в бібліотеці реалізований тільки режим роботи Master, тому в цьому режимі висновок SS повинен бути налаштований як вихід. В іншому випадку SPI може апаратно переключитися в режим Slave, що призведе до непрацездатності функцій бібліотеки.

Для управління виводу SS периферійних пристроїв можна використовувати будь-який з доступних висновків. Наприклад, на платі розширення Arduino Ethernet для взаємодії з вбудованою SD-картою і контроллером Ethernet по SPI використовуються висновки 4 і 10 відповідно.

Розширені можливості SPI на Arduino Due

Існують деякі особливості роботи з інтерфейсом SPI на платах Arduino Due. Крім основних функцій і методів, які можна застосувати до всіх платам Ардуіно, в бібліотеці SPI передбачено кілька додаткових методів. Ці методи реалізовують апаратні можливості мікроконтролерів SAM3X і надають розробникові розширені можливості:

  • автоматичний управління процесом вибору веденого пристрою;
  • автоматичне керування конфігураціями інтерфейсу SPI для різних пристроїв (тактова частота, режим передачі даних і т.д.). Завдяки цьому кожне з ведених пристроїв може мати власний набір налаштувань, автоматично застосовуються на початку передачі.

В Arduino Due є три окремих виведення (4, 10 і 52) для управління лініями SS периферійних пристроїв.

Схожі статті