то при передаче сначала формируйте спадающий фронт SCL и только потом меняйте состояние SDA. При приеме сначала формируйте нарастающий фронт SCL и только затем читайте состояние SDA. При аппаратной реализации I2C-мастер желательно иметь раздельные входы и выходы для SCL и SDA. Если не снаружи, то хотя бы внутри кристалла (для случая CPLD или FPGA). Состояния автомата I2C при этом тактируются входным сигналом SCL, несмотря на то, что ВЫходной сигнал SCL генерится самим I2C-мастером.