Month: June 2021

debug log of the ESP32-C3 BLE booting on NuttX

I (206) boot: Loaded app from partition at offset 0x10000
I (206) boot: Disabling RNG early entropy source…
ABesp32c3_bt_controller_init: BT controller compile version [501d88d]
interrupt_set_wrapper: cpu_no=0 , intr_source=8 , intr_num=5, intr_prio=1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_initialize: btdev 0x3fc862c0
bt_hci_cmd_create: opcode 0c03 param_len 0
bt_buf_alloc: buf 0x3fc8497c type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc8497c
bt_buf_extend: buf 0x3fc8497c len 3
bt_hci_cmd_send_sync: opcode 0c03 len 3
hci_tx_kthread: started
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 0
hci_tx_kthread: Sending command 0c03 buf 0x3fc8497c to driver
bt_receive: data 0x3fc8f1b3 len 6
bt_buf_alloc: buf 0x3fc84964 type 1 reserve 0
bt_buf_extend: buf 0x3fc84964 len 6
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc84964 type 1 len 6
bt_buf_consume: buf 0x3fc84964 len 2
hci_cmd_complete: opcode 0c03
bt_buf_consume: buf 0x3fc84964 len 3
hci_reset_complete: status 0
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 1
bt_buf_release: buf 0x3fc8497c ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc84964 ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc8497c ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc8497c
bt_buf_release: buf 0x3fc8497c ref 0 type 0
bt_buf_release: Remaining references: 255
bt_buf_release: buf 0x3fc84964 ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc84964
bt_hci_cmd_create: opcode 1003 param_len 0
bt_buf_alloc: buf 0x3fc84964 type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc84964
bt_buf_extend: buf 0x3fc84964 len 3
bt_hci_cmd_send_sync: opcode 1003 len 3
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 0
hci_tx_kthread: Sending command 1003 buf 0x3fc84964 to driver
bt_receive: data 0x3fc8f1ab len 14
bt_buf_alloc: buf 0x3fc8497c type 1 reserve 0
bt_buf_extend: buf 0x3fc8497c len 14
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc8497c type 1 len 14
bt_buf_consume: buf 0x3fc8497c len 2
hci_cmd_complete: opcode 1003
bt_buf_consume: buf 0x3fc8497c len 3
hci_cmd_complete: Unhandled opcode 1003
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 1
bt_buf_release: buf 0x3fc84964 ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc8497c ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc84964 ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc84964
bt_buf_release: buf 0x3fc84964 ref 0 type 0
bt_buf_release: Remaining references: 255
read_local_features_complete: status 0
bt_buf_release: buf 0x3fc8497c ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc8497c
bt_hci_cmd_create: opcode 1001 param_len 0
bt_buf_alloc: buf 0x3fc8497c type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc8497c
bt_buf_extend: buf 0x3fc8497c len 3
bt_hci_cmd_send_sync: opcode 1001 len 3
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 0
hci_tx_kthread: Sending command 1001 buf 0x3fc8497c to driver
bt_receive: data 0x3fc8f1ab len 14
bt_buf_alloc: buf 0x3fc84964 type 1 reserve 0
bt_buf_extend: buf 0x3fc84964 len 14
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc84964 type 1 len 14
bt_buf_consume: buf 0x3fc84964 len 2
hci_cmd_complete: opcode 1001
bt_buf_consume: buf 0x3fc84964 len 3
hci_cmd_complete: Unhandled opcode 1001
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 1
bt_buf_release: buf 0x3fc8497c ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc84964 ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc8497c ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc8497c
bt_buf_release: buf 0x3fc8497c ref 0 type 0
bt_buf_release: Remaining references: 255
read_local_ver_complete: status 0
bt_buf_release: buf 0x3fc84964 ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc84964
bt_hci_cmd_create: opcode 1009 param_len 0
bt_buf_alloc: buf 0x3fc84964 type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc84964
bt_buf_extend: buf 0x3fc84964 len 3
bt_hci_cmd_send_sync: opcode 1009 len 3
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 0
hci_tx_kthread: Sending command 1009 buf 0x3fc84964 to driver
bt_receive: data 0x3fc8f1af len 12
bt_buf_alloc: buf 0x3fc8497c type 1 reserve 0
bt_buf_extend: buf 0x3fc8497c len 12
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc8497c type 1 len 12
bt_buf_consume: buf 0x3fc8497c len 2
hci_cmd_complete: opcode 1009
bt_buf_consume: buf 0x3fc8497c len 3
hci_cmd_complete: Unhandled opcode 1009
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 1
bt_buf_release: buf 0x3fc84964 ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc8497c ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc84964 ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc84964
bt_buf_release: buf 0x3fc84964 ref 0 type 0
bt_buf_release: Remaining references: 255
read_bdaddr_complete: status 0
bt_buf_release: buf 0x3fc8497c ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc8497c
bt_hci_cmd_create: opcode 2003 param_len 0
bt_buf_alloc: buf 0x3fc8497c type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc8497c
bt_buf_extend: buf 0x3fc8497c len 3
bt_hci_cmd_send_sync: opcode 2003 len 3
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 0
hci_tx_kthread: Sending command 2003 buf 0x3fc8497c to driver
bt_receive: data 0x3fc8f1ab len 14
bt_buf_alloc: buf 0x3fc84964 type 1 reserve 0
bt_buf_extend: buf 0x3fc84964 len 14
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc84964 type 1 len 14
bt_buf_consume: buf 0x3fc84964 len 2
hci_cmd_complete: opcode 2003
bt_buf_consume: buf 0x3fc84964 len 3
hci_cmd_complete: Unhandled opcode 2003
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 1
bt_buf_release: buf 0x3fc8497c ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc84964 ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc8497c ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc8497c
bt_buf_release: buf 0x3fc8497c ref 0 type 0
bt_buf_release: Remaining references: 255
read_le_features_complete: status 0
bt_buf_release: buf 0x3fc84964 ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc84964
bt_hci_cmd_create: opcode 2002 param_len 0
bt_buf_alloc: buf 0x3fc84964 type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc84964
bt_buf_extend: buf 0x3fc84964 len 3
bt_hci_cmd_send_sync: opcode 2002 len 3
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 0
hci_tx_kthread: Sending command 2002 buf 0x3fc84964 to driver
bt_receive: data 0x3fc8f1af len 9
bt_buf_alloc: buf 0x3fc8497c type 1 reserve 0
bt_buf_extend: buf 0x3fc8497c len 9
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc8497c type 1 len 9
bt_buf_consume: buf 0x3fc8497c len 2
hci_cmd_complete: opcode 2002
bt_buf_consume: buf 0x3fc8497c len 3
hci_cmd_complete: Unhandled opcode 2002
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 1
bt_buf_release: buf 0x3fc84964 ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc8497c ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc84964 ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc84964
bt_buf_release: buf 0x3fc84964 ref 0 type 0
bt_buf_release: Remaining references: 255
le_read_buffer_size_complete: status 0
bt_buf_release: buf 0x3fc8497c ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc8497c
bt_hci_cmd_create: opcode 0c01 param_len 8
bt_buf_alloc: buf 0x3fc8497c type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc8497c
bt_buf_extend: buf 0x3fc8497c len 3
bt_buf_extend: buf 0x3fc8497c len 8
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 0
bt_hci_cmd_send_sync: opcode 0c01 len 11
bt_buf_addref: buf 0x3fc8497c (old) ref 2 type 0
hci_tx_kthread: Sending command 0c01 buf 0x3fc8497c to driver
bt_receive: data 0x3fc8f1ab len 6
bt_buf_alloc: buf 0x3fc84964 type 1 reserve 0
bt_buf_extend: buf 0x3fc84964 len 6
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc84964 type 1 len 6
bt_buf_consume: buf 0x3fc84964 len 2
hci_cmd_complete: opcode 0c01
bt_buf_consume: buf 0x3fc84964 len 3
hci_cmd_complete: Unhandled opcode 0c01
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 1
bt_buf_release: buf 0x3fc8497c ref 3 type 0
bt_buf_release: Remaining references: 2
bt_buf_release: buf 0x3fc84964 ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc8497c ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc84964 ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc84964
bt_buf_release: buf 0x3fc8497c ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc8497c
bt_hci_cmd_create: opcode 0c33 param_len 7
bt_buf_alloc: buf 0x3fc8497c type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc8497c
bt_buf_extend: buf 0x3fc8497c len 3
bt_buf_extend: buf 0x3fc8497c len 7
bt_buf_addref: buf 0x3fc8497c (old) ref 1 type 0
bt_hci_cmd_send: opcode 0c33 len 10
bt_hci_cmd_create: opcode 0c31 param_len 1
bt_buf_alloc: buf 0x3fc84964 type 0 reserve 1
bt_hci_cmd_create: buf 0x3fc84964
bt_buf_extend: buf 0x3fc84964 len 3
bt_buf_extend: buf 0x3fc84964 len 1
bt_buf_addref: buf 0x3fc84964 (old) ref 1 type 0
bt_hci_cmd_send_sync: opcode 0c31 len 4
bt_buf_addref: buf 0x3fc8497c (old) ref 2 type 0
hci_tx_kthread: Sending command 0c33 buf 0x3fc8497c to driver
bt_receive: data 0x3fc8f1ab len 6
bt_buf_alloc: buf 0x3fc8494c type 1 reserve 0
bt_buf_extend: buf 0x3fc8494c len 6
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc8494c type 1 len 6
bt_buf_consume: buf 0x3fc8494c len 2
hci_cmd_complete: opcode 0c33
bt_buf_consume: buf 0x3fc8494c len 3
hci_cmd_complete: Unhandled opcode 0c33
bt_buf_release: buf 0x3fc8497c ref 3 type 0
bt_buf_release: Remaining references: 2
bt_buf_release: buf 0x3fc8494c ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc8494c
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc8497c ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_addref: buf 0x3fc84964 (old) ref 2 type 0
hci_tx_kthread: Sending command 0c31 buf 0x3fc84964 to driver
bt_receive: data 0x3fc8f1af len 6
bt_buf_alloc: buf 0x3fc8494c type 1 reserve 0
bt_buf_extend: buf 0x3fc8494c len 6
priority_rx_work: list 0x3fc841ac
priority_rx_work: buf 0x3fc8494c type 1 len 6
bt_buf_consume: buf 0x3fc8494c len 2
hci_cmd_complete: opcode 0c31
bt_buf_consume: buf 0x3fc8494c len 3
hci_cmd_complete: Unhandled opcode 0c31
bt_buf_addref: buf 0x3fc8494c (old) ref 1 type 1
bt_buf_release: buf 0x3fc84964 ref 3 type 0
bt_buf_release: Remaining references: 2
bt_buf_release: buf 0x3fc8494c ref 2 type 1
bt_buf_release: Remaining references: 1
queue_recv_wrapper: Failed to timedreceive from mqueue error=-116
bt_buf_release: buf 0x3fc84964 ref 2 type 0
bt_buf_release: Remaining references: 1
bt_buf_release: buf 0x3fc8494c ref 1 type 1
bt_buf_release: Buffer freed: 0x3fc8494c
bt_buf_release: buf 0x3fc84964 ref 1 type 0
bt_buf_release: Buffer freed: 0x3fc84964
hci_initialize: HCI ver 9 rev 22, manufacturer 96
hci_initialize: ACL buffers: pkts 12 mtu 251
bt_l2cap_chan_register: CID 0x0004
bt_l2cap_chan_register: CID 0x0006
bt_l2cap_chan_register: CID 0x0005
NuttShell (NSH) NuttX-10.1.0-RC1
nsh>

