Может у вас линия SDA в нуле оставалась? Есть такая фигня, в самом протоколе I2C дырочка: если во время передачи данных от слейва к мастеру мастер перезагрузится по любой причине, то слейв будет тупо продолжать ждать импульсов на SCL и держать данные на SDA. Соответственно мастер не может сформировать STOP/START и привет. Лечится подачей "врукопашную" 16-20 импульсов на линию SCL.
Не надо делать мне как лучше, оставьте мне как хорошо