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

SPI в stm32

Добавлено: Пн ноя 21, 2011 10:55:47
van_de_luxe
Ситуация такая:
я-мастер :)
подключен к slave по spi
Хочу настроить, чтобы прием данных происходил по прерыванию (тут проблем нет, прерывание включается когда Rx буфер заполнен)
как мне узнать что slave хочет передать данные?(решено)
clock же мастер выдает, а как он узнает когда его нужно выдавать?
и что запускает механизм выдачи клока при приеме? (установка бита, запись к к-н регистр, определенное состояние линий ВВ)
Догадываюсь что где-то в даташите это описано, но не вижу. Ткните носом, пожалста
использую stm32f103zg

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 11:05:18
Satyr
Обычно у таких SPI девайсов есть отдельный выход - запрос прерывания
в STM32 разводишь соединенией с ним на какой нибудь EXTINT, а на него уже вешаеешь обработчки, который инициирует обмен с девайсом по SPI

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 11:06:35
van_de_luxe
вот я не могу найти что его инициирует
для передачи все просто - кинул данные в буфер, они отправились
а с приемом не пойму

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 11:12:04
Jack_A
van_de_luxe писал(а):а как он узнает когда его нужно выдавать?
Догадываюсь что где-то в даташите это описано, но не вижу.
В ДШ это описано быть не может, потому что это - вопрос не SPI как такового, а протокола конкретных устройств, связанных по SPI. Для запроса приема нужно использовать отдельную линию, не входящую в интерфейс SPI. Можно попробовать на какую-нибудь из линий навесить двойную функцию, например, MISO в исходном состоянии держит '1' , когда slave захочет передавать, он утягивает линию в '0', после того, как мастер изготовится к передаче и утянет CS в '0', MISO подключается к своей обычной работе -- выход slave SPI. Можно сделать чисто аппаратно, можно - программно.
Инициирует передаче слейва его окружение : что-то случилось в наблюдаемой среде, и он должен сообщить об этом мастеру.
Если время реакции не критично, можно вести обмен по опросу : мастер периодически спрашивает у слейва : что там? Если тот молчит ( а лучше - отвечает заготовленной комбинацией ПОКА НИЧЕГО - в этом случае контролируем и наличие связи ), то состояние не требует обслуживания, если нет - получаем пакет с информацией о событии.

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 11:18:17
van_de_luxe
ладно, для сигнализации о наличии данных я просто сделаю линию-флаг, с этим понятно.
сейчас заново перелистал даташит и просмотрел ф-ии из исходников примеров, но так и не нашел что инициирует запуск clock при приеме, даже биты в регистрах просмотрел, ничего похожего не увидел.
Или я чтото путаю и при передаче slave->master тактовую частоту slave задает?

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 11:25:05
Satyr
van_de_luxe писал(а): сейчас заново перелистал даташит и просмотрел ф-ии из исходников примеров, но так и не нашел что инициирует запуск clock при приеме, даже биты в регистрах просмотрел, ничего похожего не увидел.
SPI это, грубо говоря, интерфейс обмена словами между сдвиговыми регистрами по кольцу.
Так что чтоб чтото принять, мастер должен послать именно столько, чтоб оно прошло кольцо и вернулось.
В случае байтов и прямой связи мастер-слейв, ты должне послать байт (вобщем то с туфтой -)) ) в SPI чтобы принять оттуда байт -)))
Так вот и появляется клок

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 11:39:00
Jack_A
Поясним на примере ( см.рис. )

Мастер передает 1 байт затем 1 байт принимает
SPI.JPG
(14.76 КБ) 1078 скачиваний
1 -- информация, передаваемая слейву
2 -- то, что он лепечет в ответ, игнорируем
3 -- передаем ему абы што, при этом идут клоки
4 -- а вот теперь эту инфу от слейва принимаем и сохраняем.

Re: SPI в stm32

Добавлено: Пн ноя 21, 2011 12:16:56
van_de_luxe
понятно... значит фактически у spi нет режима принимающего мастера, а есть fullduplex
некрасиво получается, передавать фигню только ради тактов