I2C устройство на SPI шине
- Войдите на сайт для отправки комментариев
Ср, 22/03/2017 - 11:01
Добрый день. В интернетах видел обсуждение возможности цеплять i2c устройства к пинам spi. На сколько я понял, в этом случае идет програмная реализациа i2c протокола. Но моего понимания не хватает, чтобы разобраться. Помогите, может кто-то знает-видел такие проекты? Например, мне интересно подключить SPI SRAM и I2C LCD. помогите найти примеры.
Я правильно понял, что Вы хотите, чтобы I2C и SPI при этом работали вместе на одних и тех же пинах?
Да, на одних пинах. Естественно, не будет одновременных попыток обращений.
SPI требует сигнала выбора CS. Если у LCD такого сигнала нет, то работая с памятью на экран может вываливаться мусор.
Теоретически это так, но в одной из веток, где на аглицком обсуждали эту проблему, было написано (на сколько я понял), что такое не произойдет всилу каких-то особенностей протокола. Может из-за какого-то экзотического начала передачи (сигнала start).
Вот , например: https://i2cchip.com/mix_spi_i2c.html
"
You can normally mix I2C and SPI on the same pins. I2C only does something between START and STOP.
START is when SCL is HI, SDA goes to HI->LO.
STOP is when SCL is HI and SDA goes LO->HI.
So if you arrange your code such that SDA only changes value when SCL is LO, there will be no problems. The I2C will not notice any SPI transactions. Of course all the SPI devices have thier own individual CS pin, but this is the disadvantage of SPI.
So to spell it out.
"
То есть это возможно, но как найти какие-то примеры?
это может произойти как нефиг делать, смотря как будете работать с памятью. если опустить линию моси в ноль, а потом опустить клок в ноль, то вот вам уже сигнал старт для и2ц. проверяйте. посмотрите на протокол и2ц для данного экрана да и дергайте так-же ногами.
doleynikov, а с какой целью интересуетесь? Дело в том, что I2C - это как бы выходв с открытым коллектором, т.е. аппаратно они немножко другие. Ну и протоколы достаточно сильно отличаются. Поэтому, если не хватает пинов, проще добавить сдвиговые регистры или еще чего, чем возиться с совмещением протоколов.
Зачем какие-то примеры, когда там все условия и ограничения нормально перечислены? Берите и пробуйте. Только вопрос нафига сращивать ежа с ужом, заданный andriano повисает в воздухе, особенно при необходимости явной программной эмуляции того или иного интерфейса, а то и обоих вместе, когда есть аппаратная, не загружающая работой сам камень?
"Нехватка ног" - несколько странный аргумент, если учесть что оба интерфейса практически всегда сидят на разных ногах (и недаром, и в предупреждении это тоже указано на англицком). Куда проще или расширить ноги схемами расширений (и тут способов много) или тупо перейти на кристалл поногастее, благо их как грязи самых разных.
Дело в небольшой нехватке ног. Много занимает матричная клавиатура. Хотелось бы повесить SPI SRAM и I2C LCD на одни пины. LCD - устройство медленное и памяти мешать не должен. Регистры городить нехочется, так как это внесение избыточной для меня сложности в устройство и программу. Если никто такого не пробовал - ну и ладно, попробую сам как-то выкрутиться. Спасибо тем, кто пытался помочь или просто участвовал в обсуждении. Будут вопросы - спрошу снова ;-)
Удачи.
Так может просто уменьшить число ног под "клавой"? Пошукайте как на 1 аналоговый вход можно повесить многа кнопок .. при желании очень много :)
не, клавиатура уже готова и работает ;-) матрица 5*8 . плюс светики для отображения статуса шифтов.
del
Хотелось бы повесить SPI SRAM и I2C LCD на одни пины. LCD - устройство медленное и памяти мешать не должен. Регистры городить нехочется, так как это внесение избыточной для меня сложности в устройство и программу. Если никто такого не пробовал - ну и ладно, попробую сам как-то выкрутиться.
Вот это по-нашему!
Правильно, попробуйте сами. Только на собственном опыте можно убедиться, что регистры - это намного проше, чем два разных программных протокола на одних и тех же ногах, и что никто такого и не пробовал (а скорее - пробовал, но не сумел довести до результата) именно по этой причине.