Полная версия этой страницы:
i2c
_andrew_
Apr 14 2006, 14:52
смысл в следующем:
Прислали компоненту контролер i2c (slave). Вместо двунаправленного порта SDA, в этой компоненте 2 порта(вход и выход - видимо для удобства моделирования). По идее осталось только правильное подключение... Буду ли я прав если просто соединю эти 2 порта(компонента графическая) с двунаправленным портом? Соединив таким образом, PACE говорит что SDA - output.
Вам нужно создать порт типа INOUT, который Вы должны принудительно в определенные моменты времени (когда необходимо прослушивать шину) переводить в Z-состояние.
_andrew_
Apr 14 2006, 15:15
В том то и вопрос, что я не знаю когда надо переводить шину в z. компонента то знает, а я нет
Цитата(_andrew_ @ Apr 14 2006, 19:15)

В том то и вопрос, что я не знаю когда надо переводить шину в z. компонента то знает, а я нет

Ну тогда нужно пинать разработчиков, которые не подумали об использовании этого компонента.
Но если есть исходники, то можно попытаться их подправить и вывести дополнительный сигнал для управления двунаправленным буфером.
rezident
Apr 14 2006, 15:54
Выход должен работать как транзистор с открытым коллектором (стоком). 0 на выходе = 0 на I2C. 1 на выходе = Z-состояние на I2C, которое преобразуется в 1 внешним pull-up резистором.
Сигналом "выход" разрешаете работу трёхстабильного буфера, который транслирует наружу низкий лог. уровень.
Почитатйте описание I2C Master на OpenCore - там все очень подробно описано. Если будут трудности со скачиванием - пишите в ПМ - пришлю
_andrew_
Apr 20 2006, 09:36
что то не то

поставил вдунаправленый порт, прицепил к нему iobuf, придумал сигнал управления.
НО
при записи по i2c все нормально
при чтении, когда я выдаю на порт '1', модельер говорит что порт в состоянии 'X', а в железе просто выдает '0'
rezident
Apr 20 2006, 09:51
Цитата(_andrew_ @ Apr 20 2006, 15:36)

что то не то

поставил вдунаправленый порт, прицепил к нему iobuf, придумал сигнал управления.
НО
при записи по i2c все нормально
при чтении, когда я выдаю на порт '1', модельер говорит что порт в состоянии 'X', а в железе просто выдает '0'
Не знаю что тут может не работать. Схемотехнически вход/выход слейва выглядит так. См. рисунок.
_andrew_
Apr 20 2006, 10:49
rezident , так и есть (ну разве что у меня iobuf:) )
НО вместо 1 выдается 0
Pull-UP резистор на sda имеется?
_andrew_
Apr 20 2006, 11:59
Цитата(vetal @ Apr 20 2006, 15:31)

Pull-UP резистор на sda имеется?
Да
Полярность управляющего sda сигнала правильная? Инверсию пробовали поставить?
_andrew_
Apr 20 2006, 13:06
посмотрел выход буфера (iobuf , obuft), вместо состояния Z модельер показывает что у них состояние 0 на выходе.
может тут глюк среды какой? когда писал буфер руками, модельер показывал Z правильно, но после разводки, он же приводит все к своим примитивам...? а то бишь к этим буферам которые работают неправильно..(?)
у меня ISE8.1
rezident
Apr 20 2006, 18:21
Цитата(_andrew_ @ Apr 20 2006, 19:06)

у меня ISE8.1
А я этот кусок из Xilinx Foundation 3.3i копировал

А почему не хотите попробовать так, как у меня сделать? Что вы к IOBUF прикипели?
_andrew_
Apr 21 2006, 10:13
Спасибо всем. Все заработало.
rezident
Apr 21 2006, 10:30
Цитата(_andrew_ @ Apr 21 2006, 16:13)

Спасибо всем. Все заработало.
Было бы неплохо, если бы еще пояснили в чем была причина? Или само заработало?
_andrew_
Apr 26 2006, 12:26
Почему то не работал 2-направленный буфер(поменял на однонаправленные). +косячек с моей стороны(вне i2c), контролер записывал синхронно , а при чтении почему то надо было читать асинхронно...
а я все делал синхронно.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.