Но ведь регистры связанные, при отправке проталкиевается байт и на прием. И если другая сторона ничего не отправила - при приеме будет сначала мусор Если я правильно понимаю Наладил обмен на поллинге между STM32 и STM8S, работает. Но все равно стабильность зависит от медленного устройства, если пригрузить STM8S, уже не успевает обрабатывать. Можно вводить задержки на стороне STM32 между отправкой/приемом байтов. Но это снижает скорость обмена. Уже думаю над асинхронным протоколом, чтобы на каждый отправленный байт STM32 ждал подтверждения приема этого байта в виде ответного байта со стороны STM8S

Комментарии: 39

  1. Anonim

    Как правило слейв без определенной команды отправляет или статус или 0xFF Их можно просио игнорировать Так сам спи не медленный, просто не успевает обработаться. Если ввести подтверджение, то только хуже станет

    • Serg

      да, скорость снизится, но гарантированно будет успевать принимать при любой загруженности STM8S

      • Anonim

        Во всяком случае дисплей 20*4 пересовать на 100кГц занимает больше секунды

      • Anonim

        Не в этом дело. У тебя данные и так принимаются в регистр скорей всего. Просто камень не успевает их дальше забрать и обработать между приемами. Если ввести подтверждение, то это еще больше отнимет процерного времени

        • Serg

          но гарантированно примет, а сейчас мастер отправил и ждет от слейва ответа. А слейв может не успеть принять и ничего не ответит

          • Anonim

            Не путай прием с обработкой

            • Serg

              хорошо - гарантированно успеет принять в буфер в программе

              • Lexszero

                в стмовском и2ц это реализовано прижиманием scl пока не отработает прерывание

                • Serg

                  а не в буфер самого SPI

                  • Anonim

                    сделай паузы между отправками, на частоту передачи это не повлияет (клок), но даст времени для обработки

                    • Serg

                      какие паузы? один слейв быстрее, другой медленнее

              • Lexszero

                дма нету чтоб не возиться с прерываниями?

              • Anonim

                а времени для рабоиы с данными всеравно не останется. Кста, у стм8 есть дма?

                • Serg

                  подстраивать паузы под самый медленный?

                  • Lexszero

                    под тот с которым щас общаешься

                    • Serg

                      STM8S003 - нет

                      • Lexszero

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

                        • Anonim

                          Вижу два решения, или паузы, или камень быстрей. Третьего решения совсем не вижу

                          • Serg

                            ну как вариант можно заложить значение паузы в настройки обмена с конкретным слейвом но как-то ненадежно выглядит а вариант с подтверждением приема каждого байта? мастер отправил байт к примеру 0x47 и до отправки следующегшо байта ждет от слейва 0x47

                            • Anonim

                              Даже если взять в пример пеку, вроде мощный проц, но я умудрялся челу подвесить пк просто отправляя данные по уарт на 115200 без пауз

                              • Lexszero

                                я умудрялся повесить пеку уровнив пассатижи на клавиатуру

                            • Lexszero

                              в два раза уменьшает пропускную способность

                              • Serg

                                ну а паузы тоже уменьшат

                            • Anonim

                              Слей же не умеет сам говорить, а если ты начнешь клок дергать, то это передача будет

  2. Lexszero

    может лучше i2c? там клок стретчинг искаропки есть.

    • Serg

      дисплей да, у меня со слейвами обмен запрос/ответ, максимум 128 байт что запрос что ответ что за клок стретчинг?

  3. Danil

    Danil: стандартные страдания получение данных по запросу через SPI детектед. Стандартное решение #1: дополнительный провод от слейва к мастеру для сигнала готовности данных. Стандартное решение #2: опрос слейва после таймааута гарантированной готовности данных. Стандартное решение #3: Поллинг слейва на предмет готовности данных. Стандартный вариант #4: Использование другого интерфейса - I2C, UART etc. написал уже давно про твои грабли с опросом слейвов по SPI

    • Serg

      Данил, спасибо за развернутый ответ. Но ты пишешь в общем, а дъявол в деталях.

      • Danil

        всё едят этот кактус, только каждый по своему вариант #1 - нужен ещё 1 провод от слейва до мастера по которому будешь сигналить, что ответ готов

        • Serg

          "Стандартное решение #1: дополнительный провод от слейва к мастеру для сигнала готовности данных. " СS в этом качестве можно использовать или собьет механизм работы SPI слейва?

          • Anonim

            Может в ардуину? Ибо до тебя ещё недели две доходить будет !?

            • Danil

              вариант #2 - отправил пакет на слейв и ждёшь гарантированное время, за которое самый тупой слейв все обработает и подготовит ответ. после этого сливаешь пакет со слейва в мастер вариант #3 постоянно анализировать что выдает слейв в момент передачи байта - если там не сигнал "все готово" то опрашиваем дальше. Но это будет работать только если сделаешь некий командный протокол поверх SPI

              • Serg

                слейв принимает мусор если быстро сыпется от мастера в итоге слейв не видит запроса

                • Danil

                  Короче, я всё. Я пытался объяснить уже по всякому, но ты не въезжаешь в SPI пока В анаохию, рравда

                  • Serg

                    ты не отвечаешь на конкретные вопросы, а излагаешь теорию

                  • Lexszero

                    какая вообще частота, интервалы между байтами и объемы данных? может ты хочешь невозможного, или можно вообще не гнаться за скоростью. +

                • Lexszero

                  ээ так может у тебя приходит мусор? осцилом смотрел?

                  • Serg

                    не смотрел

Не нашли ответ?

Вам также может быть интересно