Spi что это за программа

SPI(Serial Peripheral Bus) — последовательный периферийный протокол обмена. Этот прокол был разработан компанией Motorola, но в настоящее время используется многими производителями. Он предназначен для связи микроконтроллеров между собой, а также со всевозможной периферией: датчиками, AЦП, микросхемами памяти, часами.

Но все же наиболее частое применение SPI – это запись программы в память микроконтроллера. В микроконтроллерах AVR c помощью SPI можно прошить микроконтроллер не выпаивая из платы, такой способ прошивки называется ISP(In System Programming ). Хотя названия SPI и ISP очень созвучны, это не одно и то же, в AVR SPI используется как физический уровень ISP, то есть используются линии SPI для передачи данных, но сам протокол(программный уровень) отличается.

Для передачи данных в SPI используется три линии:

MISO(Master Input Slave Output) – по этой линии Master(ведущий) принимает данные от Slave(ведомого).

MOSI(Master Output Slave Input) – по этой линии Master отправляет данные Slave.

AVR 38# Последовательный интерфейс SPI

SCK(Serial Clock ) – служит для передачи тактового сигнала ведомому устройству.

Также используется линия SS(Slave Select), которая определяет устройство с которым Master будет обмениваться данными.

Основы работы протокола SPI.

По причине того, что многие производители в своих устройствах используют SPI, названия выводов могут несколько отличаться. Ниже приведена таблица с альтернативными названиями.

Основы работы протокола SPI.

SPI бывает двух видов аппаратный и программный. При реализации программного SPI, мы вручную должны устанавливать сигнал на ножках соответствующих MISO, MOSI, SS при этом дёргать за SCK. При аппаратной реализации SPI мы передаём данные в специальный регистр, а микроконтроллер сам проделывает вышеописанные манипуляции, по предварительным настройкам.

Физическая реализацию SPI, представляет собой два соединённых вместе сдвиговых регистра.

Основы работы протокола SPI.

В зависимости от того по какому логическому уровню сигнала SCK, происходит синхронизация Master и Slave и по какому фронту происходит захват и сдвиг данных, возможны 4 режима SPI.

  • CPOL = 0 — сигнал синхронизации начинается с низкого уровня;
  • CPOL = 1 — сигнал синхронизации начинается с высокого уровня;
  • CPHA = 0 — выборка данных производится по переднему фронту сигнала синхронизации;
  • CPHA = 1 — выборка данных производится по заднему фронту сигнала синхронизации.

Основы работы протокола SPI.

Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)


CPOL = 1 CPHA = 0

Основы работы протокола SPI.


CPOL = 0 CPHA = 1

Основы работы протокола SPI.


CPOL = 1 CPHA = 1

Основы работы протокола SPI.

SPI — синхронный интерфейс, то есть для того чтобы получить какие-нибудь данные от Slave, Master должен что-нибудь отправить. Вроде всё понятно, но что если Master отправляет один байт, а Slave должен вернуть ему два? В таком случае Master должен отправить ему что-нибудь 2 раза, например 0х00.

//отправляем команду, в ответ должно прийти два байта Spi_Master_Transmit(chx); //отправляем что-нибудь для того чтобы принять первый байт Spi_Master_Transmit(0X00); touch_x = SPDR; touch_x >= 3;

Источник: hubstub.ru

Использование SPI в высокоуровневом приложении

Azure Sphere поддерживает последовательный периферийный интерфейс (SPI) в главном режиме. SPI — это последовательный интерфейс, используемый для обмена данными между периферийными устройствами и интегрированными каналами. SPI использует главную или подчиненную модель, в которой основное устройство управляет набором подчиненных устройств. В отличие от I2C, SPI можно использовать с более сложными периферийными устройствами с более высокой скоростью.

Читайте также:
Программа rapture3d что это

Приложения могут получать доступ к периферийным устройствам через SPI, вызывая API-интерфейсы Applibs SPI для выполнения операций с главным интерфейсом SPI. В примере SPI LSM6DS3 описывается настройка оборудования для SPI на устройстве MT3620 и использование SPI в приложении.

Выбор микросхемы

Выбор микросхемы управляет подключением между главным интерфейсом SPI и набором подчиненных устройств; и позволяет главному интерфейсу отправлять и получать данные на каждое подчиненное устройство независимо друг от друга. Azure Sphere поддерживает параметры «активный — низкий» и «активный — высокий» для выбора микросхемы с активным и низким значением по умолчанию. Каждый главный интерфейс SPI может использоваться только одним приложением. Перед выполнением операций чтения и записи в интерфейсе приложение должно открыть главный интерфейс SPI и определить каждое подключенное подчиненное устройство. Операции чтения и записи SPI в Azure Sphere используют блокирующие API.

