ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
188497
fk0, легенда (06.04.2010 16:49, просмотров: 21210)
I2C -- говнокод. Повсеместно распространены исходники для I2C, как аппаратного, так и программного. И нигде не учтено, что в момент запуска кода в мастере-контроллере подчинённое устройство может продолжать чтение/запись начатую ранее (из-за глюков в результате сбоя питания и т.п.) Более того, слейв в таком виде может удерживать SDA в нуле. Лечится это примерно следующим способом, как рекомендует атмел для своих eeprom: старт, 9 импульсов SCL, (ещё)старт, стоп. Ещё хуже, что для MSSP-модуля PIC18 контроллеров удерживание, например SDA в нуле автоматом означает прерывание BCLxIF ("коллизия на шине") и отмену начала обмена. И, видимо, никак это не обойти, только если ручками 9 раз не дёрнуть за ножку SCL (через TRIS/LAT регистры). И об этом нигде не пишется! Почему 9 раз тоже отвечу: если там слейв -- пик-контроллер типа атмел, то они стоп-condition только в конце байта будут видеть. Кто что думает об этом?
[ZX]