【发布时间】:2016-10-08 12:34:23
【问题描述】:
我目前正在尝试使用微控制器将磁盘格式化为 exFAT。我的问题是我需要计算一个校验和,该校验和使用 VBR(卷引导区域)的扇区 1 到 11 的字节将其存储到扇区 12,但我的结果不正确。当校验和不正确时,磁盘不能被 Windows 或任何其他识别 exFAT 的操作系统使用,因为校验和已被验证,如果不正确,则会发生致命错误。
这是计算 32 位校验和的函数:
uint32_t BootChecksum(char * data, long bytes){
uint32_t checksum = 0;
for (uint32_t i = 0 ; i < bytes ; i++){
if (i == 106 || i == 107 || i == 112)
continue;
checksum = ((checksum << 31) | (checksum >> 1)) + (uint32_t) data[i];
if(checksum == 0xF1924082){
printf("%02X | i = %d", checksum, i);
}
}
return checksum;
}
据我所知,该函数是正确的,所以我的猜测是我使用的数据不正确。我只是取了所需的 11 个扇区,因此每个扇区 512 个字节会产生一个 5632 个字节的数组。
我使用了类似的函数来计算条目集的校验和(16 位校验和),结果是正确的,它确实必须是数据,但我不明白我在那里缺少什么!
任何了解 exFAT 的人可以帮助我吗?谢谢!
【问题讨论】: