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

 
 
> Мультиплексирование 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
 
Start new topic
Ответов
Саша Z
сообщение Nov 29 2008, 14:56
Сообщение #2


Знающий
****

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



Да, спасибо, понятно.
Что все еще смущает: линия SDA.
Есть SDA вход в FPGA (от внешнего мастера) и выход из FPGA (назовем его SDA_FPGA) который идет на конечный "приемник".
Т.е. SDA_FPGA коммутируется внутри FPGA - либо "закорачивает" на SDA либо выводит SDA от внутреннего мастера.
Что туго представляю это режим passthrough, т.е. когда работает внешний мастер и SDA_FPGA должен просто проводить наружу входной SDA.
Оба, SDA и SDA_FPGA - inout и иммитируют open-drain. Но как арбитровать их направления согласно протоколу I2C ?
Т.е. когда SDA работает на передачу, тогда будет SDA - вход, SDA_FPGA - выход. Когда-же SDA ожидает приема - они меняются ролями, т.е. SDA становится выходом, SDA_FPGA - входом.
Это вроде означает что в HDL коде нужно мониторить протокол и переключать их направления синхронно ? Т.е. получается нечто типа ретранслятора I2C ?
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 29 2008, 16:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Саша Z @ Nov 29 2008, 17:56) *
Это вроде означает что в HDL коде нужно мониторить протокол и переключать их направления синхронно ? Т.е. получается нечто типа ретранслятора I2C ?


Я не въехал. Начните с простого. Реализации двунаправленной шины. Это буфер по Z состоянию и пин bidir. Причем тут синxронизация по переключению. Буфером комбинаторной логикой управляют (по чтению). А если это двунаправленная шина с открытым коллектором, состояние 0 и Z, подтянутое внешним резистором. Ноль всех перетянет.
Оперируйте кучей шинников с открытым коллектором. Ве должно получиться.
Посмотрите реализацию такого буфера. sn74abte16246
Go to the top of the page
 
+Quote Post
Sergei_Ilchenko
сообщение Nov 29 2008, 16:05
Сообщение #4


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

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



Цитата(sazh @ Nov 29 2008, 19:00) *
Я не въехал. Начните с простого. Реализации двунаправленной шины. Это буфер по Z состоянию и пин bidir. Причем тут синxронизация по переключению. Буфером комбинаторной логикой управляют (по чтению). А если это двунаправленная шина с открытым коллектором, состояние 0 и Z, подтянутое внешним резистором. Ноль всех перетянет.
Оперируйте кучей шинников с открытым коллектором. Ве должно получиться.
Посмотрите реализацию такого буфера. sn74abte16246



Незя вроде в лоб сделать транзитом через FPGA двунаправленную шину... Всегда нужно знать в каком направлении идет передача.
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 29 2008, 17:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Sergei_Ilchenko @ Nov 29 2008, 19:05) *
Незя вроде в лоб сделать транзитом через FPGA двунаправленную шину... Всегда нужно знать в каком направлении идет передача.


Вот съимитировал буфер abte16246. inout - имитация открытого стока. Пока не анализировал.
Но направления передачи тут явно нет. Входы выходы тут конечно не open_dr.
Но и незачем. Объединять по двунаправленной шине. (Чем не транзит). Передавать туда обратно по входам выходам.
В любом случае предложены были переключатели да мультиплексоры.
Код
module open_dr_bidir
#(
parameter width = 1
)
(
input              oe_n,
inout  [width-1:0] data_a,
input  [width-1:0] data_bi,
output [width-1:0] data_bo
);

genvar i;
generate for (i = 0; i < width; i = i + 1)
begin : block
assign data_bo[i] = (oe_n == 1'b0) ? data_a[i] : 1'bz,
        data_a[i] = ((data_bi[i] == 1'b0) && (oe_n == 1'b0)) ? 1'b0 : 1'bz;        
end
endgenerate

endmodule
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 1 2008, 11:46
Сообщение #6


Гуру
******

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



Цитата(sazh @ Nov 29 2008, 20:55) *
Вот съимитировал буфер abte16246. inout - имитация открытого стока. Пока не анализировал.
Но направления передачи тут явно нет.
Да ну, а вывод oe_n - это что?



Топикстартеру - а если просто запараллелить обе I2C шины? I2C поддерживает multimaster.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Dec 2 2008, 12:38
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- Саша Z   Мультиплексирование I2C шины   Nov 28 2008, 08:29
- - Apast   Цитата(Саша Z @ Nov 28 2008, 12:29) Есть ...   Nov 28 2008, 08:41
- - sazh   Цитата(Саша Z @ Nov 28 2008, 11:29) По ид...   Nov 28 2008, 08:43
|- - Sergei_Ilchenko   Цитата(Саша Z @ Nov 29 2008, 17:56) Это в...   Nov 29 2008, 15:51
|- - Саша Z   Цитата(Sergei_Ilchenko @ Nov 29 2008, 20...   Nov 29 2008, 16:17
|- - Саша Z   Цитата(sazh @ Nov 29 2008, 21:55) Вот съи...   Nov 30 2008, 18:49
||- - sazh   Цитата(Саша Z @ Nov 30 2008, 21:49) Сорри...   Dec 1 2008, 14:27
|- - sazh   Цитата(XVR @ Dec 1 2008, 14:46) Да ну, а ...   Dec 1 2008, 13:00
||- - XVR   Цитата(sazh @ Dec 1 2008, 16:00) А ничего...   Dec 1 2008, 19:37
|- - XVR   Цитата(Михаил_K @ Dec 2 2008, 15:38) Отве...   Dec 2 2008, 14:37
|- - Саша Z   Цитата(XVR @ Dec 2 2008, 18:37) У него уж...   Dec 2 2008, 20:39
|- - XVR   Цитата(Саша Z @ Dec 2 2008, 23:39) Возмож...   Dec 2 2008, 21:34
||- - Саша Z   Цитата(XVR @ Dec 3 2008, 01:34) Не надо н...   Dec 3 2008, 12:29
||- - Sergei_Ilchenko   Какое у Вас Vcc? Скорость обмена у Вас какая? Каки...   Dec 3 2008, 12:34
||- - Саша Z   Цитата(Sergei_Ilchenko @ Dec 3 2008, 16:3...   Dec 3 2008, 13:44
|- - Sergei_Ilchenko   Цитата(Саша Z @ Dec 2 2008, 23:39) Дилемм...   Dec 3 2008, 06:53
- - Михаил_K   Цитата(Саша Z @ Nov 28 2008, 11:29) Есть ...   Nov 29 2008, 15:28


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:39
Рейтинг@Mail.ru


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