Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: i2c фильтрация
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Слесарь
Здравствуйте!
Мне необходимо фильтровать двунаправленный трафик меж микросхемой контроллером и микросхемой драйвером по линии i2c.
Буду использовать для этой цели контроллер PIC18 серии.
Мой контроллер выполняет основную работу и должен лишь по мере необходимости(на время активности i2c) прерываться для фильтрации трафика. Если обнаружаться на линии i2c определенные команды данные, коорденировать свою работу. Некоторые определенные команды данные на линии должен уметь подменять.
Мой PIC18 уже использует блок MSSP для собственных нужд и по этому необходимо задействовать свободные порты и эмулировать работу i2c. Необходимо задействовать входы INT1 INT2 для прерывания основной программы на период активности линии i2c.

На правильном ли я пути? Возможна ли подобная реализация? Подкинте исходник C, если кто сталкивался с эмуляцией i2c ?
SasaVitebsk
Когда-то делал софтовую реализацию SLAVE i2c на AVR. На ассемблере, 11МГц, одно прерывание. Максимум 100кГц. При незначительной дополнительной загрузке. Оно и понятно, вам надо отловить 5мкс при этом. Для 400кГц вам потребуется вычислительная мощность ещё более значительная. Речт идёт об устойчивой, безглючной работе.
Поэтому - примените лучше МК, с необходимым количеством аппаратных i2c устройств. Тем более, что их вагон.
sonycman
Цитата(Слесарь @ Sep 29 2010, 20:01) *
Некоторые определенные команды данные на линии должен уметь подменять.

Каким образом сторонний контроллер сможет подменять данные, передаваемые другим контроллером?
Слесарь
Цитата(SasaVitebsk @ Sep 29 2010, 22:03) *
Поэтому - примените лучше МК, с необходимым количеством аппаратных i2c устройств. Тем более, что их вагон.
Нет. В том контроллере который могу использовать всего один модуль поддерживающий i2c. Или я плохо читал документацию. Это pic18f67j60. 25 мГц x PLL
Я слушал сигналы в линии, они не такие уж высокочастотные. По спецификации к микросхеме максимум 400 kbit/s. Но на слух значительно меньше.
Прерывание, как понимаю, мне необходимо чтоб засечь начало посылки и переориентировать работу контроллера на обработку входящей последовательности бит. Далее контроллер отсылает по другому каналу эту последовательность по назначению и возращается к прежней работе.
Я ранее эмулировал на меньших тактовых частотах SPI протокол, проблем небыло. В основном для микросхем AD7730

Цитата(sonycman @ Sep 29 2010, 22:46) *
Каким образом сторонний контроллер сможет подменять данные, передаваемые другим контроллером?

По одному входу принял, подменил, и по другому выходу отдал по назначению.
rezident
Цитата(Слесарь @ Sep 30 2010, 01:06) *
По одному входу принял, подменил, и по другому выходу отдал по назначению.
А синхронность работы вас не волнует? Что за устройство логгируете? Если обмен с EEPROM какой-нибудь, то реализуют это не так. Не нужно подменять какие-то отдельные данные в потоке, а следует полностью эмулировать работу EEPROM, делая изменения в буфере, выделенном для этой эмуляции.
Слесарь
Цитата(rezident @ Sep 30 2010, 00:08) *
А синхронность работы вас не волнует?

Какая еще синхронность? Синхронность только импульсами SCL согласно протокола i2c.
Вижу сложность только с вынужденным откликом INT на запросы или данные всех устройств на шине. Для разбора кому запрос или данные предназначены. Отнимает ресурс процессора.
rezident
Ага. В корневом топике указаны какие-то "микросхема контроллер" и "микросхема драйвер", они такие суперсекретные что не имеют названия? И почему двунаправленный "трафик"-то? Драйвер умеет в режиме мастера работать? А контроллер соответственно режим мультимастера поддерживает?
Слесарь
Всем спасибо! вопрос решен.
Пробно удалось принять и передать по i2c с помощью эмулятора

Цитата(rezident @ Sep 30 2010, 01:01) *
Ага. В корневом топике указаны какие-то "микросхема контроллер" и "микросхема драйвер", они такие суперсекретные что не имеют названия?
Контроллер не смотрел какой. Не важно. А драйвер, если его можно так называть, это TEF6901. Но какое собственно это имеет значение по существу вопроса.
rezident
Цитата(Слесарь @ Sep 30 2010, 04:09) *
Контроллер не смотрел какой. Не важно. А драйвер, если его можно так называть, это TEF6901. Но какое собственно это имеет значение по существу вопроса.
А что такого секретного по шине предается, что не описано в datasheet TEF6901A? Или все-таки не сам драйвер, а залоченную автомагнитолу курочите?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.