Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: два устройства с одинаковым адресом на шине i2c
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
Pavel81
Всем привет!
Мной было разработано устройство с использованием шины i2c. Устройство выполнено на двух платах - на первой FPGA, на который повешено ядро Microblaze и контроллер i2c и АЦП LTC2489, на второй только АЦП LTC2489. Так нехорошо получилось, что адреса обоим LTC2489 присвоили одинаковые. Платы уже в опечатанном корпусе и физически адреса не сменить. Можно ли как-то считывать данные с этих АЦП независимо, пусть теряя в скорости? Насколько я понял, наложиться данным не даёт арбитр шины i2c, который пропускает пакет только от одного АЦП, при этом блокируя второй. Буду благодарен за любые советы по данной теме.
kovigor
Цитата(Pavel81 @ Mar 12 2012, 17:17) *
Всем привет!
Мной было разработано устройство с использованием шины i2c. Устройство выполнено на двух платах - на первой FPGA, на который повешено ядро Microblaze и контроллер i2c и АЦП LTC2489, на второй только АЦП LTC2489. Так нехорошо получилось, что адреса обоим LTC2489 присвоили одинаковые. Платы уже в опечатанном корпусе и физически адреса не сменить. Можно ли как-то считывать данные с этих АЦП независимо, пусть теряя в скорости? Насколько я понял, наложиться данным не даёт арбитр шины i2c, который пропускает пакет только от одного АЦП, при этом блокируя второй. Буду благодарен за любые советы по данной теме.


С кем не бывает ...
Пока не поздно, отзовите устройства и проведите на них нужную доработку. Тогда все очень быстро забудут, что она имело место, но зато будут всегда помнить, что ваши приборы работают, как положено. Попытки скрыть проблему могут только усугубить ситуацию. Люди очень быстро забудут, что вы выполнили проект в срок, но никогда не забудут, что он работает через пень-колоду ...
Pavel81
К сожалению отозвать устройства невозможно. Допустимо считывать данные медленее во много раз, там фотодиоды измеряющие уровень излучения и датчик вскрытия (давления). Если бы можно было отозвать, с удовольствием бы сам исправил ситуацию.
cioma
А какая разница на какой скорости?! Оба слейва одинаковы, с одинаковым адресом, и на SDA всегда будет получаться "логическое И" данных, которые они выдают.
Если бы был физический доступ к платам, то перерезав дорожки на CA[1:0] можно было бы задать другой адрес ибо:

CA0, CA1 (Pins 2, 3): Chip Address Control Pins. These
pins are configured as a three-state (LOW, HIGH, Floating)
address control bits for the device’s I2C address.

См. Table 4. Address Assignment

Если к платам доступа нет - тады ой, никак не исправите.
Pavel81
А разве там нет арбитра шины у мастера, который не даёт передавать одновременно обоим? Просто когда я отлаживал шину i2c на этом устройстве, то корректные данные от фотодиода приходили примерно через 2-3 раза, но они были реально правильные! Тогда я не был в курсе, что у двух АЦП одинаковые адреса стоят, потому тупо считал своим косяком и воевал до последнего. Даже переписал функцию чтения на более низком уровне функций Microblaze. Вот поэтому у меня и есть надежда, что данные можно отобрать. От датчика давления идут большие числа, от фотодиода - 4096 уровней. В принципе их можно отделить анализом друг от друга, а частота там нужна примерно 1 раз при включении (ВСК) значения снимать, так что можно шибко замедлиться.
Konst_777
Цитата(Pavel81 @ Mar 12 2012, 16:17) *
...Буду благодарен за любые советы по данной теме.

А время аналого-цифрового преобразования на обоих Ваших модулях задается внутренним генератором LTC2489 или внешней частотой от FPGA?
cioma
QUOTE (Pavel81 @ Mar 13 2012, 07:57) *
А разве там нет арбитра шины у мастера, который не даёт передавать одновременно обоим?


Какой арбитр шины в мастере для I2C? Поясните, пожалуйста, что имеете ввиду.

Мастер I2C передает адрес устройства, бит "чтение/запись" и другие байты, специфичные для конкретного I2C слейва. Т.к. у Вас слейвы полностью идентичны, то и программироваться от мастера они будут всегда одинаково, а ответные биты от них будут складываться по "И", т.к. SDA - это открытый сток. Кто и что может здесь арбитрировать - не понятно sm.gif
Konst_777
Цитата(cioma @ Mar 15 2012, 02:44) *
Какой арбитр шины в мастере для I2C? Поясните, пожалуйста, что имеете ввиду...

I2C-bus specification and user manual раздел 3.1.8 Arbitration. По рассказу Pavel81, LTC2489 тоже анализирует состояние SDA во время передачи и прекращает передачу при обнаружении коллизии. То есть, хотя LTC2489 является ведомым на шине I2C, но использует арбитраж шины SDA, так как это делает мастер. В этом случае, ведущий на шине I2C всегда будет получать корректные данные, но не понятно от какого АЦП.
cioma
А, ну если этот слейв такое умеет - тогда действительно коллизий не будет. Но от кого данные - надо определять по каким-либо косвенным параметрам (диапазон значений?).
Ну и нет гарантии, что не случится так, что в каких-либо устройствах из партии всегда будет отрабатывать только один слейв.
Pavel81
Цитата(Konst_777 @ Mar 14 2012, 22:55) *
А время аналого-цифрового преобразования на обоих Ваших модулях задается внутренним генератором LTC2489 или внешней частотой от FPGA?
Вывод f0 подтянут к земле, потому используется внутренний генератор.
Нажмите для просмотра прикрепленного файла
Konst_777
Цитата(Pavel81 @ Mar 16 2012, 18:01) *
Вывод f0 подтянут к земле, потому используется внутренний генератор.

Это АЦП, подключенный к датчику давления? Жаль что неиспользуемые входы АЦП не подключены/подтянуты к GND/COM. Все же проверьте, можно ли использовать не подключенные каналы АЦП как отличительный признак этого АЦП. Это в случае, если перекрываются диапазоны значений датчика давления и фотодиодов и все еще нужно искать отличительные признаки одного АЦП от другого.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.