Using Bluetooth Low Energy BLE in the ESP32-C3 on NuttX

These are the steps!

Compile NuttX ble example:

$ ./tools/configure.sh esp32c3-devkit:ble
$ make download ESPTOOL_PORT=/dev/ttyUSB0
$ minicom
NuttShell (NSH) NuttX-10.1.0-RC1
nsh> ifconfig
bnep0 Link encap:UNSPEC at DOWN
inet addr:0.0.0.0 DRaddr:0.0.0.0 Mask:0.0.0.0
nsh> ?
help usage: help [-v] []
. cat df help ls ps source unset
[ cd echo hexdump mkdir pwd test usleep
? cp exec ifconfig mkrd rm time xd
arp cmp exit ifdown mount rmdir true
basename dirname false ifup mv set uname
break dd free kill nslookup sleep umount
Builtin Apps:
bt sh nsh
nsh> bt
ERROR: Missing interface name
Usage:

  bt <ifname> <cmd> [option [option [option...]]]
Where [option [option [option…]]] is one of:

    help                                                                              
    info            [-h]                                                              
    features        [-h] [le]                                                         
    scan            [-h] <start [-d]|get|stop>                                        
    advertise       [-h] <start|stop>                                                 
    security        [-h] <addr> public|private <level>                                
    gatt            [-h] <cmd> [option [option [option...]]]
Use the -h option on any command to get more info.
nsh> bt bnep0 info
Device: bnep0
BDAddr: 01:23:45:67:89:ab
Flags: 0000
Free: 20
ACL: 20
SCO: 0
Max:
ACL: 24
SCO: 0
MTU:
ACL: 70
SCO: 70
Policy: 0
Type: 0
nsh> bt bnep0 scan
ERROR: Missing scan command
scan: Scan commands:
Usage:

  bt <ifname> scan [-h] <start [-d]|get|stop>
Where the options do the following:

    start   - Starts scanning.  The -d option enables duplicate                       
              filtering.                                                              
    get     - Shows new accumulated scan results                                      
    stop    - Stops scanning
nsh> bt bnep0 scan start
nsh> bt bnep0 scan stop
nsh> bt bnep0 scan get
Scan result:
  1. addr: f3:d5:9a:7f:79:54 type: 1
    rssi: -76
    response type: 4
    advertiser data: 2. addr: 68:72:67:2a:9b:bc type: 1
    rssi: -79
    response type: 3
    advertiser data: 1e ff 06 00 01 09 20 02 63 5f d2 79 cb a0 c7 3d
    bb e9 0f 0c e8 e3 56 59 82 82 d4 59 5a d2 97
  2. addr: 48:68:49:2f:b5:09 type: 1
    rssi: -87
    response type: 2
    advertiser data: 02 01 1a 0a ff c4 00 06 34 03 12 14 16 80 02 0a
    d4 03 03 b9 fe 08 1b 00 2d 97 67 12 dd 78
  3. addr: 48:68:49:2f:b5:09 type: 1
    rssi: -85
    response type: 4
    advertiser data: 18 09 5b 4c 47 5d 20 77 65 62 4f 53 20 54 56 20
    55 4d 37 32 37 30 50 53 41 02 0a d4
  4. addr: 7e:91:3c:ef:a4:37 type: 1
    rssi: -87
    response type: 3
    advertiser data: 1e ff 06 00 01 09 20 02 16 3c 09 4a 4e 1b 3f c0
    e3 d3 8b 92 0d 21 32 0a 67 30 9a 0b 7b 6d bb
    nsh>

Debugging ESP32 over JTAG using OpenOCD

Right, I already posted how to debug ESP32-S2 here and the process is pretty similar

I’ll not explain how to wire the ESP32_PROG (or any other FTDI FT232 OpenOCD compatible programmer) to ESP32, you can find it easily in the Internet.

Instead I will use the ESP-WROVER-KIT board that already come with JTAG programmer in the board.

You need to clone the Espressif OpenOCD ESP32 repository:

$ git clone https://github.com/espressif/openocd-esp32

Configure and compile it:

$ ./bootstrap
$ ./configure --program-prefix=esp32- --enable-dummy --enable-ftdi --enable-ftdi-oscan1 --enable-stlink --enable-ti-icdi --enable-ulink --enable-usb-blaster-2 --enable-ft232r --enable-vsllink --enable-xds110 --enable-osbdm --enable-opendous --enable-esp-usb-jtag --enable-aice --enable-usbprog --enable-rlink --enable-armjtagew --enable-cmsis-dap --enable-kitprog --enable-usb-blaster --enable-presto --enable-openjtag --enable-jlink

If you have all the necessary libraries in your system you should see a nice report line mine:

OpenOCD configuration summary
MPSSE mode of FTDI based devices yes
cJTAG OSCAN1 tunneled thru MPSSE yes
ST-Link Programmer yes
TI ICDI JTAG Programmer yes
Keil ULINK JTAG Programmer yes
Altera USB-Blaster II Compatible yes
Bitbang mode of FT232R based devices yes
Versaloon-Link JTAG Programmer yes
TI XDS110 Debug Probe yes
OSBDM (JTAG only) Programmer yes
eStick/opendous JTAG Programmer yes
Espressif JTAG Programmer yes
Andes JTAG Programmer yes
USBProg JTAG Programmer yes
Raisonance RLink JTAG Programmer yes
Olimex ARM-JTAG-EW Programmer yes
CMSIS-DAP Compliant Debugger yes
Cypress KitProg Programmer yes
Altera USB-Blaster Compatible yes
ASIX Presto Adapter yes
OpenJTAG Adapter yes
SEGGER J-Link Programmer yes

Sometimes you could have some missing library and it will report “no”, but most of the time you will not use that feature anyway…

Now just compile and install it:

$ make
$ sudo make install

Finally we can run OpenOCD to debug ESP32:

$ esp32-openocd -c "set ESP_RTOS none" -f board/esp32-wrover-kit-3.3v.cfg
Open On-Chip Debugger v0.10.0-esp32-20201202-6-gc0a2ec6e (2021-05-14-14:19)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : FreeRTOS creation
Info : FreeRTOS creation
none
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
Info : clock speed 20000 kHz
Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : esp32.cpu0: Target halted, PC=0x400803C0, debug_reason=00000001
Info : Listening on port 3333 for gdb connections

Open another terminal and execute:

$ xtensa-esp32-elf-gdb nuttx
GNU gdb (crosstool-NG esp-2020r2) 8.1.0.20180627-git
Copyright (C) 2018 Free Software Foundation, Inc.
...
Reading symbols from nuttx…done.
(gdb) target extended-remote :3333
(gdb) mon reset halt
(gdb) flushregs
(gdb) b nx_start
(gdb) c
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.
esp32.cpu0: Target halted, PC=0x400D1F69, debug_reason=00000001
Set GDB target to 'esp32.cpu0'

Breakpoint 1, nx_start () at init/nx_start.c:355
355 int cpu = 0;
(gdb)

Why to use NuttX?

You usually use Linux on the Raspberry Pi because it provides a reliable, high-level development platform.

Now you can use NuttX on any microcontroller because it provides the same things as Linux.

Compiling NuttX RTOS to ESP32-S2 Saola-1 board

These are the steps I used to get NuttX working on my ESP32-S2-Saola-1 board (note I already had xtensa-esp32s2-elf-gcc toolchain installed) :

$ git clone https://github.com/apache/incubator-nuttx nuttx
$ git clone https://github.com/apache/incubator-nuttx-apps apps
$ cd nuttx/
$ ./tools/configure.sh esp32s2-saola-1:nsh
$ make download ESPTOOL_PORT=/dev/ttyUSB0
$ picocom -b115200 /dev/ttyUSB0

(Reset the board)

NuttShell (NSH) NuttX-10.1.0-RC1
nsh> ?
help usage: help [-v] []

. cat dd false ls ps sleep uname
[ cd df free mkdir pwd source umount
? cp echo help mkrd rm test unset
basename cmp exec hexdump mount rmdir time usleep
break dirname exit kill mv set true xd

Builtin Apps:
sh nsh
nsh> uname -a
NuttX 10.1.0-RC1 4ae6862bbe Jun 1 2021 14:52:27 xtensa esp32s2-saola-1

nsh> free
       total used free largest nused nfree
Umem: 310256 5792 304464 304464 24 1
nsh>