Перейти к содержанию
    

bidir, open-drain и i2c

Всем доброго времени суток.

Извините, если чушь полную спрашиваю, но возникла проблема:

Есть несколько устройств (slave) с i2c интерфейсом (линия клоков и двунаправленная линия данных SDA). Master i2c только один. Напрямую между собой они не связаны, но сигналы заведены на ПЛИС (Altera CycloneIII). Было бы неплохо организовать двунаправленный сквозной "провод" для линии SDA, чтобы при этом не заморачиваться управлением направлением :wacko: сигнала (т.е. классическая развязка с помощью tri). К тому же внутри ПЛИС потребуется мультиплексировать сигналы, т.к. мастер один, а ведомых несколько.

Мне сказали, что open-drain смотреть надо. Я посмотрел, попробовал описать, но ничего толкового не получилось. И вообще, это возможно сделать двунаправленный "провод" насквозь, чтобы на нем одновременно висело два устройства? Если возможно, то приведите пожалуйста пример на verilog, vhdl или ahdl.

Всем заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то очень непонятно. Вы в FPGA мультиплексирование I2C собрались делать? Т.е. несколько шин I2C объединить? А мастером кто является? Внешняя м/с или в FPGA мастер организован? И вообще FPGA тут "при делах" или просто какой-то умник от разных I2C устройств провода к FPGA протянул?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще FPGA тут "при делах" или просто какой-то умник от разных I2C устройств провода к FPGA протянул?

Насколько я понимаю, именно так.

 

paradox-17, я попробовал прикинуть - ничего путного не получилось. Может быть, зная точные времянки относительно SCL (при условии, что клиенты НЕ "притормаживают" обмен) можно было бы сделать что-то не сильно сложное, но все равно не тривиальное.

 

ЗЫ. Мне кажется, что выражение

какой-то умник

не очень корректное. Тем более, уважаемый rezident - гуру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за внимание.

И вообще FPGA тут "при делах"

FPGA при делах. В ней всякие нужные корки будут размещены. А вот i2c контроллер городить в ПЛИС очень не хочется, т.к. контроллер (master) уже есть в СPU на плате. То, что провода подведены на ПЛИС приходится воспринимать как данность :cranky: . Фиг с ним, с мультиплексированием. Меня интересует просто возможность создания сквозного двунаправленного провода в ПЛИС без дополнительной логики, чтобы тупо повесить на линию SDA мастера с одной стороны (CPU) и слейва с другой (тоже внешний девайс на плате). В принципе реально или нет?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот i2c контроллер городить в ПЛИС очень не хочется, т.к. контроллер (master) уже есть в СPU на плате. То, что провода подведены на ПЛИС приходится воспринимать как данность :cranky: .

Если это макет или пилотный вариант платы, то я бы на вашем месте просто проводами шины I2C соединил. А в следующей итерации избежал бы этой глупости. В противном случае как это сделать без контроллера I2C в FPGA (который должен следить за обменом по разным шинам, знать адреса всех этих устройств и изображать из себя мастера-супервизора I2C) я не знаю :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

 

Увы, сделать такое без внутреннего управления буферами FPGA нельзя.

Тоесть контроллер I2C всеже городить придется.

 

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если этот двунаправленный провод open drain (подтянутый к 1), то можно, исходя из того, что направление меняется только через 1 (HighZ) на обоих концах.

 

reg [1:0] state=0; // idle, a->b, b->a

 

always @(posedge clk)

case(state)

0:if(a==0) state<=1; else if(b==0) state<=2;

1:if(a==1) state<=0;

2:if(b==1) state<=0;

endcase

 

assign a=(state==2) ? 0:Z;

assign b=(state==1) ? 0:Z;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DmitryR, Ваше решение выглядит правдоподобно и элегантно. Обязательно попробую и о результатах сообщу. Огромное спасибище :a14:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...