fix(uart): fix autobaud detection unable to trigger LOGE when counts unreliable

This commit is contained in:
Song Ruo Jing
2025-12-25 16:54:10 +08:00
parent de878df848
commit 9a9b104f8c
2 changed files with 8 additions and 7 deletions
@@ -511,7 +511,7 @@ static void timer_frequency_test(ledc_channel_t channel, ledc_timer_bit_t timer_
} else if (clk_src_freq == 60 * 1000 * 1000) {
theoretical_freq = 8993;
}
frequency_set_get(speed_mode, timer, 9000, theoretical_freq, 60);
frequency_set_get(speed_mode, timer, 9000, theoretical_freq, 80);
#endif
// Pause and de-configure the timer so that it won't affect the following test cases
+7 -6
View File
@@ -2309,10 +2309,11 @@ esp_err_t uart_detect_bitrate_stop(uart_port_t uart_num, bool deinit, uart_bitra
ESP_RETURN_ON_FALSE(uart_context[uart_num].hw_enabled && ret_res, ESP_ERR_INVALID_ARG, UART_TAG, "invalid arg");
esp_err_t ret = ESP_OK;
ret_res->low_period = uart_hal_get_low_pulse_cnt(&(uart_context[uart_num].hal)) + 1;
ret_res->high_period = uart_hal_get_high_pulse_cnt(&(uart_context[uart_num].hal)) + 1;
ret_res->pos_period = uart_hal_get_pos_pulse_cnt(&(uart_context[uart_num].hal)) + 1;
ret_res->neg_period = uart_hal_get_neg_pulse_cnt(&(uart_context[uart_num].hal)) + 1;
// For period count values, we will later add 1 to always over-count instead of under-count
ret_res->low_period = uart_hal_get_low_pulse_cnt(&(uart_context[uart_num].hal));
ret_res->high_period = uart_hal_get_high_pulse_cnt(&(uart_context[uart_num].hal));
ret_res->pos_period = uart_hal_get_pos_pulse_cnt(&(uart_context[uart_num].hal));
ret_res->neg_period = uart_hal_get_neg_pulse_cnt(&(uart_context[uart_num].hal));
ret_res->edge_cnt = uart_hal_get_rxd_edge_cnt(&(uart_context[uart_num].hal));
// stop auto baud rate detection
@@ -2321,11 +2322,11 @@ esp_err_t uart_detect_bitrate_stop(uart_port_t uart_num, bool deinit, uart_bitra
const char *err_str = "";
if (ret_res->low_period == 0 || ret_res->high_period == 0 || ret_res->pos_period == 0 || ret_res->neg_period == 0) {
err_str = "fast";
} else if (ret_res->low_period == UART_LL_PULSE_TICK_CNT_MAX || ret_res->high_period == UART_LL_PULSE_TICK_CNT_MAX || ret_res->pos_period == UART_LL_PULSE_TICK_CNT_MAX || ret_res->neg_period == UART_LL_PULSE_TICK_CNT_MAX) {
} else if (ret_res->low_period++ == UART_LL_PULSE_TICK_CNT_MAX || ret_res->high_period++ == UART_LL_PULSE_TICK_CNT_MAX || ret_res->pos_period++ == UART_LL_PULSE_TICK_CNT_MAX || ret_res->neg_period++ == UART_LL_PULSE_TICK_CNT_MAX) {
err_str = "slow";
}
if (strcmp(err_str, "") != 0) {
ESP_LOGE(UART_TAG, "bitrate too %s, unable to count ticks, please try to adjust source_clk", err_str);
ESP_LOGW(UART_TAG, "bitrate too %s, unreliable xxx_period values, please try to adjust source_clk", err_str);
}
soc_module_clk_t src_clk;