June 16, 2022

Dig a bit into esp-idf

I type "esp_idf" then "which idf.py" and get:
/u1/Projects/RISCV/esp32c3/esp-idf/tools/idf.py
Note that typing "idf.py" gives a bunch of information.

At least this is python, which from among many options is among the better ones. Thanks be to God it isn't Tcl or Java. I've had enough wretched slow Java based tools (yes, Eclipse, I am looking at you!).

esptool

This is "~/.espressif/python_env/idf5.0_py3.10_env/bin/esptool.py" and you can run it!
[tom@trona tools]$ esptool.py flash_id
esptool.py v4.1
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... ESP32-C3
Chip is ESP32-C3 (revision 3)
Features: Wi-Fi
Crystal is 40MHz
MAC: 34:b4:72:4c:xx:xx
Uploading stub...
Running stub...
Stub running...
Manufacturer: 20
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

[tom@trona tools]$ esptool.py chip_id
esptool.py v4.1
.....
Stub running...
Warning: ESP32-C3 has no Chip ID. Reading MAC instead.
MAC: 34:b4:72:4c:xx:xx
Hard resetting via RTS pin...
You can also directly run "idf_monitor.py" which runs /u1/Projects/RISCV/esp32c3/esp-idf/tools/idf_monitor.py

So, things are split between stuff that you got via the initial clone (which is in /u1/Projects/RISCV/esp32c3/esp-idf/) and stuff the install script installed (which is in /home/tom/.espressif).

What does a project look like?

We are just doing a recon, not trying to dig out every detail. Let's look at the last example project I worked on:
cd /u1/Projects/RISCV/esp32c3/blink
In here we have "sdkconfig" which has a bunch of options. The action is in the "build" directory. To have any clue about what is going on here, a person will need to learn about "build ninja": Just for the record, the "build.ninja" file for the simple blink demo is 14,411 lines !! And indeed the "build.ninja" file is the equivalent of the Makefile for build-ninja.

idf.py -v build

