Кажись, удалось победить эту неявную неисправность с переключением входов, по крайней мере, она пока больше не проявляется, как это было раньше. Может быть, кому-то пригодятся результаты моих изысканий на эту тему.
После неудачных поисков возможных неконтактов в разъемах и на платах, решил посмотреть, что происходит на шине I2C, как было сказано выше. В случае неисправности наблюдались странные сигналы - на линии SDA присутствовал постоянный меандр с размахом 4,8 В, в то время, как линия SCL показывала постоянный притянутый уровень 4,8 В с небольшими короткими проседаниями и всплесками +/- 0,2 В. В редкие моменты нормальной работы устройства после многочисленных сбросов по Reset или включений/выключений, на обеих линиях наблюдались пакеты сигналов с тем же размахом 4,8 В. Тогда я решил копать в этом направлениии.
Как известно, линии интерфейса I2C требуют подтяжки с помощью резисторов к напряжению питания одного из устройств, подключенных в качестве клиента к данной шине. Среди них находятся ведущее устройство (MASTER) и ведомые (SLAVE), каждое из которых имеет свой уникальный адрес. В моем случае таких устройств всего 4:
1. Микроконтроллер STM32F103CB6T (MASTER)
2. Аудиопроцессор TD7719 (SLAVE)
3. I2C расширитель шины PCF8574 (SLAVE)
4. FM тюнер RDA5708 (SLAVE)
Каждое из этих устройств имеет различное напряжение питания, поэтому я задался вопросом совместимости сигналов по уровню на шине I2C, которые по оригинальной схемотехнике проекта притянуты к питанию +5 В на основной плате через резисторы номиналом 4,7 К. Необходимо только отметить, что резисторы подтяжки, будучи установленными один раз на шину, больше нигде не требуются, так как иначе они запараллелятся и их общее сопротивление будет меньше меньшего по известному правилу. Однако, такое питание из всех вышеперечисленных клиентов имеет только расширитель I2C, в то время, как питание микроконтроллера составляет +3,3 В, аудиороцессора +9 В, тюнера +3,0 В. Меня заинтересовал вопрос, насколько толерантны все эти устройства к сигналам на I2C уровня +5 В (или около того). Для этого я изучил даташиты на каждую микросхему и обнаружил, что под вопрос попадает только тюнер RDA5807, поскольку максимальный уровень сигналов для него составляет от 0,7 VDD до VDD, т.е. 2,1 - 3,0 В. В то время, как остальные микросхемы, в принципе, толерантны к сигналам +5 В по I2C, как видно по даташитс.
Для чистоты эксперимента откинул шину от тюнера путем размыкания ее дорожек на макетке. И таки да - все заработало, как положено, за исключением тюнера, понятное дело. Тогда решил поставить преобразователь уровня I2C на микросхеме PCA9306 только для тюнера, и вуаля - все заработало! Хотя до этого все работало 2 года более-менее, хотя и бывали довольно редкие подобные сбои. Подозреваю, что тюнер работал на пределе и подсаживал шину и раньше, но не так критично до недавнего времени. Вот такое нашел решение, может быть, был смысл попробовать подтянуть всю шину к +3,3 В вместо имеющихся на сегодня +5 В, но не хотелось вмешиваться в оригинальную основную плату. Прикладываю фото до и после доработки периферийной платы. Может, будет полезно.