Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:57

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 16:49 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Приветствую всех!
Может кто подскажет куда копать, потому как уже не знаю что и делать.
Есть STM32F4 как мастер и STM32F1 как подчиненное устройство (простой расширитель USARTов).
Связаны по SPI1, работают на прерываниях, операционка FreeRTOS.
Мастер шлет пакеты, слейв перекидывает данные в USART, забирает и отправляет обратно в мастер.
Проблема выползает на сразу, а через много тысяч успешно переданных-полученных пакетов.

Может кто сталкивался с похожей проблемой? Возможно ли, что идет сбой по линии CLK и далее вся передаваемая информация сдвигается?
Как вариант лечения проблемы - может пересбрасывать слейв?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 17:09 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3093
А в чем проблема-то?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 17:17 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 7287
Камни не слабые, может проще поднять CAN на обоих?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 17:22 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Телепатически предполагаю, что проблема у вас вылезла в том, что связь прекращается (сигнал CS поднимается) тогда, когда байт до конца не был передан. Вы просто не проверяете условие освобождения SPI по флагу BSY.
Это я как бы телепатически наугад предположил вашу проблему, поскольку вы ничего толком не описали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 18:40 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1664
Откуда: Курск
Тема была хорошо раскрыта на хабре, но со статьёй что-то случилось
Нашёл копию


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 19:11 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1417
Cthulhu писал(а):
Тема была хорошо раскрыта на хабре, но со статьёй что-то случилось

Только она уже устарела, на новых SPI есть FIFO и там все работает немного не так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 23:00 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Но ведь глюк в передаче от слейва к мастеру возникает не сразу, а через несколько 10000 правильных передач!
Сигнал SS мастер поднимает правильно.

Возможен ли аппаратный сбой интерфейса SPI slave или это в принципе не возможно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 09 апр 2019, 23:23 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3093
Вам наверное сюда: https://4pda.ru/forum/index.php?showtopic=589572


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 10 апр 2019, 08:42 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Вероятность каких-то аппаратных сбоев SPI - крайне мала. Единственное, что можно посмотреть, так это осциллограммы на предмет завала фронтов, если у вас высокая частота SPI. И тут никакой сброс слейва не поможет.
А во остальном - вот как написали, так оно и работает. Надеюсь, на слейве у вас нет RTOS-а?
Особенность работы слейва в том, что он должен успевать готовить данные к моменту запроса от мастера. На F1 нет FIFO для SPI, тут жестче требования, и контроля опустошения нет. Поэтому, на слейве - никаких тормозных RTOS-ов ставить нельзя. И вообще, слейв должен уведомлять мастер специальным сигналом INT (программный, дергается ножка) о готовности всей порции данных к отправке.

Ну и да, верная ссылка была дана - телепаты в отпуске! только ТС как-то невкурил шутку юмора. Видимо, плохо доходит до сознания. Если он и дальше будет взывать к телепатам, то вот наводящие вопросы:
- как именно искажаются принимаемые данные? какая есть закономерность? ошибка в одном байте или во всем пакете? какая именно ошибка, какая закономерность, сдвиг битов, байтов?
- какая частота SPI? есть ли завалы фронтов на осциллограмме? какое расстояние передачи? правильно ли выставлена скорость пинов (OSPEED)?
- нет ли RTOS на слейв-МК? какова частота SPI по отношению к частоте МК на слейве?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 10 апр 2019, 16:37 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Спасибо всем за помощь!
На слейве тоже стоит RTOS. Буду искоренять излишества!

Еще раз спасибо.
Тема закрыта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 10 апр 2019, 18:52 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Просто комментарий по положению дел:

В последнее время всё чаще и чаще наблюдаю и сталкиваюсь с тем, что RTOS присутствует практически в каждом проекте, независимо от его наполнения. Это просто какая-то мания на RTOS развилась. Еще буквально вот каких-то лет 5 назад мало кто помышлял о внедрении RTOS, памятуя о её недостатках.
Сейчас же, в том числе и на примере этой темы видим, что RTOS внедряется в наипростейший проект - "расширитель UART по SPI" - то есть втуда, где никакая операционка просто ну нафик не нужна. Ну чесслово, ну сами посудите.
Те, у кого есть хотябы пятилетний опыт написания программ, те меня поймут. Даже если НЕ использовать DMA для приема/отправки, то чисто на прерываниях задача решается очень просто. В прерываниях по приему - складываем принятые байты в буферы, в прерываниях по отправке - отправляем байты из буфера.
Признаком продуктивной работы будет прием/отправка по SPI через DMA, поскольку SPI гораздо более скоростной, чем UART. Следующим шагом может быть отправка UART через DMA. Прием UART можно оставить на прерываниях, так легче контролировать число принятых байт, если оно переменное.

Вот. Ну а что происходит, если на этот простой и прекрасный алгоритм накладывается RTOS со своими прибамбасами? Физически количество вычислительных ядер МК не увеличилось. Многозадачность появляется за счет выделения временнЫх слотов для каждого процесса. А еще RTOS занимает время на свои нужды по обслуживанию переключений. И усугубляется это еще и не совсем правильной компоновкой структуры программы. В результате получаем стечение обстоятельств, когда раз в икс-игрек минут-секунд происходит наложение событий по времени и что-то пропускается.
Выходит, что RTOS не только не приносит пользы, но и банально вредит... Такие вот дела...
И, как я и говорю, в последнее время такое бесполезное впихивание RTOS приобрело прямо-таки повальную эпидемию. Неопытным программистам операционка упрощает временнУю компоновку программы, но совершенно впустую отбирает вычислительные ресурсы. Вот буквально две недели назад выпиливал RTOS из похожего проекта. После удаления операционки и некоторой оптимизации удалось снизить рабочую частоту МК аж в 6 раз, уменьшив тем самым энергопотребление. А ведь это было устройство с батарейным питанием!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 11 апр 2019, 08:29 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2881
Да ладно...просто RTOS надо уметь готовить, как и любой код. Понятно, что надо исходить из принципа разумности и не пихать её во всякие маломощные штуки. Хотя признаюсь - сам почти везде ставлю, где нет требований особых по быстродействию и потреблению. Ну сильно быстрее код разрабатывается, когда у тебя уже куча готовых независимых модулей, которые крутятся в своих задачах и не знают друг о друге. Поддерживать проще, добавлять плюшки проще. Создать экземляры одной и той же задачи для однотипных процессов. Впрочем, уже оффтоп.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь двух STM32 по SPI
СообщениеДобавлено: 11 апр 2019, 10:29 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4962
Откуда: КЧР, поселок Нижний Архыз
Hold писал(а):
сам почти везде ставлю

Сегодня ты поставил ртось, а завтра в абдуринщики подался!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB