@ru_electronics

Страница 300 из 718
Serg
28.05.2017
06:33:22
Можно вводить задержки на стороне STM32 между отправкой/приемом байтов. Но это снижает скорость обмена.

Уже думаю над асинхронным протоколом, чтобы на каждый отправленный байт STM32 ждал подтверждения приема этого байта в виде ответного байта со стороны STM8S

Ivan Nets
28.05.2017
06:36:21
DarkNet - блог о темной стороне интеренета. @darknets

ОлегЪ
28.05.2017
06:51:24
Но ведь регистры связанные, при отправке проталкиевается байт и на прием. И если другая сторона ничего не отправила - при приеме будет сначала мусор
Как правило слейв без определенной команды отправляет или статус или 0xFF Их можно просио игнорировать

Google
ОлегЪ
28.05.2017
06:53:37
ОлегЪ
28.05.2017
06:59:59
Он ужасен, медленный ппц

Serg
28.05.2017
07:00:20
Так сам спи не медленный, просто не успевает обработаться. Если ввести подтверджение, то только хуже станет
да, скорость снизится, но гарантированно будет успевать принимать при любой загруженности STM8S

ОлегЪ
28.05.2017
07:00:48
Во всяком случае дисплей 20*4 пересовать на 100кГц занимает больше секунды

Serg
28.05.2017
07:01:48
дисплей да, у меня со слейвами обмен запрос/ответ, максимум 128 байт что запрос что ответ

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

Serg
28.05.2017
07:03:33
но гарантированно примет, а сейчас мастер отправил и ждет от слейва ответа. А слейв может не успеть принять и ничего не ответит

LexsZero
28.05.2017
07:03:39
что за клок стретчинг?
слейв может дать понять мастеру что он не успевает пережевывать то что тот шлет

https://stackoverflow.com/questions/24862372/i2c-slave-clock-stretching

Serg
28.05.2017
07:05:25
хорошо - гарантированно успеет принять в буфер в программе

Google
LexsZero
28.05.2017
07:05:31
в стмовском и2ц это реализовано прижиманием scl пока не отработает прерывание

Serg
28.05.2017
07:05:36
а не в буфер самого SPI

ОлегЪ
28.05.2017
07:05:52
сделай паузы между отправками, на частоту передачи это не повлияет (клок), но даст времени для обработки

Serg
28.05.2017
07:06:19
какие паузы? один слейв быстрее, другой медленнее

LexsZero
28.05.2017
07:06:27
хорошо - гарантированно успеет принять в буфер в программе
дма нету чтоб не возиться с прерываниями?

ОлегЪ
28.05.2017
07:06:28
хорошо - гарантированно успеет принять в буфер в программе
а времени для рабоиы с данными всеравно не останется. Кста, у стм8 есть дма?

Serg
28.05.2017
07:06:39
подстраивать паузы под самый медленный?

LexsZero
28.05.2017
07:07:05
подстраивать паузы под самый медленный?
под тот с которым щас общаешься

Serg
28.05.2017
07:07:11
STM8S003 - нет

LexsZero
28.05.2017
07:07:20
если общаешься с обоими сразу - то под самый медленный, да

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

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

Serg
28.05.2017
07:08:15
ну как вариант можно заложить значение паузы в настройки обмена с конкретным слейвом

но как-то ненадежно выглядит

мастер отправил байт к примеру 0x47 и до отправки следующегшо байта ждет от слейва 0x47

ОлегЪ
28.05.2017
07:09:33
Даже если взять в пример пеку, вроде мощный проц, но я умудрялся челу подвесить пк просто отправляя данные по уарт на 115200 без пауз

LexsZero
28.05.2017
07:09:54
Serg
28.05.2017
07:10:09
ну а паузы тоже уменьшат

Google
ОлегЪ
28.05.2017
07:10:39
мастер отправил байт к примеру 0x47 и до отправки следующегшо байта ждет от слейва 0x47
Слей же не умеет сам говорить, а если ты начнешь клок дергать, то это передача будет

LexsZero
28.05.2017
07:11:04
там и асинхронность, и подтверждения.

Serg
28.05.2017
07:11:15
слейв примет байт и отправил такой же в качестве подтверждения

ОлегЪ
28.05.2017
07:12:08
там и асинхронность, и подтверждения.
Это только стм'овская фишка подтверждение? Оно не описано в стандарте на и2ц?

LexsZero
28.05.2017
07:12:42
Serg
28.05.2017
07:13:33
уже сделано под SPI, I2C придется программный лепить

ОлегЪ
28.05.2017
07:13:52
слейв примет байт и отправил такой же в качестве подтверждения
В таком случае слейв примет два байта, т.к до полного приема первого байта ему нечего отправлять, а чтоб отправить после приема, ему опять что то принять надо. В итоге уже два байта обрабатывать, или как то решать, что обрабатывать, а что нет

Что за данные, требующие большой скорости?

Serg
28.05.2017
07:16:52
много слейвов и нужно их как можно чаще оправшивать

Serg
28.05.2017
07:17:42
есть

SPI же заложен

