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

 
 
> два устройства с одинаковым адресом на шине 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
Ответов
Pavel81
сообщение Mar 13 2012, 06:57
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
cioma
сообщение Mar 14 2012, 22:44
Сообщение #3


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

Группа: Свой
Сообщений: 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
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:53
Рейтинг@Mail.ru


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