Требования SPI

Приложения, использующие SPI, должны включать соответствующие файлы заголовков для SPI и добавлять параметры SPI в манифест приложения.

Все приложения должны задать целевое оборудование и включить соответствующий файл заголовка определения оборудования.

Файлы заголовков

#define SPI_STRUCTS_VERSION 1 #include #include «path-to-your-target-hardware.h»

Объявите SPI_STRUCTS_VERSION определение препроцессора перед включением файла заголовка. Указывает версию структуры, используемую приложением.

Замените path-to-your-target-hardware.h путем к файлу заголовка для оборудования.

Параметры манифеста приложения

Чтобы использовать API SPI, SpiMaster необходимо добавить эту возможность в манифест приложения, а затем добавить в нее каждый главный контроллер SPI. Это позволяет приложению получить доступ к контроллеру. Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.

В коде используйте константы, определенные для оборудования, для идентификации главных интерфейсов SPI. Компилятор преобразует эти значения в необработанные значения при сборке приложения.

Например, ниже приведен фрагмент манифеста приложения, который предназначен для эталонной платы разработки MT3620 (RDB) и настраивает два главных интерфейса SPI:

«SpiMaster»: [ «$MT3620_RDB_HEADER2_ISU0_SPI», «$MT3620_RDB_HEADER4_ISU1_SPI» ],

В следующем фрагменте показано, как указать те же главные интерфейсы SPI в приложении, предназначенном для начального набора Avnet MT3620:

«SpiMaster»: [ «$AVNET_MT3620_SK_ISU0_SPI», «$AVNET_MT3620_SK_ISU1_SPI» ]

Настройка выбора микросхемы и открытие главного интерфейса SPI

Перед выполнением операций с главным интерфейсом SPI необходимо настроить выбор микросхемы и открыть интерфейс. Чтобы настроить выбор микросхемы, вызовите функцию SPIMaster_InitConfig для инициализации SPIMaster_Config структуры. После инициализации SPIMaster_Config обновите csPolarity поле, указав SPI_ChipSelectPolarity_ActiveLow или SPI_ChipSelectPolarity_ActiveHigh.

Чтобы открыть главный интерфейс SPI, вызовите функцию SPIMaster_Open . При этом к интерфейсу будут применены параметры по умолчанию и параметры выбора микросхемы:

  • SPI_Mode_0 для битового порядка SPI
  • SPI_BitOrder_MsbFirst для режима связи

Обновление параметров главного интерфейса SPI

После инициализации можно изменить параметры интерфейса:

  • Чтобы изменить разрядный порядок, вызовите SPIMaster_SetBitOrder
  • Чтобы изменить скорость шины SPI, вызовите SPIMaster_SetBusSpeed
  • Чтобы изменить режим связи, вызовите SPIMaster_SetMode

Выполнение операций чтения и записи в главном интерфейсе SPI

Azure Sphere поддерживает несколько вариантов выполнения операций чтения и записи с помощью SPI. Для односторонних операций чтения и записи, а также для поддержания взаимодействия с некоторыми API POSIX можно вызывать функции POSIX read(2) и write(2).

Вы можете вызвать функцию SPIMaster_WriteThenRead для выполнения объединенной операции записи и чтения в одной транзакции шины без прерывания выполнения другой транзакции.

Вызовите функцию SPIMaster_TransferSequential , если требуется более точный контроль над временем между операциями чтения или записи. Это позволяет выполнять несколько операций чтения и записи между парой состояний включения и отключения CS.

Закрытие интерфейса SPI

Чтобы закрыть интерфейс, вызовите стандартную функцию POSIX close().

Поддержка MT3620

В этом разделе описываются параметры SPI, которые применяются только при запуске Azure Sphere на плате разработки MT3620.

Спецификации SPI для MT3620 перечислены в разделе «Состояние поддержки MT3620». В руководстве пользователя по плате разработки MT3620 описывается макет контактов и функции для подключения.

Читайте также:
Что за программа город для людей

