SPI: различия между версиями

Материал из MIK32 микроконтроллер
(Новая страница: «== SPI -Serial Peripheral Interface == '''''SPI''''' - ('''''S'''erial '''P'''eripheral '''I'''nterface'') эспиай, последовательный пер...»)
 
Нет описания правки
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
== SPI -Serial Peripheral Interface ==
Раздел документации


Описание библиотеки HAL_SPI


'''''SPI''''' - ('''''S'''erial '''P'''eripheral '''I'''nterface'') эспиай, последовательный периферийный интерфейс иногда называемый 4-х проводным интерфейсом, является последовательным синхронным интерфейсом передачи данных. Изобретён компанией ''Motorola'' в середине 1980-x. В отличие от I2C и UART, SPI требует больше сигналов для работы, но может работать на более высоких скоростях. Не поддерживает адресацию, вместо этого используется сигнал '''SS''' (slave select - выбор ведомого), который также иногда называется CS (chip select), CE (chip enable) или SE (slave enable). Поддерживает только одного ведущего на шине. Ведущий устанавливает скорость обмена данными и другие параметры, такие как полярность и фаза тактирования. Обмен данными происходит в режиме полного дуплекса, что означает устройства на шине могут одновременно передавать и принимать данные. Интерфейс использует следующие сигналы (в номенклатуре AVR, для получения точного названия сигналов обратитесь к технической документации микросхемы, с которой работаете):
==='''Примеры с использованием конфигуратора'''===
[[Режим ведомого]]


* '''MISO''' (master in slave out) - вход ведущего, выход ведомого
[[Режим ведущего]]
* '''MOSI''' (master out slave in) - выход ведущего, вход ведомого
* '''SCK''' (serial clock) - сигнал тактирования
* '''SS''' (slave select) - сигнал выбор ведомого.


Несмотря на то, что интерфейс называется 4-х проводным, для подключения нескольких ведомых понадобится по одному проводу '''SS''' для каждого ведомого (в полнодуплексной реализации). Сигналы MISO, MOSI и SCK являются общими для всех устройств на шине. Ведущий посылает сигнал SS для того ведомого, обмен данными с которым будет осуществляться. Простыми словами, все ведомые, кроме выбранного ведущим будут игнорировать данные на шине. '''SS''' является инверсным (active-low), что означает что ведущему необходимо ''прижать'' эту линию для выбора ведомого.
Работа с DMA


== Подключение: ==
Работа с прерываниями
[[Файл:1200px-SPI three slaves.svg.png|651x651пкс]]
 
== SPI на Arduino: ==
 
=== Arduino UNO/Piranha UNO/Arduino ULTRA ===
На Arduino UNO/Piranha UNO/Arduino ULTRA выводы аппаратного SPI расположены на 10, 11, 12 и 13 выводах, а так же эти выводы соединены с колодкой ICSP (in circuit serial programmer):
[[Файл:23.png|717x717пкс]]
{| class="wikitable"
!Сигнал
!Вывод
|-
|SS
|10
|-
|MOSI
|11
|-
|MISO
|12
|-
|SCK
|13
|}
 
== Arduino MEGA ==
 
=== Arduino MEGA ===
На Arduino MEGA выводы аппаратного SPI расположены на 50, 51, 52 и 53 выводах, а так же эти выводы соединены с колодкой ICSP (in circuit serial programmer):
 
[[Файл:31.png|594x594пкс]]
{| class="wikitable"
!Сигнал
!Вывод
|-
|SS
|53
|-
|MOSI
|51
|-
|MISO
|50
|-
|SCK
|52
|}
 
=== Пример для Arduino ===
В этих примерах мы соединим две Arduino по SPI по следующей схеме:
 
[[Файл:4.png|663x663пкс]]
 
В одну плату необходимо загрузить скетч ведущего, а в другую скетч ведомого. Для проверки работы необходимо открыть проследовательный монитор той платы, в которую загружен скетч ведомого.
 
''Arduino UNO в качестве ведущего:''
 
[[Файл:5.png]]
 
[[Файл:66.png]]
 
''Arduino UNO в качестве ведомого:''
 
[[Файл:789.png]]
 
[[Файл:81.png]]
 
[[Файл:91.png]]
 
 
После соединения двух Arduino по SPI и загрузки соответствующих скетчей, мы будем получать следующее сообщение в мониторе последовательного порта ведомого микроконтроллера раз в секунду:
<code>Hello, World!
long integer over SPI is: 168496141</code>

Текущая версия от 07:35, 14 марта 2023

Раздел документации

Описание библиотеки HAL_SPI

Примеры с использованием конфигуратора

Режим ведомого

Режим ведущего

Работа с DMA

Работа с прерываниями