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

 
 
> I2C - проблема, сбои в работе
Igor_S
сообщение Dec 3 2014, 14:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 258
Регистрация: 3-08-04
Пользователь №: 434



Здравствуйте все!
Вопрос у меня по поводу интерфейса I2C, связывающего импульсный блок питания с процессором STM32F407.
Процессор в режиме мастера, говорит с железкой, в которой 3 блока питания на общей шине I2C.
Пока блоки были на столе, без железки - т.е. соединения SDA и SCL между блоками было сделано просто проводами - все было ОК. Как только блоки внутри железки, они там воткнуты во внутреннюю печатную плату, соединения выполнены в виде дорожек на ней - начались проблемы.
Выглядит это таким образом. Процессор в режиме Master RX читает содержимое простого регистра PCF6574 внутри блока питания - и вдруг начинает читать FF.
Я смотрю на шину SDA - действительно высокий уровень, и только ACK от мастера - он, типа, продолжает читать...
Смотрю на SCL - и вижу, перед этим событием - был будто-бы пропуск клока, т.е. передний фронт клока задержался на пол-периода!
Стал исследовать, обращаюсь к несуществующим адресам - вижу те-же пропуски клока...
Эффект пропадает либо при отключении линии SCL от блока питания (еще раз повторю, я обращаюсь не к нему, поетому могу играться), либо при выключении блока питания.

Видимо, это связано с наводкой на SCL сигнал от импульсника (но я ничего криминального не вижу на скопе) - но КАК Мастер об этом знает? Как можно прервать передачу в произвольный момент? Это выглядит как "SCL Stretching", но ведь это релевантно только для Slave? Да, я забыл сказать - источник пропуска именно процессор, я это вижу по уровню сигнала.
Видел ли кто такое? Куда глядеть, как Вы думаете?

Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Dec 3 2014, 15:03
Сообщение #2


Гуру
******

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



Цитата(Igor_S @ Dec 3 2014, 17:25) *
Видел ли кто такое? Куда глядеть, как Вы думаете?

"Земля" нигде не разорвана ? Т.е., все ли абоненты шины имеют общую землю ?
Подтягивающие резисторы на линиях интерфейса есть ? Если да, то какого номинала ?
Возможно ли в порядке эксперимента заменить импульсный БП линейным или даже обычным аккумулятором ?
Go to the top of the page
 
+Quote Post
Igor_S
сообщение Dec 3 2014, 15:16
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 258
Регистрация: 3-08-04
Пользователь №: 434



QUOTE (kovigor @ Dec 3 2014, 19:03) *
"Земля" нигде не разорвана ? Т.е., все ли абоненты шины имеют общую землю ?
Подтягивающие резисторы на линиях интерфейса есть ? Если да, то какого номинала ?
Возможно ли в порядке эксперимента заменить импульсный БП линейным или даже обычным аккумулятором ?

Спасибо за ответ,
Земля вроде общая.
Резисторы 4.7К
Насчет заменить - извините, я не уточнил. Сейчас плата с процессором запитана от отдельного линейного лабораторного блока питания, импульсник - это абонент на I2C, его выходное напряжение вообще никуда не идет (сейчас). Только питает его собственную электронику (я имею в виду I2C микрошемы внутри источника).
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 3 2014, 15:26
Сообщение #4


Гуру
******

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



Цитата(Igor_S @ Dec 3 2014, 19:16) *
импульсник - это абонент на I2C

Самодельный ? Если да, то насколько корректно он сделан, включая разводку ПП ? Можно ли его заменить, например, аккумулятором ?
Go to the top of the page
 
+Quote Post
Igor_S
сообщение Dec 4 2014, 06:18
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 258
Регистрация: 3-08-04
Пользователь №: 434



QUOTE (kovigor @ Dec 3 2014, 18:26) *
Самодельный ? Если да, то насколько корректно он сделан, включая разводку ПП ? Можно ли его заменить, например, аккумулятором ?

Нет, увы - не самодельный, иначе бы я хоть представлял разводку его платы.
Смысл такой - моя плата связана по I2C с готовым модулем, содержащим 3 "рэка". Каждый рэк содержит 3 независимых импульсника. Каждый импульсник имеет I2C для чтения его параметров.
это я вообще описываю устройство. Я сейчас работаю только с одним рэком, внутри которого установлен только один импульсник.
Плата питается от отдельного лабораторного источника.
Подтягивающие резисторы установлены на плате, на ее питание 5В.
Сама проблема. Рэки есть 2-х типов.
Первый - каждый блок питания, входящий в рэк, имеет отдельный коннектор для подключения I2C, и соединение SCL, SDA выполнено отдельным внешним кабелем. С этим рэком проблем нет.
Второй тип рэка имеет один коннектор, и соединения SCL, SDA выполнены на внутренней печатной плате, в которую вставлены источники. Разводка этой платы мне не известна - но понятно, что соединения выполнены длинными дорожками на всю длину рэка (сантиметрое 40). Вот с этим типом рыка появляется проблема, что при чтении серии байтов - начиная с какого-то момента, я получаю "FF". Сннхронизируя скоп, я вижу, что перед этим произошел как-бы "clock stretching", т.е. положительный фронт клока как бы задержан на пол-периода... И видимо, начиная с этого момента, "slave" останавливает обмен, а мастер - ничего не подозревая, продолжает гнать клок, давать ACK и т.д.
Кстати, этот момент может наступить в совершенно случайном месте - например, при выдаче мастером адреса слэйва - тогда просто мастер, не получив ACK, завершает обмен по таймауту.
Мастер - процессор STM32F407.
Вот такая проблема...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 05:56
Рейтинг@Mail.ru


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