Yes, I have to erase just a 128 byte block before.
Well, you are right, but I have not enough resources to use your method. My main program is around 80K, I have not enough space in the external EEprom so I have to manage FTP communication to download the new HEX in the bootloader code. Get a block, flash, Get a block, flash .... no crc controll at all.
I agree there is much risk something goes wrong this way, but if it works I can try remotely update a firmware without having the device back to my lab from the customer as I'm doing now.

Anyway I have space in the GSM module to save a copy of the actual firmware before starting update and manage a restore if some check fails during the update process. It is a heavy bootloader, I know.....