Папка HardwareDefinitions в каталоге установки пакета SDK microsoft Azure Sphere содержит определения общих до плат разработки, модулей и микросхем Azure Sphere. Он содержит файлы заголовков и JSON, которые определяют главные интерфейсы для MT3620, MT3620 RDB, а также другое оборудование MT3620. По умолчанию папка HardwareDefinitions находится в C:Program Files (x86)Microsoft Azure Sphere SDKHardware Definitions Windows и /opt/azurespheresdk/HardwareDefinitions Linux.

  • При настройке платы разработки MT3620 в качестве главного интерфейса SPI можно использовать любой порт ISU . К каждому ISU можно подключить до двух подчиненных устройств. При использовании порта ISU в качестве главного интерфейса SPI нельзя использовать тот же порт, что и интерфейс I2C или UART.
  • MT3620 поддерживает транзакции SPI с частотой до 40 МГц.
  • MT3620 не поддерживает одновременные двунаправленные операции чтения и записи (полнодуплексный) SPI в рамках одной транзакции шины.

Источник: learn.microsoft.com

Интерфейс SPI и Arduino

Print Friendly, PDF </li><li>сдвиговый регистр 74HC595;</li><li>8 светодиодов (к примеру, вот из такого набора);</li><li>8 резисторов по 220 Ом (рекомендую приобрести набор резисторов с номиналами от 10 Ом до 1 МОм);</li><li>соединительные провода (например, вот такой хороший набор);</li><li>макетная плата;</li><li>персональный компьютер со средой разработки Arduino IDE.</li></ul><h2>1 Описание последовательного интерфейса SPI</h2><p>SPI – Serial Peripheral Interface или «Последовательный периферийный интерфейс» – это синхронный протокол передачи данных для сопряжения ведущего устройства (Master) с периферийными устройствами (Slave). Ведущим устройством часто является микроконтроллер. Связь между устройствами осуществляется по четырём проводам, поэтому SPI иногда называют «четырёхпроводной интерфейс». Вот эти шины:</p><table><tr>НазваниеНазначение шины SPI</tr><tr><td> MOSI (Master Out Slave In)</td><td>линия передачи данных от ведущего к ведомым устройствам;</td></tr><tr><td> MISO (Master In Slave Out)</td><td>линия передачи от ведомого к ведущему устройству;</td></tr><tr><td> SCLK (Serial Clock)</td><td>тактовые импульсы синхронизации, генерируемые ведущим устройством;</td></tr><tr><td> SS (Slave Select)</td><td>линия выбора ведомого устройства; когда на линии логический «0», ведомое устройство «понимает», что сейчас обращаются к нему.</td></tr></table><div class='ai-viewports ai-viewport-1 ai-insert-18-48537577' style='margin: 8px 0; clear: both;' data-insertion-position='prepend' data-selector='.ai-insert-18-48537577' data-insertion-no-dbg data-code='PGRpdiBjbGFzcz0nY29kZS1ibG9jayBjb2RlLWJsb2NrLTE4IGFpLWxpc3QtYmxvY2snIHN0eWxlPSdtYXJnaW46IDhweCAwOyBjbGVhcjogYm90aDsnPgoKPGRpdiBjbGFzcz0nYWktZHluYW1pYyBhaS1saXN0LWRhdGEnIHJlZmVyZXItbGlzdD0nSXc9PScgcmVmZXJlci1saXN0LXR5cGU9J0InIGRhdGEtY29kZT0nUENFdExVUmZVRzl6ZERFdExUNEtQR1JwZGlCcFpEMGlZV1JtYjNoZk1UWTRNekV4TlRBeE5qSTRORGt5TlRnMElqNDhMMlJwZGo0S1BITmpjbWx3ZEQ1M2FXNWtiM2N1V1dFdVlXUm1iM2hEYjJSbExtaGlRMkZzYkdKaFkydHpMbkIxYzJnb1puVnVZM1JwYjI0b0tTQjdDaUFnSUNCamIyNXpkQ0J5WVc1a2IyMUpiblFnUFNCTllYUm9MbVpzYjI5eUtFMWhkR2d1Y21GdVpHOXRLQ2tnS2lBeE1EQXdNREFwT3dvZ0lDQWdZMjl1YzNRZ1pHbDJVbUZ1Wkc5dFNXNTBJRDBnSW5KamIyeGZNU0lnS3lCeVlXNWtiMjFKYm5RN0NpQWdJQ0JrYjJOMWJXVnVkQzVuWlhSRmJHVnRaVzUwUW5sSlpDZ25ZV1JtYjNoZk1UWTRNekV4TlRBeE5qSTRORGt5TlRnMEp5a3VhV1FnUFNCa2FYWlNZVzVrYjIxSmJuUTdDaUFnSUNCM2FXNWtiM2N1V1dFdWFHVmhaR1Z5UW1sa1pHbHVaeTV3ZFhOb1FXUlZibWwwY3loYkNpQWdJQ0FnSUNBZ2V3b2dJQ0FnSUNBZ0lDQWdZMjlrWlRvZ1pHbDJVbUZ1Wkc5dFNXNTBMQW9nSUNBZ0lDQWdJQ0FnYzJsNlpYTTZJRnRiTXpBd0xESTFNRjBzV3pNek5pd3lPREJkTEZzek1qQXNNalV3WFN4Yk16SXdMREkzTUYwc1d6TXdNQ3d6TURCZExGc3pORE1zTXpBMlhTeGJOakF3TERNek1GMHNXek13TUN3eU1EQmRMRnN6TWpBc016QXdYU3hiTXpJd0xESTRNRjBzV3pNek5pd3lOVEJkTEZzek1EQXNNamd3WFN4Yk5UZ3dMRFF3TUYwc1d6WXdNQ3d6T0RCZExGczJNREFzTlRBd1hTeGJOakl3TERJME1GMHNXelkwTUN3ek5qQmRMRnMyTmpBc01qVXdYU3hiTmpRd0xESTFNRjBzV3pNMU1Dd3pNVEJkTEZzMk5EQXNNekF3WFN4Yk5qTXdMREU0TUYxZExBb2dJQ0FnSUNBZ0lDQWdZMjlrWlZSNWNHVTZJQ2RqYjIxaWJ5Y3NJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0JpYVdSek9pQmJDaUFnSUNBZ0lDQWdJQ0FnSUhzZ0ltSnBaR1JsY2lJNklDSnRlVlJoY21kbGRDSXNJQ0p3WVhKaGJYTWlPaUI3SUNKd2JHRmpaVzFsYm5SSlpDSTZJQ0l4TWpZM01EQTFJaUI5SUgwc0NpQWdJQ0FnSUNBZ0lDQWdJSHNnSW1KcFpHUmxjaUk2SUNKaVpYUjNaV1Z1UkdsbmFYUmhiQ0lzSUNKd1lYSmhiWE1pT2lCN0lDSndiR0ZqWlcxbGJuUkpaQ0k2SUNJME56QTFNek15SWlCOUlIMHNDaUFnSUNBZ0lDQWdJQ0FnSUhzZ0ltSnBaR1JsY2lJNklDSnpZWEJsSWl3Z0luQmhjbUZ0Y3lJNklIc2dJbkJzWVdObGJXVnVkRWxrSWpvZ0lqZzBOakUxTXlJZ2ZTQjlMQWtKQ1FvZ0lDQWdJQ0FnSUNBZ1hRb2dJQ0FnSUNBZ0lIMEtJQ0FnSUYwcE93b2dJQ0FnZDJsdVpHOTNMbmxoUTI5dWRHVjRkRU5pTG5CMWMyZ29ablZ1WTNScGIyNG9LU0I3Q2lBZ0lDQWdJQ0FnZDJsdVpHOTNMbGxoTG1Ga1ptOTRRMjlrWlM1amNtVmhkR1VvQ2lBZ0lDQWdJQ0FnSUNBZ0lIc0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2IzZHVaWEpKWkRvZ01qZ3lNakEzTEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWEpKWkRvZ1pHbDJVbUZ1Wkc5dFNXNTBMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQndZWEpoYlhNNklIc2djREU2SUNkamVXTnJhQ2NzSUhBeU9pQW5hR1pqWXljZ2ZRb2dJQ0FnSUNBZ0lDQWdmUW9nSUNBZ0lDQWdJQ2s3Q2lBZ0lDQjlLVHNLZlNrN0Nqd3ZjMk55YVhCMFBnPT0nPjwvZGl2Pgo8L2Rpdj4K' data-block='18'></div>

