LCD não inica direito

Sabem o que pode ser?
Tem vez que ele incia na boa, mas na maior parte das vezes ele fica com a primira linha cheia de quadrados pretos.
Essa é a rotina de inicalização que eu estou usando:

void LcdInitialize() {
pinMode(RS, OUTPUT);
digitalWrite(RS, LOW);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);

//inicializa os pinos usados pelo LCD
for(int i=0; i<=3; i++){
pinMode(DB*, OUTPUT);*
_ digitalWrite(DB*, LOW);_
_
}_
_
delay(40); // specification says > 30ms after power on*_
* // function set*
* LcdSendCommand(B0010,4); // 0x2*
* LcdSendCommand(B00101000,8); // 0x28*
* delayMicroseconds(50); // specification says > 39µs*
* // display on/off control*
* LcdSendCommand(B00001110,8); // 0x0E*
* delayMicroseconds(50); // specification says > 39µs*
* // clear display*
* LcdSendCommand(B00000001,8); // 0x01*
* delay(2); // specification says > 1.53ms*
* // entry mode set*
* LcdSendCommand(B00000110,8); // 0x06*
* delay(2); // *
}