Skip to content

Commit c9a2f6a

Browse files
Studio: the first real flash buttons — teiOS UF2s hosted with a manifest.
web/public/teios/: teios-feather-rp2040.uf2, teios-pico.uf2, teios-pico2.uf2 (built from the E1a/E1 firmware) + manifest.json — the forge's catalog shape v0: per-image board_id, uf2_family, sha256, bytes, install tier, drive name, protocol id, substrates, and honest joules provenance ("table — ILLUSTRATIVE pending bench calibration"). /studio board cards for the Feather RP2040 and Pico-class gain working FLASH teiOS download buttons with the three-step W2 instructions (hold BOOTSEL, drag onto RPI-RP2, CONNECT above). Minutes-to-first-ledger is now fully real for any RP2040 board, no install, no account: download, drag, connect, watch your board dispatch. Verified headless: manifest served hash-consistent, 3 buttons rendered, download works, zero JS errors. Pico 2 image marked hardware-unverified (none on the bench).
1 parent f0bb8f1 commit c9a2f6a

5 files changed

Lines changed: 67 additions & 6 deletions

File tree

web/public/teios/manifest.json

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"name": "teiOS images",
3+
"version": "0.1.0",
4+
"built": "2026-06-12",
5+
"images": [
6+
{
7+
"board_id": "feather-rp2040",
8+
"file": "/teios/teios-feather-rp2040.uf2",
9+
"uf2_family": "rp2040",
10+
"bytes": 117248,
11+
"sha256": "09d94bdb2fd349a51a1211b09d4805a321f921fc56d3c79e8eebae81976e01e8",
12+
"install_tier": "W2",
13+
"drive_name": "RPI-RP2",
14+
"firmware": "teios 0.1",
15+
"protocol": "tei-jsonl-v0",
16+
"substrates": [
17+
"cpu",
18+
"dma-sniffer"
19+
],
20+
"joules_provenance": "table (ILLUSTRATIVE \u2014 pending bench calibration)"
21+
},
22+
{
23+
"board_id": "pico",
24+
"file": "/teios/teios-pico.uf2",
25+
"uf2_family": "rp2040",
26+
"bytes": 117248,
27+
"sha256": "4bad254214887cea5925453c6eecf182f99f5cd3ec99372587645a82be5b8920",
28+
"install_tier": "W2",
29+
"drive_name": "RPI-RP2",
30+
"firmware": "teios 0.1",
31+
"protocol": "tei-jsonl-v0",
32+
"substrates": [
33+
"cpu",
34+
"dma-sniffer"
35+
],
36+
"joules_provenance": "table (ILLUSTRATIVE \u2014 pending bench calibration)"
37+
},
38+
{
39+
"board_id": "pico2",
40+
"file": "/teios/teios-pico2.uf2",
41+
"uf2_family": "rp2350-arm-s",
42+
"bytes": 116224,
43+
"sha256": "3b488b4226f3d5fb35bb3a6f22e47ce7d765318a6d87a6d497c3a57a6880097b",
44+
"install_tier": "W2",
45+
"drive_name": "RPI-RP2",
46+
"firmware": "teios 0.1",
47+
"protocol": "tei-jsonl-v0",
48+
"substrates": [
49+
"cpu",
50+
"dma-sniffer"
51+
],
52+
"joules_provenance": "table (ILLUSTRATIVE \u2014 pending bench calibration)"
53+
}
54+
]
55+
}
115 KB
Binary file not shown.

web/public/teios/teios-pico.uf2

115 KB
Binary file not shown.

web/public/teios/teios-pico2.uf2

114 KB
Binary file not shown.

web/src/pages/studio.astro

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ import Layout from '../layouts/Layout.astro';
1717
on hardware you already own.
1818
</p>
1919
<p class="text-brand-gray text-sm max-w-3xl leading-relaxed">
20-
Preview status: the live ledger console below works today with any
21-
serial device speaking the teiOS JSON-lines protocol. One-click teiOS
22-
flashing (UF2 drag-drop for the Feather fleet, WebUSB DFU for the
23-
Portenta H7) lands with the E1 images.
20+
The live ledger console works today with any device speaking the
21+
teiOS JSON-lines protocol — and the first teiOS images are here:
22+
UF2 downloads below for the Feather RP2040 and Pico-class boards
23+
(drag-drop, any browser). WebUSB DFU for the Portenta H7 is next.
2424
</p>
2525
</section>
2626

