Как вы уже видели, подтягивающие резисторы жизненно важны для шины i2c, как в линиях sda, так и scl.Обычно очевидно, что линия sda является двунаправленной, что не так очевидно, так как scl также несколько двунаправлен, поскольку ведомые устройства могут поддерживать линию на низком уровне, чтобы снизить скорость шины.
Во многих случаяхшина может быть заблокирована из-за столкновения или другой физической проблемы, например, из-за потери подтягиваний. В таком случае некоторые ведомые не освобождают шину должным образом, потому что они понимают, что к ним все еще обращаются.Эта ситуация может быть исправлена ведущим, посылающим выходные импульсы SCL и, наконец, условием остановки, когда линии освобождаются.Однако, если вы говорите, что нет подчиненных, это, вероятно, не ваш случай.
Я боюсь, что ваша проблема может быть связана с периферийным устройством i2c мастера, который не видит, что линии идут высоко, как ожидается, потому что подтягиваниявременно отключены.Лучшее решение, которое я могу придумать в вашем случае, состоит в том, что вы должны убедиться, что вы не потеряете эти подтягивания.Лучший способ добиться этого - подключить два или три резистора параллельно в каждой линии, таким образом, все два / три должны быть отключены, чтобы шина оставалась «без нагрузки».Используйте два резистора 10k параллельно для SDA и еще два для SCL.