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

 
 
> Как сделать мост I2C на Xilinx?
syoma
сообщение Apr 6 2014, 10:27
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Народ извините, в VHDL и Verilog ни бум бум, а надо пару строчек кода придумать.

Короче есть шина i2c, назовем ее А, которая одним концом (SCL, SDA) подключена к пинам FPGA, а на других висят несколько периферии - тактовый генератор, датчики температуры и питания. FPGA вроде как мастер.

Но также есть и еще одна I2C шина B, концы которой заведены на эту же FPGA, и которая управляется внешним МК. Помимо самой ФПГА на этой шине тоже висит еще несколько устройств.

В общем для того, чтобы не лепить в ПЛИСине I2C мастер, а потом еще и I2C слейв и как-то эмулировать все это дело, появилось желание просто каким-то образом закоротить SDA и SCL пины этих двух шин через FPGA. Вопрос собственно в бинаправленности SDA.
Т.е. по идее логика должна быть такой, что по умолчанию SDA пины обеих шин в ПЛИС - это входы. На них будет высокий уровень. Если на одном из входов появляется низкий уровень, то другой переключается на выход и тоже начинает генерить ноль.

В общем логика я думаю понятно. Вопрос в том - можно ли такое реализовать малой кровью и как? Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexadmin
сообщение Apr 7 2014, 04:02
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Что-то, мэтры, вы перемудрили. У автора совершенно правильный начальный посыл - если на линии SDA любого интерфейса активное состояние (0), то надо его транслировать на SDA другого интерфейса и ждать пока первый отпустит линию, после чего отпускать и другую. Мультимастеринга нет, так что конфликтов возникать не должно.
Единственное, надо пересэмплировать это все на достаточно высокой частоте, чтобы вносить задержку поменьше в линию передачи данных. Получается банальное управляющее устройство (даже конечным автоматом не назвать) на 3 состояния и 15 строк кода.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Apr 7 2014, 06:37
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(alexadmin @ Apr 7 2014, 11:02) *
Что-то, мэтры, вы перемудрили. У автора совершенно правильный начальный посыл - если на линии SDA любого интерфейса активное состояние (0), то надо его транслировать на SDA другого интерфейса и ждать пока первый отпустит линию, после чего отпускать и другую. Мультимастеринга нет, так что конфликтов возникать не должно.
Единственное, надо пересэмплировать это все на достаточно высокой частоте, чтобы вносить задержку поменьше в линию передачи данных. Получается банальное управляющее устройство (даже конечным автоматом не назвать) на 3 состояния и 15 строк кода.

В принципе можно и таким автоматом обойтись, только я бы ещё добавил хотя бы простенький антидребезг, а то некоторые I2C устройства очень не любят глитчи по данным.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 03:30
Рейтинг@Mail.ru


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