Цитата(defunct @ Jun 21 2008, 02:52)

В этом есть своя прелесть, меньше шансов подвесить систему слейвом. Да и нечего слейву тормозить транзакцию. Слейв должен укладываться в клок мастера, иначе - надо снижать скорость.
Цитата(defunct @ Jun 21 2008, 03:06)

На мой взгляд это не проблема, и даже не фича, а то как должно быть.
Не успевает слейв, значит NACK и в сад такой слейв, и освободить шину для тех кто успевает.
Цитата(aaarrr @ Jun 21 2008, 03:20)

Есть слейвы, которые принципиально всегда держат SCL при обращении к некоторым регистрам (TVP5150, например) - так что, в сад их всех?
Цитата(defunct @ Jun 21 2008, 03:28)

там же есть I2C Timing Requirements
ставить подобающую скорость. (для TVPS5150 - 15kHz для тех регистров которые тормозят).
Цитата(aaarrr @ Jun 21 2008, 03:40)

Согласитесь, что нормальный I2C-контроллер не должен вынуждать пользователя заниматься такими извращениями - ронять скорость обмена в 30 раз.
ИМХО:
- I2C статическая шина просто по определению
- попросы подвешивания шины должны решаться механизмами таймаутов как на стороне мастера
так и на стороне слейва(особенно при софтовой реализации слейва)
- исходя из статической природы I2C
обязателен мониторинг SCL мастером
- снижение скорости шины(для устройств которы не готовы отвечать мгновенно) только уменьшит
пропускную способность всей шины
ИМХО, конкретный пример:
- слейв - микроконтроллер
- запрос от мастера может иметь разную длинну
- при получении запроса от мастера слейв должен чего-нить сделать(банально скопировать
запрошенные данные в буфер обмена)
- время готовности слейва зависит от типа(длинны)/сущности запроса
Цитата
Собсно программный I2C (надежный как бревно) разве чем-то отличается? Тоже синхронный.
Или кто-то мониторит SCL?
По стандарту, мониторить SCL есть прямая обязанность мастера.