Rdpgadin , i changed to i2c.h library, same problem 
Theres my code:
#include <I2C.h>
#define MD25ADDRESS 0x58
#define SPEED1 0x00
double gyroZero;
double gyroTotal;
double rate;
double angle;
float dt;
int STD_LOOP_TIME = 9;
int lastLoopTime = STD_LOOP_TIME;
int lastLoopUsefulTime =STD_LOOP_TIME;
unsigned long loopStartTime = 0;
void setup(){
Serial.begin(9600);
I2c.begin();
I2c.write(0x69,0x16,0x1A);
I2c.write(0x69,0x15,0x09);
delay(10);
calibrarGyro();
delay(20);
motorMode(3);
}
void loop(){
dt = (float)(lastLoopTime)/1000.0;
rate = getGyroRate() * dt;
angle = angle + rate;
Serial.println(angle);
drive_motor(20);
lastLoopUsefulTime = millis() - loopStartTime;
if(lastLoopUsefulTime < STD_LOOP_TIME)
delay(STD_LOOP_TIME-lastLoopUsefulTime);
lastLoopTime = millis() - loopStartTime;
loopStartTime = millis();
}
int i2cRead(){
int data=0;
I2c.read(0x69,0x1F,1);
data = I2c.receive()<<8;
I2c.read(0x69,0x20,1);
data |= I2c.receive();
return data;
}
void calibrarGyro(){
for(int i=0;i<200;i++)
gyroTotal += i2cRead();
gyroZero = gyroTotal / 200;
}
double getGyroRate(){
double gyroRate=0;
gyroRate = ((double)(i2cRead() - gyroZero))/16.1;
return gyroRate;
}
void motorMode(int valor){
I2c.write(MD25ADDRESS,15,valor);
}
void drive_motor(double drive){
I2c.write(MD25ADDRESS,SPEED1,drive);
}
Serial.println(angle);
drive_motor(20);
This part, motors move with value 20, and angle is printed at same time, after 3 seconds, motors stop and serial stop printing angle too
And other thing i noticed, my MD25 board, have a green led, this led is High when I2C communication is processing.
I see if i dont move gyro, they dont freeze in 3 seconds, it can happen 30sec or 40sec later, if i start rotating gyro , the green led goes "LOW" and communication stops