mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
fix(driver_twai): enable ci test for h4
This commit is contained in:
@@ -151,8 +151,8 @@ static void test_twai_baudrate_correctness(twai_clock_source_t clk_src, uint32_t
|
||||
uart_bitrate_res_t measure_result;
|
||||
TEST_ESP_OK(uart_detect_bitrate_stop(UART_NUM_1, true, &measure_result));
|
||||
uint32_t bitrate_measured = measure_result.clk_freq_hz * 4 / (measure_result.pos_period + measure_result.neg_period);
|
||||
printf("TWAI bitrate measured: %"PRIu32"\r\n", bitrate_measured);
|
||||
TEST_ASSERT_INT_WITHIN(1000, test_bitrate, bitrate_measured); // 1k tolerance
|
||||
printf("TWAI bitrate measured: %" PRIu32 "\r\n", bitrate_measured);
|
||||
TEST_ASSERT_INT_WITHIN((test_bitrate / 100), test_bitrate, bitrate_measured); // 1% tolerance
|
||||
|
||||
TEST_ESP_OK(twai_node_disable(twai_node));
|
||||
TEST_ESP_OK(twai_node_delete(twai_node));
|
||||
@@ -879,18 +879,17 @@ TEST_CASE("twai rx timestamp", "[twai]")
|
||||
node_config.flags.enable_loopback = true;
|
||||
node_config.flags.enable_self_test = true;
|
||||
|
||||
bool hw_timer = false;
|
||||
#if SOC_TWAI_SUPPORT_TIMESTAMP
|
||||
hw_timer = true;
|
||||
#endif
|
||||
for (uint32_t resolution = 1000; resolution <= 10000000; resolution *= 100) {
|
||||
#if CONFIG_IDF_TARGET_ESP32H4
|
||||
if (resolution > 1000000) {
|
||||
continue; // h4 clk_src [32M, 96M] can't accurate support resolutions > 1MHz
|
||||
}
|
||||
#endif
|
||||
node_config.timestamp_resolution_hz = resolution;
|
||||
printf("\nTesting resolution %ld\n", resolution);
|
||||
if (((resolution < 2000) && hw_timer) || ((resolution > 1000000) && !hw_timer)) {
|
||||
TEST_ESP_ERR(twai_new_node_onchip(&node_config, &node_hdl), ESP_ERR_INVALID_ARG);
|
||||
if (ESP_OK != twai_new_node_onchip(&node_config, &node_hdl)) {
|
||||
continue;
|
||||
}
|
||||
TEST_ESP_OK(twai_new_node_onchip(&node_config, &node_hdl));
|
||||
|
||||
uint8_t rx_buffer[TWAI_FRAME_MAX_LEN] = {0};
|
||||
twai_frame_t rx_frame = {};
|
||||
@@ -914,9 +913,9 @@ TEST_CASE("twai rx timestamp", "[twai]")
|
||||
TEST_ESP_OK(twai_node_transmit_wait_all_done(node_hdl, 100));
|
||||
|
||||
time_now = MS_TO_TWAI_TICK(esp_timer_get_time() / 1000, resolution);
|
||||
printf("esp tick now %llu, diff %llu\n", time_now, time_now - rx_frame.header.timestamp);
|
||||
TEST_ASSERT_INT32_WITHIN(MAX(resolution / 100, 5), time_now, rx_frame.header.timestamp);
|
||||
TEST_ASSERT_INT32_WITHIN(MAX(resolution / 100, 5), rx_frame.header.timestamp - time_last, MS_TO_TWAI_TICK(i * 100, resolution));
|
||||
printf("esp tick now %llu, diff %u\n", time_now, abs((int)(time_now - rx_frame.header.timestamp)));
|
||||
TEST_ASSERT_INT32_WITHIN(MAX(resolution / 100, 5), rx_frame.header.timestamp, time_now);
|
||||
TEST_ASSERT_INT32_WITHIN(MAX(resolution / 100, 5), MS_TO_TWAI_TICK(i * 100, resolution), rx_frame.header.timestamp - time_last);
|
||||
time_last = rx_frame.header.timestamp;
|
||||
}
|
||||
|
||||
@@ -927,7 +926,7 @@ TEST_CASE("twai rx timestamp", "[twai]")
|
||||
TEST_ESP_OK(twai_node_enable(node_hdl));
|
||||
TEST_ESP_OK(twai_node_transmit(node_hdl, &tx_frame, 100));
|
||||
TEST_ESP_OK(twai_node_transmit_wait_all_done(node_hdl, 100));
|
||||
TEST_ASSERT_INT32_WITHIN(MAX(resolution / 100, 5), rx_frame.header.timestamp - time_last, MS_TO_TWAI_TICK(1000, resolution));
|
||||
TEST_ASSERT_INT32_WITHIN(MAX(resolution / 100, 5), MS_TO_TWAI_TICK(1000, resolution), rx_frame.header.timestamp - time_last);
|
||||
|
||||
TEST_ESP_OK(twai_node_disable(node_hdl));
|
||||
TEST_ESP_OK(twai_node_delete(node_hdl));
|
||||
|
||||
@@ -196,7 +196,13 @@ TEST_CASE("twai fd transmit time (loopback)", "[twai]")
|
||||
}
|
||||
uint64_t predict_time_ms = (uint64_t)trans_num * arb_bits * 1000 / node_config.bit_timing.bitrate;
|
||||
predict_time_ms += (uint64_t)trans_num * data_bits * 1000 / node_config.data_timing.bitrate;
|
||||
predict_time_ms += (trans_num * 10) / 1000; // add about 10 us interrupt overhead per frame
|
||||
predict_time_ms += (trans_num * 20) / 1000; // add about 20 us interrupt overhead per frame
|
||||
#if CONFIG_COMPILER_OPTIMIZATION_NONE
|
||||
predict_time_ms += (trans_num * 10) / 1000; // non optimized slow code
|
||||
#endif
|
||||
#if CONFIG_PM_DFS_INIT_AUTO
|
||||
predict_time_ms += (trans_num * 35) / 1000; // slow cpu
|
||||
#endif
|
||||
|
||||
//waiting pkg receive finish
|
||||
TEST_ESP_OK(twai_node_transmit_wait_all_done(node_hdl, -1));
|
||||
@@ -213,7 +219,7 @@ TEST_CASE("twai fd transmit time (loopback)", "[twai]")
|
||||
(unsigned long long)predict_time_ms,
|
||||
memcmp(recv_pkg_ptr, send_pkg_ptr, TEST_TRANS_TIME_BUF_LEN) ? "failed" : "ok");
|
||||
TEST_ASSERT_EQUAL_HEX8_ARRAY(send_pkg_ptr, recv_pkg_ptr, TEST_TRANS_TIME_BUF_LEN);
|
||||
TEST_ASSERT_LESS_THAN((predict_time_ms / 5), abs((int)((time2 - time1) / 1000 - predict_time_ms)));
|
||||
TEST_ASSERT_LESS_THAN((predict_time_ms * 15 / 100), abs((int)((time2 - time1) / 1000 - predict_time_ms)));
|
||||
}
|
||||
printf("-----------------------------------------------------------------------------------------\n");
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
CONFIG_EXAMPLE_ENABLE_TWAI_FD=y
|
||||
Reference in New Issue
Block a user