Страница 1 из 2

SPI (Serial Peripheral Interface) : что это такое?

Добавлено: Пт янв 26, 2007 00:06:13
asd
Объясните доступным языком что собой представляет SPI (Serial Peripheral Interface)и для чего он нужен (что с ним можно сделать)?
Благодарствую!

Добавлено: Пт янв 26, 2007 09:15:12
ARV
SPI - это интерфейс последовательного обмена данными. Использует одну линию для ввода MISO, одну для вывода MOSI и одну для синхронизации SCK, т.е. он трехпроводный. Обмен идет строко синхронно и одновременно (т.е. ввод и вывод происходят одновременно по соответствующим линиям). Дополнительно задействуется еще одна линия, для задания режима работы устройства - ведущий (master) или ведомый (slave). SPI позволяет аппаратно организовать связь ведущий-ведомый или ведущий-много_ведомых, но в этом случае для каждого отдельного ведомого надо тянуть отдельную линию управления.
Скорость обмена по SPI намного выше, чем по UART, однако из-за отсутствия гарантированного метода обнаружения кадра (кадры попросту отсутствуют) крайне неустойчив при наличии помех (особенно по линии синхронизации), т.е. для передачи на большие расстояния не предназначен.
Используется для работы с микросхемами памяти (в частности, карты Mini-SD могут работать по одному из подмножеств протокола SPI), есть и ПЗУ попроще с этим интерфейсом, есть АЦП и ЦАП, можно соединять несколько микроконтроллеров в сеть... У большинства Атмеловских МК через выводы SPI ведется программирование кристалла.

Добавлено: Пн июн 04, 2007 20:22:31
voin
Вопрос по теме.
Куда мне подключить MISO а, куда MOSI.
Как я понял MOSI к data out, MISO к data in.
По выводам м.к. получается, SCK к 7, data out к 5, data in к 6.
М.к. ATTINY13.
Схему и распиновку прилагаю, спасибо.

Добавлено: Пн июн 04, 2007 20:44:33
ARV
MOSI подключать к MOSI, MISO к MISO... MOSI - это "выход ведущего, вход ведомого", MISO - наоборот, "выход ведомого, вход ведущего"... отсюда и плясать. Программатор - это ведущий.

Добавлено: Пн июн 04, 2007 21:38:57
voin
Огромное спасибо, разобрался, выходит по идее что я перепутал, неправильно поняв твое предыдущее сообщение.
Интересно м.к. я мог повредить их перепутав, а ?

Добавлено: Пн июн 04, 2007 22:22:09
ARV
voin писал(а):Интересно м.к. я мог повредить их перепутав, а ?

Вряд ли... хотя гарантию не дам.

Добавлено: Вт июн 05, 2007 08:39:04
Aheir
Чтоб не путаться:
MOSI - Master Output/Slave Input
MISO - Master Input/Slave Output (ARV уже написал то же самое, только по-русски :) )

Принцип соединения - как в RS232, т.е. перекрестно :)

Добавлено: Вт июн 05, 2007 09:28:23
ARV
Aheir писал(а):Принцип соединения - как в RS232, т.е. перекрестно :)

В том-то и дело, что не перекрестно, а как я выше писал: MOSI к MOSI, MISO к MISO.

Добавлено: Вт июн 05, 2007 09:52:27
Мышонок
В RS-232 два типа кабелей:

1. Прямой или модемный (вилка-розетка), т.е. удлинитель;
2. Перекрестный или нуль-модемный (розетка-розетка).

Подробности имеются в какой-то из тем на Форуме. 8)

Добавлено: Вт июн 05, 2007 12:31:30
Aheir
[quote="ARVне перекрестно, а как я выше писал: MOSI к MOSI, MISO к MISO.[/quote]

С точки зрения формальной логики Вы правы... Да, все верно, это меня плющит на основе одного недостоверного источника..
Виноват. :)

Добавлено: Вт июн 05, 2007 17:03:37
voin
Спасибо, ARV.
Разобрался, провода местами поменял и все пошло.
М.к. работает.

Добавлено: Пн авг 27, 2007 12:51:37
Piroman17
Есть АЦП - ADC08031 и микроконтроллер mega16. Передача данных идёт с помощью SPI? Кто из них ведущий, а кто ведомый? На АЦП есть выводы CLK, DO - к каким выводам ATmega16 их подключать?
Заранее спасибо!

Добавлено: Вт авг 28, 2007 17:34:26
Tohey
А как расчитывать делитель (биты SPR1, SPR0)? В даташите формулы как для УАРТа не нашел... :shock:
И ещё... В СПИ - 1 регистр для данных, для ввода и вывода. Для отправки данных - master mode, для приема - slave? Я правильно понял?

Добавлено: Сб сен 01, 2007 00:13:09
Tohey
Так что ни кто не шарит в этом СПИ? Почему в даташите написано что он "full duplex", но не понятно почему 1 регистр для данных...? Наверно на@бка?

Добавлено: Сб сен 01, 2007 07:11:49
ARV
Нет, один регистр реализован так, что при записи и чтении обращение идет к РАЗНЫМ регистрам. Полный дуплекс - тоже не обман, т.к. по SPI всегда идет ОДНОВРЕМЕННАЯ передача вместе с приемом. Выдал свой байт - значит, уже принял байт от твоего "собеседника".

Добавлено: Сб сен 01, 2007 10:42:14
Tohey
То есть мастер может не только отсылать, но и читать? Как же читать данные в процессе отсылки данных мастером?

Добавлено: Сб сен 01, 2007 15:30:51
ARV
Повторяю: отправил байт - можешь читать принятый. пока передаваемый уходил - одновременно приходил принимаемый.

Добавлено: Сб сен 01, 2007 16:16:18
Tohey
Не въехал сразу, спасибо.

Re: SPI (Serial Peripheral Interface) : что это такое?

Добавлено: Сб фев 11, 2012 10:34:32
yuta_86
товарищи
нашёл в интернет такой код запись по SPI

Код: Выделить всё

void SPI_WRITE(unsigned char Addr, unsigned char data)
{
unsigned char i=0;
Addr=Addr|0x80;          // Старший бит в адресе дб равен 1!!!

nSEL=0;
delay_us(10);
for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
for (i=0; i<8; i++)
        {
        nSDI=(data>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
nSEL=1;                 // выборка чипа
delay_us(20);
}


вроде бы всё понятно, но вот следующий вопрос вот например у меня адрес и данные равно 0х06. по nsdi я так понимаю будут передаваться данные?или я что-то путаю? для чего nSCK=1; а потом через задержку nSCK=0; как должны передаваться данные в протоколе? какая последовательность? спасибо

Re: SPI (Serial Peripheral Interface) : что это такое?

Добавлено: Пн фев 13, 2012 14:08:55
yuta_86
неужели никто не знает?