Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДИПЛОМ ЗАХАРЧУК / 04_ПЗ_ДП1.docx
Скачиваний:
145
Добавлен:
16.02.2016
Размер:
1.17 Mб
Скачать

2.4 Spi — послідовний периферійний інтерфейс

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

Для передачі даних в інтерфейсі SPI використовуються чотири сигнали:

  • MOSI або SI — вихід ведучого, вхід веденого (англ. Master Out Slave In). Служить для передачі даних від ведучого пристрою до веденого.

  • MISO або SO — вхід ведучого, вихід веденого (англ. Master In Slave Out). Служить для передачі даних від веденого пристрою до ведучого.

  • SCLK або SCK — послідовний тактовий сигнал (англ. Serial Clock). Служить для передачі тактового сигналу для ведених пристроїв.

  • CS або SS — сигнал вибору мікросхеми (англ. Chip Select, Slave Select). Служить для вибору необхідного веденого пристрою.

Бібліотека SPI

Ця бібліотека використовує апаратні можливості AVR для роботи з SPI на Arduino, причому тільки в режимі ведучого (SPI master). Функцій у ній зовсім небагато:

  • begin() і end()

Ініціалізація і завершення роботи з SPI. При ініціалізації лінії SCLK (13), MOSI (11) і SS (10) налаштовуються на висновок, виставляючи на SCK і MOSI низький, а на SS - високий рівень. Виклик end() лінії не чіпає, залишаючи в тому ж стані, що й до виклику - просто вимикає блок SPI мікроконтролера.

  • setBitOrder(order)

Встановлює порядок посилки бітів даних (order):

MSBFIRST - першим йде старший біт посилки (за замовчуванням)

LSBFIRST - першим йде молодший біт

  • setClockDivider (divider)

Встановлює дільник тактів для SPI щодо основної частоти. Доступні подільники 2, 4, 8, 16, 32, 64 і 128. Відповідні константи мають імена виду SPI_CLOCK_DIVn, де n - дільник, наприклад, SPI_CLOCK_DIV32. За замовчуванням дільник дорівнює 4 - при звичайній тактовій частоті МК на Arduino в 16 МГц SPI буде працювати на частоті 4 МГц. На замітку: якщо пристрій підтримує частоту, скажімо, 1.25 МГц, то потрібно виставити дільник , відповідний цієї чи меншій частоті - 16, наприклад.

  • setDataMode (mode)

Задає режим роботи SPI, використовуючи константи SPI_MODE0 (за замовчуванням), SPI_MODE1, SPI_MODE2 і SPI_MODE3. Це ті самі режими c параметрами CPOL і CPHA.

  • transfer (value)

Здійснює двосторонню передачу: передає байт value і повертає байт, прийнята від веденого. Крім того, доступні функції shiftIn (miso_pin, sclk_pin, bit_order) і shiftOut (mosi_pin, sclk_pin, order, value), вони надають програмну напівдуплексний передачу даних по SPI - отакі половинки методу transfer( ): shiftIn( ) тільки приймає, а shiftOut( ) тільки передає дані. Як видно по їхніх аргументів, вони дозволяють використовувати будь-які цифрові Піни Arduino як ліній SPI, але ви самі повинні налаштувати їх як входи / виходи, функції shiftIn() і shiftOut() цього не роблять.

Рис. 2.4 – Конструктивне виконання корпусуMFRC522