Бібліотека SPI

Документація

SPI


Ця бібліотека дозволяє взаємодіяти з пристроями SPI за допомогою Arduino як ведучого пристрою.

Короткий вступ до послідовного периферійного інтерфейсу (SPI)
Послідовний периферійний інтерфейс (SPI) є синхронним протоколом послідовних даних, що використовується мікроконтролерами для взаємодії з одним чи більше периферійними пристроями швидко на коротких дистанціях. Він також може використовуватися для зв’язку між мікроконтролерами. У SPI-підключенні завжди є один ведучий пристрій (зазвичай мікроконтролер), який контролює периферійні пристрої. Зазвичай є три лінії, спільні для всіх пристроїв:
  • MISO (Master In Slave Out) — лінія веденого для надсилання даних ведучому,
  • MOSI (Master Out Slave In) — лінія ведучого для надсилання даних периферійним,
  • SCK (Serial Clock) — тактові імпульси, які синхронізують передачу даних, сформованих ведучим
та одна лінія спеціально для кожного пристрою:
  • SS (Slave Select) — пін на кожному пристрої, який ведучий може використовувати, щоб ввімкнути та вимкнути визначені пристрої.

Коли пін SS має стан low, він взаємодіє з ведучим. Коли його стан high, він ігнорує ведучого. Це дозволяє Вам мати кілька пристроїв SPI, які ділять ті ж лінії MISO, MOSI та CLK.

Щоб записати код для нового пристрою SPI, пам’ятайте декілька речей:
  • Яку максимальну швидкість SPI може використовувати Ваш пристрій? Вона контролюється першим параметром у SPISettings. Якщо Ви використовуєте чіп, розрахований на 15 МГц, використайте 15000000. Arduino автоматично використає найкращу швидкість, рівну чи меншу за число, яке використовується у SPISettings.
  • Дані спочатку зсуваються у старший (MSB) чи молодший (LSB) біт? Це контролюється другим параметром SPISettings командами MSBFIRST та LSBFIRST. Більшість чіпів SPI використовують перший порядок даних MSB.
  • Простій тактових імпульсів відбувається у стані high чи low? Підбирання відбувається на підйомі чи спаді тактових імпульсів? Ці режими контролюються третім параметром у SPISettings.

Стандарт SPI є розпливчастим, і кожен пристрій реалізує його трохи по-іншому. Це означає, що потрібно звертати оcобливу увагу на даташити пристроїв, коли Ви пишете код.

Кажучи загалом, є чотири режими передачі. Ці режими контролюють, дані зсуваються на підйомі чи спаді тактового сигналу (має назву тактова фаза), простій імпульсів відбувається при стані high чи low (має назву тактова полярність). Чотири режими комбінують полярність та фазу відповідно до цієї таблиці:

РежимТактова полярність (CPOL)Тактова фаза
(CPHA)
Вихідний крайЗбір даних
SPI_MODE000ПадінняЗростання
SPI_MODE101ЗростанняПадіння
SPI_MODE210ЗростанняПадіння
SPI_MODE311ПадінняЗростання

Коли Ви маєте параметри SPI, використайте SPI.beginTransaction(), щоб почати використовувати SPI-порт. SPI-порт буде сконфігурований всіма Вашими налаштуваннями. Найпростіший та найефективніший спосіб використовувати SPISettings — безпосередньо всередині SPI.beginTransaction(). Наприклад:

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

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

На більшості пристроїв SPI після SPI.beginTransaction() Ви запишете LOW у вибраний пін ведучого, викличете SPI.transfer() будь-яку кількість разів, щоб передати дані, потім запишете HIGH у пін SS та врешті викличете SPI.endTransaction().

Більше інформації про SPI тут.

Підключення
Наступна таблиця відображає, на яких пінах розбиті лінії SPI на різних платах Arduino.

Плата Arduino / GenuinoMOSIMISOSCKSS (ведений)SS (ведучий)Рівень
Uno чи Duemilanove11 чи ICSP-412 чи ICSP-113 чи ICSP-310-5V
Mega1280 чи Mega256051 чи ICSP-450 чи ICSP-152 чи ICSP-353-5V
LeonardoICSP-4ICSP-1ICSP-3--5V
DueICSP-4ICSP-1ICSP-3-4, 10, 523,3V
ZeroICSP-4ICSP-1ICSP-3--3,3V
10111 чи ICSP-412 чи ICSP-113 чи ICSP-310103,3V
MKR10008109--3,3V

Зверніть увагу, що MISO, MOSI та SCK доступні в постійному фізичному розташуванні на ICSP. Це корисно, наприклад, у розробці шилда, який працює на кожній платі.
spi library
Примітка про пін вибору веденого (SS) на AVR-базованих платах
AVR-базовані плати мають пін SS, що корисно, коли вони виступають в ролі веденого, контрольованого зовнішнім ведучим. Оскільки ця бібліотека підтримує лише режим ведучого, цей пін має бути налаштований на вихід, в іншому випадку SPI-інтерфейс має бути атоматично введений в режим веденого апаратним забезпеченням, роблячи бібліотеку недіючою.

Проте можливо використовувати будь-який пін як вибір веденого (SS) для пристроїв. Наприклад, шилд Arduino Ethernet використовує пін 4, щоб контролювати SPI-підключення до вбудованої SD-карти, і пін 10, щоб контролювати підключення до Ethernet-контролера.

Функції

Приклади
  • Barometric Pressure Sensor: зчитувати тиск повітря та температуру з датчика, використовуючи SPI-протокол.
  • Digital Pot Control: контролювати цифровий потенціометр AD5206, використовуючи SPI-протокол.

Повернутись до головної

Коментарі 0

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.