diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index df6fd3322..31dc00967 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,8 @@ repos: .*_pb2.py| .*.pb-c.h| .*.pb-c.c| - .*.yuv + .*.yuv| + .*.patch )$ - id: end-of-file-fixer exclude: *whitespace_excludes diff --git a/codespell-ignore-list b/codespell-ignore-list index bc6e5efcc..32e080523 100644 --- a/codespell-ignore-list +++ b/codespell-ignore-list @@ -16,3 +16,5 @@ ser TE uncompressible wHeigh +shoudn't +definations diff --git a/docs/_static/esp32s3_adc_range_to_3100.patch b/docs/_static/esp32s3_adc_range_to_3100.patch index 25338ffe7..ce956cc96 100644 --- a/docs/_static/esp32s3_adc_range_to_3100.patch +++ b/docs/_static/esp32s3_adc_range_to_3100.patch @@ -1,21 +1,21 @@ -From 2b3ffaf974a82c25bc20e0335de7b9bc2e2ad5c7 Mon Sep 17 00:00:00 2001 -From: Li Bo -Date: Mon, 7 Nov 2022 14:32:54 +0800 +From 9696f0479565203ec3638cff3f2f38e0dfbcba4b Mon Sep 17 00:00:00 2001 +From: yanke +Date: Wed, 18 Sep 2024 16:36:27 +0800 Subject: [PATCH] fix(adc): support esp32s3 adc range above 3100mv --- - components/driver/adc.c | 11 ++++- - .../efuse/esp32s3/esp_efuse_rtc_calib.c | 44 ++++++++++++++++++- + components/driver/adc.c | 9 ++++ + .../efuse/esp32s3/esp_efuse_rtc_calib.c | 45 ++++++++++++++++++- .../esp32s3/include/esp_efuse_rtc_calib.h | 9 ++++ - components/esp_adc_cal/esp_adc_cal_common.c | 44 +++++++++++++++++++ - 4 files changed, 105 insertions(+), 3 deletions(-) + components/esp_adc_cal/esp_adc_cal_common.c | 44 ++++++++++++++++++ + 4 files changed, 106 insertions(+), 1 deletion(-) diff --git a/components/driver/adc.c b/components/driver/adc.c -index b28b9d919a..b9faac93d5 100644 +index 756ec9f26c..4743dae082 100644 --- a/components/driver/adc.c +++ b/components/driver/adc.c -@@ -844,11 +844,16 @@ static uint16_t s_adc_cali_param[SOC_ADC_PERIPH_NUM][ADC_ATTEN_MAX] = {}; - //This function shouldn't be called inside critical section or ISR +@@ -866,11 +866,17 @@ static uint16_t s_adc_cali_param[SOC_ADC_PERIPH_NUM][ADC_ATTEN_MAX] = {}; + //This function shoudn't be called inside critical section or ISR uint32_t adc_get_calibration_offset(adc_ll_num_t adc_n, adc_channel_t channel, adc_atten_t atten) { +#ifdef CONFIG_ENABLE_ADC_USER_CODE_OFFSET @@ -25,26 +25,25 @@ index b28b9d919a..b9faac93d5 100644 ESP_LOGV(ADC_TAG, "Use calibrated val ADC%d atten=%d: %04X", adc_n, atten, s_adc_cali_param[adc_n][atten]); return (uint32_t)s_adc_cali_param[adc_n][atten]; } -- + +#ifdef CONFIG_ENABLE_ADC_USER_CODE_OFFSET + } +#endif // check if we can fetch the values from eFuse. int version = esp_efuse_rtc_calib_get_ver(); - -@@ -866,7 +871,9 @@ uint32_t adc_get_calibration_offset(adc_ll_num_t adc_n, adc_channel_t channel, a - ADC_EXIT_CRITICAL(); - adc_power_release(); + +@@ -889,6 +895,9 @@ uint32_t adc_get_calibration_offset(adc_ll_num_t adc_n, adc_channel_t channel, a + sar_periph_ctrl_adc_oneshot_power_release(); } -- + +#ifdef CONFIG_ENABLE_ADC_USER_CODE_OFFSET + esp_efuse_rtc_calib_clear_init_code_offset_flag(adc_n, atten); +#endif s_adc_cali_param[adc_n][atten] = init_code; ESP_LOGV(ADC_TAG, "Calib(V%d) ADC%d atten=%d: %04X", version, adc_n, atten, init_code); - + diff --git a/components/efuse/esp32s3/esp_efuse_rtc_calib.c b/components/efuse/esp32s3/esp_efuse_rtc_calib.c -index ec5f76814c..99c9aff483 100644 +index 7fdcdc46b9..8966976ff6 100644 --- a/components/efuse/esp32s3/esp_efuse_rtc_calib.c +++ b/components/efuse/esp32s3/esp_efuse_rtc_calib.c @@ -9,6 +9,7 @@ @@ -52,13 +51,13 @@ index ec5f76814c..99c9aff483 100644 #include "esp_efuse.h" #include "esp_efuse_table.h" +#include "esp_efuse_rtc_calib.h" - - //Don't introduce new dependency of ADC, keep these macro same as ADC related definitions + + //Don't introduce new dependency of ADC, keep these macro same as ADC related definations #define ADC_ATTEN_MAX 4 @@ -30,6 +31,44 @@ int esp_efuse_rtc_calib_get_ver(void) return cali_version_v1; } - + +#ifdef CONFIG_ENABLE_ADC_USER_CODE_OFFSET +static uint32_t adc_icode_offset[ADC_NUM_MAX][4] = {0}; +static bool adc_icode_offset_flag[ADC_NUM_MAX][4] = {0}; @@ -100,18 +99,18 @@ index ec5f76814c..99c9aff483 100644 uint32_t esp_efuse_rtc_calib_get_init_code(int version, uint32_t adc_unit, int atten) { assert(version == 1); -@@ -61,8 +100,11 @@ uint32_t esp_efuse_rtc_calib_get_init_code(int version, uint32_t adc_unit, int a - adc_icode[2] = adc_icode_diff[2] + adc_icode[1]; +@@ -62,7 +101,11 @@ uint32_t esp_efuse_rtc_calib_get_init_code(int version, uint32_t adc_unit, int a adc_icode[3] = adc_icode_diff[3] + adc_icode[2]; } -- + +- return adc_icode[atten]; +#ifdef CONFIG_ENABLE_ADC_USER_CODE_OFFSET + return adc_icode[atten] + adc_icode_offset[adc_unit][atten]; +#else - return adc_icode[atten]; ++ return adc_icode[atten]; +#endif } - + esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, uint32_t adc_unit, int atten, uint32_t *out_digi, uint32_t *out_vol_mv) diff --git a/components/efuse/esp32s3/include/esp_efuse_rtc_calib.h b/components/efuse/esp32s3/include/esp_efuse_rtc_calib.h index e2f5b54329..9d215ac057 100644 @@ -120,7 +119,7 @@ index e2f5b54329..9d215ac057 100644 @@ -54,6 +54,15 @@ esp_err_t esp_efuse_rtc_calib_get_cal_voltage(int version, uint32_t adc_unit, in */ float esp_efuse_rtc_calib_get_cal_temp(int version); - + +#define CONFIG_ENABLE_ADC_USER_CODE_OFFSET 1 + +#ifdef CONFIG_ENABLE_ADC_USER_CODE_OFFSET @@ -134,7 +133,7 @@ index e2f5b54329..9d215ac057 100644 } #endif diff --git a/components/esp_adc_cal/esp_adc_cal_common.c b/components/esp_adc_cal/esp_adc_cal_common.c -index 09878cc015..9a5af2432e 100644 +index 09878cc015..7910359718 100644 --- a/components/esp_adc_cal/esp_adc_cal_common.c +++ b/components/esp_adc_cal/esp_adc_cal_common.c @@ -12,6 +12,7 @@ @@ -144,7 +143,7 @@ index 09878cc015..9a5af2432e 100644 +#include "esp_efuse_rtc_calib.h" #include "esp_adc_cal.h" #include "esp_adc_cal_internal.h" - + @@ -33,11 +34,54 @@ esp_err_t esp_adc_cal_get_voltage(adc_channel_t channel, } else { ESP_RETURN_ON_FALSE(channel < SOC_ADC_CHANNEL_NUM(1), ESP_ERR_INVALID_ARG, TAG, "Invalid channel"); @@ -154,7 +153,7 @@ index 09878cc015..9a5af2432e 100644 + return ret; + } } - + if (ret == ESP_OK) { *voltage = esp_adc_cal_raw_to_voltage((uint32_t)adc_reading, chars); } @@ -165,7 +164,7 @@ index 09878cc015..9a5af2432e 100644 +#else //using float type + typedef const float ADC_CAL_TYPE; +#endif -+ if(chars->atten == ADC_ATTEN_DB_11) { ++ if(chars->atten == ADC_ATTEN_DB_12) { + if (*voltage > 2900) { + /* add initcode offset */ + ESP_LOGV(TAG, "first is %u", *voltage); @@ -199,6 +198,7 @@ index 09878cc015..9a5af2432e 100644 + return ret; } - --- + +-- 2.34.1 + diff --git a/docs/en/others/adc_range.rst b/docs/en/others/adc_range.rst index 0747b3e3d..3051a85a0 100644 --- a/docs/en/others/adc_range.rst +++ b/docs/en/others/adc_range.rst @@ -20,9 +20,9 @@ Overall, during each ADC measurement, there will be 1-2 times ADC reading. For m Patch Use Guide ------------------- -At present, the patch file is developed based on ESP-IDF ``release/v4.4`` branch: +At present, the patch file is developed based on ESP-IDF ``v4.4.8``: -1. Please make sure ESP-IDF has been ``checked out`` to the ``release/v4.4`` branch +1. Please make sure ESP-IDF has been ``checked out`` to the ``v4.4.8`` 2. Please download file :download:`esp32s3_adc_range_to_3100.patch <../../_static/esp32s3_adc_range_to_3100.patch>` to anywhere you want 3. Using command ``git am --signoff < esp32s3_adc_range_to_3100.patch`` to apply the patch to ESP-IDF diff --git a/docs/zh_CN/others/adc_range.rst b/docs/zh_CN/others/adc_range.rst index 787849823..8b2a2030a 100644 --- a/docs/zh_CN/others/adc_range.rst +++ b/docs/zh_CN/others/adc_range.rst @@ -20,9 +20,9 @@ ESP32-S3 可通过配置寄存器调整 ADC 的偏置电压,再结合高电压 Patch 使用方法 ------------------- -当前 Patch 基于 ESP-IDF ``release/v4.4`` 分支开发: +当前 Patch 基于 ESP-IDF ``v4.4.8`` 开发: -1. 确认 ESP-IDF 已经 ``checkout`` 到 ``release/v4.4`` 分支 +1. 确认 ESP-IDF 已经 ``checkout`` 到 ``v4.4.8`` 2. 下载 :download:`esp32s3_adc_range_to_3100.patch <../../_static/esp32s3_adc_range_to_3100.patch>` 文件 3. 使用指令 ``git am --signoff < esp32s3_adc_range_to_3100.patch`` 将 Patch 应用到 IDF 中 4. 请注意, 该方案仅对 ``esp_adc_cal_get_voltage`` 接口有效,用户可直接调用该接口获取扩展后的读数 diff --git a/tools/ci/astyle-rules.yml b/tools/ci/astyle-rules.yml index 8596b906f..2769d0187 100644 --- a/tools/ci/astyle-rules.yml +++ b/tools/ci/astyle-rules.yml @@ -37,6 +37,7 @@ not_formatted_permanent: - "components/gui/lvgl_gui/" - "components/usb/usb_stream/test_apps/main/wave_1ch_16bits.c" - "components/utilities/xz/" + - "docs/_static/esp32s3_adc_range_to_3100.patch" - "docs/doxygen-known-warnings.txt" - "docs/sphinx-known-warnings.txt" - "examples/hmi/lvgl_coffee/"