реклама на сайте
подробности

 
 
> Мультиплексирование I2C шины, Внешняя + внутренний core на обшие выходы
Саша Z
сообщение Nov 28 2008, 08:29
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Есть определенное устройство куда подается I2C со внешнего мастера для загрузки setupa в "приемник в данном устройстве. В устройстве есть FPGA в котором помимо всего прочего будет I2C master core, который тоже должен иметь возможность загружать "приемник".
Внешние SDA, SCL подключены к FPGA и коммутируются на выходные (из FPGA) SDA_FPGA, SCL_FPGA.
Идея коммутации в том что когда устройство подключено к внешнему "драйверу", I2C идет от него, проходит через FPGA и выходит на SDA_FPGA, SCL_FPGA которые в свою очередь идут на "приемник".
Когда-же устройство работает в stand-alone режиме - SDA_FPGA, SCL_FPGA драйвятся внутренним I2C master coreом.
Вопрос: как правильно определить SDA_FPGA, SCL_FPGA ? По идее, согласно I2C - они оба - open drain, соотв. должны иметь pull-ups. Но I/O FPGA с которым работаю не имеют open-drain настройки (есть pull-up/down, keep, none).
SDA ессно inout, но как определить пины ?

Какой совет ?

Спасибо.
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 22)
Михаил_K
сообщение Dec 2 2008, 12:38
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(XVR @ Dec 1 2008, 14:46) *
Топикстартеру - а если просто запараллелить обе I2C шины? I2C поддерживает multimaster.


Отвечу за топикстартера. smile.gif
Самопальный мастер, который часто приходится реализовывать на FPGA или микроконтроллере для одномастерной шины реализуется очень просто. Можно сказать - халявно. А вот многомастерный - это уже арбитраж вводить нужно.
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 2 2008, 14:37
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Михаил_K @ Dec 2 2008, 15:38) *
Отвечу за топикстартера. smile.gif
Самопальный мастер, который часто приходится реализовывать на FPGA или микроконтроллере для одномастерной шины реализуется очень просто. Можно сказать - халявно. А вот многомастерный - это уже арбитраж вводить нужно.
У него уже есть арбитраж (вообще вне МК), т.к. он собрался коммутировать I2C шину от 2х мастеров через FPGA. Если моменты неактивности мастера в МК известны, и мастер в FPGA будет использовать только их, то на I2C шину можно прямо повесить оба мастера в параллель (Если только у МК нету параллельно включенного слейва, но это уже извращение smile.gif )
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 2 2008, 20:39
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(XVR @ Dec 2 2008, 18:37) *
У него уже есть арбитраж (вообще вне МК), т.к. он собрался коммутировать I2C шину от 2х мастеров через FPGA. Если моменты неактивности мастера в МК известны, и мастер в FPGA будет использовать только их, то на I2C шину можно прямо повесить оба мастера в параллель (Если только у МК нету параллельно включенного слейва, но это уже извращение smile.gif )


Возможно я не совсем точно задал вопрос, но дилемма была как раз не о multi-masterности (ибо оба мастера могут работать заведомо только раздельно, т.е. в разделчные промежутки времени что всегда заранее известно - этот факт был правилчьноподмечен в ветке).
Дилемма была в ситуации когда работает внешний мастер (коммутация - в FPGA). Проблема возникает в линии SDA когда должен быть "переворот" направлений (например acknowledge после передачи адреса/данных). Понятно что в коде оба SDA - вход и SDA - выход определены как tri-state, но "переворот" направления не может быть "автоматическим",т.е. кто-то в коде должен отслеживать traffic и управлять направлениями сквозной SDA линии...
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 2 2008, 21:34
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Саша Z @ Dec 2 2008, 23:39) *
Возможно я не совсем точно задал вопрос, но дилемма была как раз не о multi-masterности (ибо оба мастера могут работать заведомо только раздельно, т.е. в разделчные промежутки времени что всегда заранее известно - этот факт был правилчьноподмечен в ветке).
Дилемма была в ситуации когда работает внешний мастер (коммутация - в FPGA). Проблема возникает в линии SDA когда должен быть "переворот" направлений (например acknowledge после передачи адреса/данных). Понятно что в коде оба SDA - вход и SDA - выход определены как tri-state, но "переворот" направления не может быть "автоматическим",т.е. кто-то в коде должен отслеживать traffic и управлять направлениями сквозной SDA линии...
Не надо ничего никуда переворачивать. И I2C сквозь FPGA пропускать не надо. Нужно сделать в FPGA банальный I2C мастер и его ноги SDA и SCL включить параллельно мастеру в МК и приемнику.
Go to the top of the page
 
+Quote Post
Sergei_Ilchenko
сообщение Dec 3 2008, 06:53
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128



Цитата(Саша Z @ Dec 2 2008, 23:39) *
Дилемма была в ситуации когда работает внешний мастер (коммутация - в FPGA). Проблема возникает в линии SDA когда должен быть "переворот" направлений (например acknowledge после передачи адреса/данных). Понятно что в коде оба SDA - вход и SDA - выход определены как tri-state, но "переворот" направления не может быть "автоматическим",т.е. кто-то в коде должен отслеживать traffic и управлять направлениями сквозной SDA линии...


На заметку wink.gif

Линия SCK тоже двунаправленная...

Цитата(XVR @ Dec 3 2008, 00:34) *
Не надо ничего никуда переворачивать. И I2C сквозь FPGA пропускать не надо. Нужно сделать в FPGA банальный I2C мастер и его ноги SDA и SCL включить параллельно мастеру в МК и приемнику.


+1
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 3 2008, 12:29
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(XVR @ Dec 3 2008, 01:34) *
Не надо ничего никуда переворачивать. И I2C сквозь FPGA пропускать не надо. Нужно сделать в FPGA банальный I2C мастер и его ноги SDA и SCL включить параллельно мастеру в МК и приемнику.


Да, точно, ежели стандард поддерживает multi-masterность - действительно должно быть просто...
Одно понять - pull-upы. Внешняя система в принципе автономна, у нее есть свои I2C "приемники", т.е. свои pull-ups. Когда-же я к ней подключаю свой "аппаратус" то у него стоят свои pull-ups (ибо он может и в stand-alone работать).
Получается при подключении моего устройства к системе, будут по 2 pull-upа запараллелены. Это может и не проблема если pull-upы могут быть в range (например от 1к до 10к). Но ежели нужен более точная их величина - тогда по идее может понадобится их коммутация. Хотя и это решаемо (FETный ключ как функция от сигнала режима работы).
Go to the top of the page
 
+Quote Post
Sergei_Ilchenko
сообщение Dec 3 2008, 12:34
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128



Какое у Вас Vcc?
Скорость обмена у Вас какая?
Какие длины линий?
Go to the top of the page
 
+Quote Post
Саша Z
сообщение Dec 3 2008, 13:44
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822



Цитата(Sergei_Ilchenko @ Dec 3 2008, 16:34) *
Какое у Вас Vcc?
Скорость обмена у Вас какая?
Какие длины линий?


В самой системе линии короткие, но когда подключается мое устройство - длины будут примерно 15-20 см.
Скорости - не думаю что будет более чем стандартные 400кHz, Vcc = 3.3V
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
9 чел. читают эту тему (гостей: 9, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 04:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016