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

 
 
> два устройства с одинаковым адресом на шине i2c, проблема с готовым изделием
Pavel81
сообщение Mar 12 2012, 13:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 24-06-05
Из: МО, г. Подольск
Пользователь №: 6 286



Всем привет!
Мной было разработано устройство с использованием шины i2c. Устройство выполнено на двух платах - на первой FPGA, на который повешено ядро Microblaze и контроллер i2c и АЦП LTC2489, на второй только АЦП LTC2489. Так нехорошо получилось, что адреса обоим LTC2489 присвоили одинаковые. Платы уже в опечатанном корпусе и физически адреса не сменить. Можно ли как-то считывать данные с этих АЦП независимо, пусть теряя в скорости? Насколько я понял, наложиться данным не даёт арбитр шины i2c, который пропускает пакет только от одного АЦП, при этом блокируя второй. Буду благодарен за любые советы по данной теме.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
kovigor
сообщение Mar 12 2012, 13:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



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


С кем не бывает ...
Пока не поздно, отзовите устройства и проведите на них нужную доработку. Тогда все очень быстро забудут, что она имело место, но зато будут всегда помнить, что ваши приборы работают, как положено. Попытки скрыть проблему могут только усугубить ситуацию. Люди очень быстро забудут, что вы выполнили проект в срок, но никогда не забудут, что он работает через пень-колоду ...
Go to the top of the page
 
+Quote Post
Pavel81
сообщение Mar 12 2012, 13:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 24-06-05
Из: МО, г. Подольск
Пользователь №: 6 286



К сожалению отозвать устройства невозможно. Допустимо считывать данные медленее во много раз, там фотодиоды измеряющие уровень излучения и датчик вскрытия (давления). Если бы можно было отозвать, с удовольствием бы сам исправил ситуацию.
Go to the top of the page
 
+Quote Post
cioma
сообщение Mar 12 2012, 21:46
Сообщение #4


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

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



А какая разница на какой скорости?! Оба слейва одинаковы, с одинаковым адресом, и на 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

Если к платам доступа нет - тады ой, никак не исправите.
Go to the top of the page
 
+Quote Post
Pavel81
сообщение Mar 13 2012, 06:57
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 24-06-05
Из: МО, г. Подольск
Пользователь №: 6 286



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

Сообщение отредактировал Pavel81 - Mar 13 2012, 07:05
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Mar 14 2012, 18:55
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Pavel81 @ Mar 12 2012, 16:17) *
...Буду благодарен за любые советы по данной теме.

А время аналого-цифрового преобразования на обоих Ваших модулях задается внутренним генератором LTC2489 или внешней частотой от FPGA?
Go to the top of the page
 
+Quote Post
cioma
сообщение Mar 14 2012, 22:44
Сообщение #7


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

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



QUOTE (Pavel81 @ Mar 13 2012, 07:57) *
А разве там нет арбитра шины у мастера, который не даёт передавать одновременно обоим?


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

Мастер I2C передает адрес устройства, бит "чтение/запись" и другие байты, специфичные для конкретного I2C слейва. Т.к. у Вас слейвы полностью идентичны, то и программироваться от мастера они будут всегда одинаково, а ответные биты от них будут складываться по "И", т.к. SDA - это открытый сток. Кто и что может здесь арбитрировать - не понятно sm.gif
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Mar 15 2012, 06:19
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(cioma @ Mar 15 2012, 02:44) *
Какой арбитр шины в мастере для I2C? Поясните, пожалуйста, что имеете ввиду...

I2C-bus specification and user manual раздел 3.1.8 Arbitration. По рассказу Pavel81, LTC2489 тоже анализирует состояние SDA во время передачи и прекращает передачу при обнаружении коллизии. То есть, хотя LTC2489 является ведомым на шине I2C, но использует арбитраж шины SDA, так как это делает мастер. В этом случае, ведущий на шине I2C всегда будет получать корректные данные, но не понятно от какого АЦП.
Go to the top of the page
 
+Quote Post
cioma
сообщение Mar 15 2012, 16:11
Сообщение #9


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

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



А, ну если этот слейв такое умеет - тогда действительно коллизий не будет. Но от кого данные - надо определять по каким-либо косвенным параметрам (диапазон значений?).
Ну и нет гарантии, что не случится так, что в каких-либо устройствах из партии всегда будет отрабатывать только один слейв.
Go to the top of the page
 
+Quote Post
Pavel81
сообщение Mar 16 2012, 14:01
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 24-06-05
Из: МО, г. Подольск
Пользователь №: 6 286



Цитата(Konst_777 @ Mar 14 2012, 22:55) *
А время аналого-цифрового преобразования на обоих Ваших модулях задается внутренним генератором LTC2489 или внешней частотой от FPGA?
Вывод f0 подтянут к земле, потому используется внутренний генератор.
Прикрепленное изображение


Сообщение отредактировал Pavel81 - Mar 16 2012, 14:11
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Mar 16 2012, 17:40
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(Pavel81 @ Mar 16 2012, 18:01) *
Вывод f0 подтянут к земле, потому используется внутренний генератор.

Это АЦП, подключенный к датчику давления? Жаль что неиспользуемые входы АЦП не подключены/подтянуты к GND/COM. Все же проверьте, можно ли использовать не подключенные каналы АЦП как отличительный признак этого АЦП. Это в случае, если перекрываются диапазоны значений датчика давления и фотодиодов и все еще нужно искать отличительные признаки одного АЦП от другого.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:42
Рейтинг@Mail.ru


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