排查固件问题时经常会收到一句回复“我这里校验值和你一样。”这句话还缺几个条件用的什么算法从哪里开始算了多长比较的是电脑上的文件还是芯片里的数据如果双方算的都只是文件开头即使结果一致也不能据此判断后面几十KB的内容。一个结果要带上它的计算范围校验计算的对象是被选中的一段字节。算法并不知道这段数据在业务上代表文件头、版本区还是整个应用。把范围省略就像只核对了第一页却在记录里写“整本一致”。局部校验有明确用途确认一段已知数据、缩小差异范围或复查固定区域结论也应停留在那个范围内。SPFlash手册列出的校验工具支持CRC32、MD5和CHECKSUM可选择的范围为1至1024字节。使用时要把这个长度限制记入结果说明。如果固件大于该范围一次工具计算只覆盖选定片段。不要把工具页上的一个结果写成“整个固件验证通过”。图1SPFlash手册中的校验工具界面。记录结果时同时保留所选文件、算法、起点和长度。两组16字节数据前8字节相同后面仍然可以不同以下为本文构造的演示数据不是设备测试日志。A为00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0FB为00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E FF。它们只有最后一个字节不同。若只计算偏移0开始的8字节输入完全一样结果自然一样。图2绿色区域是前8字节的比较范围最后一个字节在范围之外因此无法通过这次计算发现差异。A与B各自的前8字节MD5计算结果3677509751ccf61539174d2b9635a7bf能得出的结论这一片段输入相同结果相同A的完整16字节MD5计算结果1ac1ef01e96caf1be0d329331a4fc2a8能得出的结论纳入后半段后与B结果不同B的完整16字节MD5计算结果f7f1ac00dd2a3df9f3bb26bdada2bfd0能得出的结论两个完整输入确实存在差异表中数值按上述原始字节计算并核对空格和十六进制字符本身不参与计算。若复制字符串“00 01”到文本文件再计算算到的会是字符编码不能按同一输入理解。复现前先统一“原始二进制字节”还是“显示出来的文字”这也是远程沟通中容易遗漏的一步。三个层次分别回答三个问题局部校验值核对主要回答同一范围、同一算法的结果是否一致仍需补充字节内容及范围外数据的检查完整文件逐字节比对主要回答交付的整个文件是否一致仍需补充来源可信性、烧录配置及目标写入检查目标板验证主要回答数据写入和运行是否符合要求仍需补充按产品定义的版本与功能验收不同数据可能产生相同校验值因此“值相同”不是逐字节一致的严格证明。本例前8字节相同是由已列出的数据直接可知。MD5也不能证明文件来自谁或保证抵抗恶意篡改需要确认来源时应使用可信发布渠道和相应的签名验证流程。电脑上文件一致同样不能代替目标芯片写入检查与硬件功能验收。比结果之前先对齐这份记录对象文件名、版本、文件大小如为目标存储区写明芯片及读取方式。坐标文件偏移还是目标Flash地址明确单位及起点。范围长度按字节记录写明包含起点的连续区间。方法算法、工具及版本CRC或CHECKSUM跨工具比较时还要确认具体定义一致。结果保存原值和截图备注“局部核对”或“完整文件计算”。后续完整性核对、目标写入验证与断电重启验收分别记录。实际沟通可以写成“文件app_v1.2.bin偏移0长度1024字节使用某版本工具计算MD5结果如下。”这比一句“校验一样”更容易复核。若怀疑差异在后半段应扩大检查或使用能够处理完整文件的工具不要反复计算同一段然后把重复的一致当成更充分的证据。SPFlash校验工具的功能与范围依据std.plus《SPFlash S3 Pro使用说明书》。示例数据由本文构造MD5结果为对原始字节的计算值。https://std.plus/docs/spflash/manual讨论你们的烧录记录会同时保存算法、起点和长度吗遇到“校验相同但运行不同”时通常先核对哪一项https://std.plus/docs/spflash/manual