From db7e90fef98e29d0035a54dcc93ec968259c7cab Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Sat, 7 Oct 2023 14:34:21 +0800 Subject: [PATCH] feat(parlio_rx): add parlio rx examples --- .../driver/parlio/include/driver/parlio_rx.h | 128 +++--- components/driver/parlio/parlio_common.c | 44 ++- components/driver/parlio/parlio_private.h | 18 +- components/driver/parlio/parlio_rx.c | 222 +++++++---- components/driver/parlio/parlio_tx.c | 34 +- .../test_apps/parlio/main/CMakeLists.txt | 2 +- .../test_apps/parlio/main/test_parlio_rx.c | 364 ++++++++++-------- .../test_apps/parlio/pytest_parlio_unity.py | 2 +- .../hal/esp32c6/include/hal/parlio_ll.h | 60 +-- .../hal/esp32h2/include/hal/parlio_ll.h | 60 +-- .../hal/esp32p4/include/hal/parlio_ll.h | 63 --- components/hal/include/hal/parlio_types.h | 7 +- docs/en/api-reference/peripherals/parlio.rst | 4 - examples/peripherals/.build-test-rules.yml | 8 +- .../parlio_rx/logic_analyzer/CMakeLists.txt | 8 + .../parlio/parlio_rx/logic_analyzer/README.md | 229 +++++++++++ .../components/esp_probe/CMakeLists.txt | 12 + .../components/esp_probe/esp_probe.c | 288 ++++++++++++++ .../components/esp_probe/esp_probe_private.h | 66 ++++ .../components/esp_probe/host/tcp_server.py | 76 ++++ .../components/esp_probe/host/vcd_dumper.py | 128 ++++++ .../esp_probe/hw_impl/esp_probe_impl_parlio.c | 147 +++++++ .../components/esp_probe/include/esp_probe.h | 147 +++++++ .../esp_probe/include/esp_probe_streams.h | 74 ++++ .../components/esp_probe/stream/file_stream.c | 31 ++ .../components/esp_probe/stream/flash_fatfs.c | 41 ++ .../components/esp_probe/stream/tcp_stream.c | 84 ++++ .../logic_analyzer/img/gpio_sig.jpeg | Bin 0 -> 95055 bytes .../parlio_rx/logic_analyzer/img/i2s_sig.jpeg | Bin 0 -> 199312 bytes .../logic_analyzer/img/pulseview.jpeg | Bin 0 -> 54021 bytes .../logic_analyzer/main/CMakeLists.txt | 3 + .../logic_analyzer/main/Kconfig.projbuild | 39 ++ .../logic_analyzer/main/idf_component.yml | 3 + .../main/logic_analyzer_example_main.c | 132 +++++++ .../parlio_rx/logic_analyzer/partitions.csv | 5 + .../logic_analyzer/sdkconfig.defaults | 6 + .../simple_rgb_led_matrix/CMakeLists.txt | 0 .../simple_rgb_led_matrix/README.md | 0 .../simple_rgb_led_matrix/main/CMakeLists.txt | 0 .../main/idf_component.yml | 0 .../simple_rgb_led_matrix/main/lvgl_demo_ui.c | 0 .../main/rgb_led_matrix_example_main.c | 0 .../pytest_simple_rgb_led_matrix.py | 0 .../simple_rgb_led_matrix/sdkconfig.defaults | 0 44 files changed, 2017 insertions(+), 518 deletions(-) create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/CMakeLists.txt create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/README.md create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/CMakeLists.txt create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe.c create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe_private.h create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/tcp_server.py create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/vcd_dumper.py create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe.h create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe_streams.h create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/file_stream.c create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/flash_fatfs.c create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/tcp_stream.c create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/img/gpio_sig.jpeg create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/img/i2s_sig.jpeg create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/img/pulseview.jpeg create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/main/CMakeLists.txt create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/main/Kconfig.projbuild create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/main/idf_component.yml create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/main/logic_analyzer_example_main.c create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/partitions.csv create mode 100644 examples/peripherals/parlio/parlio_rx/logic_analyzer/sdkconfig.defaults rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/CMakeLists.txt (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/README.md (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/main/CMakeLists.txt (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/main/idf_component.yml (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/main/lvgl_demo_ui.c (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/main/rgb_led_matrix_example_main.c (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/pytest_simple_rgb_led_matrix.py (100%) rename examples/peripherals/parlio/{ => parlio_tx}/simple_rgb_led_matrix/sdkconfig.defaults (100%) diff --git a/components/driver/parlio/include/driver/parlio_rx.h b/components/driver/parlio/include/driver/parlio_rx.h index 890049fc4f..a080c399d1 100644 --- a/components/driver/parlio/include/driver/parlio_rx.h +++ b/components/driver/parlio/include/driver/parlio_rx.h @@ -24,10 +24,10 @@ typedef struct { size_t max_recv_size; /*!< Maximum receive size in one transaction, in bytes. This decides the number of DMA nodes will be used for each transaction */ size_t data_width; /*!< Parallel IO data width, can set to 1/2/4/8/..., but can't be greater than PARLIO_RX_UNIT_MAX_DATA_WIDTH */ parlio_clock_source_t clk_src; /*!< Parallel IO clock source */ - uint32_t clk_freq_hz; /*!< The source clock frequency for external when the clock source is selected as PARLIO_CLK_SRC_EXTERNAL; - The expected output clock frequency when the clock source is from internal */ - gpio_num_t clk_gpio_num; /*!< The input or output clock pin. If the clock source is input from external, - the clock gpio must be set, otherwise set `-1` can disable the clock output if not needed */ + uint32_t ext_clk_freq_hz; /*!< The external source clock frequency. Only be valid when select PARLIO_CLK_SRC_EXTERNAL as clock source */ + uint32_t exp_clk_freq_hz; /*!< The expected sample/bit clock frequency, which is divided from the internal or external clock regarding the clock source */ + gpio_num_t clk_in_gpio_num; /*!< The the external clock input pin. Only be valid when select PARLIO_CLK_SRC_EXTERNAL as clock source. Set to -1 if not needed */ + gpio_num_t clk_out_gpio_num; /*!< The sample/bit clock output pin. Set to -1 if not needed */ gpio_num_t valid_gpio_num; /*!< GPIO number of the valid signal. The signal on this pin is used to indicate whether the data on the data lines are valid. Only takes effect when using level or pulse delimiter, set to `-1` if only use the soft delimiter */ gpio_num_t data_gpio_nums[PARLIO_RX_UNIT_MAX_DATA_WIDTH]; /*!< Parallel IO data GPIO numbers, set to `-1` if it's not used, @@ -35,14 +35,14 @@ typedef struct { struct { uint32_t free_clk : 1; /*!< Whether the input external clock is a free-running clock. A free-running clock will always keep running (e.g. I2S bclk), a non-free-running clock will start when there are data transporting and stop when the bus idle (e.g. SPI). - This flag only takes effect when the clock source is selected as PARLIO_CLK_SRC_EXTERNAL */ + This flag only takes effect when select PARLIO_CLK_SRC_EXTERNAL as clock source */ uint32_t clk_gate_en : 1; /*!< Enable RX clock gating, only available when the clock direction is output(not supported on ESP32-C6) the output clock will be controlled by the valid gpio, i.e. high level of valid gpio to enable the clock output, low to disable */ uint32_t io_loop_back: 1; /*!< For debug/test, the signal output from the GPIO will be fed to the input path as well */ uint32_t io_no_init: 1; /*!< Set to skip initializing the GPIO, but only attach the pralio rx signals to those GPIOs via IO Matrix. So that the signals that have attached to those GPIO won't be overwritten. Mainly used for self communication or self monitoring */ - } flags; + } flags; /*!< RX driver flags */ } parlio_rx_unit_config_t; /** @@ -50,7 +50,11 @@ typedef struct { * * @param[in] config Parallel IO RX unit configuration * @param[out] ret_unit Returned Parallel IO RX unit handle - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG Invalid arguments in the parameter list or the rx unit configuration + * - ESP_ERR_NOT_FOUND No available rx unit found + * - ESP_ERR_NO_MEM No enough memory for the rx unit resources + * - ESP_OK Success to allocate the rx unit */ esp_err_t parlio_new_rx_unit(const parlio_rx_unit_config_t *config, parlio_rx_unit_handle_t *ret_unit); @@ -58,7 +62,10 @@ esp_err_t parlio_new_rx_unit(const parlio_rx_unit_config_t *config, parlio_rx_un * @brief Delete a Parallel IO RX unit * * @param[in] rx_unit Parallel IO RX unit handle that created by `parlio_new_rx_unit` - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG rx_unit is NULL + * - ESP_ERR_INVALID_STATE The rx unit is enabled, can't delete an enabled rx unit + * - ESP_OK Success to delete the rx unit */ esp_err_t parlio_del_rx_unit(parlio_rx_unit_handle_t rx_unit); @@ -79,19 +86,24 @@ typedef struct { uint32_t timeout_ticks; /*!< The number of source clock ticks to trigger timeout interrupt. Set 0 to disable the receive timeout interrupt The timeout counter starts when the valid/enable signal is invalid/disabled. */ struct { - uint32_t active_level: 1; /*!< Which level indicates the validation of the transmitting data */ + uint32_t active_low_en: 1; /*!< Set true to set the valid signal active when the level is low, + otherwise, the valid signal becomes active when its level is high */ } flags; /*!< Extra flags */ } parlio_rx_level_delimiter_config_t; /** * @brief Create a level delimiter - * + * @note This function only allocate the software resources, the hardware configurations + * will lazy installed while the transaction that using this delimiter start processing * @note The enable signal must be aligned with the valid data. * @note There're at most `SOC_PARLIO_RX_UNIT_MAX_DATA_WIDTH - 1` IO pins left for RXD * * @param[in] config Level delimiter configuration * @param[out] ret_delimiter Returned delimiter handle - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG Invalid arguments in the parameter list or the level delimiter configuration + * - ESP_ERR_NO_MEM No enough memory for the level delimiter resources + * - ESP_OK Success to allocate the level delimiter */ esp_err_t parlio_new_rx_level_delimiter(const parlio_rx_level_delimiter_config_t *config, parlio_rx_delimiter_handle_t *ret_delimiter); @@ -124,12 +136,16 @@ typedef struct { /** * @brief Create a pulse delimiter - * + * @note This function only allocate the software resources, the hardware configurations + * will lazy installed while the transaction that using this delimiter start processing * @note There're at most `SOC_PARLIO_RX_UNIT_MAX_DATA_WIDTH - 1` IO pins left for RXD * * @param[in] config Pulse delimiter configuration * @param[out] ret_delimiter Returned delimiter handle - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG Invalid arguments in the parameter list or the pulse delimiter configuration + * - ESP_ERR_NO_MEM No enough memory for the pulse delimiter resources + * - ESP_OK Success to allocate the pulse delimiter */ esp_err_t parlio_new_rx_pulse_delimiter(const parlio_rx_pulse_delimiter_config_t *config, parlio_rx_delimiter_handle_t *ret_delimiter); @@ -144,16 +160,20 @@ typedef struct { uint32_t eof_data_len; /*!< Set the data length to trigger the End Of Frame (EOF, i.e. transaction done) interrupt, if the data length is set to `0`, that mean the EOF will only triggers when the end pulse detected, please ensure there is an end pulse for a frame and - `has_end_pulse` flag is set */ + `parlio_rx_pulse_delimiter_config_t::has_end_pulse` flag is set */ uint32_t timeout_ticks; /*!< The number of APB clock ticks to trigger timeout interrupt. Set 0 to disable the receive timeout interrupt */ } parlio_rx_soft_delimiter_config_t; /** * @brief Create a pulse delimiter - * + * @note This function only allocate the software resources, the hardware configurations + * will lazy installed while the transaction that using this delimiter start processing * @param[in] config Soft delimiter configuration * @param[out] ret_delimiter Returned delimiter handle - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG Invalid arguments in the parameter list or the soft delimiter configuration + * - ESP_ERR_NO_MEM No enough memory for the soft delimiter resources + * - ESP_OK Success to allocate the soft delimiter */ esp_err_t parlio_new_rx_soft_delimiter(const parlio_rx_soft_delimiter_config_t *config, parlio_rx_delimiter_handle_t *ret_delimiter); @@ -165,31 +185,22 @@ esp_err_t parlio_new_rx_soft_delimiter(const parlio_rx_soft_delimiter_config_t * * @param[in] rx_unit Parallel IO RX unit handle that created by `parlio_new_rx_unit` * @param[in] delimiter Delimiter handle * @param[in] start_stop Set true to start, set false to stop - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG Invalid arguments in the parameter list or not soft delimiter + * - ESP_ERR_INVALID_STATE The rx unit not enabled + * - ESP_OK Success to start or stop the soft delimiter */ esp_err_t parlio_rx_soft_delimiter_start_stop(parlio_rx_unit_handle_t rx_unit, parlio_rx_delimiter_handle_t delimiter, bool start_stop); -/** - * @brief Generic Selection of the delimiter create functions - * @note This is a helper function for creating the delimiter generically, - * input different type of configuration to create a corresponding delimiter - * - * @param[in] config The configuration of the delimiter, whose type decides the delimiter type that created, - * Can be `parlio_rx_level_delimiter_config_t`, `parlio_rx_pulse_delimiter_config_t` or `parlio_rx_soft_delimiter_config_t` - * @param[out] ret_delimiter Returned delimiter handle - */ -#define parlio_new_rx_delimiter(config, ret_delimiter) _Generic((config), \ - parlio_rx_level_delimiter_config_t* : parlio_new_rx_level_delimiter, \ - parlio_rx_pulse_delimiter_config_t* : parlio_new_rx_pulse_delimiter, \ - parlio_rx_soft_delimiter_config_t* : parlio_new_rx_soft_delimiter, \ - default: parlio_new_rx_soft_delimiter) (config, ret_delimiter) - /** * @brief Delete the delimiter * @note To delete the delimiter safely, please delete it after disable all the RX units * * @param[in] delimiter Delimiter handle - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG The input delimiter is NULL + * - ESP_ERR_INVALID_STATE The delimiter is on receiving + * - ESP_OK Success to delete the delimiter */ esp_err_t parlio_del_rx_delimiter(parlio_rx_delimiter_handle_t delimiter); @@ -200,15 +211,21 @@ esp_err_t parlio_del_rx_delimiter(parlio_rx_delimiter_handle_t delimiter); * @param[in] reset_queue Whether to reset the receiving queue. * If set to false, the legacy receive transactions in the queue are still available, * If set to true, the legacy receive transactions in the queue are dropped. - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG The input rx_unit is NULL + * - ESP_ERR_INVALID_STATE The rx unit has been enabled + * - ESP_OK Success to enable the rx unit */ esp_err_t parlio_rx_unit_enable(parlio_rx_unit_handle_t rx_unit, bool reset_queue); /** - * @brief Disable the Parallel IO TX unit + * @brief Disable the Parallel IO RX unit * * @param[in] rx_unit Parallel IO RX unit handle that created by `parlio_new_rx_unit` - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG The input rx_unit is NULL + * - ESP_ERR_INVALID_STATE The rx unit has been disabled + * - ESP_OK Success to disable the rx unit */ esp_err_t parlio_rx_unit_disable(parlio_rx_unit_handle_t rx_unit); @@ -216,22 +233,24 @@ esp_err_t parlio_rx_unit_disable(parlio_rx_unit_handle_t rx_unit); * @brief Configuration of a receive transaction */ typedef struct { - parlio_rx_delimiter_handle_t delimiter; /*!< The delimiter of this receiving transaction */ + parlio_rx_delimiter_handle_t delimiter; /*!< The delimiter of this receiving transaction */ struct { - uint32_t is_infinite: 1; /*!< Whether this is an infinite transaction that supposed to receive continuously */ - uint32_t indirect_mount: 1;/*!< This flag only take effect when `is_infinite` is enabled. - * Enable this flag, the DMA descriptor will mount to an internal DMA buffer instead, + uint32_t partial_rx_en: 1; /*!< Whether this is an infinite transaction that supposed to receive continuously and partially */ + uint32_t indirect_mount: 1; /*!< This flag only take effect when `partial_rx_en` is enabled. + * Enable this flag, an INTERNAL DMA buffer will be mounted to the DMA descriptor instead, * The data will be copy to the payload in every interrupt. So that to guarantee the payload buffer * is valid during the `on_receive_done` callback. - * Either `is_infinite` or `indirect_mount` is disabled, - * the finite payload will be mounted to the DMA descriptor directly. - * By default, the receive payload will be mounted to the DMA descriptor directly, + * Either `partial_rx_en` or `indirect_mount` is disabled, + * the user given finite payload will be mounted to the DMA descriptor directly. + * By default, the user given receive payload will be mounted to the DMA descriptor directly. */ } flags; /*!< Extra flags */ } parlio_receive_config_t; /** * @brief Receive data by Parallel IO RX unit + * @note This is a non-blocking and asynchronous function. To block or realize synchronous receive, + * please call `parlio_rx_unit_wait_all_done` after this function * @note The receive transaction will start immediately when there is not other transaction on receiving, * Otherwise it will be sent to the transaction queue to wait for the bus. * @@ -239,7 +258,12 @@ typedef struct { * @param[in] payload The payload buffer pointer * @param[in] payload_size The size of the payload buffer, in bytes. * @param[in] recv_cfg The configuration of this receive transaction - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG Invalid arguments in the parameter list or the receive configuration + * - ESP_ERR_NO_MEM No memory for the internal DMA buffer (only when parlio_receive_config_t::indirect_mount enabled) + * - ESP_ERR_INVALID_STATE Transaction queue is full, failed to queue the current transaction. + * Or the internal buffer is under using by an infinite transaction, can't allocate a new one + * - ESP_OK Success to queue the current receiving transaction */ esp_err_t parlio_rx_unit_receive(parlio_rx_unit_handle_t rx_unit, void *payload, @@ -248,10 +272,16 @@ esp_err_t parlio_rx_unit_receive(parlio_rx_unit_handle_t rx_unit, /** * @brief Wait for all pending RX transactions done + * @note This function will block until all receiving transactions done or timeout. + * When timeout occurs, either the timeout limitation too short for all transactions done, + * or the peripheral got stuck and no more interrupts trigger (e.g., external clock stopped). * * @param[in] rx_unit Parallel IO RX unit handle that created by `parlio_new_rx_unit` * @param[in] timeout_ms Timeout in milliseconds, `-1` means to wait forever (software timeout) - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG The input rx_unit is NULL + * - ESP_ERR_TIMEOUT Wait for all transactions done timeout + * - ESP_OK All transaction done */ esp_err_t parlio_rx_unit_wait_all_done(parlio_rx_unit_handle_t rx_unit, int timeout_ms); @@ -261,7 +291,6 @@ esp_err_t parlio_rx_unit_wait_all_done(parlio_rx_unit_handle_t rx_unit, int time typedef struct { parlio_rx_delimiter_handle_t delimiter; /*!< The current delimiter of this receiving event */ void *data; /*!< The data buffer address that just finished receiving */ - size_t size; /*!< The total size of the data buffer , in byte */ size_t recv_bytes; /*!< The number of received bytes in the data buffer */ } parlio_rx_event_data_t; @@ -291,9 +320,12 @@ typedef struct { * @brief Register event callbacks for Parallel IO RX unit * * @param[in] rx_unit Parallel IO RX unit handle that created by `parlio_new_rx_unit` - * @param[in] cbs Callbacks + * @param[in] cbs Callback group, set callback to NULL to deregister the corresponding callback (callback group pointer shouldn't be NULL) * @param[in] user_data User specified data that will be transported to the callbacks - * @return esp_err_t + * @return + * - ESP_ERR_INVALID_ARG The input rx_unit is NULL + * - ESP_ERR_INVALID_STATE The rx unit has been enabled, callback should be registered before enabling the unit + * - ESP_OK Success to register the callbacks */ esp_err_t parlio_rx_unit_register_event_callbacks(parlio_rx_unit_handle_t rx_unit, const parlio_rx_event_callbacks_t *cbs, void *user_data); diff --git a/components/driver/parlio/parlio_common.c b/components/driver/parlio/parlio_common.c index a5b5087723..cd5a7aeb70 100644 --- a/components/driver/parlio/parlio_common.c +++ b/components/driver/parlio/parlio_common.c @@ -99,12 +99,23 @@ esp_err_t parlio_register_unit_to_group(parlio_unit_base_handle_t unit) parlio_unit_base_handle_t *group_unit = NULL; ESP_RETURN_ON_FALSE(group, ESP_ERR_NO_MEM, TAG, "no memory for group (%d)", i); portENTER_CRITICAL(&group->spinlock); - for (int j = 0; j < SOC_PARLIO_RX_UNITS_PER_GROUP; j++) { - group_unit = (unit->dir == PARLIO_DIR_TX) ? &group->tx_units[j] : &group->rx_units[j]; - if (*group_unit == NULL) { - *group_unit = unit; - unit_id = j; - break; + if (unit->dir == PARLIO_DIR_TX) { + for (int j = 0; j < SOC_PARLIO_TX_UNITS_PER_GROUP; j++) { + group_unit = &group->tx_units[j]; + if (*group_unit == NULL) { + *group_unit = unit; + unit_id = j; + break; + } + } + } else { + for (int j = 0; j < SOC_PARLIO_RX_UNITS_PER_GROUP; j++) { + group_unit = &group->rx_units[j]; + if (*group_unit == NULL) { + *group_unit = unit; + unit_id = j; + break; + } } } portEXIT_CRITICAL(&group->spinlock); @@ -125,16 +136,15 @@ esp_err_t parlio_register_unit_to_group(parlio_unit_base_handle_t unit) void parlio_unregister_unit_from_group(parlio_unit_base_handle_t unit) { - if (unit) { - parlio_group_t *group = unit->group; - portENTER_CRITICAL(&group->spinlock); - if (unit->dir == PARLIO_DIR_TX) { - group->tx_units[unit->unit_id] = NULL; - } else { - group->rx_units[unit->unit_id] = NULL; - } - portEXIT_CRITICAL(&group->spinlock); - /* the rx unit has a reference of the group, release it now */ - parlio_release_group_handle(group); + assert(unit); + parlio_group_t *group = unit->group; + portENTER_CRITICAL(&group->spinlock); + if (unit->dir == PARLIO_DIR_TX) { + group->tx_units[unit->unit_id] = NULL; + } else { + group->rx_units[unit->unit_id] = NULL; } + portEXIT_CRITICAL(&group->spinlock); + /* the parlio unit has a reference of the group, release it now */ + parlio_release_group_handle(group); } diff --git a/components/driver/parlio/parlio_private.h b/components/driver/parlio/parlio_private.h index c16b93b37f..1a88979734 100644 --- a/components/driver/parlio/parlio_private.h +++ b/components/driver/parlio/parlio_private.h @@ -118,12 +118,22 @@ struct parlio_unit_t { parlio_group_t *group; // group handle }; -parlio_group_t *parlio_acquire_group_handle(int group_id); - -void parlio_release_group_handle(parlio_group_t *group); - +/** + * @brief Register the rx or tx unit to the parlio group + * + * @param[in] unit The TX/RX unit base handle + * @return + * - ESP_ERR_NO_MEM No memory for the unit + * - ESP_ERR_NOT_FOUND No available unit found on this group + * - ESP_OK Success to register the unit on the group + */ esp_err_t parlio_register_unit_to_group(parlio_unit_base_handle_t unit); +/** + * @brief Unregister the rx or tx unit from the parlio group + * + * @param[in] unit The TX/RX unit base handle + */ void parlio_unregister_unit_from_group(parlio_unit_base_handle_t unit); #ifdef __cplusplus diff --git a/components/driver/parlio/parlio_rx.c b/components/driver/parlio/parlio_rx.c index b698a9cde5..b51959d8b6 100644 --- a/components/driver/parlio/parlio_rx.c +++ b/components/driver/parlio/parlio_rx.c @@ -6,7 +6,6 @@ #include #include -#include #include #include #include "sdkconfig.h" @@ -27,6 +26,7 @@ #include "hal/parlio_ll.h" #include "hal/gpio_hal.h" #include "hal/dma_types.h" +#include "hal/hal_utils.h" #include "driver/gpio.h" #include "driver/parlio_rx.h" #include "parlio_private.h" @@ -57,12 +57,10 @@ typedef struct { */ typedef struct parlio_rx_unit_t { /* Unit general Resources */ - int unit_id; /*!< unit id */ - parlio_dir_t dir; /*!< unit direction */ - parlio_group_t *group; /*!< group handle */ + struct parlio_unit_t base; /*!< base unit */ parlio_clock_source_t clk_src; /*!< clock source of the unit */ parlio_rx_unit_config_t cfg; /*!< basic configuration of the rx unit */ - bool is_enabled; /*!< State flag that indicates whether the unit is enabled */ + volatile bool is_enabled; /*!< State flag that indicates whether the unit is enabled */ /* Mutex Lock */ SemaphoreHandle_t mutex; /*!< Mutex lock for concurrence safety, * which should be acquired and released in a same function */ @@ -118,7 +116,7 @@ typedef struct parlio_rx_delimiter_t { uint32_t eof_data_len; /*!< The length of the data to trigger the eof interrupt */ uint32_t timeout_ticks; /*!< The ticks of source clock that can trigger hardware timeout */ struct { - uint32_t active_level: 1; /*!< Which level indicates the validation of the transmitting data */ + uint32_t active_low_en: 1; /*!< Whether the transmitting data validate when the valid signal at low level */ uint32_t start_bit_included: 1; /*!< Whether data bit is included in the start pulse */ uint32_t end_bit_included: 1; /*!< Whether data bit is included in the end pulse, only valid when `has_end_pulse` is true */ uint32_t has_end_pulse: 1; /*!< Whether there's an end pulse to terminate the transaction, @@ -127,13 +125,16 @@ typedef struct parlio_rx_delimiter_t { } flags; } parlio_rx_delimiter_t; +static portMUX_TYPE s_rx_spinlock = (portMUX_TYPE)portMUX_INITIALIZER_UNLOCKED; static IRAM_ATTR size_t s_parlio_mount_transaction_buffer(parlio_rx_unit_handle_t rx_unit, parlio_rx_transaction_t *trans) { dma_descriptor_t *p_desc = rx_unit->dma_descs; /* Update the current transaction to the next one, and declare the delimiter is under using of the rx unit */ memcpy(&rx_unit->curr_trans, trans, sizeof(parlio_rx_transaction_t)); + portENTER_CRITICAL_SAFE(&s_rx_spinlock); trans->delimiter->under_using = true; + portEXIT_CRITICAL_SAFE(&s_rx_spinlock); uint32_t desc_num = trans->size / DMA_DESCRIPTOR_BUFFER_MAX_SIZE_4B_ALIGNED; uint32_t remain_num = trans->size % DMA_DESCRIPTOR_BUFFER_MAX_SIZE_4B_ALIGNED; @@ -177,7 +178,7 @@ static IRAM_ATTR size_t s_parlio_mount_transaction_buffer(parlio_rx_unit_handle_ static IRAM_ATTR void s_parlio_set_delimiter_config(parlio_rx_unit_handle_t rx_unit, parlio_rx_delimiter_handle_t deli) { - parlio_hal_context_t *hal = &(rx_unit->group->hal); + parlio_hal_context_t *hal = &(rx_unit->base.group->hal); /* Set the clock sampling edge and the bit order */ parlio_ll_rx_set_sample_clock_edge(hal->regs, deli->sample_edge); @@ -187,7 +188,7 @@ static IRAM_ATTR void s_parlio_set_delimiter_config(parlio_rx_unit_handle_t rx_u switch (deli->mode) { case PARLIO_RX_LEVEL_MODE: /* Select the level receive mode */ - parlio_ll_rx_set_level_recv_mode(hal->regs, deli->flags.active_level); + parlio_ll_rx_set_level_recv_mode(hal->regs, deli->flags.active_low_en); parlio_ll_rx_treat_data_line_as_en(hal->regs, deli->valid_sig_line_id); break; case PARLIO_RX_PULSE_MODE: @@ -235,8 +236,8 @@ static IRAM_ATTR void s_parlio_set_delimiter_config(parlio_rx_unit_handle_t rx_u static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, const parlio_rx_unit_config_t *config) { - int group_id = rx_unit->group->group_id; - int unit_id = rx_unit->unit_id; + int group_id = rx_unit->base.group->group_id; + int unit_id = rx_unit->base.unit_id; /* Default GPIO configuration */ gpio_config_t gpio_conf = { .intr_type = GPIO_INTR_DISABLE, @@ -246,24 +247,24 @@ static esp_err_t s_parlio_rx_unit_set_gpio(parlio_rx_unit_handle_t rx_unit, cons /* When the source clock comes from external, enable the gpio input direction and connect to the clock input signal */ if (config->clk_src == PARLIO_CLK_SRC_EXTERNAL) { - ESP_RETURN_ON_FALSE(config->clk_gpio_num >= 0, ESP_ERR_INVALID_ARG, TAG, "clk_gpio_num must be set while the clock input from external"); + ESP_RETURN_ON_FALSE(config->clk_in_gpio_num >= 0, ESP_ERR_INVALID_ARG, TAG, "clk_in_gpio_num must be set while the clock input from external"); /* Connect the clock in signal to the GPIO matrix if it is set */ if (!config->flags.io_no_init) { gpio_conf.mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_INPUT; - gpio_conf.pin_bit_mask = BIT64(config->clk_gpio_num); + gpio_conf.pin_bit_mask = BIT64(config->clk_in_gpio_num); ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config clk in GPIO failed"); } - esp_rom_gpio_connect_in_signal(config->clk_gpio_num, + esp_rom_gpio_connect_in_signal(config->clk_in_gpio_num, parlio_periph_signals.groups[group_id].rx_units[unit_id].clk_in_sig, false); } /* When the source clock comes from internal and supported to output the internal clock, * enable the gpio output direction and connect to the clock output signal */ - else if (config->clk_gpio_num >= 0) { + if (config->clk_out_gpio_num >= 0) { #if SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT gpio_conf.mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_OUTPUT; - gpio_conf.pin_bit_mask = BIT64(config->clk_gpio_num); + gpio_conf.pin_bit_mask = BIT64(config->clk_out_gpio_num); ESP_RETURN_ON_ERROR(gpio_config(&gpio_conf), TAG, "config clk out GPIO failed"); - esp_rom_gpio_connect_out_signal(config->clk_gpio_num, + esp_rom_gpio_connect_out_signal(config->clk_out_gpio_num, parlio_periph_signals.groups[group_id].rx_units[unit_id].clk_out_sig, false, false); #else ESP_RETURN_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, TAG, "this target not support to output the clock"); @@ -318,7 +319,6 @@ static IRAM_ATTR bool s_parlio_rx_default_eof_callback(gdma_channel_handle_t dma /* If received a normal EOF, it's a receive done event on parlio RX */ if (rx_unit->cbs.on_receive_done) { evt_data.data = rx_unit->usr_recv_buf; - evt_data.size = rx_unit->curr_trans.size; evt_data.recv_bytes = rx_unit->curr_trans.recv_bytes; need_yield |= rx_unit->cbs.on_receive_done(rx_unit, &evt_data, rx_unit->user_data); } @@ -328,27 +328,29 @@ static IRAM_ATTR bool s_parlio_rx_default_eof_callback(gdma_channel_handle_t dma /* For infinite transactions, reset the receiving bytes when the transaction is done */ rx_unit->curr_trans.recv_bytes = 0; } else { - parlio_rx_transaction_t next_trans; + parlio_rx_transaction_t next_trans = {}; /* The current transaction finished, try to get the next transaction from the transaction queue */ if (xQueueReceiveFromISR(rx_unit->trans_que, &next_trans, &high_task_woken) == pdTRUE) { if (rx_unit->cfg.flags.free_clk) { - parlio_ll_rx_enable_clock(rx_unit->group->hal.regs, false); + parlio_ll_rx_enable_clock(rx_unit->base.group->hal.regs, false); } /* If the delimiter of the next transaction is not same as the current one, need to re-config the hardware */ if (next_trans.delimiter != rx_unit->curr_trans.delimiter) { s_parlio_set_delimiter_config(rx_unit, next_trans.delimiter); } /* Mount the new transaction buffer and start the new transaction */ - s_parlio_mount_transaction_buffer(rx_unit, &rx_unit->curr_trans); + s_parlio_mount_transaction_buffer(rx_unit, &next_trans); gdma_start(rx_unit->dma_chan, (intptr_t)rx_unit->dma_descs); if (rx_unit->cfg.flags.free_clk) { - parlio_ll_rx_start(rx_unit->group->hal.regs, true); - parlio_ll_rx_enable_clock(rx_unit->group->hal.regs, true); + parlio_ll_rx_start(rx_unit->base.group->hal.regs, true); + parlio_ll_rx_enable_clock(rx_unit->base.group->hal.regs, true); } - } else { + } else if (rx_unit->curr_trans.delimiter) { // Add condition in case the curr_trans has been cleared in the last timeout isr /* No more transaction pending to receive, clear the current transaction */ + portENTER_CRITICAL_ISR(&s_rx_spinlock); rx_unit->curr_trans.delimiter->under_using = false; memset(&rx_unit->curr_trans, 0, sizeof(parlio_rx_transaction_t)); + portEXIT_CRITICAL_ISR(&s_rx_spinlock); need_yield |= high_task_woken == pdTRUE; xSemaphoreGiveFromISR(rx_unit->trans_sem, &high_task_woken); } @@ -362,13 +364,16 @@ static IRAM_ATTR bool s_parlio_rx_default_desc_done_callback(gdma_channel_handle { parlio_rx_unit_handle_t rx_unit = (parlio_rx_unit_handle_t )user_data; bool need_yield = false; + /* No need to process the data if error EOF (i.e. timeout) happened */ + if (event_data->flags.abnormal_eof) { + return false; + } + /* Get the finished descriptor from the current descriptor */ dma_descriptor_t *finished_desc = rx_unit->curr_desc; parlio_rx_event_data_t evt_data = { .delimiter = rx_unit->curr_trans.delimiter, - // TODO: The current descriptor is not able to access when error EOF occur .data = finished_desc->buffer, - .size = finished_desc->dw0.size, .recv_bytes = finished_desc->dw0.length, }; if (rx_unit->cbs.on_partial_receive) { @@ -378,7 +383,9 @@ static IRAM_ATTR bool s_parlio_rx_default_desc_done_callback(gdma_channel_handle if (rx_unit->curr_trans.flags.infinite && rx_unit->curr_trans.flags.indirect_mount) { memcpy(rx_unit->usr_recv_buf + rx_unit->curr_trans.recv_bytes, evt_data.data, evt_data.recv_bytes); } else { + portENTER_CRITICAL_ISR(&s_rx_spinlock); rx_unit->curr_trans.delimiter->under_using = false; + portEXIT_CRITICAL_ISR(&s_rx_spinlock); } /* Update received bytes */ if (rx_unit->curr_trans.recv_bytes >= rx_unit->curr_trans.size) { @@ -395,7 +402,7 @@ static esp_err_t s_parlio_rx_create_dma_descriptors(parlio_rx_unit_handle_t rx_u { ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid param"); - uint32_t desc_num =max_recv_size / DMA_DESCRIPTOR_BUFFER_MAX_SIZE_4B_ALIGNED + 1; + uint32_t desc_num = max_recv_size / DMA_DESCRIPTOR_BUFFER_MAX_SIZE_4B_ALIGNED + 1; /* set at least 2 descriptors */ if (desc_num < 2) { desc_num = 4; @@ -439,25 +446,43 @@ static esp_err_t s_parlio_rx_unit_init_dma(parlio_rx_unit_handle_t rx_unit) static esp_err_t s_parlio_select_periph_clock(parlio_rx_unit_handle_t rx_unit, const parlio_rx_unit_config_t *config) { - parlio_hal_context_t *hal = &rx_unit->group->hal; + parlio_hal_context_t *hal = &rx_unit->base.group->hal; parlio_clock_source_t clk_src = config->clk_src; - uint32_t periph_src_clk_hz = 0; - uint32_t div = 1; + uint32_t src_freq_hz = 0; + uint32_t exp_freq_hz = 0; + hal_utils_clk_div_t clk_div = { + .integer = 1, + }; /* if the source clock is input from the GPIO, then we're in the slave mode */ if (clk_src != PARLIO_CLK_SRC_EXTERNAL) { - ESP_RETURN_ON_FALSE(config->clk_freq_hz, ESP_ERR_INVALID_ARG, TAG, "clock frequency not set"); + ESP_RETURN_ON_FALSE(config->exp_clk_freq_hz, ESP_ERR_INVALID_ARG, TAG, "output clock frequency not set"); + exp_freq_hz = config->exp_clk_freq_hz; /* get the internal clock source frequency */ - esp_clk_tree_src_get_freq_hz(clk_src, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &periph_src_clk_hz); - /* set clock division, round up */ - div = (periph_src_clk_hz + config->clk_freq_hz - 1) / config->clk_freq_hz; + esp_clk_tree_src_get_freq_hz(clk_src, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &src_freq_hz); } else { - periph_src_clk_hz = config->clk_freq_hz; + ESP_RETURN_ON_FALSE(config->ext_clk_freq_hz, ESP_ERR_INVALID_ARG, TAG, "input clock frequency not set"); + exp_freq_hz = config->exp_clk_freq_hz > 0 ? config->exp_clk_freq_hz : config->ext_clk_freq_hz; + src_freq_hz = config->ext_clk_freq_hz; } + /* set clock division, round up */ + hal_utils_clk_info_t clk_info = { + .src_freq_hz = src_freq_hz, + .exp_freq_hz = exp_freq_hz, + .max_integ = PARLIO_LL_RX_MAX_CLK_INT_DIV, + .min_integ = 1, + .round_opt = HAL_DIV_ROUND, + }; +#if PARLIO_LL_RX_MAX_CLK_FRACT_DIV + clk_info.max_fract = PARLIO_LL_RX_MAX_CLK_FRACT_DIV; + rx_unit->cfg.exp_clk_freq_hz = hal_utils_calc_clk_div_frac_accurate(&clk_info, &clk_div); +#else + rx_unit->cfg.exp_clk_freq_hz = hal_utils_calc_clk_div_integer(&clk_info, &clk_div.integer); +#endif #if CONFIG_PM_ENABLE if (clk_src != PARLIO_CLK_SRC_EXTERNAL) { /* XTAL and PLL clock source will be turned off in light sleep, so we need to create a NO_LIGHT_SLEEP lock */ - sprintf(rx_unit->pm_lock_name, "parlio_rx_%d_%d", rx_unit->group->group_id, rx_unit->unit_id); // e.g. parlio_rx_0_0 + sprintf(rx_unit->pm_lock_name, "parlio_rx_%d_%d", rx_unit->base.group->group_id, rx_unit->base.unit_id); // e.g. parlio_rx_0_0 esp_err_t ret = esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, rx_unit->pm_lock_name, &rx_unit->pm_lock); ESP_RETURN_ON_ERROR(ret, TAG, "create NO_LIGHT_SLEEP lock failed"); } @@ -465,14 +490,13 @@ static esp_err_t s_parlio_select_periph_clock(parlio_rx_unit_handle_t rx_unit, c /* Set clock configuration */ parlio_ll_rx_set_clock_source(hal->regs, clk_src); - parlio_ll_rx_set_clock_div(hal->regs, div); + parlio_ll_rx_set_clock_div(hal->regs, &clk_div); rx_unit->clk_src = clk_src; - rx_unit->cfg.clk_freq_hz = periph_src_clk_hz / div; /* warning if precision lost due to division */ if ((clk_src != PARLIO_CLK_SRC_EXTERNAL) && - (config->clk_freq_hz != rx_unit->cfg.clk_freq_hz )) { - ESP_LOGW(TAG, "precision loss, real output frequency: %"PRIu32, rx_unit->cfg.clk_freq_hz ); + (config->exp_clk_freq_hz != rx_unit->cfg.exp_clk_freq_hz )) { + ESP_LOGW(TAG, "precision loss, real output frequency: %"PRIu32, rx_unit->cfg.exp_clk_freq_hz ); } return ESP_OK; @@ -510,7 +534,7 @@ static esp_err_t s_parlio_destroy_rx_unit(parlio_rx_unit_handle_t rx_unit) free(rx_unit->dma_buf); } /* Unregister the RX unit from the PARLIO group */ - if (rx_unit->group) { + if (rx_unit->base.group) { parlio_unregister_unit_from_group((parlio_unit_base_handle_t)rx_unit); } /* Free the RX unit */ @@ -527,6 +551,8 @@ esp_err_t parlio_new_rx_unit(const parlio_rx_unit_config_t *config, parlio_rx_un /* Check the data width to be the the power of 2 */ ESP_RETURN_ON_FALSE(__builtin_popcount(config->data_width) == 1, ESP_ERR_INVALID_ARG, TAG, "data line number should be the power of 2 without counting valid signal"); + ESP_RETURN_ON_FALSE(config->data_width <= (int)PARLIO_RX_UNIT_MAX_DATA_WIDTH, ESP_ERR_INVALID_ARG, TAG, + "data line number should be within %d", (int)PARLIO_RX_UNIT_MAX_DATA_WIDTH); esp_err_t ret = ESP_OK; parlio_rx_unit_handle_t unit = NULL; @@ -534,11 +560,12 @@ esp_err_t parlio_new_rx_unit(const parlio_rx_unit_config_t *config, parlio_rx_un /* Allocate unit memory */ unit = heap_caps_calloc(1, sizeof(parlio_rx_unit_t), PARLIO_MEM_ALLOC_CAPS); ESP_GOTO_ON_FALSE(unit, ESP_ERR_NO_MEM, err, TAG, "no memory for rx unit"); - unit->dir = PARLIO_DIR_RX; + unit->base.dir = PARLIO_DIR_RX; unit->is_enabled = false; /* Initialize mutex lock */ unit->mutex = xSemaphoreCreateMutexWithCaps(PARLIO_MEM_ALLOC_CAPS); + ESP_GOTO_ON_FALSE(unit->mutex, ESP_ERR_NO_MEM, err, TAG, "no memory for mutex semaphore"); /* Create transaction binary semaphore */ unit->trans_sem = xSemaphoreCreateBinaryWithCaps(PARLIO_MEM_ALLOC_CAPS); ESP_GOTO_ON_FALSE(unit->trans_sem, ESP_ERR_NO_MEM, err, TAG, "no memory for transaction semaphore"); @@ -559,7 +586,7 @@ esp_err_t parlio_new_rx_unit(const parlio_rx_unit_config_t *config, parlio_rx_un unit->cfg.flags.free_clk = 1; } - parlio_group_t *group = unit->group; + parlio_group_t *group = unit->base.group; parlio_hal_context_t *hal = &group->hal; /* Initialize GPIO */ ESP_GOTO_ON_ERROR(s_parlio_rx_unit_set_gpio(unit, config), err, TAG, "failed to set GPIO"); @@ -576,13 +603,17 @@ esp_err_t parlio_new_rx_unit(const parlio_rx_unit_config_t *config, parlio_rx_un parlio_ll_rx_set_bus_width(hal->regs, config->data_width); #if SOC_PARLIO_RX_CLK_SUPPORT_GATING parlio_ll_rx_enable_clock_gating(hal->regs, config->flags.clk_gate_en); +#else + if (config->flags.clk_gate_en) { + ESP_LOGW(TAG, "The current target does not support clock gating"); + } #endif // SOC_PARLIO_RX_CLK_SUPPORT_GATING /* return RX unit handle */ *ret_unit = unit; ESP_LOGD(TAG, "new rx unit(%d,%d) at %p, trans_queue_depth=%zu", - group->group_id, unit->unit_id, (void *)unit, unit->cfg.trans_queue_depth); + group->group_id, unit->base.unit_id, (void *)unit, unit->cfg.trans_queue_depth); return ESP_OK; err: @@ -595,21 +626,24 @@ err: esp_err_t parlio_del_rx_unit(parlio_rx_unit_handle_t rx_unit) { ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + // Not necessary to take the semaphore while checking the flag because it's going to be deleted ESP_RETURN_ON_FALSE(!rx_unit->is_enabled, ESP_ERR_INVALID_STATE, TAG, "the unit has not disabled"); - ESP_LOGD(TAG, "del rx unit (%d, %d)", rx_unit->group->group_id, rx_unit->unit_id); + ESP_LOGD(TAG, "del rx unit (%d, %d)", rx_unit->base.group->group_id, rx_unit->base.unit_id); return s_parlio_destroy_rx_unit(rx_unit); } esp_err_t parlio_rx_unit_enable(parlio_rx_unit_handle_t rx_unit, bool reset_queue) { ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - ESP_RETURN_ON_FALSE(!rx_unit->is_enabled, ESP_ERR_INVALID_STATE, TAG, "the unit has enabled or running"); - rx_unit->is_enabled = true; - parlio_hal_context_t *hal = &rx_unit->group->hal; + esp_err_t ret = ESP_OK; + parlio_hal_context_t *hal = &rx_unit->base.group->hal; xSemaphoreTake(rx_unit->mutex, portMAX_DELAY); + ESP_GOTO_ON_FALSE(!rx_unit->is_enabled, ESP_ERR_INVALID_STATE, err, TAG, "the unit has enabled or running"); + rx_unit->is_enabled = true; + /* Acquire the power management lock incase */ if (rx_unit->pm_lock) { esp_pm_lock_acquire(rx_unit->pm_lock); @@ -623,43 +657,50 @@ esp_err_t parlio_rx_unit_enable(parlio_rx_unit_handle_t rx_unit, bool reset_queu } /* Check if we need to start a pending transaction */ - parlio_rx_transaction_t trans; + parlio_rx_transaction_t trans = {}; if (reset_queue) { xQueueReset(rx_unit->trans_que); xSemaphoreGive(rx_unit->trans_sem); } else if (xQueueReceive(rx_unit->trans_que, &trans, 0) == pdTRUE) { - xSemaphoreTake(rx_unit->trans_sem, 0); + // The semaphore always supposed to be taken successfully + assert(xSemaphoreTake(rx_unit->trans_sem, 0) == pdTRUE); if (rx_unit->cfg.flags.free_clk) { parlio_ll_rx_enable_clock(hal->regs, false); } s_parlio_set_delimiter_config(rx_unit, trans.delimiter); - s_parlio_mount_transaction_buffer(rx_unit, &rx_unit->curr_trans); + s_parlio_mount_transaction_buffer(rx_unit, &trans); gdma_start(rx_unit->dma_chan, (intptr_t)rx_unit->curr_desc); if (rx_unit->cfg.flags.free_clk) { parlio_ll_rx_start(hal->regs, true); parlio_ll_rx_enable_clock(hal->regs, true); } } +err: xSemaphoreGive(rx_unit->mutex); - return ESP_OK; + return ret; } esp_err_t parlio_rx_unit_disable(parlio_rx_unit_handle_t rx_unit) { ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - ESP_RETURN_ON_FALSE(rx_unit->is_enabled, ESP_ERR_INVALID_STATE, TAG, "the unit has disabled"); - rx_unit->is_enabled = false; - /* stop the RX engine */ - parlio_hal_context_t *hal = &rx_unit->group->hal; + esp_err_t ret = ESP_OK; + parlio_hal_context_t *hal = &rx_unit->base.group->hal; + xSemaphoreTake(rx_unit->mutex, portMAX_DELAY); + ESP_GOTO_ON_FALSE(rx_unit->is_enabled, ESP_ERR_INVALID_STATE, err, TAG, "the unit has disabled"); + rx_unit->is_enabled = false; + /* stop the RX engine */ gdma_stop(rx_unit->dma_chan); parlio_ll_rx_enable_clock(hal->regs, false); parlio_ll_rx_start(hal->regs, false); if (rx_unit->curr_trans.delimiter) { + portENTER_CRITICAL(&s_rx_spinlock); rx_unit->curr_trans.delimiter->under_using = false; + portEXIT_CRITICAL(&s_rx_spinlock); } + xSemaphoreGive(rx_unit->trans_sem); /* For continuous receiving, free the temporary buffer and stop the DMA */ if (rx_unit->dma_buf) { @@ -672,9 +713,10 @@ esp_err_t parlio_rx_unit_disable(parlio_rx_unit_handle_t rx_unit) } /* Erase the current transaction */ memset(&rx_unit->curr_trans, 0, sizeof(parlio_rx_transaction_t)); +err: xSemaphoreGive(rx_unit->mutex); - return ESP_OK; + return ret; } esp_err_t parlio_new_rx_level_delimiter(const parlio_rx_level_delimiter_config_t *config, @@ -698,7 +740,7 @@ esp_err_t parlio_new_rx_level_delimiter(const parlio_rx_level_delimiter_config_t delimiter->bit_pack_order = config->bit_pack_order; delimiter->eof_data_len = config->eof_data_len; delimiter->timeout_ticks = config->timeout_ticks; - delimiter->flags.active_level = config->flags.active_level; + delimiter->flags.active_low_en = config->flags.active_low_en; *ret_delimiter = delimiter; @@ -773,13 +815,16 @@ esp_err_t parlio_rx_soft_delimiter_start_stop(parlio_rx_unit_handle_t rx_unit, p { ESP_RETURN_ON_FALSE(rx_unit && delimiter, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); ESP_RETURN_ON_FALSE(delimiter->mode == PARLIO_RX_SOFT_MODE, ESP_ERR_INVALID_ARG, TAG, "The delimiter is not soft delimiter"); - ESP_RETURN_ON_FALSE(rx_unit->is_enabled, ESP_ERR_INVALID_STATE, TAG, "the unit has not enabled"); + + esp_err_t ret = ESP_OK; xSemaphoreTake(rx_unit->mutex, portMAX_DELAY); - parlio_hal_context_t *hal = &(rx_unit->group->hal); + ESP_GOTO_ON_FALSE(rx_unit->is_enabled, ESP_ERR_INVALID_STATE, err, TAG, "the unit has not enabled"); + parlio_hal_context_t *hal = &(rx_unit->base.group->hal); parlio_ll_rx_start_soft_recv(hal->regs, start_stop); +err: xSemaphoreGive(rx_unit->mutex); - return ESP_OK; + return ret; } esp_err_t parlio_del_rx_delimiter(parlio_rx_delimiter_handle_t delimiter) @@ -792,20 +837,25 @@ esp_err_t parlio_del_rx_delimiter(parlio_rx_delimiter_handle_t delimiter) static esp_err_t s_parlio_rx_unit_do_transaction(parlio_rx_unit_handle_t rx_unit, parlio_rx_transaction_t *trans) { - if (!rx_unit->curr_trans.delimiter) { - xSemaphoreTake(rx_unit->trans_sem, 0); + bool is_stopped = false; + /* Get whether DMA stopped atomically */ + portENTER_CRITICAL_ISR(&s_rx_spinlock); + is_stopped = rx_unit->curr_trans.delimiter == NULL; + portEXIT_CRITICAL_ISR(&s_rx_spinlock); + if (is_stopped) { if (rx_unit->cfg.flags.free_clk) { - parlio_ll_rx_enable_clock(rx_unit->group->hal.regs, false); + parlio_ll_rx_enable_clock(rx_unit->base.group->hal.regs, false); } if (trans->delimiter != rx_unit->curr_trans.delimiter) { s_parlio_set_delimiter_config(rx_unit, trans->delimiter); } s_parlio_mount_transaction_buffer(rx_unit, trans); + // Take semaphore without block time here, only indicate there are transactions on receiving + xSemaphoreTake(rx_unit->trans_sem, 0); gdma_start(rx_unit->dma_chan, (intptr_t)rx_unit->curr_desc); if (rx_unit->cfg.flags.free_clk) { - printf("enable start\n"); - parlio_ll_rx_start(rx_unit->group->hal.regs, true); - parlio_ll_rx_enable_clock(rx_unit->group->hal.regs, true); + parlio_ll_rx_start(rx_unit->base.group->hal.regs, true); + parlio_ll_rx_enable_clock(rx_unit->base.group->hal.regs, true); } } else { // Otherwise send to the queue /* Send the transaction to the queue */ @@ -837,14 +887,15 @@ esp_err_t parlio_rx_unit_receive(parlio_rx_unit_handle_t rx_unit, ESP_RETURN_ON_FALSE(recv_cfg->delimiter->valid_sig_line_id >= rx_unit->cfg.data_width, ESP_ERR_INVALID_ARG, TAG, "the valid_sig_line_id of this delimiter is conflict with rx unit data width"); /* Assign the signal here to ensure iram safe */ - recv_cfg->delimiter->valid_sig = parlio_periph_signals.groups[rx_unit->group->group_id]. - rx_units[rx_unit->unit_id]. + recv_cfg->delimiter->valid_sig = parlio_periph_signals.groups[rx_unit->base.group->group_id]. + rx_units[rx_unit->base.unit_id]. data_sigs[recv_cfg->delimiter->valid_sig_line_id]; } void *p_buffer = payload; /* Create the internal DMA buffer for the infinite transaction if indirect_mount is set */ - if (recv_cfg->flags.is_infinite && recv_cfg->flags.indirect_mount) { + if (recv_cfg->flags.partial_rx_en && recv_cfg->flags.indirect_mount) { + ESP_RETURN_ON_FALSE(!rx_unit->dma_buf, ESP_ERR_INVALID_STATE, TAG, "infinite transaction is using the internal DMA buffer"); /* Allocate the internal DMA buffer to store the data temporary */ rx_unit->dma_buf = heap_caps_calloc(1, payload_size, MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA); ESP_RETURN_ON_FALSE(rx_unit->dma_buf, ESP_ERR_NO_MEM, TAG, "No memory for the internal DMA buffer"); @@ -858,7 +909,7 @@ esp_err_t parlio_rx_unit_receive(parlio_rx_unit_handle_t rx_unit, .payload = p_buffer, .size = payload_size, .recv_bytes = 0, - .flags.infinite = recv_cfg->flags.is_infinite, + .flags.infinite = recv_cfg->flags.partial_rx_en, .flags.indirect_mount = recv_cfg->flags.indirect_mount, }; rx_unit->usr_recv_buf = payload; @@ -873,29 +924,38 @@ esp_err_t parlio_rx_unit_wait_all_done(parlio_rx_unit_handle_t rx_unit, int time { ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - xSemaphoreTake(rx_unit->mutex, portMAX_DELAY); TickType_t ticks = timeout_ms < 0 ? portMAX_DELAY : pdMS_TO_TICKS(timeout_ms); - /* Waiting for the all transaction done signal */ - if (xSemaphoreTake(rx_unit->trans_sem, ticks) == pdFALSE) { - xSemaphoreGive(rx_unit->mutex); - return ESP_ERR_TIMEOUT; - } + /* Waiting for the all transactions done */ + ESP_RETURN_ON_FALSE(xSemaphoreTake(rx_unit->trans_sem, ticks) == pdTRUE, ESP_ERR_TIMEOUT, TAG, "wait all transactions done timeout"); /* Put back the signal */ xSemaphoreGive(rx_unit->trans_sem); - xSemaphoreGive(rx_unit->mutex); return ESP_OK; } esp_err_t parlio_rx_unit_register_event_callbacks(parlio_rx_unit_handle_t rx_unit, const parlio_rx_event_callbacks_t *cbs, void *user_data) { - ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - ESP_RETURN_ON_FALSE(!rx_unit->is_enabled, ESP_ERR_INVALID_STATE, TAG, "the unit has enabled or running"); + esp_err_t ret = ESP_OK; + ESP_RETURN_ON_FALSE(rx_unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + ESP_RETURN_ON_FALSE(cbs, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); + +#if CONFIG_PARLIO_ISR_IRAM_SAFE + ESP_RETURN_ON_FALSE(!cbs->on_partial_receive || esp_ptr_in_iram(cbs->on_partial_receive), ESP_ERR_INVALID_ARG, + TAG, "on_partial_receive not in IRAM"); + ESP_RETURN_ON_FALSE(!cbs->on_receive_done || esp_ptr_in_iram(cbs->on_receive_done), ESP_ERR_INVALID_ARG, + TAG, "on_receive_done not in IRAM"); + ESP_RETURN_ON_FALSE(!cbs->on_timeout || esp_ptr_in_iram(cbs->on_timeout), ESP_ERR_INVALID_ARG, + TAG, "on_timeout not in IRAM"); + ESP_RETURN_ON_FALSE(!user_data || esp_ptr_internal(user_data), ESP_ERR_INVALID_ARG, + TAG, "user_data not in internal RAM"); +#endif xSemaphoreTake(rx_unit->mutex, portMAX_DELAY); + ESP_GOTO_ON_FALSE(!rx_unit->is_enabled, ESP_ERR_INVALID_STATE, err, TAG, "the unit has enabled or running"); + memcpy(&rx_unit->cbs, cbs, sizeof(parlio_rx_event_callbacks_t)); rx_unit->user_data = user_data; +err: xSemaphoreGive(rx_unit->mutex); - - return ESP_OK; + return ret; } diff --git a/components/driver/parlio/parlio_tx.c b/components/driver/parlio/parlio_tx.c index 5a4f806d66..f96b9f507a 100644 --- a/components/driver/parlio/parlio_tx.c +++ b/components/driver/parlio/parlio_tx.c @@ -45,9 +45,7 @@ typedef struct { } parlio_tx_trans_desc_t; typedef struct parlio_tx_unit_t { - int unit_id; // unit id - parlio_dir_t dir; - parlio_group_t *group; // group handle + struct parlio_unit_t base; // base unit size_t data_width; // data width intr_handle_t intr; // allocated interrupt handle esp_pm_lock_handle_t pm_lock; // power management lock @@ -120,9 +118,9 @@ static esp_err_t parlio_destroy_tx_unit(parlio_tx_unit_t *tx_unit) vQueueDeleteWithCaps(tx_unit->trans_queues[i]); } } - if (tx_unit->group) { + if (tx_unit->base.group) { // de-register from group - parlio_unregister_unit_from_group((parlio_unit_base_handle_t)tx_unit); + parlio_unregister_unit_from_group((parlio_unit_base_handle_t)&(tx_unit->base)); } free(tx_unit->dma_nodes); free(tx_unit); @@ -131,8 +129,8 @@ static esp_err_t parlio_destroy_tx_unit(parlio_tx_unit_t *tx_unit) static esp_err_t parlio_tx_unit_configure_gpio(parlio_tx_unit_t *tx_unit, const parlio_tx_unit_config_t *config) { - int group_id = tx_unit->group->group_id; - int unit_id = tx_unit->unit_id; + int group_id = tx_unit->base.group->group_id; + int unit_id = tx_unit->base.unit_id; gpio_config_t gpio_conf = { .intr_type = GPIO_INTR_DISABLE, .mode = config->flags.io_loop_back ? GPIO_MODE_INPUT_OUTPUT : GPIO_MODE_OUTPUT, @@ -195,7 +193,7 @@ static esp_err_t parlio_tx_unit_init_dma(parlio_tx_unit_t *tx_unit) static esp_err_t parlio_select_periph_clock(parlio_tx_unit_t *tx_unit, const parlio_tx_unit_config_t *config) { - parlio_hal_context_t *hal = &tx_unit->group->hal; + parlio_hal_context_t *hal = &tx_unit->base.group->hal; parlio_clock_source_t clk_src = config->clk_in_gpio_num >= 0 ? PARLIO_CLK_SRC_EXTERNAL : config->clk_src; uint32_t periph_src_clk_hz = 0; // if the source clock is input from the GPIO, then we're in the slave mode @@ -210,7 +208,7 @@ static esp_err_t parlio_select_periph_clock(parlio_tx_unit_t *tx_unit, const par #if CONFIG_PM_ENABLE if (clk_src != PARLIO_CLK_SRC_EXTERNAL) { // XTAL and PLL clock source will be turned off in light sleep, so we need to create a NO_LIGHT_SLEEP lock - sprintf(tx_unit->pm_lock_name, "parlio_tx_%d_%d", tx_unit->group->group_id, tx_unit->unit_id); // e.g. parlio_tx_0_0 + sprintf(tx_unit->pm_lock_name, "parlio_tx_%d_%d", tx_unit->base.group->group_id, tx_unit->base.unit_id); // e.g. parlio_tx_0_0 esp_err_t ret = esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, tx_unit->pm_lock_name, &tx_unit->pm_lock); ESP_RETURN_ON_ERROR(ret, TAG, "create NO_LIGHT_SLEEP lock failed"); } @@ -280,14 +278,14 @@ esp_err_t parlio_new_tx_unit(const parlio_tx_unit_config_t *config, parlio_tx_un unit->dma_nodes[i].next = (i == dma_nodes_num - 1) ? NULL : &(unit->dma_nodes[i+1]); } unit->max_transfer_bits = config->max_transfer_size * 8; - unit->dir = PARLIO_DIR_TX; + unit->base.dir = PARLIO_DIR_TX; unit->data_width = data_width; //create transaction queue ESP_GOTO_ON_ERROR(parlio_tx_create_trans_queue(unit, config), err, TAG, "create transaction queue failed"); // register the unit to a group - ESP_GOTO_ON_ERROR(parlio_register_unit_to_group((parlio_unit_base_handle_t)unit), err, TAG, "register unit to group failed"); - parlio_group_t *group = unit->group; + ESP_GOTO_ON_ERROR(parlio_register_unit_to_group((parlio_unit_base_handle_t)&(unit->base)), err, TAG, "register unit to group failed"); + parlio_group_t *group = unit->base.group; parlio_hal_context_t *hal = &group->hal; // select the clock source ESP_GOTO_ON_ERROR(parlio_select_periph_clock(unit, config), err, TAG, "set clock source failed"); @@ -346,7 +344,7 @@ esp_err_t parlio_new_tx_unit(const parlio_tx_unit_config_t *config, parlio_tx_un // return TX unit handle *ret_unit = unit; ESP_LOGD(TAG, "new tx unit(%d,%d) at %p, out clk=%"PRIu32"Hz, queue_depth=%zu, idle_mask=%"PRIx32, - group->group_id, unit->unit_id, unit, unit->out_clk_freq_hz, unit->queue_depth, unit->idle_value_mask); + group->group_id, unit->base.unit_id, unit, unit->out_clk_freq_hz, unit->queue_depth, unit->idle_value_mask); return ESP_OK; err: @@ -360,7 +358,7 @@ esp_err_t parlio_del_tx_unit(parlio_tx_unit_handle_t unit) { ESP_RETURN_ON_FALSE(unit, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); ESP_RETURN_ON_FALSE(atomic_load(&unit->fsm) == PARLIO_TX_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "unit not in init state"); - ESP_LOGD(TAG, "del tx unit(%d,%d)", unit->group->group_id, unit->unit_id); + ESP_LOGD(TAG, "del tx unit(%d,%d)", unit->base.group->group_id, unit->base.unit_id); return parlio_destroy_tx_unit(unit); } @@ -425,7 +423,7 @@ esp_err_t parlio_tx_unit_register_event_callbacks(parlio_tx_unit_handle_t tx_uni static void IRAM_ATTR parlio_tx_do_transaction(parlio_tx_unit_t *tx_unit, parlio_tx_trans_desc_t *t) { - parlio_hal_context_t *hal = &tx_unit->group->hal; + parlio_hal_context_t *hal = &tx_unit->base.group->hal; tx_unit->cur_trans = t; @@ -458,7 +456,7 @@ esp_err_t parlio_tx_unit_enable(parlio_tx_unit_handle_t tx_unit) if (tx_unit->pm_lock) { esp_pm_lock_acquire(tx_unit->pm_lock); } - parlio_hal_context_t *hal = &tx_unit->group->hal; + parlio_hal_context_t *hal = &tx_unit->base.group->hal; parlio_ll_enable_interrupt(hal->regs, PARLIO_LL_EVENT_TX_EOF, true); atomic_store(&tx_unit->fsm, PARLIO_TX_FSM_ENABLE); } else { @@ -506,7 +504,7 @@ esp_err_t parlio_tx_unit_disable(parlio_tx_unit_handle_t tx_unit) ESP_RETURN_ON_FALSE(valid_state, ESP_ERR_INVALID_STATE, TAG, "unit can't be disabled in state %d", expected_fsm); // stop the TX engine - parlio_hal_context_t *hal = &tx_unit->group->hal; + parlio_hal_context_t *hal = &tx_unit->base.group->hal; gdma_stop(tx_unit->dma_chan); parlio_ll_tx_start(hal->regs, false); parlio_ll_enable_interrupt(hal->regs, PARLIO_LL_EVENT_TX_EOF, false); @@ -569,7 +567,7 @@ esp_err_t parlio_tx_unit_transmit(parlio_tx_unit_handle_t tx_unit, const void *p static void IRAM_ATTR parlio_tx_default_isr(void *args) { parlio_tx_unit_t *tx_unit = (parlio_tx_unit_t *)args; - parlio_group_t *group = tx_unit->group; + parlio_group_t *group = tx_unit->base.group; parlio_hal_context_t *hal = &group->hal; BaseType_t high_task_woken = pdFALSE; bool need_yield = false; diff --git a/components/driver/test_apps/parlio/main/CMakeLists.txt b/components/driver/test_apps/parlio/main/CMakeLists.txt index de6a0905fa..7fc221c2fe 100644 --- a/components/driver/test_apps/parlio/main/CMakeLists.txt +++ b/components/driver/test_apps/parlio/main/CMakeLists.txt @@ -10,5 +10,5 @@ endif() # In order for the cases defined by `TEST_CASE` to be linked into the final elf, # the component can be registered as WHOLE_ARCHIVE idf_component_register(SRCS ${srcs} - PRIV_REQUIRES unity driver soc + PRIV_REQUIRES unity driver WHOLE_ARCHIVE) diff --git a/components/driver/test_apps/parlio/main/test_parlio_rx.c b/components/driver/test_apps/parlio/main/test_parlio_rx.c index 65b9b3da91..900895ac9c 100644 --- a/components/driver/test_apps/parlio/main/test_parlio_rx.c +++ b/components/driver/test_apps/parlio/main/test_parlio_rx.c @@ -32,8 +32,10 @@ .max_recv_size = 10 * 1024, \ .data_width = 1, \ .clk_src = _clk_src, \ - .clk_freq_hz = _clk_freq, \ - .clk_gpio_num = _clk_src == PARLIO_CLK_SRC_EXTERNAL ? TEST_CLK_GPIO : -1, \ + .ext_clk_freq_hz = _clk_src == PARLIO_CLK_SRC_EXTERNAL ? _clk_freq : 0, \ + .clk_in_gpio_num = _clk_src == PARLIO_CLK_SRC_EXTERNAL ? TEST_CLK_GPIO : -1, \ + .exp_clk_freq_hz = _clk_freq, \ + .clk_out_gpio_num = -1, \ .valid_gpio_num = TEST_VALID_GPIO, \ .data_gpio_nums = { \ [0] = TEST_DATA0_GPIO, \ @@ -48,52 +50,6 @@ #define TEST_TASK_DATA_READY_BIT 0x01 #define TEST_TASK_FINISHED_BIT 0x02 -TEST_CASE("parallel_rx_unit_install_uninstall", "[parlio_rx]") -{ - printf("install rx units exhaustively\r\n"); - parlio_rx_unit_handle_t units[SOC_PARLIO_GROUPS * SOC_PARLIO_RX_UNITS_PER_GROUP]; - int k = 0; - parlio_rx_unit_config_t config = TEST_DEFAULT_UNIT_CONFIG(PARLIO_CLK_SRC_DEFAULT, 1000000); - for (int i = 0; i < SOC_PARLIO_GROUPS; i++) { - for (int j = 0; j < SOC_PARLIO_RX_UNITS_PER_GROUP; j++) { - TEST_ESP_OK(parlio_new_rx_unit(&config, &units[k++])); - } - } - TEST_ESP_ERR(ESP_ERR_NOT_FOUND, parlio_new_rx_unit(&config, &units[0])); - - for (int i = 0; i < k; i++) { - TEST_ESP_OK(parlio_del_rx_unit(units[i])); - } - - // clock from external - config.clk_src = PARLIO_CLK_SRC_EXTERNAL; - // clock gpio must be set when the clock is input from external - TEST_ESP_ERR(ESP_ERR_INVALID_ARG, parlio_new_rx_unit(&config, &units[0])); - - // clock from internal - config.clk_src = PARLIO_CLK_SRC_DEFAULT; - config.clk_gpio_num = TEST_CLK_GPIO; -#if SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT - TEST_ESP_OK(parlio_new_rx_unit(&config, &units[0])); - TEST_ESP_OK(parlio_del_rx_unit(units[0])); -#else - // failed because of not support output the clock to a gpio - TEST_ESP_ERR(ESP_ERR_NOT_SUPPORTED, parlio_new_rx_unit(&config, &units[0])); - config.clk_gpio_num = -1; -#endif - config.data_width = 3; - // data width should be power of 2 - TEST_ESP_ERR(ESP_ERR_INVALID_ARG, parlio_new_rx_unit(&config, &units[0])); - - config.data_width = 4; - TEST_ESP_OK(parlio_new_rx_unit(&config, &units[0])); - TEST_ESP_OK(parlio_rx_unit_enable(units[0], true)); - // delete unit before it's disabled is not allowed - TEST_ESP_ERR(ESP_ERR_INVALID_STATE, parlio_del_rx_unit(units[0])); - TEST_ESP_OK(parlio_rx_unit_disable(units[0])); - TEST_ESP_OK(parlio_del_rx_unit(units[0])); -} - typedef struct { uint32_t partial_recv_cnt; uint32_t recv_done_cnt; @@ -124,107 +80,6 @@ static bool test_parlio_rx_timeout_callback(parlio_rx_unit_handle_t rx_unit, con return false; } -#define TEST_PAYLOAD_SIZE 5000 - -// This test case uses soft delimiter -TEST_CASE("parallel_rx_unit_receive_transaction_test", "[parlio_rx]") -{ - parlio_rx_unit_handle_t rx_unit = NULL; - parlio_rx_delimiter_handle_t deli = NULL; - parlio_rx_delimiter_handle_t timeout_deli = NULL; - - parlio_rx_unit_config_t config = TEST_DEFAULT_UNIT_CONFIG(PARLIO_CLK_SRC_DEFAULT, 1000000); - TEST_ESP_OK(parlio_new_rx_unit(&config, &rx_unit)); - - parlio_rx_soft_delimiter_config_t sft_deli_cfg = { - .sample_edge = PARLIO_SAMPLE_EDGE_POS, - .eof_data_len = TEST_PAYLOAD_SIZE, - .timeout_ticks = 0, - }; - TEST_ESP_OK(parlio_new_rx_delimiter(&sft_deli_cfg, &deli)); - parlio_rx_level_delimiter_config_t lvl_deli_cfg = { - .valid_sig_line_id = TEST_VALID_SIG, - .sample_edge = PARLIO_SAMPLE_EDGE_POS, - .bit_pack_order = PARLIO_BIT_PACK_ORDER_MSB, - .eof_data_len = TEST_PAYLOAD_SIZE, - .timeout_ticks = 5, - .flags = { - .active_level = 1, - }, - }; - TEST_ESP_OK(parlio_new_rx_delimiter(&lvl_deli_cfg, &timeout_deli)); - - parlio_rx_event_callbacks_t cbs = { - .on_partial_receive = test_parlio_rx_partial_recv_callback, - .on_receive_done = test_parlio_rx_done_callback, - .on_timeout = test_parlio_rx_timeout_callback, - }; - test_data_t test_data = { - .partial_recv_cnt = 0, - .recv_done_cnt = 0, - }; - TEST_ESP_OK(parlio_rx_unit_register_event_callbacks(rx_unit, &cbs, &test_data)); - TEST_ESP_OK(parlio_rx_unit_enable(rx_unit, true)); - - parlio_receive_config_t recv_config = { - .delimiter = deli, - .flags.is_infinite = false, - }; - uint8_t *payload = heap_caps_calloc(1, TEST_PAYLOAD_SIZE, TEST_PARLIO_MEM_ALLOC_CAPS); - TEST_ASSERT(payload); - - printf("Testing one normal transaction...\n"); - TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); - TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); - TEST_ESP_OK(parlio_rx_unit_wait_all_done(rx_unit, 5000)); - TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); - TEST_ASSERT_EQUAL_UINT32(2, test_data.partial_recv_cnt); - TEST_ASSERT_EQUAL_UINT32(1, test_data.recv_done_cnt); - memset(&test_data, 0, sizeof(test_data_t)); - - printf("Testing normal transactions in queue...\n"); - TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); - // push 5 repeated transactions to the queue - for (int i = 0; i < 5; i++) { - TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); - } - TEST_ESP_OK(parlio_rx_unit_wait_all_done(rx_unit, 5000)); - TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); - TEST_ASSERT_EQUAL_UINT32(10, test_data.partial_recv_cnt); - TEST_ASSERT_EQUAL_UINT32(5, test_data.recv_done_cnt); - memset(&test_data, 0, sizeof(test_data_t)); - - printf("Testing the infinite transaction...\n"); - recv_config.flags.is_infinite = true; - TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); - TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); - // Won't receive done semaphore in infinite transaction - TEST_ESP_ERR(ESP_ERR_TIMEOUT, parlio_rx_unit_wait_all_done(rx_unit, 500)); - TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); - TEST_ASSERT_GREATER_THAN(6, test_data.partial_recv_cnt); - TEST_ASSERT_GREATER_THAN(3, test_data.recv_done_cnt); - memset(&test_data, 0, sizeof(test_data_t)); - - // printf("Testing the timeout callback...\n"); - // recv_config.flags.is_infinite = false; - // recv_config.delimiter = timeout_deli; - // // push 5 repeated transactions to the queue - // for (int i = 0; i < 5; i++) { - // TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); - // gpio_set_level(TEST_VALID_GPIO, 1); - // vTaskDelay(pdMS_TO_TICKS(100)); - // gpio_set_level(TEST_VALID_GPIO, 0); - // vTaskDelay(pdMS_TO_TICKS(50)); - // } - // TEST_ASSERT_TRUE(test_data.timeout_cnt); - - TEST_ESP_OK(parlio_rx_unit_disable(rx_unit)); - TEST_ESP_OK(parlio_del_rx_delimiter(deli)); - TEST_ESP_OK(parlio_del_rx_delimiter(timeout_deli)); - TEST_ESP_OK(parlio_del_rx_unit(rx_unit)); - free(payload); -}; - static void connect_signal_internally(uint32_t gpio, uint32_t sigo, uint32_t sigi) { gpio_config_t gpio_conf = { @@ -407,15 +262,12 @@ static void level_delimiter_sender_task_spi(void *args) } } -static bool test_delimiter(parlio_rx_delimiter_handle_t deli, void (*sender_task_thread)(void *args)) +static bool test_delimiter(parlio_rx_delimiter_handle_t deli, bool free_running_clk, void (*sender_task_thread)(void *args)) { parlio_rx_unit_handle_t rx_unit = NULL; parlio_rx_unit_config_t config = TEST_DEFAULT_UNIT_CONFIG(PARLIO_CLK_SRC_EXTERNAL, 1000000); - if (sender_task_thread == pulse_delimiter_sender_task_i2s) { - // I2S offers free-running clock - config.flags.free_clk = 1; - } + config.flags.free_clk = free_running_clk; TEST_ESP_OK(parlio_new_rx_unit(&config, &rx_unit)); TEST_ESP_OK(parlio_rx_unit_enable(rx_unit, true)); @@ -431,7 +283,7 @@ static bool test_delimiter(parlio_rx_delimiter_handle_t deli, void (*sender_task parlio_receive_config_t recv_config = { .delimiter = deli, - .flags.is_infinite = false, + .flags.partial_rx_en = false, }; uint8_t recv_buff[TEST_EOF_DATA_LEN]; bool is_success = false; @@ -479,12 +331,12 @@ TEST_CASE("parallel_rx_unit_level_delimiter_test_via_spi", "[parlio_rx]") .eof_data_len = TEST_EOF_DATA_LEN, .timeout_ticks = 0, .flags = { - .active_level = 1, + .active_low_en = 0, }, }; parlio_rx_delimiter_handle_t deli = NULL; - TEST_ESP_OK(parlio_new_rx_delimiter(&lvl_deli_cfg, &deli)); - bool is_success = test_delimiter(deli, level_delimiter_sender_task_spi); + TEST_ESP_OK(parlio_new_rx_level_delimiter(&lvl_deli_cfg, &deli)); + bool is_success = test_delimiter(deli, false, level_delimiter_sender_task_spi); TEST_ESP_OK(parlio_del_rx_delimiter(deli)); TEST_ASSERT(is_success); } @@ -506,8 +358,200 @@ TEST_CASE("parallel_rx_unit_pulse_delimiter_test_via_i2s", "[parlio_rx]") }, }; parlio_rx_delimiter_handle_t deli = NULL; - TEST_ESP_OK(parlio_new_rx_delimiter(&pls_deli_cfg, &deli)); - bool is_success = test_delimiter(deli, pulse_delimiter_sender_task_i2s); + TEST_ESP_OK(parlio_new_rx_pulse_delimiter(&pls_deli_cfg, &deli)); + bool is_success = test_delimiter(deli, true, pulse_delimiter_sender_task_i2s); TEST_ESP_OK(parlio_del_rx_delimiter(deli)); TEST_ASSERT(is_success); } + +TEST_CASE("parallel_rx_unit_install_uninstall", "[parlio_rx]") +{ + printf("install rx units exhaustively\r\n"); + parlio_rx_unit_handle_t units[SOC_PARLIO_GROUPS * SOC_PARLIO_RX_UNITS_PER_GROUP]; + int k = 0; + parlio_rx_unit_config_t config = TEST_DEFAULT_UNIT_CONFIG(PARLIO_CLK_SRC_DEFAULT, 1000000); + for (int i = 0; i < SOC_PARLIO_GROUPS; i++) { + for (int j = 0; j < SOC_PARLIO_RX_UNITS_PER_GROUP; j++) { + TEST_ESP_OK(parlio_new_rx_unit(&config, &units[k++])); + } + } + TEST_ESP_ERR(ESP_ERR_NOT_FOUND, parlio_new_rx_unit(&config, &units[0])); + + for (int i = 0; i < k; i++) { + TEST_ESP_OK(parlio_del_rx_unit(units[i])); + } + + // clock from external + config.clk_src = PARLIO_CLK_SRC_EXTERNAL; + // clock gpio must be set when the clock is input from external + TEST_ESP_ERR(ESP_ERR_INVALID_ARG, parlio_new_rx_unit(&config, &units[0])); + + // clock from internal + config.clk_src = PARLIO_CLK_SRC_DEFAULT; + config.clk_out_gpio_num = TEST_CLK_GPIO; +#if SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT + TEST_ESP_OK(parlio_new_rx_unit(&config, &units[0])); + TEST_ESP_OK(parlio_del_rx_unit(units[0])); +#else + // failed because of not support output the clock to a gpio + TEST_ESP_ERR(ESP_ERR_NOT_SUPPORTED, parlio_new_rx_unit(&config, &units[0])); + config.clk_out_gpio_num = -1; +#endif + config.data_width = 3; + // data width should be power of 2 + TEST_ESP_ERR(ESP_ERR_INVALID_ARG, parlio_new_rx_unit(&config, &units[0])); + + config.data_width = 4; + TEST_ESP_OK(parlio_new_rx_unit(&config, &units[0])); + TEST_ESP_OK(parlio_rx_unit_enable(units[0], true)); + // delete unit before it's disabled is not allowed + TEST_ESP_ERR(ESP_ERR_INVALID_STATE, parlio_del_rx_unit(units[0])); + TEST_ESP_OK(parlio_rx_unit_disable(units[0])); + TEST_ESP_OK(parlio_del_rx_unit(units[0])); +} + +#define TEST_PAYLOAD_SIZE 5000 + +// This test case uses soft delimiter +TEST_CASE("parallel_rx_unit_receive_transaction_test", "[parlio_rx]") +{ + parlio_rx_unit_handle_t rx_unit = NULL; + parlio_rx_delimiter_handle_t deli = NULL; + + parlio_rx_unit_config_t config = TEST_DEFAULT_UNIT_CONFIG(PARLIO_CLK_SRC_DEFAULT, 1000000); + config.flags.free_clk = 1; + TEST_ESP_OK(parlio_new_rx_unit(&config, &rx_unit)); + + parlio_rx_soft_delimiter_config_t sft_deli_cfg = { + .sample_edge = PARLIO_SAMPLE_EDGE_POS, + .eof_data_len = TEST_PAYLOAD_SIZE, + .timeout_ticks = 0, + }; + TEST_ESP_OK(parlio_new_rx_soft_delimiter(&sft_deli_cfg, &deli)); + + parlio_rx_event_callbacks_t cbs = { + .on_partial_receive = test_parlio_rx_partial_recv_callback, + .on_receive_done = test_parlio_rx_done_callback, + }; + test_data_t test_data = { + .partial_recv_cnt = 0, + .recv_done_cnt = 0, + }; + TEST_ESP_OK(parlio_rx_unit_register_event_callbacks(rx_unit, &cbs, &test_data)); + TEST_ESP_OK(parlio_rx_unit_enable(rx_unit, true)); + + parlio_receive_config_t recv_config = { + .delimiter = deli, + .flags.partial_rx_en = false, + }; + uint8_t *payload = heap_caps_calloc(1, TEST_PAYLOAD_SIZE, TEST_PARLIO_MEM_ALLOC_CAPS); + TEST_ASSERT(payload); + + printf("Testing one normal transaction...\n"); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); + TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); + TEST_ESP_OK(parlio_rx_unit_wait_all_done(rx_unit, 5000)); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); + TEST_ASSERT_EQUAL_UINT32(2, test_data.partial_recv_cnt); + TEST_ASSERT_EQUAL_UINT32(1, test_data.recv_done_cnt); + memset(&test_data, 0, sizeof(test_data_t)); + + printf("Testing normal transactions in queue...\n"); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); + // push 5 repeated transactions to the queue + for (int i = 0; i < 5; i++) { + TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); + } + TEST_ESP_OK(parlio_rx_unit_wait_all_done(rx_unit, 5000)); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); + TEST_ASSERT_EQUAL_UINT32(10, test_data.partial_recv_cnt); + TEST_ASSERT_EQUAL_UINT32(5, test_data.recv_done_cnt); + memset(&test_data, 0, sizeof(test_data_t)); + + printf("Testing resume transactions in queue after enabling...\n"); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); + // push 5 repeated transactions to the queue + for (int i = 0; i < 10; i++) { + TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); + } + TEST_ESP_OK(parlio_rx_unit_disable(rx_unit)); + memset(&test_data, 0, sizeof(test_data_t)); + TEST_ESP_OK(parlio_rx_unit_enable(rx_unit, false)); + TEST_ESP_OK(parlio_rx_unit_wait_all_done(rx_unit, 5000)); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); + TEST_ASSERT_GREATER_THAN(2, test_data.partial_recv_cnt); + TEST_ASSERT_GREATER_THAN(1, test_data.recv_done_cnt); + memset(&test_data, 0, sizeof(test_data_t)); + + printf("Testing the infinite transaction...\n"); + recv_config.flags.partial_rx_en = true; + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, true)); + TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); + // Won't receive done semaphore in infinite transaction + TEST_ESP_ERR(ESP_ERR_TIMEOUT, parlio_rx_unit_wait_all_done(rx_unit, 500)); + TEST_ESP_OK(parlio_rx_soft_delimiter_start_stop(rx_unit, deli, false)); + TEST_ASSERT_GREATER_THAN(6, test_data.partial_recv_cnt); + TEST_ASSERT_GREATER_THAN(3, test_data.recv_done_cnt); + memset(&test_data, 0, sizeof(test_data_t)); + + TEST_ESP_OK(parlio_rx_unit_disable(rx_unit)); + TEST_ESP_OK(parlio_del_rx_delimiter(deli)); + TEST_ESP_OK(parlio_del_rx_unit(rx_unit)); + free(payload); +}; + +TEST_CASE("parallel_rx_unit_receive_timeout_test", "[parlio_rx]") +{ + parlio_rx_unit_handle_t rx_unit = NULL; + parlio_rx_delimiter_handle_t timeout_deli = NULL; + + parlio_rx_unit_config_t config = TEST_DEFAULT_UNIT_CONFIG(PARLIO_CLK_SRC_DEFAULT, 1000000); + config.flags.free_clk = 1; + config.flags.clk_gate_en = 1; + TEST_ESP_OK(parlio_new_rx_unit(&config, &rx_unit)); + + parlio_rx_level_delimiter_config_t lvl_deli_cfg = { + .valid_sig_line_id = TEST_VALID_SIG, + .sample_edge = PARLIO_SAMPLE_EDGE_POS, + .bit_pack_order = PARLIO_BIT_PACK_ORDER_MSB, + .eof_data_len = TEST_PAYLOAD_SIZE, + .timeout_ticks = 400, + .flags = { + .active_low_en = 0, + }, + }; + TEST_ESP_OK(parlio_new_rx_level_delimiter(&lvl_deli_cfg, &timeout_deli)); + + parlio_rx_event_callbacks_t cbs = { + .on_timeout = test_parlio_rx_timeout_callback, + }; + test_data_t test_data = { + .timeout_cnt = 0, + }; + TEST_ESP_OK(parlio_rx_unit_register_event_callbacks(rx_unit, &cbs, &test_data)); + TEST_ESP_OK(parlio_rx_unit_enable(rx_unit, true)); + + parlio_receive_config_t recv_config = { + .delimiter = timeout_deli, + .flags.partial_rx_en = false, + }; + uint8_t *payload = heap_caps_calloc(1, TEST_PAYLOAD_SIZE, TEST_PARLIO_MEM_ALLOC_CAPS); + TEST_ASSERT(payload); + + printf("Testing the timeout callback...\n"); + // push 5 repeated transactions to the queue + for (int i = 0; i < 5; i++) { + TEST_ESP_OK(parlio_rx_unit_receive(rx_unit, payload, TEST_PAYLOAD_SIZE, &recv_config)); + gpio_set_level(TEST_VALID_GPIO, 1); + vTaskDelay(pdMS_TO_TICKS(10)); + gpio_set_level(TEST_VALID_GPIO, 0); + vTaskDelay(pdMS_TO_TICKS(5)); + printf("Transaction %d finished\n", i); + } + TEST_ASSERT_TRUE(test_data.timeout_cnt); + + TEST_ESP_OK(parlio_rx_unit_disable(rx_unit)); + TEST_ESP_OK(parlio_del_rx_delimiter(timeout_deli)); + TEST_ESP_OK(parlio_del_rx_unit(rx_unit)); + free(payload); +} diff --git a/components/driver/test_apps/parlio/pytest_parlio_unity.py b/components/driver/test_apps/parlio/pytest_parlio_unity.py index 1bfd4acb7b..4f572edd20 100644 --- a/components/driver/test_apps/parlio/pytest_parlio_unity.py +++ b/components/driver/test_apps/parlio/pytest_parlio_unity.py @@ -17,4 +17,4 @@ from pytest_embedded import Dut indirect=True, ) def test_parlio(dut: Dut) -> None: - dut.run_all_single_board_cases(reset=True) + dut.run_all_single_board_cases() diff --git a/components/hal/esp32c6/include/hal/parlio_ll.h b/components/hal/esp32c6/include/hal/parlio_ll.h index 32685ed67c..78d126a33f 100644 --- a/components/hal/esp32c6/include/hal/parlio_ll.h +++ b/components/hal/esp32c6/include/hal/parlio_ll.h @@ -101,33 +101,6 @@ static inline void parlio_ll_rx_set_clock_source(parl_io_dev_t *dev, parlio_cloc PCR.parl_clk_rx_conf.parl_clk_rx_sel = clk_sel; } -/** - * @brief Get the clock source for the RX unit - * - * @param dev Parallel IO register base address - * @return - * parlio_clock_source_t RX core clock source - */ -static inline parlio_clock_source_t parlio_ll_rx_get_clock_source(parl_io_dev_t *dev) -{ - (void)dev; - uint32_t clk_sel = PCR.parl_clk_rx_conf.parl_clk_rx_sel; - switch (clk_sel) { - case 0: - return PARLIO_CLK_SRC_XTAL; - case 1: - return PARLIO_CLK_SRC_PLL_F240M; - case 2: - return PARLIO_CLK_SRC_RC_FAST; - case 3: - return PARLIO_CLK_SRC_EXTERNAL; - default: // unsupported clock source - HAL_ASSERT(false); - break; - } - return PARLIO_CLK_SRC_DEFAULT; -} - /** * @brief Set the clock divider for the RX unit * @@ -209,13 +182,13 @@ static inline void parlio_ll_rx_set_recv_bit_len(parl_io_dev_t *dev, uint32_t bi * @brief Set the sub mode of the level controlled receive mode * * @param dev Parallel IO register base address - * @param active_level Level of the external enable signal, true for active high, false for active low + * @param active_low_en Level of the external enable signal, true for active low, false for active high */ __attribute__((always_inline)) -static inline void parlio_ll_rx_set_level_recv_mode(parl_io_dev_t *dev, bool active_level) +static inline void parlio_ll_rx_set_level_recv_mode(parl_io_dev_t *dev, bool active_low_en) { dev->rx_cfg0.rx_smp_mode_sel = 0; - dev->rx_cfg0.rx_level_submode_sel = !active_level; // 0: active low, 1: active high + dev->rx_cfg0.rx_level_submode_sel = active_low_en; } /** @@ -425,33 +398,6 @@ static inline void parlio_ll_tx_set_clock_source(parl_io_dev_t *dev, parlio_cloc PCR.parl_clk_tx_conf.parl_clk_tx_sel = clk_sel; } -/** - * @brief Get the clock source for the TX unit - * - * @param dev Parallel IO register base address - * @return - * parlio_clock_source_t TX core clock source - */ -static inline parlio_clock_source_t parlio_ll_tx_get_clock_source(parl_io_dev_t *dev) -{ - (void)dev; - uint32_t clk_sel = PCR.parl_clk_tx_conf.parl_clk_tx_sel; - switch (clk_sel) { - case 0: - return PARLIO_CLK_SRC_XTAL; - case 1: - return PARLIO_CLK_SRC_PLL_F240M; - case 2: - return PARLIO_CLK_SRC_RC_FAST; - case 3: - return PARLIO_CLK_SRC_EXTERNAL; - default: // unsupported clock source - HAL_ASSERT(false); - break; - } - return PARLIO_CLK_SRC_DEFAULT; -} - /** * @brief Set the clock divider for the TX unit * diff --git a/components/hal/esp32h2/include/hal/parlio_ll.h b/components/hal/esp32h2/include/hal/parlio_ll.h index 9c94987cfa..e0236e0f8a 100644 --- a/components/hal/esp32h2/include/hal/parlio_ll.h +++ b/components/hal/esp32h2/include/hal/parlio_ll.h @@ -103,33 +103,6 @@ static inline void parlio_ll_rx_set_clock_source(parl_io_dev_t *dev, parlio_cloc PCR.parl_clk_rx_conf.parl_clk_rx_sel = clk_sel; } -/** - * @brief Get the clock source for the RX unit - * - * @param dev Parallel IO register base address - * @return - * parlio_clock_source_t RX core clock source - */ -static inline parlio_clock_source_t parlio_ll_rx_get_clock_source(parl_io_dev_t *dev) -{ - (void)dev; - uint32_t clk_sel = PCR.parl_clk_rx_conf.parl_clk_rx_sel; - switch (clk_sel) { - case 0: - return PARLIO_CLK_SRC_XTAL; - case 1: - return PARLIO_CLK_SRC_PLL_F96M; - case 2: - return PARLIO_CLK_SRC_RC_FAST; - case 3: - return PARLIO_CLK_SRC_EXTERNAL; - default: // unsupported clock source - HAL_ASSERT(false); - break; - } - return PARLIO_CLK_SRC_DEFAULT; -} - /** * @brief Set the clock divider for the RX unit * @@ -210,13 +183,13 @@ static inline void parlio_ll_rx_set_recv_bit_len(parl_io_dev_t *dev, uint32_t bi * @brief Set the sub mode of the level controlled receive mode * * @param dev Parallel IO register base address - * @param active_level Level of the external enable signal, true for active high, false for active low + * @param active_low_en Level of the external enable signal, true for active low, false for active high */ __attribute__((always_inline)) -static inline void parlio_ll_rx_set_level_recv_mode(parl_io_dev_t *dev, bool active_level) +static inline void parlio_ll_rx_set_level_recv_mode(parl_io_dev_t *dev, bool active_low_en) { dev->rx_mode_cfg.rx_smp_mode_sel = 0; - dev->rx_mode_cfg.rx_ext_en_inv = !active_level; // 0: active low, 1: active high + dev->rx_mode_cfg.rx_ext_en_inv = active_low_en; } /** @@ -432,33 +405,6 @@ static inline void parlio_ll_tx_set_clock_source(parl_io_dev_t *dev, parlio_cloc PCR.parl_clk_tx_conf.parl_clk_tx_sel = clk_sel; } -/** - * @brief Get the clock source for the TX unit - * - * @param dev Parallel IO register base address - * @return - * parlio_clock_source_t TX core clock source - */ -static inline parlio_clock_source_t parlio_ll_tx_get_clock_source(parl_io_dev_t *dev) -{ - (void)dev; - uint32_t clk_sel = PCR.parl_clk_tx_conf.parl_clk_tx_sel; - switch (clk_sel) { - case 0: - return PARLIO_CLK_SRC_XTAL; - case 1: - return PARLIO_CLK_SRC_PLL_F96M; - case 2: - return PARLIO_CLK_SRC_RC_FAST; - case 3: - return PARLIO_CLK_SRC_EXTERNAL; - default: // unsupported clock source - HAL_ASSERT(false); - break; - } - return PARLIO_CLK_SRC_DEFAULT; -} - /** * @brief Set the clock divider for the TX unit * diff --git a/components/hal/esp32p4/include/hal/parlio_ll.h b/components/hal/esp32p4/include/hal/parlio_ll.h index c26fa810d9..cc070cf95b 100644 --- a/components/hal/esp32p4/include/hal/parlio_ll.h +++ b/components/hal/esp32p4/include/hal/parlio_ll.h @@ -126,38 +126,6 @@ static inline void parlio_ll_rx_set_clock_source(parl_io_dev_t *dev, parlio_ll_c /// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance #define parlio_ll_rx_set_clock_source(...) (void)__DECLARE_RCC_ATOMIC_ENV; parlio_ll_rx_set_clock_source(__VA_ARGS__) -/** - * @brief Get the clock source for the RX unit - * - * @param dev Parallel IO register base address - * @return - * parlio_clock_source_t RX core clock source - */ -static inline parlio_ll_clock_source_t parlio_ll_rx_get_clock_source(parl_io_dev_t *dev) -{ - (void)dev; - uint32_t clk_sel = HP_SYS_CLKRST.peri_clk_ctrl117.reg_parlio_rx_clk_src_sel; - switch (clk_sel) { - case 0: - return PARLIO_LL_CLK_SRC_XTAL; - case 1: - return PARLIO_LL_CLK_SRC_RC_FAST; - case 2: - return PARLIO_LL_CLK_SRC_PLL_F160M; - case 3: - return PARLIO_LL_CLK_SRC_PAD; - default: // unsupported clock source - HAL_ASSERT(false); - break; - } - return PARLIO_LL_CLK_SRC_XTAL; -} - - -/// use a macro to wrap the function, force the caller to use it in a critical section -/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance -#define parlio_ll_rx_get_clock_source(...) (void)__DECLARE_RCC_ATOMIC_ENV; parlio_ll_rx_get_clock_source(__VA_ARGS__) - /** * @brief Set the clock divider for the RX unit * @@ -481,37 +449,6 @@ static inline void parlio_ll_tx_set_clock_source(parl_io_dev_t *dev, parlio_ll_c /// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance #define parlio_ll_tx_set_clock_source(...) (void)__DECLARE_RCC_ATOMIC_ENV; parlio_ll_tx_set_clock_source(__VA_ARGS__) -/** - * @brief Get the clock source for the TX unit - * - * @param dev Parallel IO register base address - * @return - * parlio_clock_source_t TX core clock source - */ -static inline parlio_ll_clock_source_t parlio_ll_tx_get_clock_source(parl_io_dev_t *dev) -{ - (void)dev; - uint32_t clk_sel = HP_SYS_CLKRST.peri_clk_ctrl118.reg_parlio_tx_clk_src_sel; - switch (clk_sel) { - case 0: - return PARLIO_LL_CLK_SRC_XTAL; - case 1: - return PARLIO_LL_CLK_SRC_RC_FAST; - case 2: - return PARLIO_LL_CLK_SRC_PLL_F160M; - case 3: - return PARLIO_LL_CLK_SRC_PAD; - default: // unsupported clock source - HAL_ASSERT(false); - break; - } - return PARLIO_LL_CLK_SRC_XTAL; -} - -/// use a macro to wrap the function, force the caller to use it in a critical section -/// the critical section needs to declare the __DECLARE_RCC_ATOMIC_ENV variable in advance -#define parlio_ll_tx_get_clock_source(...) (void)__DECLARE_RCC_ATOMIC_ENV; parlio_ll_tx_get_clock_source(__VA_ARGS__) - /** * @brief Set the clock divider for the TX unit * diff --git a/components/hal/include/hal/parlio_types.h b/components/hal/include/hal/parlio_types.h index 75439fe658..baaeeb4d9d 100644 --- a/components/hal/include/hal/parlio_types.h +++ b/components/hal/include/hal/parlio_types.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -49,11 +49,6 @@ typedef enum { PARLIO_BIT_PACK_ORDER_MSB, /*!< Bit pack order: MSB */ } parlio_bit_pack_order_t; -typedef enum { - PARIO_CLK_TYPE_FREE, - PARIO_CLK_TYPE_NON_FREE, -} parlio_clock_type_t; - #if SOC_PARLIO_SUPPORTED /** * @brief Parallel IO clock source diff --git a/docs/en/api-reference/peripherals/parlio.rst b/docs/en/api-reference/peripherals/parlio.rst index b2c96cbf87..7a9405715f 100644 --- a/docs/en/api-reference/peripherals/parlio.rst +++ b/docs/en/api-reference/peripherals/parlio.rst @@ -8,10 +8,6 @@ The Parallel IO peripheral is a general purpose parallel interface that can be u The TX and RX driver of Parallel IO peripheral are designed separately, you can include ``driver/parlio_tx.h`` or ``driver/parlio_rx.h`` to use any of them. -Parlio RX Driver ----------------- - - Application Examples -------------------- diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml index b2ceb4fcb3..322285d9c7 100644 --- a/examples/peripherals/.build-test-rules.yml +++ b/examples/peripherals/.build-test-rules.yml @@ -218,7 +218,13 @@ examples/peripherals/parlio: temporary: true reason: lack of runner -examples/peripherals/parlio/simple_rgb_led_matrix: +examples/peripherals/parlio/parlio_rx: + disable: + - if: SOC_PARLIO_SUPPORTED != 1 or IDF_TARGET == "esp32p4" + temporary: true + reason: not support esp32p4 yet (IDF-7471) + +examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix: disable: - if: SOC_PARLIO_SUPPORTED != 1 or SOC_DEDICATED_GPIO_SUPPORTED != 1 disable_test: diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/CMakeLists.txt b/examples/peripherals/parlio/parlio_rx/logic_analyzer/CMakeLists.txt new file mode 100644 index 0000000000..3cadaa97a3 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/CMakeLists.txt @@ -0,0 +1,8 @@ +# For more information about build system see +# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html +# The following five lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(logic_analyzer) diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/README.md b/examples/peripherals/parlio/parlio_rx/logic_analyzer/README.md new file mode 100644 index 0000000000..6f91587df2 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/README.md @@ -0,0 +1,229 @@ +| Supported Targets | ESP32-C6 | ESP32-H2 | +| ----------------- | -------- | -------- | + +# Logic Analyzer Example + +(See the README.md file in the upper level 'examples' directory for more information about examples.) + +This example demonstrates how to implement a logic analyzer via Parallel IO RX peripheral. The main implementation is extracted as `esp_probe` component for portability. + +Parallel IO is a peripheral that can sample data on multiple GPIOs in parallel at a high rate, which in its basic form is exactly the functionality of a logic analyzer. + +This example uses the "software delimiter mode" of the Parallel IO RX driver, so that the Parallel IO RX peripheral can be driven by the internal clock and keep sampling continuously. + +## Example Overview + +Under the default configuration, this example will probe the signals on several GPIOs, meanwhile these GPIOs will generate some signals by GPIO driver. The probed raw data will be stored temporary on the heap. When the allocated heap is run out or the probing time expires, the probing will stop and output the stored raw data to the output stream. + +## How to Use Example + +### Step 0: Requirement + +#### Hardware + +* A development board which has the parlio peripheral integrated, for supported chips see the table at the top +* A USB cable for power supply and programming +* Network connection if using TCP output stream + +#### Extra Software on PC + +* [PulseView](https://sigrok.org/wiki/Downloads) for visualizing the captured signal + +### Step 1: Configure The Project + +Run `idf.py menuconfig` under this example director to configure the example. + +1. The `esp_probe` component can probe either internal signals or external signals, choose this configuration to select: + + * "Select signal source": to select where the signals come from. + + - "Probing the internal signals": the signals come from the chip itself (i.e., internal). The output signals on the GPIO will be feed back to the Parallel IO RX via GPIO matrix. This example only simulates some signals by GPIO driver, you can also modify the example code to probe the signals that produced by other peripherals (like I2C, I2S, SPI, etc). + + - "Probing the External signals": the signals come from external source that connected to the probing GPIOs. + +2. The `esp_probe` component support Flash or TCP stream to output the raw data, choose this configuration to select: + + * "Select ESP probe dump stream": to select the output stream + + - "Dump data into FLASH": the data will be dumped into the Flash, it requires you to allocate a FAT partition in the partition table. In this example, there is a `storage` partition for saving the probed raw data. Then we can use `esptool`to read this partition on the host side. Normally we read the whole `storage` partition, because we don't know the exact start address that the raw data saved. + + - "Dump data to the host using TCP": the data will be dumped to the host directly via the TCP stream. Target should support connecting to the network via WiFi or Ethernet. + +3. To change the probing GPIOs, modify the `s_probe_gpio` array in the `logic_analyzer_example_main.c` + +#### Flash Stream + +If we choose to dump into flash, please make sure the data partition label we set in the menuconfig is same as what we set in the `partition.csv` + +* "The label of the data storage partition": sets the partition label that specified in `partition.csv` file. Defaults to `storage`. + +#### TCP Stream + +If we choose to dump via TCP, please specify the WiFi or Ethernet configurations in the menu "Example Connection Configuration", and then specify the TCP server information in "ESP probe configurations > Select ESP probe dump stream" menu: + +* "TCP server IP address": the IP address that TCP server bound +* "TCP server port": the port the TCP server is listening on (default 8888) + +### Step 2: Build And Flash + +(If you're using TCP stream, please go to Step 3 first) + +Build the project and flash it to the board, then run monitor tool to view serial output: + +```bash +idf.py -p PORT build flash monitor +``` + +And then waiting until the main task finished + +``` +I (2625) main_task: Returned from app_main() +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +### Step 3: Convert Raw Data into VCD Format + +Before conversion, we need to know how many channels in the raw data. In this example, we probed 4 GPIOs that set in `s_probe_gpio`, so we need to specify the channel number for the conversion. + +#### Flash Stream + +1. Exit the serial monitor and use `esptool` to read the flash partition to the host: + + For the default partition in this example: + + ```bash + parttool.py -p -b 406800 -f partitions.csv read_partition -h -n storage --output probe_raw.dat + ``` +2. Convert the raw data into VCD format: + + (Run the following command under the example directory) + ```bash + python components/esp_probe/host/vcd_dumper.py -n 4 -i probe_raw.dat -o probe_vcd_data.vcd + ``` + + * `-n`: the channel number that probed + * `-i`: the the input raw data file + * `-o`: the output vcd file name (optional) + + Then you can get the VCD file on the host. + +**Note:** This example converted the whole partition into VCD file for demonstration, you can also adopt some methods to extract the saved file in this partitions like: + +- Download the whole partition into the host and mount it as FS on host by Loop Device or RAM Disk; +- Download the whole partition into the host and parse the FAT Root Directory and find the data offset of the file `/esp_probe/probe_raw.dat`; + +#### TCP Stream + +1. Start the TCP server on the host: + + (Run the following command under the example directory) + ```bash + python components/esp_probe/host/tcp_server -n 4 -p 8888 -o probe_vcd_data.vcd + ``` + + * `-n`: the channel number that probed + * `-p`: the TCP port (default 8888) + * `-o`: the output vcd file name (optional) + + Then you can see the TCP server is on, log printed like: + + ``` + TCP listening at 192.168.1.106:8888 + ``` +2. Jump back to the Step 2 to flash and monitor the target + +3. If the TCP client connected successfully, there will be data received, you can see the log like: + + ``` + Client 192.168.1.183:49626 joined + data received 1440 bytes + data received 1440 bytes + data received 2880 bytes + ... + Client 192.168.1.183:49626 left + ``` + + Then you can get the VCD data on the host. + +### Step 4: View The Signals on PulseView + +Open PulseView and import the file `probe_vcd_data.vcd` with `Value Change Dump data` option: + +![pulseview_image](./img/pulseview.jpeg) + +#### Internal Signals That Simulated by GPIOs + +![internal_gpio_signals](./img/gpio_sig.jpeg) + +#### External I2S Philips Signals with I2S Decoder + +![external_i2s_signals](./img/i2s_sig.jpeg) + +## Further More Introduction on `esp_probe` + +### Data Mode + +#### Stream Mode + +Stream mode will output the raw data via the output stream without storing. Stream mode can be selected by the helper macro `ESP_PROBE_DEFAULT_STREAM_CONFIG` (the probe GPIOs need to be set additionally). + +* Advantage is that don't need extra storage to store the raw data. +* Disadvantage is that, due to the received data must finish sending before the new data receives, the sample rate is limited by the output stream bandwidth. Normally it can only achieve a low sample rate to avoid data lost. + +#### Buffer Mode (Recommended) + +Buffer mode store the raw data on the heap storage temporary before sending them. Buffer mode can be selected by the helper macro `ESP_PROBE_DEFAULT_BUFFER_CONFIG` (the probe GPIOs need to be set additionally). + +* Advantage is that, it can support a high sample rate. +* Disadvantage is that, the sampling time is limited by the available heap size. Normally the available heap size is only several hundreds KB, which can only hold raw data for several ms when sampling with a high rate. But buffer mode is still recommended as it is more useful in most of cases. + +#### Buffer Stream Mode + +Buffer Stream mode store the raw data on the heap storage temporary but the storage will be used as Ping-Pong buffer to send the data in the storage. Buffer Stream mode can be selected by the helper macro `ESP_PROBE_DEFAULT_BUFFER_STREAM_CONFIG` (the probe GPIOs need to be set additionally). + +* Advantage is that, the sampling time is not limited. Comparing to the Stream mode, it can reach a relative higher sample rate. +* Disadvantage is that, we still need to guarantee the output stream can catch the new data generation, otherwise data will be still be dropped. + +### Output Streams + +Currently `esp_probe` supports `Flash` and `TCP` stream. + +#### Flash Stream + +Requires a built-in Flash or external Flash and a data partition in FAT format. + +* Advantages: + + 1. Support larger storage comparing to the heap; + 2. ESP modules always have Flash on it, and no additional WiFi environment required; + +* Disadvantages: + + 1. Low bandwidth. About several hundreds KB/s supported (e.g. 300+ KB/s on ESP32-H2); + 2. Have to use `esptool` to read the raw data from the partition and then dump it into VCD format additionally; + 3. This example convert the whole storage partition into VCD format, which includes some unrelated data. Or you have to get the file from the partition in some ways additionally. + +#### TCP Stream + +Requires WiFi or Ethernet supported on the target and accessible network. + +* Advantages: + + 1. High bandwidth. Nearly 30 MB/s throughput supported, which allows a higher sample rate. For example, the sample rate can reach `25MB/s` on C6 with `Buffer Mode`, and 700+ KB/s with `Stream mode` without data dropped; + 2. The TCP server can dump the raw data into VCD format directly without other operations; + +* Disadvantages: + + 1. WiFi or Ethernet is required on the target; + 2. Larger image size; + +## Troubleshooting + +* The TCP server will sometimes miss the client disconnection (i.e. no `Client 192.168.1.183:56208 left` log). + - Just quit the progress by `Ctrl + C` and wait for a while util the port is released + +For any technical queries, please open an [issue](https://github.com/espressif/esp-idf/issues) on GitHub. We will get back to you soon. + diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/CMakeLists.txt b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/CMakeLists.txt new file mode 100644 index 0000000000..a8b85f9b03 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/CMakeLists.txt @@ -0,0 +1,12 @@ +set(src "hw_impl/esp_probe_impl_parlio.c" "esp_probe.c" + "stream/flash_fatfs.c" "stream/file_stream.c") + +if(CONFIG_SOC_WIFI_SUPPORTED OR CONFIG_SOC_EMAC_SUPPORTED) + list(APPEND src "stream/tcp_stream.c") +endif() + +idf_component_register(SRCS ${src} + INCLUDE_DIRS "./include" + PRIV_INCLUDE_DIRS "." + PRIV_REQUIRES driver hal fatfs esp_partition esp_netif + lwip) diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe.c new file mode 100644 index 0000000000..1c44d9a748 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe.c @@ -0,0 +1,288 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/idf_additions.h" +#include "sdkconfig.h" +#include "esp_probe_private.h" +#include "esp_probe.h" +#include "esp_check.h" +#include "esp_cpu.h" + +static const char *TAG = "esp_probe"; + +#define GET_US_BY_CCOUNT(t) ((float)(t)/CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ) + +static void s_esp_probe_flush_task(void *args) +{ + esp_probe_handle_t handle = (esp_probe_handle_t)args; + esp_probe_flush_data_t flush_data; + + // Suspend if not start probing yet + if (!handle->flags.is_started) { + vTaskSuspend(NULL); + } + + while (1) { + if (xQueueReceive(handle->flush_que, &flush_data, portMAX_DELAY) == pdTRUE) { + if (flush_data.size) { + fwrite(flush_data.data, flush_data.size, 1, handle->out_stream); + } + } + // If probe is stopped and no data to flush, suspend the task + if (!handle->flags.is_started && uxQueueSpacesAvailable(handle->flush_que) == 2) { + vTaskSuspend(NULL); + } + } +} + +static void s_esp_probe_push_flush_queue(esp_probe_handle_t handle, void *data, uint32_t size, bool reset_ptr) +{ + esp_probe_flush_data_t flush_data = { + .data = data, + .size = size, + }; + TickType_t timeout_tick = 0; + if (!size) { + // If no data to flush but only inform the flush task to suspend + // then wait until data flushed + timeout_tick = portMAX_DELAY; + } + if (xQueueSend(handle->flush_que, &flush_data, timeout_tick) != pdTRUE) { + esp_probe_flush_data_t dummy; + xQueueReceive(handle->flush_que, &dummy, 0); + xQueueSend(handle->flush_que, &flush_data, 0); + ESP_LOGW(TAG, "data dropped"); + } + if (reset_ptr) { + handle->w_ptr = 0; + handle->f_ptr = 0; + } else { + handle->f_ptr = handle->w_ptr; // Update the flush pointer to the current write pointer + } +} + +static void s_esp_probe_dump_task(void *args) +{ + esp_probe_handle_t handle = (esp_probe_handle_t)args; + esp_probe_recv_data_t recv_data; + bool need_suspend = false; + uint32_t byte_dump = 0; + + // Suspend if not start probing yet + if (!handle->flags.is_started) { + vTaskSuspend(NULL); + } + + while (1) { + // Receive the data that from data receive callback + if (xQueueReceive(handle->recv_que, &recv_data, portMAX_DELAY) == pdTRUE) { + if (handle->buf_size) { // Buffer mode, adopt ping-pong buffer strategy to flush data + if (unlikely(handle->w_ptr + recv_data.size > handle->max_dump_size)) { + // If the received in buffer has exceeded the max_dump_size but not reached the buffer size + // Only dump the rest piece of data + byte_dump = handle->max_dump_size - handle->w_ptr; + } else { + // If the rest buffer is not sufficient for the received data + // Flush the second half of the buffer + if (handle->w_ptr + recv_data.size > handle->buf_size) { + s_esp_probe_push_flush_queue(handle, handle->buffer + handle->f_ptr, + handle->w_ptr - handle->f_ptr, true); + } + byte_dump = recv_data.size; + } + memcpy(handle->buffer + handle->w_ptr, recv_data.data, byte_dump); + handle->w_ptr += byte_dump; + + // If the last flush pointer is 0 and the stored data has exceed the half of the buffer + // Flush the first half of the buffer + // Here minus some extra bytes to trigger the flush more timely + if (!handle->f_ptr && handle->w_ptr >= handle->buf_size / 2 - 32) { + s_esp_probe_push_flush_queue(handle, handle->buffer, handle->w_ptr, false); + } + + } else { // Stream mode, write directly + if (handle->dump_data_size + recv_data.size > handle->max_dump_size) { + byte_dump = handle->max_dump_size - handle->dump_data_size; + } else { + byte_dump = recv_data.size; + } + fwrite(recv_data.data, byte_dump, 1, handle->out_stream); + } + // Update the dump data size statistic + handle->dump_data_size += byte_dump; + } + uint32_t exceed_bytes = 0; + // If reach the max dump size, suspend the task + if (handle->dump_data_size >= handle->max_dump_size) { + ESP_LOGW(TAG, "Dump data size reached the max dump size"); + need_suspend = true; + exceed_bytes = handle->dump_data_size - handle->max_dump_size; + } + // If probe is stopped, suspend the task + need_suspend |= !handle->flags.is_started; + + if (need_suspend) { + // Flush the legacy data before suspend + if (handle->buf_size) { + s_esp_probe_push_flush_queue(handle, handle->buffer + handle->f_ptr, + handle->w_ptr - handle->f_ptr - exceed_bytes, true); + } + vTaskSuspend(NULL); + } + } +} + +static void s_esp_probe_destroy_object(esp_probe_handle_t handle) +{ + if (handle) { + if (handle->buffer) { + free(handle->buffer); + handle->buffer = NULL; + } + if (handle->recv_que) { + vQueueDeleteWithCaps(handle->recv_que); + handle->recv_que = NULL; + } + if (handle->dump_task) { + vTaskDelete(handle->dump_task); + handle->dump_task = NULL; + } + if (handle->flush_que) { + vQueueDeleteWithCaps(handle->flush_que); + handle->flush_que = NULL; + } + if (handle->flush_task) { + vTaskDelete(handle->flush_task); + handle->flush_task = NULL; + } + free(handle); + } +} + +esp_err_t esp_new_probe(esp_probe_config_t *config, esp_probe_handle_t* ret_handle) +{ + ESP_RETURN_ON_FALSE(config && ret_handle, ESP_ERR_INVALID_ARG, TAG, "input parameter is NULL"); + // Get the max channel id and check whether any gpio specified + int max_chan_id = ESP_PROBE_MAX_CHANNEL_NUM - 1; + while (config->probe_gpio[max_chan_id] < 0) { + max_chan_id--; + ESP_RETURN_ON_FALSE(max_chan_id > 0, ESP_ERR_INVALID_ARG, TAG, "no gpio to probe"); + } + // Create the probe object + esp_err_t ret = ESP_OK; + esp_probe_handle_t probe = heap_caps_calloc(1, sizeof(struct esp_probe_t), ESP_PROBE_ALLOC_CAPS); + ESP_RETURN_ON_FALSE(probe, ESP_ERR_NO_MEM, TAG, "no memory for probe object"); + probe->max_dump_size = config->max_dump_size_kb ? (config->max_dump_size_kb << 10) : UINT32_MAX; + + // Allocate the storage buffer if the data should be cached + if (config->storage_depth_kb) { + if (config->storage_depth_kb < 8) { + ESP_LOGW(TAG, "the storage depth is at least 8 KB, set to 8 KB instead"); + probe->buf_size = 8192; + } else { + probe->buf_size = config->storage_depth_kb * 1024; + } + probe->buffer = calloc(1, probe->buf_size); + ESP_GOTO_ON_FALSE(probe->buffer, ESP_ERR_NO_MEM, err, TAG, "no memory for data storage"); + // Create flush task + xTaskCreate(s_esp_probe_flush_task, "esp_probe_flush_task", 4096, probe, + (UBaseType_t)config->dump_task_priority, &(probe->flush_task)); + // Create the flush queue + probe->flush_que = xQueueCreateWithCaps(2, sizeof(esp_probe_flush_data_t), MALLOC_CAP_DEFAULT); + ESP_GOTO_ON_FALSE(probe->flush_que, ESP_ERR_NO_MEM, err, TAG, "no memory for flush queue"); + } + + // Create the receive queue + probe->recv_que = xQueueCreateWithCaps(ESP_PROBE_DEFAULT_Q_DEPTH, sizeof(esp_probe_recv_data_t), ESP_PROBE_ALLOC_CAPS); + ESP_GOTO_ON_FALSE(probe->recv_que, ESP_ERR_NO_MEM, err, TAG, "no memory for receive queue"); + + // Create the dump task and suspend it + xTaskCreate(s_esp_probe_dump_task, "esp_probe_dump_task", 4096, probe, + (UBaseType_t)config->dump_task_priority, &(probe->dump_task)); + + // Initialize the hardware peripheral + ESP_GOTO_ON_ERROR(esp_probe_priv_init_hardware(probe, config, max_chan_id), err, TAG, "fail to init the hardware peripheral"); + + *ret_handle = probe; + return ret; + +err: + s_esp_probe_destroy_object(probe); + probe = NULL; + return ret; +} + +esp_err_t esp_del_probe(esp_probe_handle_t handle) +{ + ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, TAG, "input parameter is NULL"); + ESP_RETURN_ON_FALSE(!handle->flags.is_started, ESP_ERR_INVALID_STATE, TAG, "probe is still running"); + esp_probe_priv_deinit_hardware(handle); + s_esp_probe_destroy_object(handle); + return ESP_OK; +} + +esp_err_t esp_probe_start(esp_probe_handle_t handle, FILE *out_stream) +{ + ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, TAG, "input parameter is NULL"); + ESP_RETURN_ON_FALSE(!handle->flags.is_started, ESP_ERR_INVALID_STATE, TAG, "probe is still running"); + handle->flags.is_started = true; + + esp_err_t ret = ESP_OK; + ESP_GOTO_ON_ERROR(esp_probe_priv_enable_hardware(handle), err, TAG, "enable the hardware failed"); + out_stream = out_stream ? out_stream : stdout; + if (handle->out_stream != out_stream) { + handle->out_stream = out_stream; + // io stream changed, reset timestamp and dump data size + handle->dump_data_size = 0; + } + if (handle->buf_size) { + // Reset the queue before resume the task + xQueueReset(handle->flush_que); + vTaskResume(handle->flush_task); + } + // Reset the queue before resume the task + xQueueReset(handle->recv_que); + vTaskResume(handle->dump_task); + + return ret; +err: + handle->flags.is_started = false; + return ret; +} + +esp_err_t esp_probe_stop(esp_probe_handle_t handle, uint32_t *dump_data_size) +{ + ESP_RETURN_ON_FALSE(handle, ESP_ERR_INVALID_ARG, TAG, "input parameter is NULL"); + if (!handle->flags.is_started) { + return ESP_OK; + } + // Set start flag to false + handle->flags.is_started = false; + + // Waiting for the dump task be suspended after detecting the start flag is cleared + while (eTaskGetState(handle->dump_task) != eSuspended) { + vTaskDelay(1); + } + ESP_RETURN_ON_ERROR(esp_probe_priv_disable_hardware(handle), TAG, "disable the hardware failed"); + // Waiting for the flush task to flush the legacy data + if (handle->buf_size) { + // Push an empty data to inform the flush task to suspend + s_esp_probe_push_flush_queue(handle, NULL, 0, true); + while (eTaskGetState(handle->flush_task) != eSuspended) { + vTaskDelay(1); + } + } + if (dump_data_size) { + *dump_data_size = handle->dump_data_size; + } + return ESP_OK; +} diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe_private.h b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe_private.h new file mode 100644 index 0000000000..77d6b4b517 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/esp_probe_private.h @@ -0,0 +1,66 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include "stdint.h" +#include "sdkconfig.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "esp_heap_caps.h" +#include "esp_probe.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ESP_PROBE_DEFAULT_Q_DEPTH 8 +#define ESP_PROBE_DEFAULT_MAX_RECV_SIZE (ESP_PROBE_DEFAULT_Q_DEPTH * 4092) +#if CONFIG_PARLIO_ISR_IRAM_SAFE +#define ESP_PROBE_ALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT) +#else +#define ESP_PROBE_ALLOC_CAPS MALLOC_CAP_DEFAULT +#endif + +struct esp_probe_t { + uint32_t sample_width; /*!< sample width, i.e., enabled probe channel nums */ + uint32_t sample_rate_hz; /*!< sample rate in Hz */ + FILE *out_stream; /*!< Output stream */ + TaskHandle_t dump_task; /*!< Task handle of the raw data dump task */ + TaskHandle_t flush_task; /*!< Task handle of the raw data flush task, only created in buffer mode */ + int dump_task_priority; /*!< Task priority */ + uint32_t max_dump_size; /*!< Max dump size */ + uint32_t dump_data_size; /*!< Dump data size */ + QueueHandle_t recv_que; /*!< Receive data queue */ + QueueHandle_t flush_que; /*!< Flush data queue */ + uint8_t *buffer; /*!< The storage buffer for dump data */ + uint32_t buf_size; /*!< The storage buffer size/depth */ + uint32_t w_ptr; /*!< The pointer of the current write offset of the buffer */ + uint32_t f_ptr; /*!< The pointer of the current flush offset of the buffer */ + struct { + volatile uint32_t is_started: 1; /*!< Is the sampling started */ + } flags; +}; + +typedef struct { + void *data; /*!< The pointer of the received raw data buffer */ + uint32_t size; /*!< The size of the received raw data buffer */ +} esp_probe_recv_data_t; + +typedef esp_probe_recv_data_t esp_probe_flush_data_t; + +esp_err_t esp_probe_priv_init_hardware(esp_probe_handle_t handle, esp_probe_config_t *config, int max_chan_id); + +esp_err_t esp_probe_priv_deinit_hardware(esp_probe_handle_t handle); + +esp_err_t esp_probe_priv_enable_hardware(esp_probe_handle_t handle); + +esp_err_t esp_probe_priv_disable_hardware(esp_probe_handle_t handle); + +#ifdef __cplusplus +} +#endif diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/tcp_server.py b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/tcp_server.py new file mode 100644 index 0000000000..e5fee66ed4 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/tcp_server.py @@ -0,0 +1,76 @@ +# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import socket +from io import TextIOWrapper +from typing import Any + +from vcd_dumper import VCDDumper + + +def _get_local_host_ip() -> Any: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(('8.8.8.8', 80)) + return s.getsockname()[0] + + +def _tcp_server(port:int, chan_num:int, vcd_out_io:TextIOWrapper) -> None: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + host = _get_local_host_ip() + s.bind((host, port)) + s.listen(5) + print(f'TCP listening at {host}:{port}') + + try: + while True: + c, addr = s.accept() + print(f'Client {addr[0]}:{addr[1]} joined') + vcd = VCDDumper() + vcd.open_new_vcd_file(chan_num, vcd_out_io) + + while True: + recv_data = c.recv(16384) + if recv_data == b'': + break + print(f'data received {len(recv_data)} bytes') + vcd.dump_samples(recv_data) + + print(f'Client {addr[0]}:{addr[1]} left') + vcd.close_vcd_file() + c.close() + finally: + vcd.close_vcd_file() + c.close() + s.shutdown(socket.SHUT_RDWR) + s.close() + print('TCP server closed') + + +def tcp_server_main() -> None: + # Args parser + parser = argparse.ArgumentParser(description='Dump raw data to VCD format') + parser.add_argument('-n', '--chan-num', type=int, help='The channel number that probed') + parser.add_argument('-p', '--port', type=int, help='The TCP port', default=8888) + parser.add_argument('-o', '--output-file', type=argparse.FileType('w'), help='The output vcd file name (optional)', default=None) + + # Parse args + args = parser.parse_args() + chan_num = args.chan_num + port = args.port + vcd_out_io = args.output_file + if chan_num <= 0: + raise ValueError('Invalid channel number') + + # Get the actual probe channel number (round up to the nearest number that is power of 2) + p = 0 + while (1 << p) < chan_num: + p = p + 1 + chan_num = 1 << p + + _tcp_server(port, chan_num, vcd_out_io) + + +if __name__ == '__main__': + tcp_server_main() diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/vcd_dumper.py b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/vcd_dumper.py new file mode 100644 index 0000000000..0e7fdc0871 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/host/vcd_dumper.py @@ -0,0 +1,128 @@ +# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +# This dumper script run on the host after get the probed raw data on the host +# Usage: python vcd_dumper.py -n -f + +import argparse +import time +from io import FileIO, TextIOWrapper + + +class VCDDumper(): + def __init__(self) -> None: + pass + + def open_new_vcd_file(self, chan_num: int, vcd_out_io:TextIOWrapper) -> None: + self.ts = 0 + self.odd_samples = 0 + self.prev = 0 + self.chan_num = chan_num + self.step = 1 if chan_num <= 8 else 2 + # vcd file name + if vcd_out_io: + self.vcd = vcd_out_io + else: + dump_file = 'probe_{}.vcd'.format(time.strftime('%m-%d_%H-%M-%S')) + self.vcd = open(dump_file, 'w', encoding='utf-8') + + # Write VCD header + self.vcd.write('$date today $end\n' + '$timescale 1 ns $end\n' + '$scope module logic_analyzer $end\n') + for i in range(chan_num): + self.vcd.write(f'$var wire 1 {chr(33 + i)} chan_{i} $end\n') + self.vcd.write('$upscope $end\n' + '$enddefinitions $end\n' + '$dumpvars\n') + for i in range(chan_num): + self.vcd.write(f'0{chr(33 + i)}\n') + self.vcd.write('$end\n') + + def close_vcd_file(self) -> None: + if self.vcd: + self.vcd.close() + + def _dump_one_sample_to_vcd(self, prev:int, curr:int) -> None: + change_mask = prev ^ curr + if change_mask == 0: + return + self.vcd.write(f'#{self.ts}\n') + i = 0 + while change_mask != 0: + if change_mask & 1: + self.vcd.write(f'{(curr >> i) & 1}{chr(33 + i)}\n') + change_mask >>= 1 + i += 1 + + def dump_samples(self, raw_data:bytes) -> None: + # Parse the raw data and write VCD body + byte_cnt = 0 + # If last time is one byte left, load it + if self.odd_samples: + samples = self.odd_samples + self.odd_samples = 0 + byte_cnt = 1 + else: + samples = 0 + + # Loop the raw data and parse byte by byte + for byte in raw_data: + byte_cnt += 1 + if byte_cnt % self.step == 0: + samples = (samples & 0xff00) | byte + self.odd_samples = 0 + else: + samples = byte << 8 + self.odd_samples = samples + continue + samples = byte + + # Loop the samples in one byte + for _ in range((8 * self.step) // self.chan_num): + curr = samples & ((2 ** self.chan_num) - 1) + self._dump_one_sample_to_vcd(self.prev, curr) + samples >>= self.chan_num + self.prev = curr + self.ts += 1 + + def dump_samples_from_file(self, raw_in_io:FileIO) -> None: + data_bytes = raw_in_io.read() + self.dump_samples(data_bytes) + + +def dump_binary_raw_data_to_vcd(chan_num:int, raw_in_io:FileIO, vcd_out_io:TextIOWrapper) -> None: + vcd = VCDDumper() + vcd.open_new_vcd_file(chan_num, vcd_out_io) + vcd.dump_samples_from_file(raw_in_io) + vcd.close_vcd_file() + print('Converted successfully!') + + +def dump_vcd_main() -> None: + # Args parser + parser = argparse.ArgumentParser(description='Dump raw data to VCD format') + parser.add_argument('-n', '--chan-num', type=int, help='The channel number that probed') + parser.add_argument('-i', '--input-file', type=argparse.FileType('rb'), help='The the input raw data file') + parser.add_argument('-o', '--output-file', type=argparse.FileType('w'), help='The output vcd file name (optional)', default=None) + + # Parse args + args = parser.parse_args() + chan_num = args.chan_num + raw_in_io = args.input_file + vcd_out_io = args.output_file + if chan_num <= 0: + raise ValueError('Invalid channel number') + + # Get the actual probe channel number (round up to the nearest number that is power of 2) + p = 0 + while (1 << p) < chan_num: + p = p + 1 + chan_num = 1 << p + + # Convert the data to the VCD format and save it into the file + dump_binary_raw_data_to_vcd(chan_num, raw_in_io, vcd_out_io) + + +if __name__ == '__main__': + dump_vcd_main() diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c new file mode 100644 index 0000000000..389687f609 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/hw_impl/esp_probe_impl_parlio.c @@ -0,0 +1,147 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include "sdkconfig.h" +#include "driver/parlio_rx.h" +#include "esp_clk_tree.h" +#include "esp_heap_caps.h" +#include "esp_check.h" +#include "esp_probe_private.h" + +typedef struct { + parlio_rx_unit_handle_t rx_unit; + parlio_rx_delimiter_handle_t deli; + uint8_t *payload; +} esp_probe_impl_pralio_t; + +static const char *TAG = "esp_probe_impl"; +static esp_probe_impl_pralio_t *s_ephi = NULL; + +static bool s_esp_probe_on_recv_callback(parlio_rx_unit_handle_t rx_unit, const parlio_rx_event_data_t *edata, void *user_data) +{ + esp_probe_handle_t handle = (esp_probe_handle_t)user_data; + esp_probe_recv_data_t recv_data = { + .data = edata->data, + .size = edata->recv_bytes, + }; + BaseType_t need_yield; + xQueueSendFromISR(handle->recv_que, &recv_data, &need_yield); + + return need_yield == pdTRUE; +} + +esp_err_t esp_probe_priv_init_hardware(esp_probe_handle_t handle, esp_probe_config_t *config, int max_chan_id) +{ + ESP_RETURN_ON_FALSE(!s_ephi, ESP_ERR_INVALID_STATE, TAG, "parlio rx has initialized"); + ESP_RETURN_ON_FALSE(max_chan_id <= PARLIO_RX_UNIT_MAX_DATA_WIDTH, ESP_ERR_NOT_SUPPORTED, TAG, + "The target can only support upto %d channels", (int)PARLIO_RX_UNIT_MAX_DATA_WIDTH); + esp_err_t ret = ESP_OK; + s_ephi = calloc(1, sizeof(esp_probe_impl_pralio_t)); + ESP_RETURN_ON_FALSE(s_ephi, ESP_ERR_NO_MEM, TAG, "no memory for the esp probe hardware implementation"); + s_ephi->payload = heap_caps_calloc(1, ESP_PROBE_DEFAULT_MAX_RECV_SIZE, ESP_PROBE_ALLOC_CAPS); + ESP_GOTO_ON_FALSE(s_ephi->payload, ESP_ERR_NO_MEM, err, TAG, "no memory for payload"); + + // Get the channel number, the channel number can only be the power of 2 + uint32_t sample_width = 1; + while (sample_width < max_chan_id) { + sample_width <<= 1; + } + handle->sample_width = sample_width; + + // Get the sample rate + uint32_t src_freq_hz = 0; + esp_clk_tree_src_get_freq_hz(PARLIO_CLK_SRC_DEFAULT, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &src_freq_hz); + uint32_t sample_rate_hz = config->sample_rate_hz ? config->sample_rate_hz : src_freq_hz; + if (sample_rate_hz > src_freq_hz) { + ESP_LOGW(TAG, "sample rate exceed the max value, limited to %"PRIu32, src_freq_hz); + sample_rate_hz = src_freq_hz; + } + handle->sample_rate_hz = sample_rate_hz; + + // Allocate the parlio rx instance + parlio_rx_unit_config_t parlio_rx_cfg = { + .trans_queue_depth = ESP_PROBE_DEFAULT_Q_DEPTH, + .max_recv_size = ESP_PROBE_DEFAULT_MAX_RECV_SIZE, + .data_width = sample_width, + .clk_src = PARLIO_CLK_SRC_DEFAULT, + .ext_clk_freq_hz = 0, // Use the internal clock, no external clock needed + .clk_in_gpio_num = GPIO_NUM_NC, // Use the internal clock, no external clock input gpio needed + .exp_clk_freq_hz = sample_rate_hz, // Set expected clock frequency (i.e., sample rate) + .clk_out_gpio_num = GPIO_NUM_NC, // Use the internal clock for sampling and does not need to output + .valid_gpio_num = GPIO_NUM_NC, // Does not need valid gpio, all data gpio are used as sampling channel + .flags = { + .clk_gate_en = false, + .io_loop_back = true, + .io_no_init = true, + } + }; + memcpy(parlio_rx_cfg.data_gpio_nums, config->probe_gpio, PARLIO_RX_UNIT_MAX_DATA_WIDTH * sizeof(gpio_num_t)); + ESP_GOTO_ON_ERROR(parlio_new_rx_unit(&parlio_rx_cfg, &s_ephi->rx_unit), err, TAG, "Failed to allocate the parlio rx unit"); + + // Allocate the software delimiter + parlio_rx_soft_delimiter_config_t sft_deli_cfg = { + .sample_edge = PARLIO_SAMPLE_EDGE_POS, + .eof_data_len = 0xFFFF > ESP_PROBE_DEFAULT_MAX_RECV_SIZE ? ESP_PROBE_DEFAULT_MAX_RECV_SIZE : 0xFFFF, + .timeout_ticks = 0, + }; + ESP_GOTO_ON_ERROR(parlio_new_rx_soft_delimiter(&sft_deli_cfg, &s_ephi->deli), err, TAG, "Failed to allocate the delimiter"); + + // Register the data receive callback + parlio_rx_event_callbacks_t cbs = { + .on_partial_receive = s_esp_probe_on_recv_callback, + }; + ESP_GOTO_ON_ERROR(parlio_rx_unit_register_event_callbacks(s_ephi->rx_unit, &cbs, handle), err, TAG, "Failed to register the receive callback"); + + return ESP_OK; +err: + esp_probe_priv_deinit_hardware(handle); + return ret; +} + +esp_err_t esp_probe_priv_deinit_hardware(esp_probe_handle_t handle) +{ + (void)handle; + if (s_ephi) { + if (s_ephi->deli) { + ESP_RETURN_ON_ERROR(parlio_del_rx_delimiter(s_ephi->deli), TAG, "Failed to delete the parlio rx delimiter"); + s_ephi->deli = NULL; + } + if (s_ephi->rx_unit) { + ESP_RETURN_ON_ERROR(parlio_del_rx_unit(s_ephi->rx_unit), TAG, "Failed to delete the parlio rx unit"); + s_ephi->rx_unit = NULL; + } + if (s_ephi->payload) { + free(s_ephi->payload); + s_ephi->payload = NULL; + } + free(s_ephi); + s_ephi = NULL; + } + return ESP_OK; +} + +esp_err_t esp_probe_priv_enable_hardware(esp_probe_handle_t handle) +{ + (void)handle; + ESP_RETURN_ON_ERROR(parlio_rx_unit_enable(s_ephi->rx_unit, true), TAG, "Failed to enable the parlio rx unit"); + ESP_RETURN_ON_ERROR(parlio_rx_soft_delimiter_start_stop(s_ephi->rx_unit, s_ephi->deli, true), TAG, "Failed to start the soft delimiter"); + parlio_receive_config_t recv_cfg = { + .delimiter = s_ephi->deli, + .flags.partial_rx_en = true, // Infinite receiving, use callback to get received data + }; + ESP_RETURN_ON_ERROR(parlio_rx_unit_receive(s_ephi->rx_unit, s_ephi->payload, ESP_PROBE_DEFAULT_MAX_RECV_SIZE, &recv_cfg), TAG, "Failed to receive data"); + return ESP_OK; +} + +esp_err_t esp_probe_priv_disable_hardware(esp_probe_handle_t handle) +{ + (void)handle; + ESP_RETURN_ON_ERROR(parlio_rx_soft_delimiter_start_stop(s_ephi->rx_unit, s_ephi->deli, false), TAG, "Failed to stop the soft delimiter"); + ESP_RETURN_ON_ERROR(parlio_rx_unit_disable(s_ephi->rx_unit), TAG, "Failed to disable the parlio rx unit"); + return ESP_OK; +} diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe.h b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe.h new file mode 100644 index 0000000000..a6cec6f98f --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe.h @@ -0,0 +1,147 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include "driver/parlio_rx.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ESP_PROBE_MAX_CHANNEL_NUM 16 /*!< Max supported probe channel number. + Note that not all targets can reach the max channel, for example, ESP32-H2 has only 8 channels */ +#define ESP_PROBE_MAX_SAMPLE_RATE 0 /*!< The maximum sample rates are different among different targets, + Set 0 to adopt the maximum sample rate of the current target */ + +/** + * @brief ESP Probe stream mode default configuration + * @note The stream mode relies heavily on the bandwidth of the output stream + * Stream mode can only achieve a relatively low sample rate to guarantee no samples are dropped, + * But it can keep sampling continuously for a long time + */ +#define ESP_PROBE_DEFAULT_STREAM_CONFIG(rate_hz) { \ + .sample_rate_hz = rate_hz, \ + .dump_task_priority = 6, \ + .storage_depth_kb = 0, \ + .max_dump_size_kb = 0, \ + .probe_gpio = { \ + [0 ... ESP_PROBE_MAX_CHANNEL_NUM - 1] = -1, \ + }, \ +} + +/** + * @brief ESP Probe buffer mode default configuration + * @note The buffer mode will store the data onto heap storage first, + * and output all of them to the stream in once. + * @note The probe will stop if run out of the given storage on heap. + * So that to guarantee a reliable data storing during the sampling period. + * However, the disadvantage is that, the probing time is limited by the available heap size, + * the higher the sample rate is, the shorter time the sampling last. + */ +#define ESP_PROBE_DEFAULT_BUFFER_CONFIG(rate_hz, depth_kb) { \ + .sample_rate_hz = rate_hz, \ + .dump_task_priority = 6, \ + .storage_depth_kb = depth_kb, \ + .max_dump_size_kb = depth_kb, \ + .probe_gpio = { \ + [0 ... ESP_PROBE_MAX_CHANNEL_NUM - 1] = -1, \ + }, \ +} + +/** + * @brief ESP Probe buffer stream mode default configuration + * @note The buffer stream mode will store the data onto heap storage first, + * and output them to the stream every half of the storage + * @note Buffer stream mode means the probe will loop to use the given storage on heap. + * So that we can also sample the data continuously for a long time. + * However, while the data outputting rate can't catch the data producing rate, + * data will still be dropped. + * The difference comparing to the stream mode is that, it sends a larger block in every output, + * i.e., it can hold more reliable samples for a time + */ +#define ESP_PROBE_DEFAULT_BUFFER_STREAM_CONFIG(rate_hz, depth_kb) { \ + .sample_rate_hz = rate_hz, \ + .dump_task_priority = 6, \ + .storage_depth_kb = depth_kb, \ + .max_dump_size_kb = 0, \ + .probe_gpio = { \ + [0 ... ESP_PROBE_MAX_CHANNEL_NUM - 1] = -1, \ + }, \ +} + +typedef struct { + uint32_t sample_rate_hz; /*!< The sample rate of the probe, unit: Hz, set '0' to use the max sample rate */ + int probe_gpio[ESP_PROBE_MAX_CHANNEL_NUM]; /*!< The GPIO of each probe channel, please set '-1' for unused channels, + some targets like ESP32-H2 only support up to 8 channels */ + uint32_t storage_depth_kb; /*!< The max heap storage depth for probed data (unit: kilobytes). + 0: the probed data won't be stored but output in realtime, i.e. stream mode; + others: the probed data will be stored in a ping-pong buffer, + The ping-pong buffer will be flushed alternately, i.e. buffer mode. + ATTENTION: storage depth at lease be 8 KB, otherwise there is no difference with stream mode. */ + uint32_t max_dump_size_kb; /*!< The max dump size for the limited storage (like flash/ram) (unit: kilobytes), + The probe will stop if the dump data size reach this value. + set 0 for no dump size limitation (like dumping to the host via UART/USB/Network), + set equals to `storage_depth_kb` to guarantee no sample lost in a short time */ + uint32_t dump_task_priority; /*!< The priority of the dump task, which used for dumping the probed data via the out stream */ +} esp_probe_config_t; + +typedef struct esp_probe_t *esp_probe_handle_t; /*!< The handle of probe instance */ + +/** + * @brief Allocate a new probe instance + * + * @param[in] config The probe configuration + * @param[out] ret_handle The returned probe handle + * @return + * - ESP_OK Success to allocate the probe instance + * - ESP_NO_MEM No memory for probe instance + * - ESP_ERR_INVALID_ARG NULL pointer or invalid configuration + * - ESP_ERR_NOT_SUPPORTED Exceed the max supported channels + */ +esp_err_t esp_new_probe(esp_probe_config_t *config, esp_probe_handle_t* ret_handle); + +/** + * @brief Delete the probe instance + * + * @param[in] handle The probe handle + * @return + * - ESP_OK Success to delete the probe instance + * - ESP_ERR_INVALID_ARG NULL pointer + * - ESP_ERR_INVALID_STATE The probe has not stopped yet + */ +esp_err_t esp_del_probe(esp_probe_handle_t handle); + +/** + * @brief Start sampling on the probe channels + * + * @param[in] handle The probe handle + * @param[in] out_stream The output stream for the VCD data, set NULL will use 'stdout' by default + * @return + * - ESP_OK Success to start the sampling on the probe channels + * - ESP_ERR_INVALID_ARG NULL pointer + * - ESP_ERR_INVALID_STATE The probe has already started + */ +esp_err_t esp_probe_start(esp_probe_handle_t handle, FILE *out_stream); + +/** + * @brief Stop sampling on the probe channels + * @note If the 'esp_probe_config_t::storage_depth_kb' is set (i.e. buffer mode), + * The data in the buffer will be popped to the out stream after this function is called + * @note This function is + * + * @param[in] handle The probe handle + * @param[out] dump_data_size The dumped data size, can be NULL if not needed + * @return + * - ESP_OK Success to stop the sampling on the probe channels + * - Others Failed to stop the sampling + */ +esp_err_t esp_probe_stop(esp_probe_handle_t handle, uint32_t *dump_data_size); + +#ifdef __cplusplus +} +#endif diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe_streams.h b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe_streams.h new file mode 100644 index 0000000000..e92b7fe185 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/include/esp_probe_streams.h @@ -0,0 +1,74 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include "soc/soc_caps.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if SOC_WIFI_SUPPORTED || SOC_EMAC_SUPPORTED +/** + * @brief Open the output stream to the host via TCP + * + * @param[in] host_ip The host IP address + * @param[in] port The host port + * @return + * - The the output stream pointer + */ +FILE* esp_probe_open_tcp_stream(const char *host_ip, int port); + +/** + * @brief Close the output stream to the host + * + * @param[in] f The the output stream pointer + */ +void esp_probe_close_tcp_stream(FILE *f); +#endif // SOC_WIFI_SUPPORTED || SOC_EMAC_SUPPORTED + +/** + * @brief Initialize the FAT partition in SPIFlash + * + * @param[in] mount_point The mount point + * @param[in] partition_label The label of the partition that used for saving the raw probed data + * @param[out] size The size of this partition, can be NULL if not needed + * @return + * - ESP_ERR_NOT_FOUND: Not found the FAT partition with this label + * - ESP_OK: Initialize FAT partition success + * - others: Initialize failed due to other reasons + */ +esp_err_t esp_probe_init_spiflash_fatfs(const char *mount_point, const char *partition_label, uint32_t *size); + +/** + * @brief Deinitialize the FAT partition in SPIFlash + * + * @param[in] mount_point The mount point + */ +void esp_probe_deinit_spiflash_fatfs(const char *mount_point); + +/** + * @brief Open the output stream to the FAT partition in flash + * + * @param[in] file_path The file path to open + * @return + * - The the output stream pointer + */ +FILE* esp_probe_open_file_stream(const char *file_path); + +/** + * @brief Close the output stream to the FAT partition in flash + * + * @param[in] f The the output stream pointer + */ +void esp_probe_close_file_stream(FILE *f); + +#ifdef __cplusplus +} +#endif diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/file_stream.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/file_stream.c new file mode 100644 index 0000000000..8f46022e60 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/file_stream.c @@ -0,0 +1,31 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include "esp_check.h" + +const static char *TAG = "file_stream"; + +FILE* esp_probe_open_file_stream(const char *file_path) +{ + esp_err_t ret = ESP_FAIL; + // Create new raw data file + FILE *f = fopen(file_path, "wb"); + ESP_GOTO_ON_FALSE(f, ESP_FAIL, err, TAG, "Failed to open file, error %s", strerror(errno)); + ESP_LOGI(TAG, "Stream opened"); + + return f; +err: + ESP_LOGE(TAG, "Open Flash stream failed with error code %s", esp_err_to_name(ret)); + return NULL; +} + +void esp_probe_close_file_stream(FILE *f) +{ + fclose(f); +} diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/flash_fatfs.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/flash_fatfs.c new file mode 100644 index 0000000000..7805a219f3 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/flash_fatfs.c @@ -0,0 +1,41 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "esp_vfs_fat.h" +#include "esp_partition.h" +#include "esp_check.h" + +static const char *TAG = "flash_fat"; + +static wl_handle_t s_wlh = WL_INVALID_HANDLE; + +esp_err_t esp_probe_init_spiflash_fatfs(const char *mount_point, const char *partition_label, uint32_t *size) +{ + // Get the partition info + const esp_partition_t *part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, partition_label); + ESP_RETURN_ON_FALSE(part, ESP_ERR_NOT_FOUND, TAG, "Failed to find the partition with label %s", partition_label); + ESP_LOGI(TAG, "Probe data partition base addr: 0x%lx size: 0x%lx", part->address, part->size); + if (size) { + *size = (uint32_t)part->size; + } + + // Format and mount the partition of storage + esp_vfs_fat_mount_config_t mount_config = { + .max_files = 4, + .format_if_mount_failed = true, + .allocation_unit_size = CONFIG_WL_SECTOR_SIZE, + .disk_status_check_enable = false + }; + ESP_RETURN_ON_ERROR(esp_vfs_fat_spiflash_mount_rw_wl(mount_point, partition_label, &mount_config, &s_wlh), + TAG, "Failed to mount FATFS"); + ESP_LOGI(TAG, "flash FATFS mounted"); + return ESP_OK; +} + +void esp_probe_deinit_spiflash_fatfs(const char *mount_point) +{ + esp_vfs_fat_spiflash_unmount_rw_wl(mount_point, s_wlh); +} diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/tcp_stream.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/tcp_stream.c new file mode 100644 index 0000000000..a5d51fb91b --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/components/esp_probe/stream/tcp_stream.c @@ -0,0 +1,84 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "lwip/sockets.h" +#include "esp_check.h" + +#define EXAMPLE_ESP_MAXIMUM_RETRY 5 + +static const char *TAG = "tcp_stream"; + +static int s_tcp_client_connect(const char *host_ip, int port) +{ + int addr_family = 0; + int ip_protocol = 0; + + struct sockaddr_in dest_addr = {}; + dest_addr.sin_addr.s_addr = inet_addr(host_ip); + dest_addr.sin_family = AF_INET; + dest_addr.sin_port = htons(port); + addr_family = AF_INET; + ip_protocol = IPPROTO_IP; + + int sock = socket(addr_family, SOCK_STREAM, ip_protocol); + if (sock < 0) { + ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); + goto _exit; + } + ESP_LOGI(TAG, "Socket created, connecting to %s:%d", host_ip, port); + + int err = connect(sock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr_in6)); + if (err != 0) { + ESP_LOGE(TAG, "Socket unable to connect: errno %d", errno); + goto _exit; + } + ESP_LOGI(TAG, "Successfully connected"); + return sock; +_exit: + if (sock > 1) { + close(sock); + } + return -1; +} + +FILE* esp_probe_open_tcp_stream(const char *host_ip, int port) +{ + esp_err_t ret = ESP_FAIL; + + // Create a TCP socket + int sock = s_tcp_client_connect(host_ip, port); + if (sock < 0) { + goto err; + } + // LWIP socket has been registered to the VFS, associate the TCP socket with the file descriptor for output stream + FILE *f = fdopen(sock, "wb"); + ESP_GOTO_ON_FALSE(f, ESP_FAIL, err, TAG, "open tcp stream failed, error %s", strerror(errno)); + return f; + +err: + ESP_LOGE(TAG, "Open TCP stream failed with error code %s", esp_err_to_name(ret)); + return NULL; +} + +void esp_probe_close_tcp_stream(FILE *f) +{ + // Get the socket by the file descriptor + int sock = fileno(f); + // Close the file stream + fclose(f); + // Shutdown explicitly to inform the server no further data will be sent + shutdown(sock, SHUT_RDWR); + // Close the socket + close(sock); + ESP_LOGI(TAG, "TCP stream closed"); +} diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/img/gpio_sig.jpeg b/examples/peripherals/parlio/parlio_rx/logic_analyzer/img/gpio_sig.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c02c745b4cc508200cb4452a3915953f6b0da9aa GIT binary patch literal 95055 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 literal 0 HcmV?d00001 diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/img/i2s_sig.jpeg b/examples/peripherals/parlio/parlio_rx/logic_analyzer/img/i2s_sig.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..12111a4a0f4810925a72249aa435b1c6f4862031 GIT binary patch literal 199312 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%0At~;rdtCzs_48&-V^y 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 GGywpo1!D35 literal 0 HcmV?d00001 diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/img/pulseview.jpeg b/examples/peripherals/parlio/parlio_rx/logic_analyzer/img/pulseview.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a066a63e60bc78488d7f993f0b58342a13b1ced8 GIT binary patch literal 54021 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 J7T@@P6975sAFKcX literal 0 HcmV?d00001 diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/CMakeLists.txt b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/CMakeLists.txt new file mode 100644 index 0000000000..81a37c3a1f --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/CMakeLists.txt @@ -0,0 +1,3 @@ +idf_component_register(SRCS "logic_analyzer_example_main.c" + PRIV_REQUIRES esp_probe driver nvs_flash esp_netif protocol_examples_common + INCLUDE_DIRS ".") diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/Kconfig.projbuild b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/Kconfig.projbuild new file mode 100644 index 0000000000..de589fd111 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/Kconfig.projbuild @@ -0,0 +1,39 @@ +menu "ESP probe configurations" + + choice EXAMPLE_SIGNAL_SRC + prompt "Select signal source" + default EXAMPLE_INTERNAL_SIGNAL + config EXAMPLE_INTERNAL_SIGNAL + bool "Probing the internal signals" + config EXAMPLE_EXTERNAL_SIGNAL + bool "Probing the External signals" + endchoice + + choice EXAMPLE_STREAM + prompt "Select ESP probe dump stream" + default EXAMPLE_FLASH_STREAM if !SOC_WIFI_SUPPORTED && !SOC_EMAC_SUPPORTED + default EXAMPLE_TCP_STREAM if SOC_WIFI_SUPPORTED || SOC_EMAC_SUPPORTED + help + Select the dump stream for the sampled data + config EXAMPLE_FLASH_STREAM + bool "Dump data into FLASH" + config EXAMPLE_TCP_STREAM + depends on SOC_WIFI_SUPPORTED || SOC_EMAC_SUPPORTED + bool "Dump data to the host using TCP" + endchoice + + config EXAMPLE_HOST_IP_ADDR + depends on EXAMPLE_TCP_STREAM + default "192.168.1.100" + string "TCP server IP address" + config EXAMPLE_HOST_PORT + depends on EXAMPLE_TCP_STREAM + default 8888 + int "TCP server port" + + config EXAMPLE_PARTITION_LABEL + depends on EXAMPLE_FLASH_STREAM + default "storage" + string "The label of the data storage partition" + +endmenu diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/idf_component.yml b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/idf_component.yml new file mode 100644 index 0000000000..718194867b --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/idf_component.yml @@ -0,0 +1,3 @@ +dependencies: + protocol_examples_common: + path: ${IDF_PATH}/examples/common_components/protocol_examples_common diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/logic_analyzer_example_main.c b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/logic_analyzer_example_main.c new file mode 100644 index 0000000000..4f86027739 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/main/logic_analyzer_example_main.c @@ -0,0 +1,132 @@ +/* + * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: CC0-1.0 + */ + +#include +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "esp_check.h" +#include "esp_probe.h" +#include "esp_probe_streams.h" + +// Alias of the Kconfig options +#if CONFIG_EXAMPLE_TCP_STREAM +#include "nvs_flash.h" +#include "protocol_examples_common.h" +#include "esp_event.h" + +#define EXAMPLE_HOST_IP_ADDR CONFIG_EXAMPLE_HOST_IP_ADDR // Host IP (string) +#define EXAMPLE_HOST_PORT CONFIG_EXAMPLE_HOST_PORT // Host port (int) +#elif CONFIG_EXAMPLE_FLASH_STREAM +#define EXAMPLE_MOUNT_POINT "/esp_probe" +#define EXAMPLE_DATA_FILE_PATH EXAMPLE_MOUNT_POINT"/probe_raw.dat" +#define EXAMPLE_PARTITION_LABEL CONFIG_EXAMPLE_PARTITION_LABEL // Flash partition label (string, see 'partitions.csv') +#endif + +#define EXAMPLE_SAMPLE_RATE_HZ (8 * 1000 * 1000) +#define EXAMPLE_STORAGE_DEPTH_KB 128 + +// GPIOs to probe +const static int s_probe_gpio[] = {2, 3, 4, 5}; +const static char *TAG = "example"; +static esp_probe_handle_t s_probe = NULL; + +#if CONFIG_EXAMPLE_INTERNAL_SIGNAL +void example_init_gpio_to_generate_internal_signal(void) +{ + gpio_config_t gpio_cfg = { + .pin_bit_mask = BIT(s_probe_gpio[0]) | + BIT(s_probe_gpio[1]) | + BIT(s_probe_gpio[2]) | + BIT(s_probe_gpio[3]), + .mode = GPIO_MODE_INPUT_OUTPUT, + }; + gpio_config(&gpio_cfg); +} +#endif + +void example_probe_function(void) +{ +#if CONFIG_EXAMPLE_INTERNAL_SIGNAL + // Simulate the internal signals + // Pulses might not spread averagely because the thread might be interrupted + for (int cnt = 0; cnt < 100; cnt++) { + for (int i = 0; i < 4; i++) { + gpio_set_level(s_probe_gpio[i], cnt & BIT(i)); + } + vTaskDelay(pdMS_TO_TICKS(1)); + } +#else // CONFIG_EXAMPLE_EXTERNAL_SIGNAL + // Probing the external signal here + vTaskDelay(pdMS_TO_TICKS(100)); +#endif // CONFIG_EXAMPLE_INTERNAL_SIGNAL +} + +FILE *example_probe_init(void) +{ + FILE *f = NULL; + // Create dump stream +#if CONFIG_EXAMPLE_TCP_STREAM + ESP_ERROR_CHECK(nvs_flash_init()); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + ESP_ERROR_CHECK(example_connect()); + f = esp_probe_open_tcp_stream(EXAMPLE_HOST_IP_ADDR, EXAMPLE_HOST_PORT); +#elif CONFIG_EXAMPLE_FLASH_STREAM + ESP_ERROR_CHECK(esp_probe_init_spiflash_fatfs(EXAMPLE_MOUNT_POINT, EXAMPLE_PARTITION_LABEL, NULL)); + f = esp_probe_open_file_stream(EXAMPLE_DATA_FILE_PATH); +#endif + assert(f); + + // Configure and allocate the ESP probe + esp_probe_config_t config = ESP_PROBE_DEFAULT_BUFFER_CONFIG(EXAMPLE_SAMPLE_RATE_HZ, EXAMPLE_STORAGE_DEPTH_KB); + // Set the GPIOs to be probed + memcpy(&config.probe_gpio, &s_probe_gpio, sizeof(s_probe_gpio)); + ESP_ERROR_CHECK(esp_new_probe(&config, &s_probe)); + return f; +} + +void example_probe_signals(FILE *f, void (*probe_func)(void)) +{ + uint32_t dump_data_size = 0; + // Probe the signals during the function, the data will be dumped via the out stream + ESP_ERROR_CHECK(esp_probe_start(s_probe, f)); + probe_func(); + ESP_ERROR_CHECK(esp_probe_stop(s_probe, &dump_data_size)); + ESP_LOGI(TAG, "Probe finished! %"PRIu32" (0x%"PRIx32") bytes dumped\n", dump_data_size, dump_data_size); +} + +void example_probe_deinit(FILE *f) +{ + // Delete the probe instance and free the resources + ESP_ERROR_CHECK(esp_del_probe(s_probe)); + s_probe = NULL; + + // Close the output stream +#if CONFIG_EXAMPLE_TCP_STREAM + esp_probe_close_tcp_stream(f); + example_disconnect(); +#elif CONFIG_EXAMPLE_FLASH_STREAM + esp_probe_close_file_stream(f); + esp_probe_deinit_spiflash_fatfs(EXAMPLE_PARTITION_LABEL); +#endif +} + +void app_main(void) +{ +#if CONFIG_EXAMPLE_INTERNAL_SIGNAL + // If choose to probe the internal signals via IO MUX, init GPIOs for simulating the internal signals + example_init_gpio_to_generate_internal_signal(); +#endif + // Initialize the probe, the probe needs an output stream to dump the raw data + FILE *f = example_probe_init(); + // Use the probe as decorator, probe the signals that generated during this function + example_probe_signals(f, example_probe_function); + // Deinitialize the probe, close the output stream + example_probe_deinit(f); +} diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/partitions.csv b/examples/peripherals/parlio/parlio_rx/logic_analyzer/partitions.csv new file mode 100644 index 0000000000..f8c91a89ce --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/partitions.csv @@ -0,0 +1,5 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap +nvs, data, nvs, 0x9000, 0x6000, +factory, 0, 0, 0x10000, 1M, +storage, data, fat, , 528K, diff --git a/examples/peripherals/parlio/parlio_rx/logic_analyzer/sdkconfig.defaults b/examples/peripherals/parlio/parlio_rx/logic_analyzer/sdkconfig.defaults new file mode 100644 index 0000000000..c9861483a4 --- /dev/null +++ b/examples/peripherals/parlio/parlio_rx/logic_analyzer/sdkconfig.defaults @@ -0,0 +1,6 @@ +CONFIG_ESP_TASK_WDT_EN=n +CONFIG_FREERTOS_HZ=1000 +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_FATFS_LFN_STACK=y +CONFIG_VFS_SUPPORT_IO=y diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/CMakeLists.txt b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/CMakeLists.txt similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/CMakeLists.txt rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/CMakeLists.txt diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/README.md b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/README.md similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/README.md rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/README.md diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/main/CMakeLists.txt b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/CMakeLists.txt similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/main/CMakeLists.txt rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/CMakeLists.txt diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/main/idf_component.yml b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/idf_component.yml similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/main/idf_component.yml rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/idf_component.yml diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/main/lvgl_demo_ui.c b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/lvgl_demo_ui.c similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/main/lvgl_demo_ui.c rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/lvgl_demo_ui.c diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/main/rgb_led_matrix_example_main.c b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/rgb_led_matrix_example_main.c similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/main/rgb_led_matrix_example_main.c rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/main/rgb_led_matrix_example_main.c diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/pytest_simple_rgb_led_matrix.py b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/pytest_simple_rgb_led_matrix.py similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/pytest_simple_rgb_led_matrix.py rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/pytest_simple_rgb_led_matrix.py diff --git a/examples/peripherals/parlio/simple_rgb_led_matrix/sdkconfig.defaults b/examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/sdkconfig.defaults similarity index 100% rename from examples/peripherals/parlio/simple_rgb_led_matrix/sdkconfig.defaults rename to examples/peripherals/parlio/parlio_tx/simple_rgb_led_matrix/sdkconfig.defaults