This gives a lot of details. Many of the command lines are extremely long. Here is my trimmed versions after doing a "touch" of the only source file in the blink project:
cd /u1/Projects/riscv/esp32c3/blink
touch main/*.c
idf.py -v build
...
Constraint file: /home/tom/.espressif/espidf.constraints.v5.0.txt
Requirement files:
 - /u1/Projects/RISCV/esp32c3/esp-idf/tools/requirements/requirements.core.txt
Python being checked: /home/tom/.espressif/python_env/idf5.0_py3.10_env/bin/python
Executing action: all (aliases: build)
Running ninja in directory /u1/Projects/RISCV/esp32c3/blink/build
Executing "ninja -v all"...
[1/9] cd /u1/Projects/RISCV/esp32c3/blink/build/bootloader && /usr/bin/cmake --build .

[1/1] cd /u1/Projects/RISCV/esp32c3/blink/build/bootloader/esp-idf/esptool_py &&
    /home/tom/.espressif/python_env/idf5.0_py3.10_env/bin/python
    /u1/Projects/RISCV/esp32c3/esp-idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0
    /u1/Projects/RISCV/esp32c3/blink/build/bootloader/bootloader.bin
Bootloader binary size 0x50e0 bytes. 0x2f20 bytes (37%) free.

[2/7] /home/tom/.espressif/tools/riscv32-esp-elf/esp-2022r1-RC1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-gcc
    .....................
    -o esp-idf/main/CMakeFiles/__idf_main.dir/blink_example_main.c.obj -c
    /u1/Projects/RISCV/esp32c3/blink/main/blink_example_main.c

[3/7] : && /usr/bin/cmake -E rm -f esp-idf/main/libmain.a &&
    /home/tom/.espressif/tools/riscv32-esp-elf/esp-2022r1-RC1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-ar qc
    esp-idf/main/libmain.a
    esp-idf/main/CMakeFiles/__idf_main.dir/blink_example_main.c.obj &&
    /home/tom/.espressif/tools/riscv32-esp-elf/esp-2022r1-RC1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-ranlib
    esp-idf/main/libmain.a && :

[4/7] cd /u1/Projects/RISCV/esp32c3/blink/build/esp-idf/esp_system &&
    /home/tom/.espressif/python_env/idf5.0_py3.10_env/bin/python
    /u1/Projects/RISCV/esp32c3/esp-idf/tools/ldgen/ldgen.py --config
    /u1/Projects/RISCV/esp32c3/blink/sdkconfig --fragments-list
       "/u1/Projects/RISCV/esp32c3/esp-idf/components/riscv/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_ringbuf/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/driver/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_pm/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/spi_flash/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_system/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_system/app.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_rom/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/hal/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/log/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/heap/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/soc/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_hw_support/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/freertos/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/newlib/newlib.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/newlib/system_libs.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_common/common.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_common/soc.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/app_trace/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_event/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_phy/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/lwip/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/bt/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_gdbstub/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_lcd/linker.lf;
    /u1/Projects/RISCV/esp32c3/esp-idf/components/espcoredump/linker.lf"
    --input /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_system/ld/esp32c3/sections.ld.in
    --output /u1/Projects/RISCV/esp32c3/blink/build/esp-idf/esp_system/ld/sections.ld
    --kconfig /u1/Projects/RISCV/esp32c3/esp-idf/Kconfig
    --env-file /u1/Projects/RISCV/esp32c3/blink/build/config.env
    --libraries-file /u1/Projects/RISCV/esp32c3/blink/build/ldgen_libraries
    --objdump /home/tom/.espressif/tools/riscv32-esp-elf/esp-2022r1-RC1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-objdump

[5/7] : && /home/tom/.espressif/tools/riscv32-esp-elf/esp-2022r1-RC1-11.2.0/riscv32-esp-elf/bin/riscv32-esp-elf-g++
    -march=rv32imc -nostartfiles -march=rv32imc --specs=nosys.specs
    CMakeFiles/blink.elf.dir/project_elf_src_esp32c3.c.obj -o blink.elf  esp-idf/riscv/libriscv.a
    esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/esp_pm/libesp_pm.a
    esp-idf/mbedtls/libmbedtls.a  esp-idf/app_update/libapp_update.a  esp-idf/bootloader_support/libbootloader_support.a
    esp-idf/spi_flash/libspi_flash.a  esp-idf/pthread/libpthread.a  esp-idf/esp_system/libesp_system.a  esp-idf/esp_rom/libesp_rom.a
    esp-idf/hal/libhal.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/soc/libsoc.a  esp-idf/esp_hw_support/libesp_hw_support.a
    esp-idf/freertos/libfreertos.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/esp_common/libesp_common.a
    esp-idf/esp_timer/libesp_timer.a  esp-idf/app_trace/libapp_trace.a  esp-idf/vfs/libvfs.a  esp-idf/esp_eth/libesp_eth.a
    esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/esp_phy/libesp_phy.a
    esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/asio/libasio.a
    esp-idf/unity/libunity.a  esp-idf/cmock/libcmock.a  esp-idf/console/libconsole.a  esp-idf/http_parser/libhttp_parser.a
    esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc_cal/libesp_adc_cal.a  esp-idf/esp_gdbstub/libesp_gdbstub.a  esp-idf/esp_hid/libesp_hid.a
    esp-idf/tcp_transport/libtcp_transport.a  esp-idf/esp_http_client/libesp_http_client.a  esp-idf/esp_http_server/libesp_http_server.a
    esp-idf/esp_https_ota/libesp_https_ota.a  esp-idf/esp_lcd/libesp_lcd.a  esp-idf/protobuf-c/libprotobuf-c.a  esp-idf/protocomm/libprotocomm.a
    esp-idf/mdns/libmdns.a  esp-idf/esp_local_ctrl/libesp_local_ctrl.a  esp-idf/sdmmc/libsdmmc.a  esp-idf/esp_serial_slave_link/libesp_serial_slave_link.a
    esp-idf/espcoredump/libespcoredump.a  esp-idf/wear_levelling/libwear_levelling.a  esp-idf/fatfs/libfatfs.a  esp-idf/json/libjson.a
    esp-idf/mqtt/libmqtt.a  esp-idf/spiffs/libspiffs.a  esp-idf/wifi_provisioning/libwifi_provisioning.a  esp-idf/main/libmain.a
    esp-idf/led_strip/libled_strip.a
    -Wl,--cref  -Wl,--defsym=IDF_TARGET_ESP32C3=0  -Wl,--Map="/u1/Projects/RISCV/esp32c3/blink/build/blink.map"
    -fno-rtti  -fno-lto  -Wl,--gc-sections  -Wl,--warn-common
    esp-idf/app_trace/libapp_trace.a  esp-idf/app_trace/libapp_trace.a
    -lgcov  esp-idf/app_trace/libapp_trace.a
    -lgcov  esp-idf/asio/libasio.a  esp-idf/cmock/libcmock.a  esp-idf/unity/libunity.a  esp-idf/esp_adc_cal/libesp_adc_cal.a
    esp-idf/esp_hid/libesp_hid.a  esp-idf/esp_lcd/libesp_lcd.a  esp-idf/esp_local_ctrl/libesp_local_ctrl.a  esp-idf/mdns/libmdns.a
    esp-idf/espcoredump/libespcoredump.a  esp-idf/fatfs/libfatfs.a  esp-idf/wear_levelling/libwear_levelling.a  esp-idf/mqtt/libmqtt.a
    esp-idf/spiffs/libspiffs.a  esp-idf/wifi_provisioning/libwifi_provisioning.a  esp-idf/protocomm/libprotocomm.a  esp-idf/console/libconsole.a
    esp-idf/protobuf-c/libprotobuf-c.a  esp-idf/json/libjson.a  esp-idf/riscv/libriscv.a  esp-idf/esp_ringbuf/libesp_ringbuf.a
    esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a  esp-idf/esp_pm/libesp_pm.a  esp-idf/mbedtls/libmbedtls.a
    esp-idf/app_update/libapp_update.a  esp-idf/bootloader_support/libbootloader_support.a  esp-idf/spi_flash/libspi_flash.a
    esp-idf/pthread/libpthread.a  esp-idf/esp_system/libesp_system.a  esp-idf/esp_rom/libesp_rom.a  esp-idf/hal/libhal.a  esp-idf/log/liblog.a
    esp-idf/heap/libheap.a  esp-idf/soc/libsoc.a  esp-idf/esp_hw_support/libesp_hw_support.a  esp-idf/freertos/libfreertos.a
    esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/esp_common/libesp_common.a  esp-idf/esp_timer/libesp_timer.a
    esp-idf/vfs/libvfs.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/esp_netif/libesp_netif.a  esp-idf/esp_event/libesp_event.a
    esp-idf/nvs_flash/libnvs_flash.a  esp-idf/esp_phy/libesp_phy.a  esp-idf/wpa_supplicant/libwpa_supplicant.a  esp-idf/esp_wifi/libesp_wifi.a
    esp-idf/lwip/liblwip.a  esp-idf/http_parser/libhttp_parser.a  esp-idf/esp-tls/libesp-tls.a  esp-idf/esp_gdbstub/libesp_gdbstub.a
    esp-idf/tcp_transport/libtcp_transport.a  esp-idf/esp_http_client/libesp_http_client.a  esp-idf/esp_http_server/libesp_http_server.a
    esp-idf/esp_https_ota/libesp_https_ota.a  esp-idf/sdmmc/libsdmmc.a  esp-idf/esp_serial_slave_link/libesp_serial_slave_link.a
    esp-idf/mbedtls/mbedtls/library/libmbedtls.a  esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a  esp-idf/mbedtls/mbedtls/library/libmbedx509.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libcoexist.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libcore.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libespnow.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libmesh.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libnet80211.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libpp.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libsmartconfig.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libwapi.a
    esp-idf/riscv/libriscv.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a
    esp-idf/esp_pm/libesp_pm.a  esp-idf/mbedtls/libmbedtls.a  esp-idf/app_update/libapp_update.a  esp-idf/bootloader_support/libbootloader_support.a
    esp-idf/spi_flash/libspi_flash.a  esp-idf/pthread/libpthread.a  esp-idf/esp_system/libesp_system.a  esp-idf/esp_rom/libesp_rom.a
    esp-idf/hal/libhal.a  esp-idf/log/liblog.a  esp-idf/heap/libheap.a  esp-idf/soc/libsoc.a  esp-idf/esp_hw_support/libesp_hw_support.a
    esp-idf/freertos/libfreertos.a  esp-idf/newlib/libnewlib.a  esp-idf/cxx/libcxx.a  esp-idf/esp_common/libesp_common.a
    esp-idf/esp_timer/libesp_timer.a  esp-idf/vfs/libvfs.a  esp-idf/esp_eth/libesp_eth.a  esp-idf/esp_netif/libesp_netif.a
    esp-idf/esp_event/libesp_event.a  esp-idf/nvs_flash/libnvs_flash.a  esp-idf/esp_phy/libesp_phy.a  esp-idf/wpa_supplicant/libwpa_supplicant.a
    esp-idf/esp_wifi/libesp_wifi.a  esp-idf/lwip/liblwip.a  esp-idf/http_parser/libhttp_parser.a  esp-idf/esp-tls/libesp-tls.a
    esp-idf/esp_gdbstub/libesp_gdbstub.a  esp-idf/tcp_transport/libtcp_transport.a  esp-idf/esp_http_client/libesp_http_client.a
    esp-idf/esp_http_server/libesp_http_server.a  esp-idf/esp_https_ota/libesp_https_ota.a  esp-idf/sdmmc/libsdmmc.a
    esp-idf/esp_serial_slave_link/libesp_serial_slave_link.a  esp-idf/mbedtls/mbedtls/library/libmbedtls.a
    esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a  esp-idf/mbedtls/mbedtls/library/libmbedx509.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libcoexist.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libcore.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libespnow.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libmesh.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libnet80211.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libpp.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libsmartconfig.a
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3/libwapi.a
    esp-idf/riscv/libriscv.a  esp-idf/esp_ringbuf/libesp_ringbuf.a  esp-idf/efuse/libefuse.a  esp-idf/driver/libdriver.a
    esp-idf/esp_pm/libesp_pm.a  esp-idf/mbedtls/libmbedtls.a  esp-idf/app_updd"
    -T esp32c3.rom.ld  -T esp32c3.rom.api.ld  -T esp32c3.rom.libgcc.ld  -T esp32c3.rom.newlib.ld  -T esp32c3.rom.version.ld
    -T esp32c3.rom.eco3.ld  -u __assert_func
    -L "/u1/Projects/RISCV/esp32c3/esp-idf/components/soc/esp32c3/ld"  -T esp32c3.peripherals.ld
    -Wl,--undefined=uxTopUsedPriority  -Wl,--undefined=FreeRTOS_openocd_params  -u app_main
    -lc  -lm  esp-idf/newlib/libnewlib.a  -u newlib_include_heap_impl  -u newlib_include_syscalls_impl  -u newlib_include_pthread_impl
    -u newlib_include_assert_impl  -Wl,--wrap=_Unwind_SetEnableExceptionFdeSorting  -Wl,--wrap=__register_frame_info_bases
    -Wl,--wrap=__register_frame_info  -Wl,--wrap=__register_frame  -Wl,--wrap=__register_frame_info_table_bases
    -Wl,--wrap=__register_frame_info_table  -Wl,--wrap=__register_frame_table  -Wl,--wrap=__deregister_frame_info_bases
    -Wl,--wrap=__deregister_frame_info  -Wl,--wrap=_Unwind_Find_FDE  -Wl,--wrap=_Unwind_GetGR  -Wl,--wrap=_Unwind_GetCFA
    -Wl,--wrap=_Unwind_GetIP  -Wl,--wrap=_Unwind_GetIPInfo  -Wl,--wrap=_Unwind_GetRegionStart  -Wl,--wrap=_Unwind_GetDataRelBase
    -Wl,--wrap=_Unwind_GetTextRelBase  -Wl,--wrap=_Unwind_SetIP  -Wl,--wrap=_Unwind_SetGR  -Wl,--wrap=_Unwind_GetLanguageSpecificData
    -Wl,--wrap=_Unwind_FindEnclosingFunction  -Wl,--wrap=_Unwind_Resume  -Wl,--wrap=_Unwind_RaiseException
    -Wl,--wrap=_Unwind_DeleteException  -Wl,--wrap=_Unwind_ForcedUnwind  -Wl,--wrap=_Unwind_Resume_or_Rethrow
    -Wl,--wrap=_Unwind_Backtrace  -Wl,--wrap=__cxa_call_unexpected  -Wl,--wrap=__gxx_personality_v0
    -u __cxa_guard_dummy  -lstdc++  esp-idf/pthread/libpthread.a  -lgcc
    esp-idf/cxx/libcxx.a  -u __cxx_fatal_exception  -u vfs_include_syscalls_impl
    -L "/u1/Projects/RISCV/esp32c3/esp-idf/components/esp_phy/lib/esp32c3"  -u include_esp_phy_override  -lphy
    -lbtbb  esp-idf/esp_phy/libesp_phy.a  -lphy  -lbtbb  esp-idf/esp_phy/libesp_phy.a  -lphy  -lbtbb
    -L "/u1/Projects/RISCV/esp32c3/esp-idf/components/esp_wifi/lib/esp32c3" && :

[6/7] cd /u1/Projects/RISCV/esp32c3/blink/build && /home/tom/.espressif/python_env/idf5.0_py3.10_env/bin/python
    /u1/Projects/RISCV/esp32c3/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32c3 elf2image --flash_mode dio
    --flash_freq 80m --flash_size 2MB --elf-sha256-offset 0xb0 --min-rev 3 -o /u1/Projects/RISCV/esp32c3/blink/build/blink.bin
    /u1/Projects/RISCV/esp32c3/blink/build/blink.elf &&
    /usr/bin/cmake -E echo "Generated /u1/Projects/RISCV/esp32c3/blink/build/blink.bin" &&
    /usr/bin/cmake -E md5sum /u1/Projects/RISCV/esp32c3/blink/build/blink.bin >
    /u1/Projects/RISCV/esp32c3/blink/build/.bin_timestamp

esptool.py v4.1
Creating esp32c3 image...
Merged 1 ELF section
Successfully created esp32c3 image.
Generated /u1/Projects/RISCV/esp32c3/blink/build/blink.bin

[7/7] cd /u1/Projects/RISCV/esp32c3/blink/build/esp-idf/esptool_py &&
    /home/tom/.espressif/python_env/idf5.0_py3.10_env/bin/python /u1/Projects/RISCV/esp32c3/esp-idf/components/partition_table/check_sizes.py
    --offset 0x8000 partition --type app /u1/Projects/RISCV/esp32c3/blink/build/partition_table/partition-table.bin
    /u1/Projects/RISCV/esp32c3/blink/build/blink.bin

blink.bin binary size 0x27090 bytes. Smallest app partition is 0x100000 bytes. 0xd8f70 bytes (85%) free.

Project build complete. To flash, run this command:
/home/tom/.espressif/python_env/idf5.0_py3.10_env/bin/python
    ../esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800
    --before default_reset --after hard_reset --chip esp32c3  write_flash --flash_mode dio
    --flash_size 2MB --flash_freq 80m 0x0 build/bootloader/bootloader.bin
    0x8000 build/partition_table/partition-table.bin 0x10000 build/blink.bin

or run 'idf.py -p (PORT) flash'
[tom@trona blink]$


Feedback? Questions? Drop me a line!

Tom's Computer Info / tom@mmto.org