Moin,
wieso nutzt Du nicht einfach den normalen Hardware-Reset? Ich mein, dafür ist die Leitung ja da. Allerdings funktioniert das ganze auch ohne Reset, d.h. nach Anlegen der Betriebsspannung sollte alles klar sein.
Dass Dir beim Auslesen nicht mal die korrekte Produkt-ID angezeigt wird, klingt merkwürdig.
Bin Deinen Code nicht durchgegangen, weil ich mich nur sehr wenig mit C auskenne. Hast Du die kleinen Stolpersteine beachtet, wie z.B. die Kennzeichnung der Datenrichtung bei der Übergabe der Adresse? Ich bin anfangs ein paar mal daran hängen geblieben.

Gruß, Ruppi