<div class='ai-viewports ai-viewport-2 ai-viewport-3 ai-insert-3-87636039' style='margin: 8px 0; clear: both;' data-insertion-position='prepend' data-selector='.ai-insert-3-87636039' data-insertion-no-dbg data-code='PGRpdiBjbGFzcz0nY29kZS1ibG9jayBjb2RlLWJsb2NrLTMgYWktbGlzdC1ibG9jaycgc3R5bGU9J21hcmdpbjogOHB4IDA7IGNsZWFyOiBib3RoOyc+Cgo8ZGl2IGNsYXNzPSdhaS1keW5hbWljIGFpLWxpc3QtZGF0YScgcmVmZXJlci1saXN0PSdJdz09JyByZWZlcmVyLWxpc3QtdHlwZT0nQicgZGF0YS1jb2RlPSdQQ0V0TFUxZlVHOXpkREV0TFQ0S1BHUnBkaUJwWkQwaVlXUm1iM2hmTVRZNE16RXhOVEF5TXpjM056WTVPVEE0SWo0OEwyUnBkajRLUEhOamNtbHdkRDUzYVc1a2IzY3VXV0V1WVdSbWIzaERiMlJsTG1oaVEyRnNiR0poWTJ0ekxuQjFjMmdvWm5WdVkzUnBiMjRvS1NCN0NpQWdJQ0JqYjI1emRDQnlZVzVrYjIxSmJuUWdQU0JOWVhSb0xtWnNiMjl5S0UxaGRHZ3VjbUZ1Wkc5dEtDa2dLaUF4TURBd01EQXBPd29nSUNBZ1kyOXVjM1FnWkdsMlVtRnVaRzl0U1c1MElEMGdJbkpqYjJ4Zk1TSWdLeUJ5WVc1a2IyMUpiblE3Q2lBZ0lDQmtiMk4xYldWdWRDNW5aWFJGYkdWdFpXNTBRbmxKWkNnbllXUm1iM2hmTVRZNE16RXhOVEF5TXpjM056WTVPVEE0SnlrdWFXUWdQU0JrYVhaU1lXNWtiMjFKYm5RN0NpQWdJQ0IzYVc1a2IzY3VXV0V1YUdWaFpHVnlRbWxrWkdsdVp5NXdkWE5vUVdSVmJtbDBjeWhiQ2lBZ0lDQWdJQ0FnZXdvZ0lDQWdJQ0FnSUNBZ1kyOWtaVG9nWkdsMlVtRnVaRzl0U1c1MExBb2dJQ0FnSUNBZ0lDQWdjMmw2WlhNNklGdGJNekF3TERJMU1GMHNXek16Tml3eU9EQmRMRnN6TWpBc01qVXdYU3hiTXpJd0xESTNNRjBzV3pNd01Dd3pNREJkTEZzek1EQXNNakF3WFN4Yk1qUXdMRFF3TUYwc1d6TXlNQ3d6TURCZExGc3pNakFzTWpnd1hTeGJNek0yTERJMU1GMHNXek13TUN3eU9EQmRYU3dLSUNBZ0lDQWdJQ0FnSUdOdlpHVlVlWEJsT2lBblkyOXRZbThuTENBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lHSnBaSE02SUZzS0lDQWdJQ0FnSUNBZ0lDQWdleUFpWW1sa1pHVnlJam9nSW0xNVZHRnlaMlYwSWl3Z0luQmhjbUZ0Y3lJNklIc2dJbkJzWVdObGJXVnVkRWxrSWpvZ0lqRXlOalk1T0RNaUlIMGdmU3dLSUNBZ0lDQWdJQ0FnSUNBZ2V5QWlZbWxrWkdWeUlqb2dJbk5oY0dVaUxDQWljR0Z5WVcxeklqb2dleUFpY0d4aFkyVnRaVzUwU1dRaU9pQWlPRFEyTVRRM0lpQjlJSDBzQ1FvZ0lDQWdJQ0FnSUNBZ0lDQjdJQ0ppYVdSa1pYSWlPaUFpWW1WMGQyVmxia1JwWjJsMFlXd2lMQ0FpY0dGeVlXMXpJam9nZXlBaWNHeGhZMlZ0Wlc1MFNXUWlPaUFpTkRjd05UTXlOaUlnZlNCOUxBa0pDaUFnSUNBZ0lDQWdJQ0JkQ2lBZ0lDQWdJQ0FnZlFvZ0lDQWdYU2s3Q2lBZ0lDQjNhVzVrYjNjdWVXRkRiMjUwWlhoMFEySXVjSFZ6YUNobWRXNWpkR2x2YmlncElIc0tJQ0FnSUNBZ0lDQjNhVzVrYjNjdVdXRXVZV1JtYjNoRGIyUmxMbU55WldGMFpTZ0tJQ0FnSUNBZ0lDQWdJQ0FnZXdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2ZDI1bGNrbGtPaUF5T0RJeU1EY3NDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJoYVc1bGNrbGtPaUJrYVhaU1lXNWtiMjFKYm5Rc0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRjem9nZXlCd01Ub2dKMk41WTJ0aUp5d2djREk2SUNkb1ptTmtKeUI5Q2lBZ0lDQWdJQ0FnSUNCOUNpQWdJQ0FnSUNBZ0tUc0tJQ0FnSUgwcE93cDlLVHNLUEM5elkzSnBjSFErJz48L2Rpdj4KPC9kaXY+Cg==' data-block='3'></div>

