Skip to content

espressif: add ESP32-S3-DevKitC-1-N32R16 board - #482

Merged
hathach merged 1 commit into
adafruit:masterfrom
mikeysklar:esp32s3-devkitc-1-n32r16
Aug 13, 2026
Merged

espressif: add ESP32-S3-DevKitC-1-N32R16 board#482
hathach merged 1 commit into
adafruit:masterfrom
mikeysklar:esp32s3-devkitc-1-n32r16

Conversation

@mikeysklar

@mikeysklar mikeysklar commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Addresses the flash size half of #481.

The only espressif_esp32s3_devkitc_1 build is configured for 8MB flash, so on the 32MB N32R16V most of the flash is unreachable. @grgrant measured CircuitPython's filesystem at 5,935,104 bytes under the stock bootloader versus 31,080,448 flashed directly with esptool. Details in adafruit/circuitpython#11192.

Adds partitions-32MB.csv and an espressif_esp32s3_devkitc_1_n32r16 board that uses it. The existing devkitc_1 board is untouched, since changing its partition table would break existing installs.

Draft because I don't have N32R16V hardware. @grgrant has the board and offered to test.

🤖 Generated with Claude Code

The existing espressif_esp32s3_devkitc_1 board is configured for 8MB
flash, so on a 32MB board it leaves most of the flash unused. Adds a
32MB partition table and a board variant that uses it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mikeysklar

Copy link
Copy Markdown
Contributor Author

@grgrant CI build passed and the artifact is up if you want to try it:

https://github.com/adafruit/tinyuf2/actions/runs/31623052489/artifacts/9152503436

I decoded the built partition table and it looks right:

nvs        0x00009000        20K
otadata    0x0000e000         8K
ota_0      0x00010000      2048K
ota_1      0x00210000      2048K
uf2        0x00410000       256K
ffat       0x00450000     28352K
                          ends at 0x2000000 = 32.00 MB

Flash combined.bin at 0x0, then drop a CircuitPython UF2 on the N32R16BOOT drive. The n32r16 build is here if you need it again:

https://github.com/mikeysklar/circuitpython/releases/tag/n32r16-test-11192

Worth checking info_uf2.txt for the flash size, and then whether CIRCUITPY comes back near 29MB instead of the 5,935,104 you saw before.

@grgrant

grgrant commented Aug 12, 2026

Copy link
Copy Markdown

@mikeysklar I checked this build by loading and looking at info_uf2.txt and it still shows what I think is the wrong amount of flash. However, I then loaded the official CI uf2 artifact from your update for R16V and it shows the correct amount of flash. Also the info_uf2 shows 0.19 as the version but we're at 0.35 for most things. Did you perhaps select the wrong branch to build on?

Not a show stopper because it works but may want to update to 0.35 for whatever it provides.

This was really amazingly fast work, Mikey!!

info_uf2.txt

TinyUF2 Bootloader beee998 - tinyusb (0.19.0~73)
Model: Espressif ESP32S3 DevKitC 1 N32R16
Board-ID: ESP32S3-DevKitC-1-N32R16-v1.1
Date: Aug 12 2026
Flash Size: 0x00200000 bytes

CircuitPython CI build artifact

Adafruit CircuitPython 10.3.0-alpha.4-31-gce29dfa0e2 on 2026-08-12; ESP32-S3-DevKitC-1-N32R16 with ESP32S3
>>>
>>> import os, gc, board
>>> print(os.uname().machine)               # ESP32-S3-DevKitC-1-N32R16 with ESP32S3
ESP32-S3-DevKitC-1-N32R16 with ESP32S3
>>> s = os.statvfs("/"); print(s[0]*s[2])   # ~29,000,000 bytes
31080448
>>> gc.collect(); print(gc.mem_free())      # ~16,700,000 bytes  <- the important one
16521968
>>> print(board.NEOPIXEL)                   # board.IO38
board.IO38

@mikeysklar

mikeysklar commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

@grgrant -

Thanks for testing on hardware I don't have in hand, that made all the difference today. You've been integral to getting this right.

Both non-issues:

  • Flash Size in info_uf2.txt is the ota_0 partition size, 2048K in the 8MB, 16MB and 32MB tables alike, so this PR doesn't change it.
  • beee998 is GitHub's PR merge commit, and git describe renders an untagged commit as a SHA rather than a tag.

Your 31080448 against the 5935104 from before is the number that counts, and a .uf2 can only load through the UF2 drive, so the 32MB layout is working.

@mikeysklar
mikeysklar marked this pull request as ready for review August 12, 2026 18:55
@grgrant

grgrant commented Aug 12, 2026

Copy link
Copy Markdown

@mikeysklar Just to be clear the info_uf2.txt version info I was referring to was to the right of the beee998: tinyusb (0.19.0~73) I know older tinyusb versions were 0.19 but the current one seems to be 0.35 for example list: TinyUF2 Bootloader 0.35.0 - tinyusb (2a364ca27)

I was happy to help test since I have a couple of them. You were very fast getting the changes done in both code bases and the web page.

Good to know about the flash size difference in TinyUSB's report.

Actual INFO_UF2.TXT uploaded for info.
INFO_UF2.TXT

@grgrant

grgrant commented Aug 12, 2026

Copy link
Copy Markdown

@mikeysklar Sorry for the churn. I think when this update gets approved/released it will get tagged 0.35 (or 0.36). I didn't know how it worked and the 0.19 in the info.uf2.txt was so naturally a recent previous UF2 release that I thought it was just compiling on the wrong branch.

@mikeysklar

Copy link
Copy Markdown
Contributor Author

It's confusing. Two projects show up in that line:

  1. TinyUF2, the bootloader
  2. TinyUSB, a library TinyUF2 pins to a specific commit

So beee998 is TinyUF2 and 0.19.0~73 is TinyUSB. They version independently.

0.19.0~73 and the 2a364ca27 in the 0.35.0 release are the same TinyUSB commit, just written two ways depending on whether git had the tags. And beee998 is GitHub's throwaway PR merge commit, which carries no tag, so git printed the SHA instead.

Nothing to update.

Comment thread ports/espressif/boards/espressif_esp32s3_devkitc_1_n32r16/board.h
@hathach
hathach merged commit 6ca7559 into adafruit:master Aug 13, 2026
164 checks passed
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.

3 participants