mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	feat(temperature_sensor): Add temperature sensor calibration support
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -111,7 +111,18 @@ esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, uint32_t adc_unit, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
					esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Currently calibration is not supported on ESP32-C2, IDF-5236
 | 
					    const esp_efuse_desc_t** cal_temp_efuse;
 | 
				
			||||||
 | 
					    cal_temp_efuse = ESP_EFUSE_TEMP_CALIB;
 | 
				
			||||||
 | 
					    int cal_temp_size = esp_efuse_get_field_size(cal_temp_efuse);
 | 
				
			||||||
 | 
					    assert(cal_temp_size == 9);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint32_t cal_temp = 0;
 | 
				
			||||||
 | 
					    esp_err_t err = esp_efuse_read_field_blob(cal_temp_efuse, &cal_temp, cal_temp_size);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
        *tsens_cal = 0.0;
 | 
					        *tsens_cal = 0.0;
 | 
				
			||||||
 | 
					        return err;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // BIT(8) stands for sign: 1: negative, 0: positive
 | 
				
			||||||
 | 
					    *tsens_cal = ((cal_temp & BIT(8)) != 0)? -(uint8_t)cal_temp: (uint8_t)cal_temp;
 | 
				
			||||||
    return ESP_OK;
 | 
					    return ESP_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,8 +49,18 @@ esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, uint32_t adc_unit, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
					esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Currently calibration is not supported on ESP32-C5, IDF-5236
 | 
					    const esp_efuse_desc_t** cal_temp_efuse;
 | 
				
			||||||
    // Allow no calibration
 | 
					    cal_temp_efuse = ESP_EFUSE_TEMPERATURE_SENSOR;
 | 
				
			||||||
    *tsens_cal = 0;
 | 
					    int cal_temp_size = esp_efuse_get_field_size(cal_temp_efuse);
 | 
				
			||||||
 | 
					    assert(cal_temp_size == 9);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint32_t cal_temp = 0;
 | 
				
			||||||
 | 
					    esp_err_t err = esp_efuse_read_field_blob(cal_temp_efuse, &cal_temp, cal_temp_size);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        *tsens_cal = 0.0;
 | 
				
			||||||
 | 
					        return err;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // BIT(8) stands for sign: 1: negative, 0: positive
 | 
				
			||||||
 | 
					    *tsens_cal = ((cal_temp & BIT(8)) != 0)? -(uint8_t)cal_temp: (uint8_t)cal_temp;
 | 
				
			||||||
    return ESP_OK;
 | 
					    return ESP_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -132,7 +132,18 @@ esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, uint32_t adc_unit, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
					esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Currently calibration is not supported on ESP32-C6, IDF-5236
 | 
					    const esp_efuse_desc_t** cal_temp_efuse;
 | 
				
			||||||
    *tsens_cal = 0;
 | 
					    cal_temp_efuse = ESP_EFUSE_TEMP_CALIB;
 | 
				
			||||||
 | 
					    int cal_temp_size = esp_efuse_get_field_size(cal_temp_efuse);
 | 
				
			||||||
 | 
					    assert(cal_temp_size == 9);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint32_t cal_temp = 0;
 | 
				
			||||||
 | 
					    esp_err_t err = esp_efuse_read_field_blob(cal_temp_efuse, &cal_temp, cal_temp_size);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        *tsens_cal = 0.0;
 | 
				
			||||||
 | 
					        return err;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // BIT(8) stands for sign: 1: negative, 0: positive
 | 
				
			||||||
 | 
					    *tsens_cal = ((cal_temp & BIT(8)) != 0)? -(uint8_t)cal_temp: (uint8_t)cal_temp;
 | 
				
			||||||
    return ESP_OK;
 | 
					    return ESP_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -124,7 +124,18 @@ esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, uint32_t adc_unit, in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
					esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Currently calibration is not supported on ESP32-H2, IDF-5236
 | 
					    const esp_efuse_desc_t** cal_temp_efuse;
 | 
				
			||||||
    *tsens_cal = 0;
 | 
					    cal_temp_efuse = ESP_EFUSE_TEMP_CALIB;
 | 
				
			||||||
 | 
					    int cal_temp_size = esp_efuse_get_field_size(cal_temp_efuse);
 | 
				
			||||||
 | 
					    assert(cal_temp_size == 9);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint32_t cal_temp = 0;
 | 
				
			||||||
 | 
					    esp_err_t err = esp_efuse_read_field_blob(cal_temp_efuse, &cal_temp, cal_temp_size);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        *tsens_cal = 0.0;
 | 
				
			||||||
 | 
					        return err;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // BIT(8) stands for sign: 1: negative, 0: positive
 | 
				
			||||||
 | 
					    *tsens_cal = ((cal_temp & BIT(8)) != 0)? -(uint8_t)cal_temp: (uint8_t)cal_temp;
 | 
				
			||||||
    return ESP_OK;
 | 
					    return ESP_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -7,6 +7,7 @@
 | 
				
			|||||||
#include <esp_bit_defs.h>
 | 
					#include <esp_bit_defs.h>
 | 
				
			||||||
#include "esp_efuse.h"
 | 
					#include "esp_efuse.h"
 | 
				
			||||||
#include "esp_efuse_table.h"
 | 
					#include "esp_efuse_table.h"
 | 
				
			||||||
 | 
					#include "esp_efuse_rtc_calib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int esp_efuse_rtc_calib_get_ver(void)
 | 
					int esp_efuse_rtc_calib_get_ver(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -35,7 +36,18 @@ esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, int atten, uint32_t*
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
					esp_err_t esp_efuse_rtc_calib_get_tsens_val(float* tsens_cal)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    //TODO: IDF-7482
 | 
					    const esp_efuse_desc_t** cal_temp_efuse;
 | 
				
			||||||
    *tsens_cal = 0;
 | 
					    cal_temp_efuse = ESP_EFUSE_TEMPERATURE_SENSOR;
 | 
				
			||||||
    return ESP_ERR_NOT_SUPPORTED;
 | 
					    int cal_temp_size = esp_efuse_get_field_size(cal_temp_efuse);
 | 
				
			||||||
 | 
					    assert(cal_temp_size == 9);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint32_t cal_temp = 0;
 | 
				
			||||||
 | 
					    esp_err_t err = esp_efuse_read_field_blob(cal_temp_efuse, &cal_temp, cal_temp_size);
 | 
				
			||||||
 | 
					    if (err != ESP_OK) {
 | 
				
			||||||
 | 
					        *tsens_cal = 0.0;
 | 
				
			||||||
 | 
					        return err;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // BIT(8) stands for sign: 1: negative, 0: positive
 | 
				
			||||||
 | 
					    *tsens_cal = ((cal_temp & BIT(8)) != 0)? -(uint8_t)cal_temp: (uint8_t)cal_temp;
 | 
				
			||||||
 | 
					    return ESP_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user