<p>Существует четыре режима передачи данных (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), обусловленные сочетанием полярности тактовых импульсов (работаем по уровню HIGH или LOW), Clock Polarity, CPOL, и фазой тактовых импульсов (синхронизация по переднему или заднему фронту тактового импульса), Clock Phase, CPHA. В последнем столбце таблицы приведены поясняющие иллюстрации. На них Sample обозначены моменты, когда данные на линии должны быть готовы и считываются устройствами. Буквой Z отмечено, что состояние данных на линии неизвестно или не важно.</p><table><tr>РежимПолярность тактовых импульсов (CPOL)Фаза тактовых импульсов (CPHA)Диаграмма режима</tr><tr><td>SPI_MODE0</td><td></td><td></td><td><img decoding= SPI_MODE2 1 Диаграмма сигналов при режиме SPI 2 SPI_MODE3 1 1 Диаграмма сигналов при режиме SPI 3

Интерфейс SPI предусматривает несколько вариантов подключения ведомых устройств: независимое и каскадное. При независимом подключении к шине SPI ведущее устройство обращается к каждому ведомому устройству индивидуально. При каскадном подключении ведомые устройства срабатывают поочерёдно, как бы каскадом.

Виды подключения устройств: независимое и каскадное

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

В Arduino шины интерфейса SPI находятся на определённых портах. У каждой платы своё соответствие выводов. Для удобства выводы продублированы и вынесены также на отдельный разъём ICSP (In Circuit Serial Programming, программирование устройства, включённого в цепь, по последовательному протоколу). Обратите внимание, что на разъёме ICSP отсутствует пин выбора ведомого – SS, т.к. подразумевается, что Arduino будет использоваться как ведущее устройство в сети. Но при необходимости вы можете назначить любой цифровой вывод Ардуино в качестве SS.

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

