Según el log, toma la longitud del nombre y la muestra...
Current file = upgrade_zlm104gi_v1.00113_dc579922.bin lenght =38
Longitud del nombre del archivo = 38 caracteres.
Luego toma el tamaño del archivo...
file_fat_filesize return = 0x6E96A020
O sea, 1855365152 bytes = 1.72 GiB o 1.85 GB.
Posteriormente muestra...
check file failed: upgrade_zlm104gi_v1.00113_dc579922.bin
Pero haciendo referencia a "file" no a "size", y como archivo se pueden verificar los CRC-32 y también los datos de cabecera.
La validez del segundo archivo es normal, puesto que fue creado correctamente y no sé de qué manera creaste el que no funciona.
Como he mencionado anteriormente, dudo mucho que la comprobación sea por tamaño, pero se puede comprobar fácilmente.
Si mencionas que no se realiza comprobación por CRC-32, entonces modifica un solo byte en cualquier zona de alineamiento del firmware válido.
Si el alineamiento es con 0x00, cambia un byte por 0xFF o viceversa, esto mantendrá el tamaño pero se alterará el checksum.
Entonces, si la verificación es por tamaño, el archivo será validado como correcto, pero si es por CRC-32 obtendrás el error.
Esto mismo lo puedes aplicar en la cabecera, por ejemplo: cambiando el año 2023 por 2025 en "Build TIME :".