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

Основы работы протокола 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.
 
SCK(Serial Clock ) – служит для передачи тактового сигнала ведомому устройству.
 
Также используется линия SS(Slave Select), которая определяет устройство с которым  Master  будет обмениваться данными.
Основы работы протокола SPI.

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

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

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

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

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

На осциллограммах ниже видно как выглядит посылка 0х17 в разных режимах.
CPOL = 0 CPHA = 0
Основы работы протокола SPI.

CPOL = 1 CPHA = 0
Основы работы протокола SPI.

CPOL = 0 CPHA = 1
Основы работы протокола SPI.

CPOL = 1 CPHA = 1
Основы работы протокола SPI.


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

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

На этом всё, выше пример кода взятый из рабочего проекта.
комментарии
0