Skip to content

ports/nanoesp32: Arduino Nano ESP32 target, desktop on USB Serial/JTAG - #15

Open
aquasock wants to merge 1 commit into
tinydesk-project:mainfrom
aquasock:nanoesp32-port
Open

aquasock wants to merge 1 commit into
tinydesk-project:mainfrom
aquasock:nanoesp32-port

Conversation

@aquasock

Copy link
Copy Markdown

The Arduino Nano ESP32 is an ESP32-S3 (NORA-W106) with 16 MB flash and 8 MB Octal PSRAM, so the chip matches ports/esp32s3. What differs is the console: the board has no USB-UART bridge chip. Its USB-C connector is wired to the ESP32-S3's own USB Serial/JTAG peripheral, so this port takes the link from the C6 (main/link_usj.c) rather than the UART that ports/esp32s3 uses. UART0 (D0/D1) is left free.

The port brings its own partitions.csv (the esp32s3 layout, so offsets match), sdkconfig.defaults (Octal PSRAM, 16 MB flash, 240 MHz, console off), board.example.conf (GPIO numbers with the Arduino pin names spelled out, since TinyDesk drives the SoC directly), and a README recording the two traps this board sets: the partition table replaces the Arduino one and destroys a 9 MB spiffs volume at 0x610000, and a USB-JTAG reset is not a UART reset, so --before no_reset leaves the chip unresponsive until esptool --before usb_reset --after watchdog_reset or a power cycle.

ota_esp.c gains TD_UPDATE_BOARD so a port can name its own update feed. This target is chip-identical to esp32s3, and without the override it would inherit that board's feed and offer the UART image from Software Update: a working firmware the board cannot display. The port passes "nanoesp32", which has no feed, so the check fails cleanly. The other ports are unchanged and still compile their own names.

Tested on hardware (serial 206EF131675C, ESP-IDF v5.3.1) at 110x40 and 120x45: desktop and window manager (drag, resize, minimise), LittleFS file write/read/list/remove, the Editor saving to the Desktop, MicroPython (py -c, machine Pin/ADC, a tdui window with a label and a button), Network/MQTT/Modbus opening without a crash, a long paste arriving whole with no size reply, and ota official failing safe. A 13 minute soak held 40 samples with 0 dropped frames, 9 ms frame time and identical free RAM in every sample.

Not covered: the Shell edition is not built for this board (USB-C belongs to the desktop, so it would need UART0 through an adapter), the network apps open but were not exercised against peers, and no OTA image was installed. Release packaging (tools/make_release.py, the web installer manifest) is left alone for the maintainer to decide.

Adds ports/nanoesp32 to the CI build, the two target tables, and CONTRIBUTORS.md.

The Arduino Nano ESP32 is an ESP32-S3 (NORA-W106) with 16 MB flash and
8 MB Octal PSRAM, so the chip matches ports/esp32s3. What differs is the
console: the board has no USB-UART bridge chip. Its USB-C connector is
wired to the ESP32-S3's own USB Serial/JTAG peripheral, so this port takes
the link from the C6 (main/link_usj.c) rather than the UART that
ports/esp32s3 uses. UART0 (D0/D1) is left free.

The port brings its own partitions.csv (the esp32s3 layout, so offsets
match), sdkconfig.defaults (Octal PSRAM, 16 MB flash, 240 MHz, console
off), board.example.conf (GPIO numbers with the Arduino pin names spelled
out, since TinyDesk drives the SoC directly), and a README recording the
two traps this board sets: the partition table replaces the Arduino one
and destroys a 9 MB spiffs volume at 0x610000, and a USB-JTAG reset is not
a UART reset, so --before no_reset leaves the chip unresponsive until
esptool --before usb_reset --after watchdog_reset or a power cycle.

ota_esp.c gains TD_UPDATE_BOARD so a port can name its own update feed.
This target is chip-identical to esp32s3, and without the override it
would inherit that board's feed and offer the UART image from Software
Update: a working firmware the board cannot display. The port passes
"nanoesp32", which has no feed, so the check fails cleanly. The other
ports are unchanged and still compile their own names.

Tested on hardware (serial 206EF131675C, ESP-IDF v5.3.1) at 110x40 and
120x45: desktop and window manager (drag, resize, minimise), LittleFS
file write/read/list/remove, the Editor saving to the Desktop,
MicroPython (py -c, machine Pin/ADC, a tdui window with a label and a
button), Network/MQTT/Modbus opening without a crash, a long paste
arriving whole with no size reply, and ota official failing safe. A 13
minute soak held 40 samples with 0 dropped frames, 9 ms frame time and
identical free RAM in every sample.

Not covered: the Shell edition is not built for this board (USB-C belongs
to the desktop, so it would need UART0 through an adapter), the network
apps open but were not exercised against peers, and no OTA image was
installed. Release packaging (tools/make_release.py, the web installer
manifest) is left alone for the maintainer to decide.

Adds ports/nanoesp32 to the CI build, the two target tables, and
CONTRIBUTORS.md.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant