Казалось бы простая штука, работающая в миллионах устройств...
Сделал систему на ATMega88, управляющую ППЗУ AT24C128C и часами PCF8583 по I2C (ну и ещё разные там штуки, но уже на других шинах). Включаю. По идее все железки позволяют работать на тактовой частоте 400 кГц. Никак не работает. 200 кГц - иногда, очень редко что-то срабатывает (часы работают лучше). 100 кГц. Часы работают отлично, память иногда лажает.
Посмотрел сигналы иохуофигел - фронты завалены со страшной силой.
(линии развёртки разнесены)
Это 100 кГц. На более высоких частотах напряжение не успевает подняться до уровня питания, вот и не работает (наверное).
Измерил ёмкость шины по отношению к земле - 15 НАНО! фарад.
Ладно, возможно где-то как-то косякнул - хотя всю плату чуть ли не вылизал.
Взял пустую, начал впаивать только то, что связано с I2C и по мере распайки измеряю ёмкость линий шины. Часы не запаивал. Ёмкость изменяется от 6...7 пФ на пустой плате до 12...13 пФ с запаянными элементами. Причём запайка не относящихся к шине деталей (конденсаторы фильтров питания, провода питания. светодиоды на другом порту микроконтроллера) дают небольшое - порядка 1...2 пФ, но увеличение ёмкости. Вполне возможно.
Что получилось:
Важно - эти максимум 12 пФ получились со вставленным в разъём МК.
Запрограммировал МК тупо на непрерывное чтение из памяти, запускаю - то же самое (на самом деле осциллограммы - это вот такая практически пустая плата)!
Более того, снова измеряю ёмкость линий шины: без МК = 12 пФ, с МК = 12 нФ. Причём перетыкал несколько разных корпусов МК - одно и то же. В момент замыкания контактов ZIF разъёма, ёмкость растёт.
Не срабатывает память - выдаёт конкретный NACK, почему бы ещё, кроме как из-за "неправильности" импульсов - там тупо аппаратное декодирование, нужен либо точный уровень, либо вообще фронт.
Перебрал все возможные мысли по поводу - кроме как нечистой силы, ничего в голову не приходит (у меня мощный "синдром Малянова", возможно данная ситуация - его результат, но это тоже по линии чудес).
Социальные закладки