ZHCAFX9 August 2025 HDC1010 , HDC1080 , HDC2010 , HDC2021 , HDC2022 , HDC2080 , HDC3020 , HDC3020-Q1 , HDC3021 , HDC3021-Q1 , HDC3022 , HDC3022-Q1 , HDC3120
對 HDC302x 的測量輸出執(zhí)行 CRC 校驗(yàn)是確保數(shù)據(jù)完整性和防止錯(cuò)誤讀數(shù)的重要步驟,尤其是在醫(yī)療設(shè)備、冷鏈或氣象站等關(guān)鍵應(yīng)用中。本節(jié)提供了一個(gè)簡單的代碼示例,可輕松實(shí)現(xiàn)到 HDC302x 的現(xiàn)有代碼中。本示例特別重點(diǎn)介紹對溫度和濕度讀數(shù)執(zhí)行 CRC 校驗(yàn)。
HDC3020 遵循 CRC-8 標(biāo)準(zhǔn),因?yàn)樗鼮闇囟群蜐穸葴y量輸出唯一的 8 位 CRC 值。上面 圖 2-8 說明了這一點(diǎn)。根據(jù)用戶希望檢查濕度還是溫度數(shù)據(jù),以下算法總共接受三個(gè)字節(jié)——MSB、LSB 和 CRC 作為參數(shù)以及發(fā)送的總字節(jié)數(shù)。然后,它使用數(shù)據(jù)表中指定的多項(xiàng)式值 0x31 進(jìn)行計(jì)算。方程式 1 顯示了用于 CRC 校驗(yàn)計(jì)算的多項(xiàng)式。
在處理了測量數(shù)據(jù)和 CRC 字節(jié)后,如果最終值為 0x00,則 CRC 校驗(yàn)已通過,程序會繼續(xù)輸出測量讀數(shù);否則,它會在控制臺中輸出錯(cuò)誤消息。
// function for checking CRC for HDC measurements
uint8_t checkMeasurementCRC(uint8_t data[], uint8_t dataLength){
uint8_t crc = 0xFF; // initial value per HDC302x datasheet
uint8_t byte;
uint8_t bit;
for (byte =0; byte < dataLength; byte++){ // loops through each byte of input data
crc ^= data[byte]; // XOR next data byte into current CRC value
for (bit = 0; bit < 8; bit++){ // process each bit from the data byte
if (crc & 0x80) // if MSB of CRC is 1
crc = (crc << 1) ^ 0x31; // shift left and apply polynomial
else
crc = (crc << 1); // else shift left, but no polynomial application
}
}
Serial.print("CRC Check Result: "); // optional; prints CRC value for debugging
Serial.println(crc);
return crc; // return final CRC value
} 然后,可以在讀取溫度或濕度時(shí)調(diào)用此函數(shù),以檢查數(shù)據(jù)完整性。
Humidity Read Example w/ CRC Check:
uint8_thumCheck[3] = {HDC_DATA_BUFF[3], HDC_DATA_BUFF[4], HDC_DATA_BUFF[5]};
// if algorithm output equals final byte value of 0x00, CRC check passes, else output error message
if ((checkMeasurementCRC(humCheck, 3)) == 0x00){
Serial.println("Humidity CRC check passed.");
humidity = getHum(HDC_DATA_BUFF);
Serial.print("Humidity (RH): ");
Serial.print(humidity);
Serial.println("%");
} else {
Serial.println("Error: Humidity CRC Check Failed.");
}下面 圖 2-9 中提供了示例輸出??梢圆捎孟嗤姆椒▉頇z查溫度數(shù)據(jù)完整性。
圖 2-9 CRC 校驗(yàn)示例輸出在 TI 基于 GUI 的代碼生成器 ASC Studio 中可以找到在 C 語言中檢查警報(bào) CRC 的示例。