资产清单 与交付物
所有「可以交付、可以烧写、可以部署」的东西,连同校验哈希和存放位置。
#固件交付物
| 文件 | 大小 | SHA-256(前 16 位) | 用途 |
FoloToy-AI-Passport-full.bin | 2,075,696 B | 3fddd44c8f45848d… | 交付件,烧到 0x0(含 bootloader + 分区表 + 应用) |
debug/FoloToy-AI-Passport.bin | 2,010,160 B | 78fdbf1308b226c6… | 纯应用镜像,烧到 0x10000 |
debug/FoloToy-AI-Passport.elf | 13,782,620 B | b2eff064be831e96… | 调试符号,GDB / 崩溃回溯 |
debug/FoloToy-AI-Passport.map | 6,558,671 B | 59e8293ca1f557db… | 链接映射表 |
debug/bootloader.bin | 20,944 B | d4c46826858656d3… | 引导程序,烧到 0x0 |
debug/partition-table.bin | 3,072 B | 420931e3f5af072d… | 分区表,烧到 0x8000 |
manifest.json | — | — | 内容寻址归档清单(各文件哈希 + 应用描述符) |
完整哈希见 dist/manifest.json。目标芯片 esp32c3,Flash 8 MB,ESP-IDF v5.5.3。
#烧录命令
# 只烧这一个文件,偏移 0x0
python -m esptool --chip esp32c3 -b 460800 --before default_reset --after hard_reset \
write_flash --flash_mode dio --flash_size 8MB --flash_freq 80m \
0x0 FoloToy-AI-Passport-full.bin
⚠️ 不要把 debug/FoloToy-AI-Passport.bin 烧到 0x0。
那是纯应用镜像,只有烧到 0x10000 才正确。常规烧录一律用合并镜像 full.bin。
#镜像布局与分区表
Flash 镜像布局
0x000000 bootloader 20,944 B
0x008000 partition-table 3,072 B
0x010000 application 2,010,160 B
→ factory 分区 (0x7f0000 = 8,123,072 B),76% 空闲
分区表(partitions.csv)
nvs data nvs 0x9000 0x6000
phy_init data phy 0xf000 0x1000
factory app factory 0x10000 0x7f0000
#硬件资产
| 项 | 值 | 说明 |
| 主控芯片 | ESP32-C3 | 单核 RISC-V,含 Wi-Fi + BLE |
| Flash | 8 MB | 无 PSRAM(外挂内存) |
| 开发框架 | ESP-IDF 5.5.3 | FreeRTOS |
| 测试设备 | wb-c84e | MAC 98:c3:77:f4:c8:4e |
| 设备标识 | wb-0001(可配) | 锚点房间路由用 deviceId |
#配置与凭据资产
| 资产 | 位置 | 性质 | 保密要求 |
| Wi-Fi 凭据种子列表 | ai-passport/main/wb_wifi_seed.local.h | 编译期写入的 SSID + 密码 | 🔴 明文密码,不提交 |
| 锚点令牌 / URL / 设备号 | ai-passport/main/wb_anchor_secrets.local.h | 编译期写入 | 🔴 令牌,不提交 |
| 锚点 DEVICE_TOKEN / GATEWAY_TOKEN | Cloudflare wrangler secret | 运行期 secret | 🔴 不写进 wrangler.toml |
| 宿主 API Key(ASR / TTS / 大模型) | ~/.workbuddy/.env | 运行期读取 | 🔴 权限 600 |
凭证红线: 项目规范明确「不得提交凭据、设备二维码密钥、私钥、个人数据、未脱敏日志」。仓库里每个 secrets 文件都有对应的 .example 模板,真实值只留本地。
#部署资产(Cloudflare)
| 项 | 值 |
| 账号 ID | 67a19f55851c5090d43fdbc8119317d2 |
| 锚点 Worker | card-anchor → card.jxccwx.com |
| 本网站 Worker | passport-docs → passport.jxccwx.com |
| 主域名 | jxccwx.com |
| Durable Object | SessionRoom(SQLite 后端) |
#源码结构总览
ai-passport/ 固件(C / ESP-IDF)
├─ main/
│ ├─ wb_app.c 应用主逻辑
│ ├─ wb_anchor.c 公网锚点链路
│ ├─ wb_audio.c 音频引擎
│ ├─ wb_ble.c 蓝牙链路
│ ├─ wb_link.c 链路抽象
│ ├─ wb_proto.c 协议编解码
│ ├─ wb_ui.c 屏幕界面
│ ├─ wb_ulaw.c μ-law 编解码
│ ├─ wb_wifi.c Wi-Fi 连接
│ ├─ main.c 入口
│ └─ *.local.h 凭据(不提交)
└─ dist/ 交付物 + manifest.json
anchor/ 锚点(Cloudflare Worker + DO)
└─ src/
├─ index.js 路由 / 鉴权
├─ session.js SessionRoom
├─ protocol.js 协议常量
└─ version.js 构建指纹
passport-companion/ 宿主(Python)
└─ passport_companion/
├─ bridge.py HTTP 桥接
├─ session.py 会话状态机
├─ protocol.py 协议
├─ transport/ 传输层(base/ble/relay/fake)
├─ asr.py / tts.py 语音转换
├─ audio.py 音频工具
└─ mcp_server.py MCP 接口