реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32 SPI, коннект между двумя чипами от st по spi
Connor
сообщение Apr 24 2018, 05:59
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-05-17
Пользователь №: 97 309



Всем спасибо за ответы, очень помогли sm.gif
К слову работаю я на довольно низкой частоте 500 кбод/c, но я так понимаю скорость обмена зависит от тактовой частоты мастера, а не слейва?
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Apr 24 2018, 12:58
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Частота обмена ВСЕГДА зависит от частоты мастера.
Ведомый кристалл только выставляет соответствующий уровень на пине MISO в момент(ы) смены тактового сигнала SCK.
Необходимое условие - частота обмена не более четверти тактовой частоты ведомого чипа. Заметьте, тактовой частоты его периферии.
Приведу пример:
Мастер: 8МГц. Ведомый: 8МГц.
SPI мастера тактируется от внутренней частоты с делителем /2. Результатирующая - 4МГц (внутренняя) и 2МГц (максимальная частота на пине SCK (здесь я имею в виду полную смену тактового сигнала 0-1-0)).
SPI ведомого тактируется от внутренней шины с делителем /4. Результатирующая - 2МГц (вроди бы, совпадает с внешней), но максимальная внешняя - 1МГц (тот же полный импульс 0-1-0).
Так что, мастер должен дёргать пином минимум в 2 раза медленнее.

500кБод - вполне достаточно 1МГц на шине. На шине ведомого. Ну и мастер должен с этой частотой данные читать.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 24 2018, 15:21
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 907
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Connor @ Apr 23 2018, 10:47) *
Я это осознал, другой вопрос заключается в том, что на мастере необходимо организовывать задержку перед отправкой "мусора", например, чтобы принять данные от слэйва(в котором включается дма в прерывании)?
Используйте стандартные методы.
Если слейв должен возвратить "быстрые" данные (например выборка параметра из RAM) то для этого таймауты не нужны и все можно
"прокрутить" в одном запрос-ответе.
Если же нужна задержка на подготовку данных (например отработка ADC) то это делается "наразвес", несколькими командами
1. Старт АЦП в слейве. 2. опрос регистра статуса слейва готовности данных АЦП. 3. Чтение слейва - данных АЦП.


Go to the top of the page
 
+Quote Post
Connor
сообщение Apr 25 2018, 06:02
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-05-17
Пользователь №: 97 309



Цитата(AlanDrakes @ Apr 24 2018, 06:58) *
Частота обмена ВСЕГДА зависит от частоты мастера.
Ведомый кристалл только выставляет соответствующий уровень на пине MISO в момент(ы) смены тактового сигнала SCK.
Необходимое условие - частота обмена не более четверти тактовой частоты ведомого чипа. Заметьте, тактовой частоты его периферии.
Приведу пример:
Мастер: 8МГц. Ведомый: 8МГц.
SPI мастера тактируется от внутренней частоты с делителем /2. Результатирующая - 4МГц (внутренняя) и 2МГц (максимальная частота на пине SCK (здесь я имею в виду полную смену тактового сигнала 0-1-0)).
SPI ведомого тактируется от внутренней шины с делителем /4. Результатирующая - 2МГц (вроди бы, совпадает с внешней), но максимальная внешняя - 1МГц (тот же полный импульс 0-1-0).
Так что, мастер должен дёргать пином минимум в 2 раза медленнее.

500кБод - вполне достаточно 1МГц на шине. На шине ведомого. Ну и мастер должен с этой частотой данные читать.


Спасибо, это действительно логично

Цитата(k155la3 @ Apr 24 2018, 09:21) *
Используйте стандартные методы.
Если слейв должен возвратить "быстрые" данные (например выборка параметра из RAM) то для этого таймауты не нужны и все можно
"прокрутить" в одном запрос-ответе.
Если же нужна задержка на подготовку данных (например отработка ADC) то это делается "наразвес", несколькими командами
1. Старт АЦП в слейве. 2. опрос регистра статуса слейва готовности данных АЦП. 3. Чтение слейва - данных АЦП.


В том и проблема, что именно в такой системе как реализовано у меня, АЦП конвертируют данные, DMA записывает их в буфер, который копируется ещё в один (на отправку мастеру), по приходу флага копирование данных в этот буфер прекращается и я отправляю этот буфер мастеру, но как я уже говорил, флаг у меня приходит, срабатывает прерывания, на слэйве запускается DMA по Rx запросу, но чтобы мастер начал читать адекватные данные, когда я начинаю слать слэйву "мусор", нужно выждать что-то около 500мс, что очень плохо, потому что обновлять данные я должен несколько раз в секунду, поэтому решением этой ситуации, как мне подсказали выше, это реализовать просто обмен по DMA без всяких флагов, что я уже сделал и что гораздо проще в итоге

Сообщение отредактировал Connor - Apr 25 2018, 06:15
Go to the top of the page
 
