diff --git a/components/esp_driver_twai/esp_twai_onchip.c b/components/esp_driver_twai/esp_twai_onchip.c index 2046d2b3c5..7b95a5420c 100644 --- a/components/esp_driver_twai/esp_twai_onchip.c +++ b/components/esp_driver_twai/esp_twai_onchip.c @@ -127,8 +127,10 @@ static esp_err_t _node_config_io(twai_onchip_ctx_t *node, const twai_onchip_node { ESP_RETURN_ON_FALSE(GPIO_IS_VALID_OUTPUT_GPIO(node_config->io_cfg.tx) || (node_config->flags.enable_listen_only && (node_config->io_cfg.tx == -1)), ESP_ERR_INVALID_ARG, TAG, "Invalid tx gpio num"); ESP_RETURN_ON_FALSE(GPIO_IS_VALID_GPIO(node_config->io_cfg.rx), ESP_ERR_INVALID_ARG, TAG, "Invalid rx gpio num"); - uint64_t reserve_mask = 0; + ESP_RETURN_ON_FALSE(!(GPIO_IS_VALID_OUTPUT_GPIO(node_config->io_cfg.quanta_clk_out) && (twai_periph_signals[node->ctrlr_id].clk_out_sig < 0)), ESP_ERR_NOT_SUPPORTED, TAG, "quanta_clk_out is not supported"); + ESP_RETURN_ON_FALSE(!(GPIO_IS_VALID_OUTPUT_GPIO(node_config->io_cfg.bus_off_indicator) && (twai_periph_signals[node->ctrlr_id].bus_off_sig < 0)), ESP_ERR_NOT_SUPPORTED, TAG, "bus_off_indicator is not supported"); + uint64_t reserve_mask = 0; // Set RX pin gpio_set_pull_mode(node_config->io_cfg.rx, GPIO_PULLUP_ONLY); // pullup to avoid noise if no connection to transceiver gpio_matrix_input(node_config->io_cfg.rx, twai_periph_signals[node->ctrlr_id].rx_sig, false); diff --git a/components/esp_driver_twai/test_apps/test_twai/main/test_twai_common.cpp b/components/esp_driver_twai/test_apps/test_twai/main/test_twai_common.cpp index a42d0e4ed6..ee94a8bcd5 100644 --- a/components/esp_driver_twai/test_apps/test_twai/main/test_twai_common.cpp +++ b/components/esp_driver_twai/test_apps/test_twai/main/test_twai_common.cpp @@ -48,6 +48,8 @@ TEST_CASE("twai install uninstall (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 1000000; node_config.tx_queue_depth = TEST_TWAI_QUEUE_DEPTH; node_config.flags.enable_self_test = true; @@ -111,6 +113,8 @@ static void test_twai_baudrate_correctness(twai_clock_source_t clk_src, uint32_t twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.clk_src = clk_src; node_config.bit_timing.bitrate = test_bitrate; node_config.tx_queue_depth = 1; @@ -183,6 +187,8 @@ TEST_CASE("twai transmit stop resume (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 200000; node_config.tx_queue_depth = TEST_TWAI_QUEUE_DEPTH; node_config.flags.enable_self_test = true; @@ -280,6 +286,8 @@ TEST_CASE("twai mask filter (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 1000000; node_config.tx_queue_depth = TEST_TWAI_QUEUE_DEPTH; node_config.flags.enable_self_test = true; @@ -363,6 +371,8 @@ TEST_CASE("twai dual 16bit mask filter (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 1000000; node_config.tx_queue_depth = TEST_TWAI_QUEUE_DEPTH; node_config.flags.enable_self_test = true; @@ -436,6 +446,8 @@ TEST_CASE("twai driver cache safe (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 50000; //slow bitrate to ensure cache disabled before tx_queue finish node_config.tx_queue_depth = TEST_FRAME_NUM; node_config.flags.enable_loopback = true; @@ -487,6 +499,8 @@ TEST_CASE("twai bus off recovery (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 50000; //slow bitrate to ensure soft error trigger node_config.tx_queue_depth = 1; node_config.flags.enable_self_test = true; @@ -558,6 +572,8 @@ TEST_CASE("twai tx_wait_all_done thread safe", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; //Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 100000; //slow bitrate to ensure transmite finish during wait_all_done node_config.tx_queue_depth = TEST_FRAME_NUM; node_config.flags.enable_self_test = true; diff --git a/components/esp_driver_twai/test_apps/test_twai/main/test_twai_fd.cpp b/components/esp_driver_twai/test_apps/test_twai/main/test_twai_fd.cpp index 59e3861e1e..47929940eb 100644 --- a/components/esp_driver_twai/test_apps/test_twai/main/test_twai_fd.cpp +++ b/components/esp_driver_twai/test_apps/test_twai/main/test_twai_fd.cpp @@ -66,6 +66,8 @@ TEST_CASE("twai range filter (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 1000000; node_config.tx_queue_depth = TEST_TWAI_QUEUE_DEPTH; node_config.flags.enable_self_test = true; @@ -139,6 +141,8 @@ TEST_CASE("twai fd transmit time (loopback)", "[twai]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_TX_GPIO; // Using same pin for test without transceiver + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 1000000; node_config.data_timing.bitrate = 4000000; node_config.data_timing.ssp_permill = 700; // ssp 70.0% diff --git a/components/esp_driver_twai/test_apps/test_twai/main/test_twai_network.cpp b/components/esp_driver_twai/test_apps/test_twai/main/test_twai_network.cpp index 043154ddb7..5b4ad1ee85 100644 --- a/components/esp_driver_twai/test_apps/test_twai/main/test_twai_network.cpp +++ b/components/esp_driver_twai/test_apps/test_twai/main/test_twai_network.cpp @@ -31,6 +31,8 @@ TEST_CASE("twai_listen_only", "[twai_net]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_RX_GPIO; + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 250000; node_config.tx_queue_depth = 3; node_config.flags.enable_listen_only = true; @@ -71,6 +73,8 @@ TEST_CASE("twai_remote_request", "[twai_net]") twai_onchip_node_config_t node_config = {}; node_config.io_cfg.tx = TEST_TX_GPIO; node_config.io_cfg.rx = TEST_RX_GPIO; + node_config.io_cfg.quanta_clk_out = GPIO_NUM_NC; + node_config.io_cfg.bus_off_indicator = GPIO_NUM_NC; node_config.bit_timing.bitrate = 250000; node_config.tx_queue_depth = 3; node_config.fail_retry_cnt = -1; // retry forever if send remote frame failed diff --git a/components/soc/esp32c5/twai_periph.c b/components/soc/esp32c5/twai_periph.c index 80e627a0b2..b8e19aeab2 100644 --- a/components/soc/esp32c5/twai_periph.c +++ b/components/soc/esp32c5/twai_periph.c @@ -7,16 +7,16 @@ #include "soc/twai_periph.h" #include "soc/gpio_sig_map.h" -const twai_signal_conn_t twai_periph_signals[SOC_TWAI_CONTROLLER_NUM] = { +const twai_signal_conn_t twai_periph_signals[2] = { [0] = { .module_name = "TWAI0", .irq_id = ETS_TWAI0_INTR_SOURCE, .timer_irq_id = ETS_TWAI0_TIMER_INTR_SOURCE, .tx_sig = TWAI0_TX_IDX, .rx_sig = TWAI0_RX_IDX, - .bus_off_sig = TWAI0_BUS_OFF_ON_IDX, - .clk_out_sig = TWAI0_CLKOUT_IDX, - .stand_by_sig = TWAI0_STANDBY_IDX, + .bus_off_sig = -1, + .clk_out_sig = -1, + .stand_by_sig = -1, }, [1] = { .module_name = "TWAI1", @@ -24,8 +24,8 @@ const twai_signal_conn_t twai_periph_signals[SOC_TWAI_CONTROLLER_NUM] = { .timer_irq_id = ETS_TWAI1_TIMER_INTR_SOURCE, .tx_sig = TWAI1_TX_IDX, .rx_sig = TWAI1_RX_IDX, - .bus_off_sig = TWAI1_BUS_OFF_ON_IDX, - .clk_out_sig = TWAI1_CLKOUT_IDX, - .stand_by_sig = TWAI1_STANDBY_IDX, + .bus_off_sig = -1, + .clk_out_sig = -1, + .stand_by_sig = -1, }, }; diff --git a/examples/peripherals/twai/twai_error_recovery/main/twai_recovery_main.c b/examples/peripherals/twai/twai_error_recovery/main/twai_recovery_main.c index 8e0bf10713..201b1472bd 100644 --- a/examples/peripherals/twai/twai_error_recovery/main/twai_recovery_main.c +++ b/examples/peripherals/twai/twai_error_recovery/main/twai_recovery_main.c @@ -49,8 +49,12 @@ void app_main(void) { twai_node_handle_t node_hdl; twai_onchip_node_config_t node_config = { - .io_cfg.tx = TX_GPIO_NUM, - .io_cfg.rx = RX_GPIO_NUM, + .io_cfg = { + .tx = TX_GPIO_NUM, + .rx = RX_GPIO_NUM, + .quanta_clk_out = GPIO_NUM_NC, + .bus_off_indicator = GPIO_NUM_NC, + }, .bit_timing.bitrate = TWAI_BITRATE, .tx_queue_depth = 1, .flags.enable_self_test = true, diff --git a/examples/peripherals/twai/twai_network/twai_listen_only/main/twai_listen_only.c b/examples/peripherals/twai/twai_network/twai_listen_only/main/twai_listen_only.c index fa53395bbb..1851281f18 100644 --- a/examples/peripherals/twai/twai_network/twai_listen_only/main/twai_listen_only.c +++ b/examples/peripherals/twai/twai_network/twai_listen_only/main/twai_listen_only.c @@ -94,8 +94,8 @@ void app_main(void) .io_cfg = { .tx = TWAI_LISTENER_TX_GPIO, .rx = TWAI_LISTENER_RX_GPIO, - .quanta_clk_out = -1, - .bus_off_indicator = -1, + .quanta_clk_out = GPIO_NUM_NC, + .bus_off_indicator = GPIO_NUM_NC, }, .bit_timing.bitrate = TWAI_BITRATE, .flags.enable_listen_only = true, diff --git a/examples/peripherals/twai/twai_network/twai_sender/main/twai_sender.c b/examples/peripherals/twai/twai_network/twai_sender/main/twai_sender.c index 2c9c037c7c..a8255752bc 100644 --- a/examples/peripherals/twai/twai_network/twai_sender/main/twai_sender.c +++ b/examples/peripherals/twai/twai_network/twai_sender/main/twai_sender.c @@ -57,8 +57,8 @@ void app_main(void) .io_cfg = { .tx = TWAI_SENDER_TX_GPIO, .rx = TWAI_SENDER_RX_GPIO, - .quanta_clk_out = -1, - .bus_off_indicator = -1, + .quanta_clk_out = GPIO_NUM_NC, + .bus_off_indicator = GPIO_NUM_NC, }, .bit_timing = { .bitrate = TWAI_BITRATE,