From 7c09cb1739ba78589e93ba99274185e0b9419c7e Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Tue, 14 Apr 2020 16:11:41 +0800 Subject: [PATCH 1/3] examples: update app_trace example relevant paths in README --- examples/system/app_trace_to_host/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/system/app_trace_to_host/README.md b/examples/system/app_trace_to_host/README.md index 84eafa1497..6ea19b0475 100644 --- a/examples/system/app_trace_to_host/README.md +++ b/examples/system/app_trace_to_host/README.md @@ -68,7 +68,7 @@ idf.py -p PORT flash monitor (Replace PORT with the name of the serial port to use.) -**Start App Trace:** In the telnet session window, trigger OpenOCD to start App Trace on the ESP32 by entering the command below. This command will collect 9000 bytes of JTAG log data and save them to `adc.log` file in `~/esp/openocd-esp32` folder. +**Start App Trace:** In the telnet session window, trigger OpenOCD to start App Trace on the ESP32 by entering the command below. This command will collect 9000 bytes of JTAG log data and save them to `adc.log` file in the example folder. ```bash esp apptrace start file://adc.log 0 9000 5 0 0 @@ -102,7 +102,7 @@ I (4329) example: Collected 5 samples in 20 ms. To access the JTAG logs, the `adc.log` file should be decoded. This can be done by using the `logtrace_proc.py` script as such: ```bash -$IDF_PATH/tools/esp_app_trace/logtrace_proc.py ~/esp/openocd-esp32/adc.log ~/esp/app_trace_to_host/build/app_trace_to_host_test.elf +$IDF_PATH/tools/esp_app_trace/logtrace_proc.py adc.log build/app_trace_to_host.elf ``` The `logtrace_proc.py` script should produce the following output when decoding: From 666ee00ebe8332630b1eb5bb646ff020d6358530 Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Tue, 14 Apr 2020 16:12:43 +0800 Subject: [PATCH 2/3] examples: update app_trace pins for esp32s2 --- examples/system/app_trace_to_host/README.md | 13 ++++++------- .../main/app_trace_to_host_example_main.c | 11 +++++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/system/app_trace_to_host/README.md b/examples/system/app_trace_to_host/README.md index 6ea19b0475..b540cd4a90 100644 --- a/examples/system/app_trace_to_host/README.md +++ b/examples/system/app_trace_to_host/README.md @@ -1,6 +1,3 @@ -| Supported Targets | ESP32 | -| ----------------- | ----- | - # Application Level Tracing Example (Logging to Host) (See the README.md file in the upper level 'examples' directory for more information about examples.) @@ -30,11 +27,13 @@ This example will assume that that an ESP-WROVER-KIT is used. #### Pin Assignment: -The sinusoidal signal of 50 to 60 Hz ranging from 0 V ~ 3.1 V should be input into `GPIO34` (`ADC1_CHANNEL_6`). Users may provide this signal themselves, our use the DAC generated signal by bridging GPIO34 with `GPIO25` (`DAC_CHANNEL_1`). +The sinusoidal signal of 50 to 60 Hz ranging from 0 V ~ 3.1 V should be input into `ADC1_CHANNEL_6`. Users may provide this signal themselves, or use the example-generated signal in `DAC_CHANNEL_1`. Listed below are the corresponding DAC/ADC channel pins +for supported targets. -| DAC Output | ADC Input | -| ------------------ | ------------------ | -| Channel 1 (GPIO25) | Channel 6 (GPIO34) | +| Target | DAC Output | ADC Input | +| ------------------ | ------------------ | ------------------ | +| ESP32 | Channel 1 (GPIO25) | Channel 6 (GPIO34) | +| ESP32S2 | Channel 1 (GPIO17) | Channel 6 (GPIO7) | #### Extra Connections: diff --git a/examples/system/app_trace_to_host/main/app_trace_to_host_example_main.c b/examples/system/app_trace_to_host/main/app_trace_to_host_example_main.c index 36ac767e9e..074df95142 100644 --- a/examples/system/app_trace_to_host/main/app_trace_to_host_example_main.c +++ b/examples/system/app_trace_to_host/main/app_trace_to_host_example_main.c @@ -16,8 +16,11 @@ #include "soc/sens_periph.h" #include "driver/adc.h" #include "driver/dac.h" +#include "soc/adc_channel.h" +#include "soc/dac_channel.h" #define ADC1_TEST_CHANNEL (ADC1_CHANNEL_6) + #define TEST_SAMPLING_PERIOD 20 /* @@ -41,7 +44,7 @@ static const char *TAG = "example"; /* * Enable cosine waveform generator (CW) - * on channel 1 / GPIO25 to provide sinusoidal signal + * on DAC channel 1 to provide sinusoidal signal * It can be used instead of a live signal for testing * of speed of logging to the host * sequentially with data retrieval from ADC @@ -65,7 +68,7 @@ static void enable_cosine_generator(void) } /* - * Sample data an ADC1 channel 6 / GPIO34 + * Sample data an ADC1 channel 6 * over specific 'sampling_period' in milliseconds. * Print out sampling result using standard ESP_LOGI() function. * Return the number of samples collected. @@ -87,7 +90,7 @@ static int adc1_sample_and_show(int sampling_period) */ void app_main(void) { - ESP_LOGI(TAG, "Enabling ADC1 on channel 6 / GPIO34."); + ESP_LOGI(TAG, "Enabling ADC1 on channel 6 / GPIO%d.", ADC1_CHANNEL_6_GPIO_NUM); #if CONFIG_IDF_TARGET_ESP32 adc1_config_width(ADC_WIDTH_BIT_12); #elif CONFIG_IDF_TARGET_ESP32S2 @@ -95,7 +98,7 @@ void app_main(void) #endif adc1_config_channel_atten(ADC1_TEST_CHANNEL, ADC_ATTEN_DB_11); - ESP_LOGI(TAG, "Enabling CW generator on DAC channel 1 / GPIO25."); + ESP_LOGI(TAG, "Enabling CW generator on DAC channel 1 / GPIO%d.", DAC_CHANNEL_1_GPIO_NUM); enable_cosine_generator(); while (1) { From e24c8eada3d70ee008e5457fa89596200cbbb37e Mon Sep 17 00:00:00 2001 From: Renz Bagaporo Date: Tue, 5 May 2020 15:50:48 +0800 Subject: [PATCH 3/3] examples: additional changes to app_trace example README for esp32s2 --- examples/system/app_trace_to_host/README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/system/app_trace_to_host/README.md b/examples/system/app_trace_to_host/README.md index b540cd4a90..bb396f0c85 100644 --- a/examples/system/app_trace_to_host/README.md +++ b/examples/system/app_trace_to_host/README.md @@ -6,29 +6,28 @@ This example demonstrates how to use the [Application Level Tracing Library](htt UART logs are time consuming and can significantly slow down the function that calls it. Therefore, it is generally a bad idea to use UART logs in time-critical functions. Logging to host via JTAG is significantly faster and can be used in time-critical functions. For more details regarding logging to host via JTAG, refer to the [Logging to Host Documentation](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/app_trace.html#app-trace-logging-to-host). -This example demonstrates JTAG logging to host in the context of polling for a [zero crossing](https://en.wikipedia.org/wiki/Zero_crossing). The ESP32 will continuously sample a 50 to 60 Hz sinusoidal signal (using the ADC) and log the sampled values (via JTAG). Due to the higher speed of JTAG logging, the polling rate of the ADC should be high enough to detect a zero crossing. +This example demonstrates JTAG logging to host in the context of polling for a [zero crossing](https://en.wikipedia.org/wiki/Zero_crossing). The example app will continuously sample a 50 to 60 Hz sinusoidal signal (using the ADC) and log the sampled values (via JTAG). Due to the higher speed of JTAG logging, the polling rate of the ADC should be high enough to detect a zero crossing. This example utilizes the following ESP-IDF features: * [DAC driver](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/dac.html) to generate the 50 Hz sinusoidal signal. * [ADC driver](https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/adc.html) to sample the sinusoidal signal. * [Application Level Tracing Library](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/app_trace.html#) to log ADC samples to host. -* [OpenOCD](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html#setup-of-openocd) to interface with the ESP32 and receive the log output over JTAG. +* [OpenOCD](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html#setup-of-openocd) to interface with the target and receive the log output over JTAG. ## How to use example ### Hardware Required -To run this example, you need an ESP32 dev board connected to a JTAG adapter, which can come in the following forms: +To run this example, you need a supported target dev board connected to a JTAG adapter, which can come in the following forms: * [ESP-WROVER-KIT](https://docs.espressif.com/projects/esp-idf/en/latest/hw-reference/modules-and-boards.html#esp-wrover-kit-v4-1) which integrates an on-board JTAG adapter. Ensure that the [required jumpers to enable JTAG are connected](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/get-started-wrover-kit.html#setup-options) on the WROVER-KIT. -* ESP32 core board (e.g. ESP32-DevKitC) can also work as long as you connect it to an external JTAG adapter (e.g. FT2232H, J-LINK). +* ESP32 or ESP32-S2 core board (e.g. ESP32-DevKitC, [ESP32-S2-Saola-1](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html)) can also work as long as you connect it to an external JTAG adapter (e.g. FT2232H, J-LINK). This example will assume that that an ESP-WROVER-KIT is used. #### Pin Assignment: -The sinusoidal signal of 50 to 60 Hz ranging from 0 V ~ 3.1 V should be input into `ADC1_CHANNEL_6`. Users may provide this signal themselves, or use the example-generated signal in `DAC_CHANNEL_1`. Listed below are the corresponding DAC/ADC channel pins -for supported targets. +The sinusoidal signal of 50 to 60 Hz ranging from 0 V ~ 3.1 V should be input into `ADC1_CHANNEL_6`. Users may provide this signal themselves, or use the example-generated signal in `DAC_CHANNEL_1`. Listed below are the corresponding DAC/ADC channel pins for supported targets. | Target | DAC Output | ADC Input | | ------------------ | ------------------ | ------------------ | @@ -37,7 +36,7 @@ for supported targets. #### Extra Connections: -1. Connect the JTAG interface to ESP32 board, and power up both the JTAG and ESP32. For details about how to set up JTAG interface, please see [JTAG Debugging](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html). +1. Connect the JTAG interface to the target board. For details about how to set up JTAG interface, please see [JTAG Debugging](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html). Power up both the JTAG debugger and target board. 2. After connecting JTAG interface, you need to [Run OpenOCD](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/index.html#run-openocd). @@ -67,7 +66,9 @@ idf.py -p PORT flash monitor (Replace PORT with the name of the serial port to use.) -**Start App Trace:** In the telnet session window, trigger OpenOCD to start App Trace on the ESP32 by entering the command below. This command will collect 9000 bytes of JTAG log data and save them to `adc.log` file in the example folder. +**Start App Trace:** In the telnet session window, trigger OpenOCD to start App Trace on the target by entering the command below. This command will collect 9000 bytes of JTAG log data and save them to the file `file://adc.log` (note `file://` depends on +where OpenOCD was started). Assuming that OpenOCD was started in this example's directory, `adc.log` will be saved here as well. + ```bash esp apptrace start file://adc.log 0 9000 5 0 0 @@ -156,9 +157,9 @@ Log records count: 428 ## Troubleshooting -### Unable to flash when OpenOCD is connected to ESP32 +### Unable to flash when OpenOCD is connected to the target -One likely cause would be an incorrect SPI flash voltage when starting OpenOCD. Suppose an ESP32 board/module with a 3.3 V powered SPI flash is being used, but the `board/esp32-wrover.cfg` configuration file is selected when starting OpenOCD which can set the SPI flash voltage to 1.8 V. In this situation, the SPI flash will not work after OpenOCD connects to the ESP32 as OpenOCD has changed the SPI flash voltage. Therefore, you might not be able to flash ESP32 when OpenOCD is connected. +On ESP32 boards, one likely cause would be an incorrect SPI flash voltage when starting OpenOCD. Suppose a target board/module with a 3.3 V powered SPI flash is being used, but the configuration file (ex. `board/esp32-wrover.cfg` for ESP32) is selected when starting OpenOCD which can set the SPI flash voltage to 1.8 V. In this situation, the SPI flash will not work after OpenOCD connects to the target as OpenOCD has changed the SPI flash voltage. Therefore, you might not be able to flash to the target when OpenOCD is connected. To work around this issue, users are suggested to use `board/esp32-wrover.cfg` for ESP32 boards/modules operating with an SPI flash voltage of 1.8 V, and `board/esp-wroom-32.cfg` for 3.3 V. Refer to [ESP32 Modules and Boards](https://docs.espressif.com/projects/esp-idf/en/latest/hw-reference/modules-and-boards.html) and [Set SPI Flash Voltage](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/jtag-debugging/tips-and-quirks.html#why-to-set-spi-flash-voltage-in-openocd-configuration) for more details.