6c2fcdc45d
Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com>
128 lines
4.3 KiB
ReStructuredText
128 lines
4.3 KiB
ReStructuredText
==================
|
|
Espressif ESP32-C3
|
|
==================
|
|
|
|
The ESP32-C3 is an ultra-low-power and highly integrated SoC with a RISC-V
|
|
core and supports 2.4 GHz Wi-Fi and Bluetooth Low Energy.
|
|
|
|
* Address Space
|
|
- 800 KB of internal memory address space accessed from the instruction bus
|
|
- 560 KB of internal memory address space accessed from the data bus
|
|
- 1016 KB of peripheral address space
|
|
- 8 MB of external memory virtual address space accessed from the instruction bus
|
|
- 8 MB of external memory virtual address space accessed from the data bus
|
|
- 480 KB of internal DMA address space
|
|
* Internal Memory
|
|
- 384 KB ROM
|
|
- 400 KB SRAM (16 KB can be configured as Cache)
|
|
- 8 KB of SRAM in RTC
|
|
* External Memory
|
|
- Up to 16 MB of external flash
|
|
* Peripherals
|
|
- 35 peripherals
|
|
* GDMA
|
|
- 7 modules are capable of DMA operations.
|
|
|
|
ESP32-C3 Toolchain
|
|
==================
|
|
|
|
A generic RISC-V toolchain can be used to build ESP32-C3 projects.
|
|
SiFive's toolchain can be downloaded from: https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
|
|
|
|
Second stage bootloader and partition table
|
|
===========================================
|
|
|
|
The NuttX port for now relies on IDF's second stage bootloader to carry on some hardware
|
|
initializations. The binaries for the bootloader and the partition table can be found in
|
|
this repository: https://github.com/espressif/esp-nuttx-bootloader
|
|
That repository contains a dummy IDF project that's used to build the bootloader and
|
|
partition table, these are then presented as Github assets and can be downloaded
|
|
from: https://github.com/espressif/esp-nuttx-bootloader/releases
|
|
Download ``bootloader-esp32c3.bin`` and ``partition-table-esp32c3.bin`` and place them
|
|
in a folder, the path to this folder will be used later to program them. This
|
|
can be: ``../esp-bins``
|
|
|
|
Building and flashing
|
|
=====================
|
|
|
|
First make sure that ``esptool.py`` is installed. This tool is used to convert
|
|
the ELF to a compatible ESP32 image and to flash the image into the board.
|
|
It can be installed with: ``pip install esptool``.
|
|
|
|
Configure the NUttX project: ``./tools/configure.sh esp32c3-devkit:nsh``
|
|
Run ``make`` to build the project. Note that the conversion mentioned above is
|
|
included in the build process.
|
|
The `esptool.py` command to flash all the binaries is::
|
|
|
|
esptool.py --chip esp32c3 --port /dev/ttyUSBXX --baud 921600 write_flash 0x0 bootloader.bin 0x8000 partition-table.bin 0x10000 nuttx.bin
|
|
|
|
However, this is also included in the build process and we can build and flash with::
|
|
|
|
make download ESPTOOL_PORT=<port> ESPTOOL_BINDIR=../esp-bins
|
|
|
|
Where ``<port>`` is typically ``/dev/ttyUSB0`` or similar and ``../esp-bins`` is
|
|
the path to the folder containing the bootloader and the partition table
|
|
for the ESP32-C3 as explained above.
|
|
Note that this step is required only one time. Once the bootloader and partition
|
|
table are flashed, we don't need to flash them again. So subsequent builds
|
|
would just require: ``make download ESPTOOL_PORT=/dev/ttyUSBXX``
|
|
|
|
Debugging with OpenOCD
|
|
======================
|
|
|
|
Download and build OpenOCD from Espressif, that can be found in
|
|
https://github.com/espressif/openocd-esp32
|
|
|
|
If you have an ESP32-C3 ECO3, no external JTAG is required to debug, the ESP32-C3
|
|
integrates a USB-to-JTAG adapter.
|
|
|
|
OpenOCD can then be used::
|
|
|
|
openocd -c 'set ESP_RTOS none' -f board/esp32c3-builtin.cfg
|
|
|
|
For versions prior to ESP32-C3 ECO3, an external JTAG adapter is needed.
|
|
It can be connected as follows::
|
|
|
|
TMS -> GPIO4
|
|
TDI -> GPIO5
|
|
TCK -> GPIO6
|
|
TDO -> GPIO7
|
|
|
|
Furthermore, an efuse needs to be burnt to be able to debug::
|
|
|
|
espefuse.py -p <port> burn_efuse DIS_USB_JTAG
|
|
|
|
OpenOCD can then be used::
|
|
|
|
openocd -c 'set ESP_RTOS none' -f board/esp32c3-ftdi.cfg
|
|
|
|
Peripheral Support
|
|
==================
|
|
|
|
The following list indicates the state of peripherals' support in NuttX:
|
|
|
|
========== ======= =====
|
|
Peripheral Support NOTES
|
|
========== ======= =====
|
|
GPIO Yes
|
|
UART Yes
|
|
SPI Yes
|
|
I2C Yes
|
|
DMA Yes
|
|
Wifi Yes
|
|
SPIFLASH Yes
|
|
Timers Yes
|
|
Watchdog Yes
|
|
RTC Yes
|
|
RNG Yes
|
|
AES Yes
|
|
eFuse Yes
|
|
ADC Yes
|
|
Bluetooth Yes
|
|
LED_PWM Yes
|
|
SHA Yes
|
|
RSA Yes
|
|
========== ======= =====
|
|
|
|
|