我正在嘗試使用微控制器將磁盤格式化爲exFAT。我的問題是,我需要計算校驗和,使用VBR(Volume Boot Region)的扇區1到11中的字節將其存儲到扇區12中,但是結果不正確。當校驗和不正確時,Windows或任何其他識別exFAT的操作系統都無法使用該磁盤,因爲校驗和已驗證,並且如果錯誤發生致命錯誤。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的人都能幫助我嗎?謝謝!
你確實是對的,我試着用你的圓括號沒有任何括號,我得到了相同的結果,因此似乎我誤解了操作員的優先權!但是,結果仍然不正確。我得到0x95672D57,而我應該有0xF1924082。謝謝你的幫助! –
@ArthurPenguin - 解決了一個問題,讓我們看看我們是否可以解決另一個問題;我編輯了我的anser,提示您的代碼中有另一個更改來解決簽名問題 – max66
謝謝,絕對解決了它! –