RFC1071 is a simple 16-bit sum of byte pairs. Thus, it is possible that two errors can “cancel” and still give a checksum of “pass”. For instance. bit-bit flips the bit from 1 to 0. Then another bit-error 16 bits later flips the bit from 0 to 1. RFC1071 will not detect this. But the same double-bit error will be detected if checked using CRC.
A similar two-bit flip error is possible with serial transmission. (This is much more likely on a parallel cable, especially if one wire is “noisy,” but who uses the parallel these days?) It is also possible on a flash chip, especially if the PCB has a poor solder connection between the chip and the Flash chip. In general, CRC is statistically more stable in detecting errors because a single change in a bit in an input affects several bits in a CRC shift register.
In practice, the other thing that you probably want to discover is the incomplete loading of Flash, so a large piece of code is simply missing. For this, the statistically checksum is probably fine, but I always advocated for CRC in the projects I worked on. Thanks to the table-based CRC algorithm, we were able to obtain the required computation speeds.
source share