Реализация интерфейса SPI на платах Arduino UNO и Arduino Nano

3 Стандартная библиотека для работы по интерфейсу SPI

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

Читайте также:
Avg web что это за программа

Чтобы начать работу по протоколу SPI , нужно задать настройки и затем инициализировать протокол с помощью процедуры SPI.beginTransaction(). Можно выполнить это одной инструкцией: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

Это значит, что мы инициализируем протокол SPI на частоте 14 МГц, передача данных идёт, начиная с MSB (наиболее значимого бита), в режиме SPI_MODE0.

После инициализации выбираем ведомое устройство, переводя соответствующий пин SS в состояние LOW. Затем передаём ведомому устройству данные командой SPI.transfer(). После передачи возвращаем SS в состояние HIGH.

Временная диаграмма работы интерфейса SPI

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

Желательно минимизировать время выполнения передачи между инструкциями SPI.beginTransaction() и SPI.endTransaction(), чтобы не возникло накладок, если другое устройство попробует инициализировать передачу данных, используя другие настройки.

Если вы планируете в своём скетче использовать стандартные пины Arduino, можно не описывать их в начале программы, т.к. они уже определены в самой библиотеке и имеют следующие имена:

#define PIN_SPI_SS (10) #define PIN_SPI_MOSI (11) #define PIN_SPI_MISO (12) #define PIN_SPI_SCK (13)

Данные пины определены в файле pins_arduino.h , который находится по пути %programfiles%arduino-(версия)hardwarearduinoavrvariants (если вы устанавливали программу в стандартное расположение). То есть, например, чтобы опустить пин выбора ведомого в состояние «0», можно написать:

digitalWrite(PIN_SPI_SS, LOW);

4 Подключение сдвигового регистра к Arduino

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

Схема подключения сдвигового регистра 74HC595 к Arduino

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 Serial.println(«———«); >

Сначала подключим библиотеку 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(). И передаём получившееся число в сдвиговый регистр. Для наглядности в монитор последовательного порта выводятся значения, которые получаются при этой операции: единичка «бежит» по разрядам – светодиоды загораются волной.

Числа, посылаемые в сдвиговый регистр 74HC595

6 «Бегущая волна» из светодиодов

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru