|
|
Строка 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>
| |