@@ -97,7 +97,8 @@ const AMBER = '#F59E0B', CYAN = 'rgba(14,165,233,0.55)', GREEN = '#34d399', GRAY
9797
// ── board catalog (curated from docs/EMBEDDED-TARGETS.md) ─────────────
9898
const BOARDS = [
9999
{ name: 'Portenta H7 / H7 Lite', tier: 'W1', via: 'WebUSB DFU — browser-flashable today (double-tap reset)', sub: 'STM32H747 dual-core: M7@480 vs M4@240 — heterogeneous-core dispatch on one die', status: 'E1b flagship · on the bench' },
100-
{ name: 'Adafruit Feather fleet', tier: 'W2', via: 'UF2 drag-drop — every browser, even Safari', sub: 'RP2040 (PIO + DMA-sniffer), nRF52840 (PPI), SAMD51 (EVSYS+CCL)', status: 'E1a — first real ledger · on the bench' },
100+
{ name: 'Adafruit Feather RP2040', tier: 'W2', via: 'UF2 drag-drop — every browser, even Safari', sub: 'CPU vs DMA-sniffer CRC race, dispatched live — the E1a firmware', status: 'FLASHABLE NOW · on the bench', uf2: '/teios/teios-feather-rp2040.uf2' },
101+
{ name: 'Raspberry Pi Pico / Pico 2', tier: 'W2', via: 'UF2 drag-drop', sub: 'Pico = RP2040 build; Pico 2 = RP2350 build (hardware-unverified: none on the bench)', status: 'FLASHABLE NOW', uf2: '/teios/teios-pico.uf2', uf2b: { label: 'Pico 2', url: '/teios/teios-pico2.uf2' } },
101102
{ name: 'Particle Tachyon', tier: 'Tier 0', via: 'tachyon-os (in-house bare-metal Rust OS)', sub: 'QCM6490: big.LITTLE + Hexagon NPU + 5G; PMIC ADCs = candidate self-telemetry', status: 'teiOS-on-Snapdragon · on the bench' },
102103
{ name: 'OpenMV AE3', tier: 'Tier 0', via: 'OpenMV / Alif SETOOLS', sub: 'Alif E3: dual M55 + dual Ethos-U55 — the open-Vela NPU + vision bundle', status: 'NPU column · on the bench' },
103104
{ name: 'Nicla Voice', tier: 'W3', via: 'Arduino / BLE DFU', sub: 'Syntiant NDP120: always-on audio inference at sub-mW while the host sleeps', status: 'the µW dispatch story · on the bench' },
@@ -115,7 +116,12 @@ for (const b of BOARDS) {
115116
<span class="font-mono text-[10px] text-brand-amber">${b.tier}</span></div>
116117
<p class="text-brand-gray text-[12px] leading-relaxed mb-2">${b.sub}</p>
117118
<p class="font-mono text-[10px] text-brand-light tracking-wider">${b.via}</p>
118-
<p class="font-mono text-[10px] text-brand-gray mt-2 uppercase">${b.status}</p>`;
119+
<p class="font-mono text-[10px] text-brand-gray mt-2 uppercase">${b.status}</p>
120+
${b.uf2 ? `<div class="mt-3 flex gap-2">
121+
<a href="${b.uf2}" download class="font-mono text-[10px] tracking-wider px-3 py-1.5 rounded border border-brand-amber/50 text-brand-amber hover:bg-brand-amber/10 transition-colors">⬇ FLASH teiOS (UF2)</a>
122+
${b.uf2b ? `<a href="${b.uf2b.url}" download class="font-mono text-[10px] tracking-wider px-3 py-1.5 rounded border border-white/15 text-brand-light hover:border-brand-amber/50 transition-colors">⬇ ${b.uf2b.label}</a>` : ''}
123+
</div>
124+
<p class="text-brand-gray text-[10px] mt-2">hold BOOTSEL → plug in → drag onto RPI-RP2 → CONNECT above</p>` : ''}`;
119125
boardsEl.appendChild(d);
120126
}
121127

0 commit comments

Comments
 (0)