ОлегЪ
28.05.2017
07:18:30
У каждого слэйва свой cs подведен?

Serg
28.05.2017
07:18:46
да

LexsZero
28.05.2017
07:19:01
можно его для подтверждения и юзать. мастер конфигурит свои выходы как опенколлектор, а слейвы для подтверждения его перетягивают. но это тоже пиздец наркомания.

Serg
28.05.2017
07:19:54
так это же нарушит работу SPI, CS там же что-то аппаратно включает

LexsZero
28.05.2017
07:20:24
нет

то есть, не обязательно

Google
LexsZero
28.05.2017
07:20:43
можно смуксить его как гпио и дергать руками как угодно

Serg
28.05.2017
07:21:07
там а зачем он тогда вообще нужен?

для SPI

ОлегЪ
28.05.2017
07:21:22
Я бы сначала отправил команду на подготовку данных всем слейвам по кругу, потом опятт по байту для чтения, чтоб самый медленый за это время успел. Если не заработает, то или клок уменьшатт или паузы ставить

LexsZero
28.05.2017
07:21:38
чтоб слейв понимал что та болтовня что щас идет на MOSI/SCK - это для него

Serg
28.05.2017
07:21:41
тоже вариант

пока заложу в настройки каждого слейва клок и значения пауз

LexsZero
28.05.2017
07:22:57
это "понимание" можно сделать как хардварно (замуксив ногу на контроллер SPI), либо софтварно (замуксив как гпио, и например включая спи в хендлере прерывания его дрыганья)

Serg
28.05.2017
07:23:05
но паузы работают только при стабильной загрузке слейва, чуть слейв чем то больше занят - и пойдут ошибки опроса

"замуксив ногу на контроллер SPI" расшифруй

LexsZero
28.05.2017
07:24:56
"замуксив ногу на контроллер SPI" расшифруй
ну блин, физическая нога мк может подключаться к разным периферийным модулям внутре.

Serg
28.05.2017
07:25:28
Т.е. начинаем работу как обычно, мастер прижимает слейв к земле, отправляет первый байт и переводит cs в режим входа с подтяжкой к земле и ждет пока слейв вход не дернет в высокий уровень

Serg
28.05.2017
07:27:19
А вот в момент когда слейв дернет в высокий уровень, SPI самого слейва не посчитает что работа закончена и что-то там выключит?

ОлегЪ
28.05.2017
07:28:03
но паузы работают только при стабильной загрузке слейва, чуть слейв чем то больше занят - и пойдут ошибки опроса
Либо при приеме слэйвом команды записатт на отправку "контрольный" байт, а после подготовке переписать данными. Если мастер в ответ получит "контрольный", то значит данных нет. Это и будет подтверждение. Но решение не оч как по мне

LexsZero
28.05.2017
07:28:27
а тебе точно-точно надо подтверждать прям каждый байт? потому что у меня когда-то стмка (32f1) без особых проблем принимала посылки в десяток-сотню байт на 10мгц и не давилась.

777Andrej
28.05.2017
07:29:13
без стикеров, непрошенной рекламы и игр в русский форум оформляйте вопрос в одно сообщение вопросы со словом «кто» игнорируются don't ask for ask интересно. сколько ещё будете обсуждать одно и тоже?

Serg
28.05.2017
07:29:54
32f1 на какой частоте работала?

Google
Serg
28.05.2017
07:30:45
у STM8S - 16 МГц

LexsZero
28.05.2017
07:31:09
24мгц

в даташите stm32f1 написано что частота клока в слейв моде может быть до 12мгц то есть если слать сплошным потоком - это ~600нс на байт interrupt latency у cortex-m3 - 12 циклов на входе, 12 на выходе, это ~1мкс. то есть на максимальной скорости оно работать на прерываниях не должно и не будет, но с дма тупо сложить в память можно успеть. а лучше конечно уменьшить частоту на порядок.

LexsZero
28.05.2017
07:46:39
сделать *buf++ = SPI_DR не успевает? что-то я с трудом верю.

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

написал уже давно про твои грабли с опросом слейвов по SPI

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

Danil
28.05.2017
07:53:41
всё едят этот кактус, только каждый по своему

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

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

Danil
28.05.2017
07:55:30
вариант #2 - отправил пакет на слейв и ждёшь гарантированное время, за которое самый тупой слейв все обработает и подготовит ответ. после этого сливаешь пакет со слейва в мастер

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

Serg
28.05.2017
07:57:24
слейв принимает мусор если быстро сыпется от мастера

в итоге слейв не видит запроса

Danil
28.05.2017
07:58:29
Короче, я всё. Я пытался объяснить уже по всякому, но ты не въезжаешь в SPI пока

В анаохию, рравда

Serg
28.05.2017
07:59:25
ты не отвечаешь на конкретные вопросы, а излагаешь теорию

LexsZero
28.05.2017
08:00:47
слейв принимает мусор если быстро сыпется от мастера
ээ так может у тебя приходит мусор? осцилом смотрел?

Serg
28.05.2017
08:01:20
не смотрел

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

Страница 300 из 718