SPI по одному проводу

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Коллеги, может кто сталкивался - надо организовать SPI на ардуино в режиме slave по 1 проводу. Т.е. MOSI и MISO объеденить. Программные эмуляторы SPI не катят - нужна максимальная скорость аппаратного SPI.

SMT32 вроде это позволяет, но может AVR имеет какие нибудь обходные пути? Заранее спасибо.

axill
Offline
Зарегистрирован: 05.09.2011

это не один провод, а минимум два, еще clock

вот как раз stm32 и даже stm8 имеют такой режим работы аппаратного SPI где данные в обе стороны на одной линии

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

по крайней мере на аппаратном уровне

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Спасибо, добрый человек  axill но это я и так знал. Но может кто-то придумал схему с использованием стандартных логических модулей и логических выходов ардуинки для реализации этого.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:

Коллеги, может кто сталкивался - надо организовать SPI на ардуино в режиме slave по 1 проводу. Т.е. MOSI и MISO объеденить.

А нужно и читать, и писать? Или в slave только читать достаточно?

axill
Offline
Зарегистрирован: 05.09.2011

Вы думаете кто то поковырял иголкой в кристалле и появился дву проводной SPI?

Увы. То чего нет в железе можно сделать только в софте ногодрыгом

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет, ну есть 2-проводной USI, например, на 85-ой, но пока хочется понять что ТС нужно.

Logik
Offline
Зарегистрирован: 05.08.2014

Ненадо ниче ковырять. Достаточно понимать как оно работает. Я правда не вижу особого смысла долбатся с MOSI и MISO. Кроме них ведь еще CLK, CS и земля требуется. Ну допустим именно одного провода не хватает... 1. Провеяем что все передатчики (ну выходы вобщем) на общую шину в пассивном состоянии держат 1. Так должно быть, но если нет - несудьба. 2. общую шину подтягиваем к +5 резистором R. 3.все приемники подключаем к общей шине напрямую. 4. все передатчики подключаем через диод к общей шине катод к выходу, анод к шине. Это называется монтажнои И. Так можна  обединять несколько выходов и входов. Например 2 uart.

О скорости "нужна максимальная скорость"  - не серезно, пишите сколько надо конкретно. В данном случае скорость будет зависеть от постоянной времени RC, где С- емкость общей шины. Потому R выбираем поминимуму, 220-250 Ом. И диоды с емкостями поменше, и провод тоже. Но ИМХО - надо делать по другому, без обединения, особеноо если реально "нужна максимальная скорость".

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Logik пишет:

О скорости "нужна максимальная скорость"  - не серезно, пишите сколько надо конкретно. В данном случае скорость будет зависеть от постоянной времени RC, где С- емкость общей шины. Потому R выбираем поминимуму, 220-250 Ом. И диоды с емкостями поменше, и провод тоже. Но ИМХО - надо делать по другому, без обединения, особеноо если реально "нужна максимальная скорость".

Максимальная скорость - это 100нс по синхро. Далее SPI выкакивает то что принял на порт с замедлением на 8 бит. без объединения не получается - МС такая глупая - все по одной шине гонит.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

ЕвгенийП пишет:

mykaida пишет:

Коллеги, может кто сталкивался - надо организовать SPI на ардуино в режиме slave по 1 проводу. Т.е. MOSI и MISO объеденить.

А нужно и читать, и писать? Или в slave только читать достаточно?

Тут надо съэмулировать  мою любимую МС UPD16432B. Там пишут и читают по 1 проводу и именно в режиме  slave.

Logik
Offline
Зарегистрирован: 05.08.2014

//мою любимую МС UPD16432B.

Любовь конечно зла, но может пора закопать стюардесу? ;) А не .. ну эмулировать её ;) Похоже хотите экранчик поновей присобачить на место старого, да малой кровю ))))

ПС. Думаю SPI 10МГц не станет проблемой, если длина шины разумная.

axill
Offline
Зарегистрирован: 05.09.2011

Logik пишет:

ПС. Думаю SPI 10МГц не станет проблемой, если длина шины разумная.

насколько помню у мег предел частоты SPI это 1/2 от клока. значит 10мгц достижимы на пределе атмега328 с кварцем на 20мгц. обычная ардуина с кварцем 16 даст максимум 8

axill
Offline
Зарегистрирован: 05.09.2011

mykaida пишет:

Тут надо съэмулировать  мою любимую МС UPD16432B. Там пишут и читают по 1 проводу и именно в режиме  slave.

хотите атмегу пишите ногодрыг

хотите железный SPI берите контроллер в котором это есть

нет варианта и и

Logik
Offline
Зарегистрирован: 05.08.2014

//хотите атмегу пишите ногодрыг

Ногодрыг, для SPI slave, на 8-10МГц, атмега328, кварц 16-20МГц? Так не бывает. Только аппаратный.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Спасибо, коллеги!

Значит буду пробовать на STM32. Платку приобрел, жаль что в Протеусе не эмулируется :(

axill
Offline
Зарегистрирован: 05.09.2011

mykaida пишет:

Спасибо, коллеги!

Значит буду пробовать на STM32. Платку приобрел, жаль что в Протеусе не эмулируется :(

зато в железе прекрасно отлаживается. это намного лучше чем эмуляция в протеусе

a5021
Offline
Зарегистрирован: 07.07.2013

Вообще в протеусе есть stm32f103, только какая-то из младших моделей. Вроде С4. Не помню точно. Можно ее помучать, если уж совсе никак по другому.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

a5021 пишет:

Вообще в протеусе есть stm32f103, только какая-то из младших моделей. Вроде С4. Не помню точно. Можно ее помучать, если уж совсе никак по другому.

Пробовал, но так и не понял то ли эмулятор кривой, то ли руки. Не работает.