+Quote Post
rudy_b
сообщение Apr 25 2018, 19:39
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 866
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458



Я сделал так.

Одну ногу мастера использую как CS. На слейве - передний фронт сигнала CS вызывает прерывание - предупреждение о том, что через 1 мсек (под мои задачи) мастер запустит обмен. За это время слейв готовит данные в буфере передачи и запускает свои DMA на прием и передачу, после чего занимается своими делами. По завершении DMA передачи от мастера он получает прерывание (TC DMA) и считывает полученные от мастера данные.

Мастер получает прерывание от таймера (период обмена), ставит CS, готовит данные передачи и занимается своими делами. Через 1 мс после установки CS (опять же по прерыванию таймера) мастер запускает прием/передачу по DMA и занимается своими делами. По ее завершении получает прерывание (TC DMA), считывает данные слейва и снимает CS.

Т.е. вся работа идет по прерываниям и DMA.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 26 2018, 14:40
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 907
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Connor @ Apr 25 2018, 09:02) *
. . . .начинаю слать слэйву "мусор", нужно выждать что-то около 500мс, что очень плохо, . . .

Если сделаете аппаратную синхронизацию по времени цикла 1с по всей системе (например от мастера),
то проблемы с таймаутами и готовностью-неготовностью можете "разрулить" с использованием таймеров.
(не будет необходимости ожидания или контроля отработки для асинхронных событий между мастером и слейвом).
Например, мастер на такте 0 таймера дает команду слейву на старт АЦП. Время работі АЦП, скажем, 500 мс.
Соответственно, мастер дает команду опроса слейву на 520-ом такте, а слейв заботится о том, чтобы эти данные и все подготовительные операции
к 520-му такту у него были закончены.

Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Apr 26 2018, 18:18
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(k155la3 @ Apr 26 2018, 20:40) *
Если сделаете аппаратную синхронизацию по времени цикла 1с по всей системе (например от мастера),
то проблемы с таймаутами и готовностью-неготовностью можете "разрулить" с использованием таймеров.

Плавали, знаем...
Всё это будет работать до очередной хотелки клиента. После чего придётся переписывать почти весь проект, причём на оба чипа, и почти с нуля. Мне лень убеждать, но посмотреть со стороны всегда приятно.
И всё-же: разделяйте уровень железа и программной части, уровень интерфейса и протокола пакетной связи, а также разумно используйте абстракции данных на уровне приложения (алгоритма). При использовании подобного разделения - ваш проект можно масштабировать практически бесконечно (в разумных пределах), а так-же использовать части и даже целые куски в новых проектах - без подгонки напильником.

Реальный пример существующего проекта.
На ПП несколько чипов, в том числе и слабенький st для работы с сенсорным экраном (не я придумывал). Изначально алгоритм этого чипа был очень простым: получить координаты нажатия экрана, и в режиме слейва отдать главному чипу. Потом ему добавили работы в определении нажатия иконок - протокол связи стал намного сложнее и обрёл множество садового инструментария. Количество изменений в проекте между этими двумя точками - просто безумное. Переписывалось даже то, что имеет лишь косвенное влияние. А потом хозяин проекта узнал что существуют готовые железные контролёры сенсорных экранов, в которых эти функции реализованы изначально. Такого количества подстановок я не встречал даже у индусов. Количество изменений равнялось общему объёму проекта. Поле чего автор проекта решил пристрелить больное бешенством животное, и начать с нового листа. И с первых строчек прострелил себе ногу в трёх местах.

Я к тому что уровень адруино не лечится, если уже заразились - то постарайтесь не распространять заразу.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 27 2018, 08:20
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 907
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(AVI-crak @ Apr 26 2018, 21:18) *
Плавали, знаем...
Все понятно, кроме одного, зачем процитирован мой пост.
Если процитирован, то замечания по сути.
ps
Используя метод психоанализа я, кажется, понял в чем причина sm.gif В терминах и их применении.


Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Apr 27 2018, 10:37
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(k155la3 @ Apr 27 2018, 14:20) *
Если процитирован, то замечания по сути.

Всё очень просто. Использование предсказания поведения внешней системы с использованием таймера - намного уменьшает гибкость общего алгоритма. То-есть если-бы внешней системой было железо, механика или нечто подобное - то реализация предсказаний оправдывается. Но в связке двух процессоров - это наличие недостатка в алгоритме.
Go to the top of the page
 
+Quote Post
Alechek
сообщение May 7 2018, 12:43
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 225
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(AVI-crak @ Apr 27 2018, 15:37) *
Но в связке двух процессоров - это наличие недостатка в алгоритме.

Делаю связку из нескольких процессоров с ипользованием half-duplex SPI (1 линия приема-передачи)
Вот тут без жесткого тайминга никак.... Вовремя надо направление переключить - мастер-приемник-то шпарит постоянно.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd May 2018 - 00:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01035 секунд с 7
ELECTRONIX ©2004-2016