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