Método sencillo de comprobación de un volcado tipo MSD3393
Primero les explicaré las características sobre este tipo de firmware ya compilado.
Básicamente se compone por dos bloques principales.
El primer bloque es el AP_C (Compressed Application Processor).
El segundo bloque es el MERGE, o sea, todo el contenido del volcado, (Bootloader, PM, AP_C, Módulos e Información de Fuente).
El bloque de caché no está contemplado durante la compilación, pero sí es usado como almacenamiento externo.
Viene siendo el espacio restante de la memoria SPI Flash tras la instalación del firmware.
La firma o magic_merge de final de firmware es '0D0A000000001BDE' y posterior a la firma se encuentra el checksum global (4 bytes).
Este checksum es el que debemos comprobar para verificar la integridad del volcado.
Procedimiento de comprobación:
Usaremos el editor hexadecimal H x D (Nota: separo el nombre porque se genera un emoji).
Abrir el archivo a analizar y buscar el magic_merge como valor hexadecimal (Control + F).
Si el volcado es válido, se debe encontrar la firma justamente después del archivo de información de la fuente tipográfica del firmware...

Este es el final del firmware o MERGE, lo enmarcado en rojo es la firma (magic_merge) y lo enmarcado en amarillo es el checksum.
Ahora debemos colocar el cursor en el primer byte del checksum (en este caso sobre 7D) para obtener el desplazamiento.
Ya que tengamos el cursor en el primer byte del checksum, presionamos las teclas Alt + Insert o presionar el botón derecho del ratón y seleccionar 'Copiar desplazamiento'.
Ahora ejecutamos la aplicación Dump Repair (Engineer) y nos dirigimos a la pestaña 'MStar CRCs'.
Abrimos el archivo, seleccionamos 'MStar CRC-32', 'Calculate by Block' y establecemos el offset de inicio y el de final del bloque, que viene siendo el desplazamiento copiado.
En este caso sería así:
Al presionar 'Calculate' debemos obtener el mismo checksum que el que se insertó cuando el firmware fue compilado.
Si no obtenemos el mismo checksum, obviamente será porque el volcado está dañado y no servirá de nada limpiar el bloque de caché.
El checksum para el firmware compilado, ahora MERGE.BIN, se inserta como Big-Endian, por eso lo veremos tal cual como el calculado y no invertido, que sería en Little-Endian, como en el caso del bloque AP_C.BIN, pero el checksum del AP_C es insertado en otra parte y no al final de este.
Por si se preguntan: ¿Cómo es que sabe todo esto? La respuesta es: Estudiando los repositorios que les he compartido.
Esta comprobación es más determinante que la del bloque AP_C, puesto que se comprueba completamente la integridad del firmware.
Con esta sencilla verificación podrán determinar si el problema se debe a firmware corrupto o daño en placa.
Este método lo pienso integrar próximamente para automatizar el proceso, pero les quise compartir esta información antes para que tengan un poco más de conocimiento sobre este tipo de archivos.