Ich kenne die von Dir verwendete I2C Library nicht, aber spontan sind mir einige Ungereimtheiten aufgefallen:

in read_Firmwarte sendest Du i2c_stop, und dann i2c_rep_start. Das ist nicht richtig. Nach einem stop sendet man ein start, oder man verzichtet auf stop und sendet einen repeated start.

Ich bin allerdings unsicher, ob das einen Fehler auslöst, denn zumindest beim ATmega16 ist es so, dass er gar keine STOP Condition sendet, wenn man sofort danach den Befehl für eine START Condition absetzt, und außerdem unterscheidet er technisch gesehen nicht wirklich zwischen START und repeated START. Es kann aber sein, dass Deine I2C Library da kritischer ist.

Ich vermisse eine Fehlerkontrolle. Wann immer Du eine Adresse oder ein Byte sendest, solltest DU prüfen, ob der Sensor mit einem ACK geantwortet hat und nur dann fortfahren.

Eventuell musst Du dem Sensor nach dem Power-On etwas mehr Zeit geben, um sich zu initialisieren. Ich verwende einen SRF02 und warte eine Sekunde, bevor ich das erste mal drauf zugreife. Diesen Zeitwert habe ich geschätzt und er scheint zu passen.