Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: I2C
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Mukhanov
Нужно соеденить Спартан3(мастер) с SAA7111(слейв) по I2C.
Вопрос заключается в том как это сделать.
oval
Цитата(Mukhanov @ Aug 9 2006, 20:06) *
Нужно соеденить Спартан3(мастер) с SAA7111(слейв) по I2C.
Вопрос заключается в том как это сделать.


Просто соединяете пару соответствующих выводов SAA7111 и Spartan3. Каждую из линий (SDA и SCL) подтягиваете внешними резисторами к питанию.
DuHast
Цитата(Mukhanov @ Aug 9 2006, 20:06) *
Как засунуть слона в холодильник?

Очень просто: открыть холодильник, засунуть туда слона, закрыть холодильник. smile.gif
Doka
Цитата(oval @ Aug 9 2006, 20:59) *
Просто соединяете пару соответствующих выводов SAA7111 и Spartan3. Каждую из линий (SDA и SCL) подтягиваете внешними резисторами к питанию.


ну там еще нюанс есть: стандарт требует наличие OpenDrain на выходных линиях
в ПЛИСе проще это съэмулировать объявив и SDA, и SCL как inout
и при выдаче "1" в HiZ сигнал пин.

to Mukhanov: предупреждение за нарушение п.2.1а правил форума
Mukhanov
SCL я так понимаю можно только мастером генерить.
Открытый сток меня собственно и волнует, не будет ли каких проблем на входе у Спартана.
Doka
Цитата(Mukhanov @ Aug 10 2006, 00:37) *
SCL я так понимаю можно только мастером генерить.
Открытый сток меня собственно и волнует, не будет ли каких проблем на входе у Спартана.


да, SCL всегда генерится мастером
а какие проблемы с открытым стоком?! чем не устраивает предложенное выше решение?
даже сам XILINX такое решение использует. вот клок из исходников:

Код
...
    -- SMBUS bus signals
    sda : inout std_logic;
    scl : inout std_logic;
...
  -- set SDA and SCL
    sda <= '0' when sda_oe = '1' else 'Z';
    scl <= '0' when scl_out_reg = '0' else 'Z';
...
  -- sda_oe is set when master and arbitration is not lost and data to be output = 0 or
  -- when slave and data to be output is 0
    sda_oe <= '1' when ((master_slave = '1' and arb_lost = '0' and sda_out_reg = '0') or
                 (master_slave = '0' and slave_sda = '0')
                  or stop_scl_reg = '1') else '0';
Mukhanov
Я парился что если выставить еденицу на выводе спартана, то сток по идее окажется подключен к напр. питания без резистора. До HiZ вместо единицы как то не допер.

Как лучше настроить выводы в спартане SDA и SCL, LVTTL, CMOS или еще как?
iosifk
Цитата(Mukhanov @ Aug 9 2006, 20:06) *
Нужно соеденить Спартан3(мастер) с SAA7111(слейв) по I2C.
Вопрос заключается в том как это сделать.

А кажется мне что в стартовом наборе на S3E и этот стык тоже есть в прилагаемых примерах.
Но то, что это есть в харр, так это точно. Просто поискать харр, к ней zip и все дела.
_andrew_
Цитата(Doka @ Aug 10 2006, 00:37) *
да, SCL всегда генерится мастером

А как же возможность удержания слэйвом scl в нуле , если слэйву необходимо задержать передачу данных...
iosifk
Цитата(_andrew_ @ Aug 10 2006, 12:46) *
Цитата(Doka @ Aug 10 2006, 00:37) *

да, SCL всегда генерится мастером

А как же возможность удержания слэйвом scl в нуле , если слэйву необходимо задержать передачу данных...

Но удерживается в низком состоянии слэйвом, до тех пор, пока тот не станет готов. Все это вместе действует аналогично сигналу READY в старых процессорах.
Соотв. у слэйва этот пин - должен быть двунаправленный с ОК.
rezident
Цитата(iosifk @ Aug 10 2006, 14:58) *
Цитата(_andrew_ @ Aug 10 2006, 12:46) *

Цитата(Doka @ Aug 10 2006, 00:37) *

да, SCL всегда генерится мастером

А как же возможность удержания слэйвом scl в нуле , если слэйву необходимо задержать передачу данных...

Но удерживается в низком состоянии слэйвом, до тех пор, пока тот не станет готов. Все это вместе действует аналогично сигналу READY в старых процессорах.
Соотв. у слэйва этот пин - должен быть двунаправленный с ОК.

Еще добавлю, что SCL на шине I2C конечно генерируется мастером, но внутренняя логика аппаратного I2C-мастера должна тактироваться внешним SCL, снятым с выходного пина подключенного к линии SCL. Т.е. внутри FPGA должно быть два сигнала SCL: SCL_OUT и SCL_IN. Это как раз для случая удержания SCL в нуле слейвом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.