Tengo tres teorías:
- Estas imprimiendo un unsigned long como un unsigned char.
- Quizá la función strtoul está dando resultados inesperados, entonces debería volver al sencillo atol (ahí ahora solo se puede contar hasta 2 GB).
- Si intentas hacer GPRS.read() después de llamar a TAMANO_ARCHIVO, te puede dar resultados inesperados también. Recuerda que en la respuesta también viene el contenido del archivo.