STM32 STM32VL Discovery STM32F100RBT6 (урок 10) SPI, практика

| 05.04.2016

STM32 STM32VL Discovery STM32F100RBT6 (урок 10) SPI, практикаSPI_block_diagram

Общее
SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.

В отличие от стандартного последовательного порта (англ. standard serial port), SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (процессором). Принимающая (ведомая) периферия синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (англ. chip select) на ведомой микросхеме. Периферия, не выбранная процессором, не принимает участия в передаче по SPI.

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

Так как действия ведущего и ведомого устройства тактируются одним и тем же сигналом, то к стабильности этого сигнала не предъявляется никаких требований, за исключением ограничения на длительность полупериодов, которая определяется максимальной рабочей частотой более медленного устройства. Это позволяет использовать SPI в системах с низкостабильной тактовой частотой, а также облегчает программную эмуляцию ведущего устройства.

Устройство SPISPI_Single_master_single_slave_application

Шина SPI представляет собой два последовательно соединённых между собой сдвиговых регистра и по каждому тактовому импульсу данные в регистрах сдвигаются. То есть по каждому тактовому импульсу один бит уходит из регистра, остальные биты сдвигаются к выходу, а на входе появляется свободное место, его и занимает вновь пришедший бит.

В SPI используются четыре цифровых сигнала:

  • MOSI — выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.
  • MISO — вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCLK — последовательный тактовый сигнал (англ. Serial Clock). Служит для передачи тактового сигнала для ведомых устройств.
  • CS или SS — выбор микросхемы, выбор ведомого (англ. Chip Select, Slave Select).

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

  • MOSI: SIMO, SDI (на устройстве), DI, DIN, SI, MTST;
  • MISO: SOMI, SDO (на устройстве), DO, DOUT, SO, MRSR;
  • SCLK: SCK, CLK;
  • SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.

** Важно : Последняя линия включает модуль SPI Slave, причем обычно включение это происходит когда на линии логический “0″, а выключение, когда на линии логическая “1″ (отсюда вход Slave Select слейва, логичнее называть Not Slave Select, то есть когда на линии лог “1″, слейв НЕ выбран). 
Дело в том, что к одному мастеру может быть подключено несколько Slave устройств(линии MISO, MOSI, SCK становятся общими) и конкретное  Slave устройство выбирается Мастером благодаря этому входу. Таким образом это позволяет SPI master обмениваться данными с несколькими устройствами slave, индивидуально обращаясь к каждому устройству, что позволяет избежать конфликта по шинам данных. Но тут кроется сюрприз в виде того, что при настройке нашего модуля в качестве мастера (Master) эта ножка может работать совсем в другом качестве, а именно на вход. Этот вариант поддерживается для возможности реализации шины SPI с несколькими Master(мастерами).

подключение

Где SPI в нашем MK (STM32F100RBT6) ?
В нашем микроконтроллере есть несколько блоков SPI. SPI1 – находится на шине APB2, а другой  SPI2 на шине APB1. В других микроконтроллерах серии можно встретить большее или меньшее число число интерфейсов.

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

SPI_PinsDiscr

Data frame formatSPI_Data_clock_timing_diagram

У нас есть не так много вариантов настройки нашего модуля. При подключении какого-либо устройства к микроконтроллеру по интерфейсу SPI необходимо посмотреть техническую документацию на это устройство и понять всего несколько параметров. Как правило подключаемые устройства к микроконтроллеру это рабы(slave), то есть они будут подчинятся и управляться мастером, а именно нашим микроконтроллером. 
1) Определить в каком режиме мы будем работать. Режимом называется вариант работы CLK – линии тактирования.
2) Определить скорость на которой будем работать. Период импульсов тактирования.
3) Определить старшим битом вперед или младшим и число бит 8 или 16.

4) Определить где какие ножки и все подключить.

Ссылки на комплектующие:
Отладочная плата: STM32VL Discovery (ссылка)
Микроконтроллер: STM32F100RBT6 (
ссылка)
Провод USB :  (ссылка)
Преобразователь USB-UART : FTDI (ссылка)

Макетная плата: (ссылка)
Блок питания на 12V (ссылка)
Преобразователь 12V  в  3,3/5V (ссылка)
Перемычки для макетной платы (ссылка)

SPI Примеры
Progect 1 – Настраиваем SPI_1 и заставляем постоянно слать данные (смотреть на осциллографе)
Progect 2 - Настраиваем SPI_1 и замкнули ножки [ MISO(PA6) - MOSI(PA7) ] таким образом получаем то что отправили
Progect 3 – Настраиваем SPI_1 и SPI_2 (Отправляем из SPI_1  в  SPI_2)

Проект (SPI) (ссылка на скачивание)

Progect 1

Progect 2

Progect 3

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *