fwt_software/docs/lattepanda-iota.md

200 lines
12 KiB
Markdown
Raw Permalink 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.

# LattePanda IOTA — Hardware Notes
Collected 2026-09-11 from vendor documentation and independent reviews (sources at the bottom).
Companion to `COMPONENTS.md §1` (LattePanda 3 Delta, the board currently deployed on the tower).
> **Status: desk research.** Nothing here has been measured on a physical IOTA. Items marked
> **[VERIFY]** must be confirmed against the board or its schematic before anyone cuts a harness.
---
## 1. Why this board is different
The IOTA is not a drop-in successor to the 3 Delta. Two changes break existing assumptions:
1. **The co-processor changed from ATmega32U4 (8-bit AVR, 5 V) to RP2040 (32-bit Cortex-M0+, 3.3 V).**
The gimbal firmware is an AVR/Leonardo PlatformIO project; it must be ported, and **the RP2040 I/O
pins are not 5 V tolerant.**
2. **The expansion layout changed.** No M.2 B-key (the 5G modem's slot), no M.2 M-key (NVMe moves to a
16-pin FPC PCIe adapter board), and the header exposes only one PCH-side UART — no PCH I2C.
---
## 2. Core specifications
| Item | LattePanda IOTA | LattePanda 3 Delta (current tower board) |
|------|-----------------|------------------------------------------|
| CPU | Intel Processor **N150** "Twin Lake", 4C/4T, up to 3.60 GHz, 6 MB cache | Intel Celeron **N5105** "Jasper Lake", 4C/4T, 2.0–2.9 GHz |
| GPU | Intel Graphics, 24 EU, up to 1.0 GHz | Intel UHD, 450–800 MHz |
| TDP | Configurable **6 W – 15 W** | ~12 W typical |
| RAM | 8 GB / 16 GB LPDDR5 4800 MT/s, **in-band ECC** | 8 GB LPDDR4 2933 MT/s |
| Storage | 64 GB / 128 GB eMMC 5.1 + microSD | 64 GB eMMC 5.1 + microSD |
| TPM | TPM 2.0 (in CPU) | — |
| RTC | **Yes**, 2-pin 1.25 mm, CR2032 included | (V1 lacked one; Delta has one) |
| Dimensions | 88 × 70 × 19 mm (vendor page; CNX lists 88 × 77 × 19) | 125 × 78 mm |
| Power in | USB-C **PD 15 V** *(power input only)*, or PH2.0 4-pin **10–15 V DC** | 12 V DC (7.4–15 V) |
| OS support | Windows 10/11, Ubuntu 22.04 / 24.04 | Windows 10/11, Ubuntu, Android |
| Price | ~$129 board only; kits from ~$166 | — |
**Relevance to the fire-watch tower:** the N150 is a straight upgrade over the N5105 — newer Gracemont
cores, ~1.24× the clock ceiling, LPDDR5 vs LPDDR4. The 10–15 V DC input covers the tower's 12 V rail.
---
## 3. Co-processor: RP2040
| Item | RP2040 (IOTA) | ATmega32U4 (Delta) |
|------|---------------|--------------------|
| Core | Dual-core Arm Cortex-M0+ @ 133 MHz | Single-core 8-bit AVR @ 16 MHz |
| SRAM | 264 KB | 2.5 KB |
| Flash | 8 MB | 32 KB |
| **I/O logic level** | **3.3 V — NOT 5 V tolerant** | 5 V |
| Host link | **USB 2.0 CDC** (appears as a serial device) | USB 2.0 CDC (native USB) |
| Toolchains | Arduino C++, MicroPython, Firmata | Arduino C++ |
| Flashing | **UF2 bootloader**: hold `BOOTSEL`, tap `RST`, release → mounts as mass storage `RPI-RP2`, drag the `.uf2` | avrdude over the CDC port (Leonardo 1200-baud touch) |
**Internal RP2040 connections (not on the header):** GPIO20 = SW button, GPIO21 = RST, GPIO25 = blue LED.
### Host-side enumeration
The Delta's Leonardo enumerates as USB `2341:8036` → `/dev/serial/by-id/usb-Arduino_LLC_Arduino_Leonardo-if00`.
An RP2040 running the Arduino-Pico core enumerates as `2e8a:000a` (CDC) and `2e8a:0003` in BOOTSEL mode.
**[VERIFY]** the exact VID:PID and `by-id` string on the real board — the `[Serial] device` config value
and any udev rule key off it.
---
## 4. The 36-pin GPIO header (2×18, 2.54 mm)
| Pin | Signal | Dir | Level | Notes |
|-----|--------|-----|-------|-------|
| 1 | SPK+ | Out | — | Speaker, up to 2 W RMS / 4 Ω |
| 2 | SPK− | Out | — | |
| **3** | **TXD** | Out | **3.3 V** | **PCH serial, COM1 / `ttyS0`** |
| **4** | **RXD** | In | **3.3 V** | **PCH serial, COM1 / `ttyS0`** |
| 5 | GND | — | — | |
| 6 | 5V | Pwr | 5 V | Power Output 1, **0.5 A max** |
| 7–13 | GP0 … GP6 | I/O | 3.3 V | RP2040 GPIO |
| 14–16 | GP26 … GP28 | I/O | 3.3 V | ADC-capable, **100 nF to GND — unusable for I2C/SPI** |
| 17 | 3.3V | Pwr | 3.3 V | RP2040 rail, 1.2 A max |
| 18 | RST | In (pull-up) | 3.3 V | System reset, pull low |
| 19 | 5V | Pwr | 5 V | Power Output 2, **1.2 A max** |
| 20 | D− | I/O | — | USB 2.0, native PCH |
| 21 | D+ | I/O | — | USB 2.0, native PCH |
| 22 | GND | — | — | |
| 23 | S0 | Out | 3.3 V | OS-running indicator (200 Ω series, drives an LED) |
| 24 | S3 | Out | 3.3 V | OS-sleeping indicator (200 Ω series) |
| 25–31 | GP7 … GP13 | I/O | 3.3 V | RP2040 GPIO |
| 32 | RUN | In | 3.3 V | RP2040 reset, active low |
| 33 | SCLK | I/O | 3.3 V | RP2040 SWCLK (SWD debug) |
| 34 | SDIO | I/O | 3.3 V | RP2040 SWDIO (SWD debug) |
| 35 | GND | — | — | |
| 36 | SW | In (pull-up) | 3.3 V | System power button, pull low |
**Warnings from the vendor docs**
- Do not draw from 5 V Power Output 1 and Output 2 simultaneously.
- GP26–GP28 carry 100 nF to ground for ADC stability; avoid them for I2C or any fast edge.
- Do not apply >3.3 V to any RP2040 pin.
### Usable RP2040 GPIO budget
**GP0–GP13 (14 clean pins)** plus GP26–GP28 (analog-only in practice). GP14–GP25 are not broken out.
RP2040 peripheral options **within GP0–GP13**:
| Peripheral | Available pins in GP0–GP13 |
|------------|----------------------------|
| SPI0 | SCK GP2/GP6, TX(MOSI) GP3/GP7, RX(MISO) GP0/GP4, CSn GP1/GP5 |
| SPI1 | SCK GP10, TX(MOSI) GP11, RX(MISO) GP8/GP12, CSn GP9/GP13 |
| I2C0 | SDA GP0/GP4/GP8/GP12, SCL GP1/GP5/GP9/GP13 |
| I2C1 | SDA GP2/GP6/GP10, SCL GP3/GP7/GP11 |
| UART0 | TX GP0/GP12, RX GP1/GP13 |
| UART1 | TX GP4/GP8, RX GP5/GP9 |
Any RP2040 pin can also be PWM or PIO. **[VERIFY]** against the published pinout — the peripheral map
above is from the RP2040 datasheet, not from LattePanda.
---
## 5. I/O and expansion
| Interface | IOTA | Delta (for comparison) |
|-----------|------|------------------------|
| USB Type-A | **3 × USB 3.2 Gen 2 (10 Gbps)** | 1 × 3.2 Gen2 + 2 × 3.2 Gen1 |
| USB header | USB 2.0 pin header (pins 20/21) | — |
| USB-C | **Power input only (PD 15 V)** — no data, no DP-alt | USB 2.0 Type-C + DP 1.4 alt |
| Ethernet | 1 × GbE RJ45, WoL (**Realtek, `r8169`**) | Intel I225-V GbE |
| Video | HDMI 2.1 (4K@60), eDP 1.4b 2-lane (1080p60) | HDMI 2.0b, DP via USB-C, eDP 30-pin |
| **M.2 E-key 2230** | PCIe 3.0 ×1 / USB 2.0 / CNVio2 — Wi-Fi/BT | present |
| **M.2 B-key** | **ABSENT** | present (2242/2252/2280, SATA/USB2/USB3/SIM) |
| **M.2 M-key** | **ABSENT** — use the FPC PCIe adapter | present (2280, PCIe 3.0 ×2) |
| PCIe FPC | 16-pin, 0.5 mm, **PCIe 3.0 ×1**, 2.2 A shared across two 5 V pins | — |
| microSD | TF slot | Micro-SD + Micro-SIM combo |
| Audio | 3.5 mm jack, speaker via header, HDMI digital | 3.5 mm combo |
| Fan | 4-pin 1.25 mm, PWM, 5 V | — |
| UPS | 10-pin 1.25 mm USB 2.0 connector | — |
### Known expansion boards
- **DFR1250 — M.2 M-key expansion**: converts the 16-pin FPC to an M.2 M-key slot, PCIe 3.0 ×1 (8 GT/s),
2230 and 2280, bus-powered, no drivers. **NVMe only — SATA M.2 SSDs are not supported.**
Measured ~810 MB/s in an independent review.
- PoE expansion board — works as a standalone gigabit interface.
- UPS board — **reported working only on Windows 10/11; Linux NUT did not see a USB device.**
---
## 6. Linux behaviour (independent report, Nov 2025)
- Fedora Server 43 / kernel 6.17.7 installed cleanly, "no quirks or oddities". Ubuntu 22.04/24.04 are
the vendor-supported targets.
- Ethernet is Realtek via `r8169`.
- eMMC: ~316 MB/s sequential read, ~175 MB/s write, ~0.15 ms read latency.
- NVMe over the FPC adapter: ~810 MB/s.
- Power: ~4.0 W idle; 24.4 W under disk stress; 36.3 W peak under combined CPU+disk, dropping as the CPU throttles.
- Thermals with the active cooler: ~80 °C initially under sustained all-core load, settling ~70 °C at
2.2–2.3 GHz; ~2.9 GHz on brief single-core bursts. **The stock active cooler is loud** ("very strong
high-pitched whine") — relevant only if anyone has to sit next to it.
- 24 h stress with the thermal-pad film accidentally left on produced no throttling.
- 3 USB storage devices ran ~24 h / 72 TB of reads with no kernel instability.
- RTC present, so the systemd timer problems seen on the V1 are gone.
---
## 7. Migration notes (vendor "V1 → IOTA" guide)
- **Voltage:** 5 V peripherals now need level shifting. Explicit warning against >3.3 V on any pin.
- **Sketches:** existing Arduino code "needs porting" — library support differs, port-manipulation code
differs, timing and interrupt handling diverge from 8-bit AVR.
- **Display:** MIPI-DSI → eDP 1.4b; the 7-inch MIPI display (FIT0477) is incompatible (replacement FIT1030).
- **Power:** micro-USB 5 V → USB-C PD 15 V; internal connector now 10–15 V DC.
- The guide does **not** cover bootloader details, Arduino IDE board selection, upload-method changes, or
a library compatibility matrix.
---
## 8. Open questions — confirm on real hardware
| # | Question | Why it matters |
|---|----------|----------------|
| 1 | Is there **any** PCH-side I2C/SMBus reachable on the IOTA? The published header shows only COM1. | The SHT41 ambient sensor lives on the Delta's `/dev/i2c-2` (Synopsys DesignWare LPSS). With no PCH I2C it must move to the RP2040 or to a USB-I2C bridge. |
| 2 | Is header COM1 (pins 3/4) **3.3 V TTL or true RS-232 levels**? Docs say 3.3 V. | The Xsens MTi is on the Delta's RS-232 header at `/dev/ttyS0`. A level mismatch needs a transceiver or a USB-serial adapter. |
| 3 | Exact RP2040 VID:PID and `/dev/serial/by-id/` string. | `[Serial] device` and the udev rule. |
| 4 | Does the header COM1 enumerate as `ttyS0` under Linux, and is it enabled in BIOS? | IMU device path. |
| 5 | Can the Quectel RM520N-GL (M.2 B-key) be rehomed? | No B-key slot on the IOTA. |
| 6 | USB3 LPM and `usbfs_memory_mb` behaviour on the N150 xHCI. | Known issue #19 — the Alvium stalls without these. |
| 7 | Sustained JPEG XL encode throughput at the production frame size. | Sets the achievable capture rate. **Measured 2026-09-30 on tower 121:** a full-resolution (5328×3040) colour frame at distance 0.8, effort 4 takes 0.67 s with 3 threads (0.73 s while the camera streams), 0.50 s with 4; on a sharp, detailed frame 0.74 s with 4 threads, and one save worker keeps up with about one frame per 0.8 s. The 3 Delta (tower 111) is about 55% slower per pixel ([camera-capture-measurements.md](camera-capture-measurements.md)). |
---
## Sources
- [LattePanda IOTA product page](https://www.lattepanda.com/lattepanda-iota)
- [LattePanda Docs — IOTA Internal Interface (36-pin pinout)](https://docs.lattepanda.com/content/iota_edition/io_playability_Internal/)
- [LattePanda Docs — IOTA RP2040 Programming](https://docs.lattepanda.com/content/iota_edition/rp2040_programming/)
- [LattePanda Docs — Migration Guide (V1 to IOTA)](https://docs.lattepanda.com/content/iota_edition/migration_guide_v1_to_iota/)
- [CNX Software — LattePanda IOTA SBC combines Intel N150 with RP2040](https://www.cnx-software.com/2025/09/18/lattepanda-iota-sbc-combines-intel-n150-soc-with-raspberry-pi-rp2040-for-gpio-and-power-control/)
- [LinuxGizmos — LattePanda IOTA brings Intel N150 and RP2040 co-processor](https://linuxgizmos.com/lattepanda-iota-brings-intel-n150-and-rp2040-co-processor-in-palm-sized-sbc/)
- [DFRobot — LattePanda IOTA 8GB/64GB](https://www.dfrobot.com/product-2989.html)
- [DFRobot Wiki — DFR1250 M.2 M-Key Expansion Board](https://wiki.dfrobot.com/SKU_DFR1250_M2_M_Key_Expansion_Board)
- [techtipsy — LattePanda IOTA review: how does it perform as a home server?](https://ounapuu.ee/posts/2025/11/18/lattepanda-iota/)
- [CNX Software — LattePanda Sigma (ATmega32U4 reference)](https://www.cnx-software.com/2023/04/26/lattepanda-sigma-intel-core-i5-1340p-raptor-lake-sbc-atmega32u4-arduino-mcu/)
- [Arduino-Pico (earlephilhower) — PlatformIO integration](https://arduino-pico.readthedocs.io/en/latest/platformio.html)