|
два устройства с одинаковым адресом на шине i2c, проблема с готовым изделием |
|
|
|
 |
Ответов
(1 - 10)
|
Mar 12 2012, 13:36
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Pavel81 @ Mar 12 2012, 17:17)  Всем привет! Мной было разработано устройство с использованием шины i2c. Устройство выполнено на двух платах - на первой FPGA, на который повешено ядро Microblaze и контроллер i2c и АЦП LTC2489, на второй только АЦП LTC2489. Так нехорошо получилось, что адреса обоим LTC2489 присвоили одинаковые. Платы уже в опечатанном корпусе и физически адреса не сменить. Можно ли как-то считывать данные с этих АЦП независимо, пусть теряя в скорости? Насколько я понял, наложиться данным не даёт арбитр шины i2c, который пропускает пакет только от одного АЦП, при этом блокируя второй. Буду благодарен за любые советы по данной теме. С кем не бывает ... Пока не поздно, отзовите устройства и проведите на них нужную доработку. Тогда все очень быстро забудут, что она имело место, но зато будут всегда помнить, что ваши приборы работают, как положено. Попытки скрыть проблему могут только усугубить ситуацию. Люди очень быстро забудут, что вы выполнили проект в срок, но никогда не забудут, что он работает через пень-колоду ...
|
|
|
|
|
Mar 12 2012, 21:46
|
Профессионал
    
Группа: Свой
Сообщений: 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
Если к платам доступа нет - тады ой, никак не исправите.
|
|
|
|
|
Mar 13 2012, 06:57
|

Участник

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

|
А разве там нет арбитра шины у мастера, который не даёт передавать одновременно обоим? Просто когда я отлаживал шину i2c на этом устройстве, то корректные данные от фотодиода приходили примерно через 2-3 раза, но они были реально правильные! Тогда я не был в курсе, что у двух АЦП одинаковые адреса стоят, потому тупо считал своим косяком и воевал до последнего. Даже переписал функцию чтения на более низком уровне функций Microblaze. Вот поэтому у меня и есть надежда, что данные можно отобрать. От датчика давления идут большие числа, от фотодиода - 4096 уровней. В принципе их можно отделить анализом друг от друга, а частота там нужна примерно 1 раз при включении (ВСК) значения снимать, так что можно шибко замедлиться.
Сообщение отредактировал Pavel81 - Mar 13 2012, 07:05
|
|
|
|
|
Mar 14 2012, 22:44
|
Профессионал
    
Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65

|
QUOTE (Pavel81 @ Mar 13 2012, 07:57)  А разве там нет арбитра шины у мастера, который не даёт передавать одновременно обоим? Какой арбитр шины в мастере для I2C? Поясните, пожалуйста, что имеете ввиду. Мастер I2C передает адрес устройства, бит "чтение/запись" и другие байты, специфичные для конкретного I2C слейва. Т.к. у Вас слейвы полностью идентичны, то и программироваться от мастера они будут всегда одинаково, а ответные биты от них будут складываться по "И", т.к. SDA - это открытый сток. Кто и что может здесь арбитрировать - не понятно
|
|
|
|
|
Mar 15 2012, 06:19
|
Знающий
   
Группа: Свой
Сообщений: 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 всегда будет получать корректные данные, но не понятно от какого АЦП.
|
|
|
|
|
Mar 16 2012, 14:01
|

Участник

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

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