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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
asd
Встал на лапы
Сообщения: 95
Зарегистрирован: Сб янв 20, 2007 22:03:21
Откуда: от верблюда

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

Сообщение asd »

Объясните доступным языком что собой представляет SPI (Serial Peripheral Interface)и для чего он нужен (что с ним можно сделать)?
Благодарствую!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
voin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пт ноя 10, 2006 16:50:24
Откуда: Россия Крым Феодосия

Сообщение voin »

Вопрос по теме.
Куда мне подключить MISO а, куда MOSI.
Как я понял MOSI к data out, MISO к data in.
По выводам м.к. получается, SCK к 7, data out к 5, data in к 6.
М.к. ATTINY13.
Схему и распиновку прилагаю, спасибо.
Вложения
Програматор.rar
(19.86 КБ) 501 скачивание
Тот кто впереди, всегда боится отстать, - это наш шанс, вот так то.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
voin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пт ноя 10, 2006 16:50:24
Откуда: Россия Крым Феодосия

Сообщение voin »

Огромное спасибо, разобрался, выходит по идее что я перепутал, неправильно поняв твое предыдущее сообщение.
Интересно м.к. я мог повредить их перепутав, а ?
Тот кто впереди, всегда боится отстать, - это наш шанс, вот так то.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

voin писал(а):Интересно м.к. я мог повредить их перепутав, а ?

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

Мой уютный бложик... заходите!
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Чтоб не путаться:
MOSI - Master Output/Slave Input
MISO - Master Input/Slave Output (ARV уже написал то же самое, только по-русски :) )

Принцип соединения - как в RS232, т.е. перекрестно :)
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

В том-то и дело, что не перекрестно, а как я выше писал: MOSI к MOSI, MISO к MISO.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Мышонок
Друг Кота
Сообщения: 3792
Зарегистрирован: Чт сен 14, 2006 11:42:09
Откуда: Обитаю на чердаке
Контактная информация:

Сообщение Мышонок »

В RS-232 два типа кабелей:

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

Подробности имеются в какой-то из тем на Форуме. 8)
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

[quote="ARVне перекрестно, а как я выше писал: MOSI к MOSI, MISO к MISO.[/quote]

С точки зрения формальной логики Вы правы... Да, все верно, это меня плющит на основе одного недостоверного источника..
Виноват. :)
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
voin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Пт ноя 10, 2006 16:50:24
Откуда: Россия Крым Феодосия

Сообщение voin »

Спасибо, ARV.
Разобрался, провода местами поменял и все пошло.
М.к. работает.
Тот кто впереди, всегда боится отстать, - это наш шанс, вот так то.
Аватара пользователя
Piroman17
Грызет канифоль
Сообщения: 296
Зарегистрирован: Пт янв 12, 2007 17:16:35
Откуда: Дубна
Контактная информация:

Сообщение Piroman17 »

Есть АЦП - ADC08031 и микроконтроллер mega16. Передача данных идёт с помощью SPI? Кто из них ведущий, а кто ведомый? На АЦП есть выводы CLK, DO - к каким выводам ATmega16 их подключать?
Заранее спасибо!
"Всё новое - хорошо забытое старое" - для творцов без творческий мысли.
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

А как расчитывать делитель (биты SPR1, SPR0)? В даташите формулы как для УАРТа не нашел... :shock:
И ещё... В СПИ - 1 регистр для данных, для ввода и вывода. Для отправки данных - master mode, для приема - slave? Я правильно понял?
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Так что ни кто не шарит в этом СПИ? Почему в даташите написано что он "full duplex", но не понятно почему 1 регистр для данных...? Наверно на@бка?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

То есть мастер может не только отсылать, но и читать? Как же читать данные в процессе отсылки данных мастером?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Не въехал сразу, спасибо.
yuta_86
Открыл глаза
Сообщения: 78
Зарегистрирован: Пн май 23, 2011 11:23:39

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

Сообщение 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; как должны передаваться данные в протоколе? какая последовательность? спасибо
yuta_86
Открыл глаза
Сообщения: 78
Зарегистрирован: Пн май 23, 2011 11:23:39

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

Сообщение yuta_86 »

неужели никто не знает?
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»