Bulldog asked me to chime in as I referenced this thread in another. I have a 20x4 lcd with a backpack with the same chip. Also getting a corruption. I’ve reset it twice, once before bed and once before work. So the corruption is happening sometime between 30 minutes and 8 hours. Sorry I don’t have more specifics. Using 10K resistors for pull up.
1st corruption had moving characters, the last two are more static. I’m powering it off of usb hub off of a computer and it’s breadboarded so the setup would be considered “dirty” from a clean power and line view.
// This #include statement was automatically added by the Spark IDE.
#include "application.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C *lcd;
int i2c_addr = 0x27;
int i = 0;
// This routine runs only once upon reset
void setup() {
Serial.begin(9600);
lcd = new LiquidCrystal_I2C(i2c_addr, 20, 4); // set the LCD address to 0x20 for a 16x2 //SparkCore bug, address is actually 27 but shifted (0x27*2)
lcd->begin(20, 4, LCD_5x8DOTS);
lcd->backlight();
lcd->init(); // initialize the lcd
lcd->backlight();
lcd->clear();
lcd->setCursor(0,0);
lcd->print("---Spark*Core---");
lcd->setCursor(0,1);
lcd->print("Uptime:");
}
void loop()
{
lcd->setCursor(7,1);
lcd->print((int)(millis()/1000));
Serial.println("Hello ");
Serial.println(i);
delay(500);
i++;
}

I’m removing the serial part of the code for tonight as there was a post hypothesizing it might be the issue. Also last flash I couldn’t actually get a serial response and I really don’t need it anymore.
I’m also using the libraries from the Hitchhikers Guide to I2C post