Files
wadamesh/variants/thinknode_m9/partitions_m9_touch.csv
T
Kaj SchittecatandClaude Fable 5 a38ea1e3bb touch: Elecrow ThinkNode M9 port (ESP32-S3 + LR1110 + I2C QWERTY) — bring-up builds 1-9
New board: ThinkNode_M9_companion_radio_touch env, variants/thinknode_m9/
(board glue, LR1110 target, keyboard driver, partitions, M9_PORT.md pin
reference), boards/thinknode_m9.json, device_caps HAS_THINKNODE_M9 block,
HAS_M9_KEYBOARD input path in the touch UI (d-pad focus nav, tab jump keys,
QWERTY typing).

Based on a contributed bring-up patch by ded (SalishMesh), who also remote-
tested every build on a preproduction unit. Hard-won fixes on top of the
patch, each verified on hardware:

- LR1110 radio init -706: preprod chips run transceiver FW 0x0303, which
  rejects DriveDiosInSleepMode (0x012A, added in FW 0x0308) that RadioLib
  7.x sends unconditionally during begin(). New build-time patch
  scripts/build/patch_radiolib_lr11x0.py tolerates it on old FW;
  radio_init() prints the chip's device/FW/errors either way.
- TCXO: DIO3 at 3.3 V (the patch's active-oscillator/tcxo=0 theory gave
  -707 on hardware).
- Display: rotation 1 (not 3), plus the missing landscape s_ui_rotation
  override so LVGL renders 320x240 instead of portrait-into-landscape.
- Keyboard: the controller is a separate ESP32-S2 I2C slave (0x6C) with
  addressed registers - reads select register 0x01 first (bare reads
  return the HW-version register forever). Boot probe logs the
  controller's HW/FW; backlight duty register wired.
- USB pad release: the keyboard bus lives on GPIO20/21 = the S3's native
  USB D-/D+ pads, owned from reset by the ROM USB-Serial-JTAG (D+ pullup
  on SDA). M9Board::begin() releases them before any bus init.
- GPIO35-37 are octal-PSRAM pins on the S3R8 - never drive them (the
  patch's "SD CS = 36" misread package pin 36 = GPIO48; SD is on the
  shared SPI bus, support returns with PIN_SD_CS=48 later).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:49:25 +02:00

35 lines
1.7 KiB
CSV
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Heltec ThinkNode M9 firmware — custom partition table.
#
# 16 MB layout with TWO EQUAL OTA app slots so the firmware can self-update
# (HTTP OTA via the meshcomod proxy). The app region (app0+app1) is split
# evenly at 3.875 MB each — the firmware is ~2.55 MB, leaving ~1.3 MB of growth
# headroom per slot. The tiles + spiffs offsets are UNCHANGED from the previous
# (single-big-app0) layout, so an OTA — or a one-time USB re-flash to install
# this table — keeps the map tile cache and all user data (prefs / contacts /
# channels / chat history) intact.
# - app0 3.875 MB (ota_0) ┐ equal A/B slots; OTA ping-pongs between them
# - app1 3.875 MB (ota_1) ┘
# - "tiles" 4.75 MB LittleFS partition (subtype 0x83) for the map tab's
# slippy-tile pack
# - spiffs 3.375 MB for user data (/new_prefs, /contacts3, /channels2, chat
# history)
#
# Layout (16 MB total):
# 0x000000–0x009000 bootloader + partition table
# 0x009000–0x00E000 nvs (20 KB)
# 0x00E000–0x010000 otadata (8 KB)
# 0x010000–0x3F0000 app0 (3.875 MB, ota_0)
# 0x3F0000–0x7D0000 app1 (3.875 MB, ota_1)
# 0x7D0000–0xC90000 tiles (4.75 MB, LittleFS, type 0x83) [unchanged]
# 0xC90000–0xFF0000 spiffs (3.375 MB) [unchanged]
# 0xFF0000–0x1000000 coredump (64 KB)
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x3E0000,
app1, app, ota_1, 0x3F0000, 0x3E0000,
tiles, data, 0x83, 0x7D0000, 0x4C0000,
spiffs, data, spiffs, 0xC90000, 0x360000,
coredump, data, coredump, 0xFF0000, 0x10000,