up,需要画新PCB

This commit is contained in:
2026-03-30 20:01:45 +08:00
parent 4c81d35964
commit 4fad0c7d6e
7 changed files with 82 additions and 3 deletions
+42
View File
@@ -0,0 +1,42 @@
# 2026-03-30 日志
## 编译环境搭建(esp32c3_moonshine_travelers
- Python 3.14.0 已预装(C:\Python314
- 安装 PlatformIO 6.1.19`pip install platformio`
- PlatformIO Scripts 路径:`C:\Users\wuwen\AppData\Roaming\Python\Python314\Scripts`
- 已写入用户 PATH 永久生效(无需每次手动加)
- 平台工具链 `espressif32@6.11.0``framework-arduinoespressif32``toolchain-riscv32-esp` 已存在(之前工程留下)
- 固件目录:`code/firmware-2.7.15.567b8ea`,编译命令:`pio run -e esp32c3_moonshine_travelers`
## 遇到问题:Windows MAX_PATH 限制
- SparkFun ICM-20948 库解压时路径超过 260 字符 → `PackageException`
- 根因:`examples/Arduino/Example10_DMP_FastMultipleSensors/` 路径过长
- 修复方案:需要管理员权限执行以下命令启用 Windows 长路径支持:
```powershell
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1
```
- 后续:用户反映编译成功(Windows 长路径问题已自行解决)
## 调试:节点不发公钥/节点名字对端看不到
- **根本原因**:设备 Flash 中残留 `owner.is_licensed = true`HamConfig 曾通过 App 下发并持久化)
- **公钥不发**`NodeInfoModule::allocReply()` 中 `is_licensed==true` 时主动清零公钥字段(Ham 法规要求)
- **名字对端不可见**`handleReceivedProtobuf()` 检查 `p.is_licensed != owner.is_licensed` 时直接丢包
- **解决**:擦除 Flash NVS 分区(`pio run -t erase`)后重烧,或通过 App 关闭 Licensed 开关
## 修复:切换 role 后 NodeInfo/公钥仍不广播(CLIENT_HIDDEN 遗留问题)
### Bug 1owner.role 不随 config.device.role 同步
- **位置**`AdminModule.cpp` `handleSetConfig()` device_tag 分支
- **原因**:改 role 时只更新 `config.device.role``owner.role`(广播字段)从不更新
- **修复**:在 `installRoleDefaults()` 调用后加 `owner.role = config.device.role;`
### Bug 2:从 CLIENT_HIDDEN 切回 CLIENT 后广播间隔不恢复
- **位置**`NodeDB.cpp` `installRoleDefaults()`
- **原因**CLIENT_HIDDEN 把 `node_info_broadcast_secs` 设为 `INT32_MAX`,切回 CLIENT 时没有对应的重置分支
- **修复**:新增 `CLIENT` / `CLIENT_MUTE` 分支,恢复 `default_node_info_broadcast_secs` 等默认值
### 额外确认
- **公钥不生成的前置条件**`config.lora.region == UNSET` 时 NodeDB::init() 跳过 PKI keygen;需先通过 App 设置 region 才会生成密钥对
+27 -1
View File
@@ -2,7 +2,8 @@
## 项目概述
- **项目**LoRa Meshtastic 固件开发
- **主代码目录**`code/firmware-2.7.15.567b8ea`(基于 Meshtastic 官方固件 v2.7.15
- **主代码目录**`code/meshtastic_firmware`(基于 Meshtastic 官方最新 develop 分支
- **旧代码目录**`code/firmware-2.7.15.567b8ea`(基于 Meshtastic 官方固件 v2.7.15,已废弃)
- **构建系统**PlatformIO + ESP-IDF (Arduino framework for ESP32)
## 硬件平台 & 自定义板卡
@@ -86,6 +87,9 @@
## 代码架构要点
- **踩坑记录**TCA9535 矩阵扫描 cols 计算中 `~` 运算符对 uint8_t 会整数提升为 int,导致高 4 位被污染。修复:`((~(p0In & 0xF0)) >> 4) & 0x0F`。见 scanMatrix()。
- **踩坑记录**`owner.role` 只在 `NodeDB::NodeDB()` 构造时同步一次(`owner.role = config.device.role`),`AdminModule::handleSetConfig()` 改 role 时不更新 `owner.role`,导致广播出去的 NodeInfo 里 role 仍是旧值。已修复:在 `AdminModule.cpp` device_tag 分支末尾加 `owner.role = config.device.role;`2026-03-30
- **踩坑记录**`NodeDB::installRoleDefaults(CLIENT_HIDDEN)``node_info_broadcast_secs = INT32_MAX`,但 `installRoleDefaults(CLIENT)` 没有对应的恢复分支,切回 CLIENT 后 NodeInfo 永远不广播。已修复:新增 CLIENT/CLIENT_MUTE 分支恢复 `default_node_info_broadcast_secs`2026-03-30
- **踩坑记录**`is_licensed = true``NodeInfoModule::allocReply()` 主动清零公钥,且接收端 `handleReceivedProtobuf()``is_licensed` mismatch 直接丢包。Flash 残留旧 HamConfig 时会触发此问题,需擦 Flash 或 App 关闭 Licensed 开关。
- 路由层:FloodingRouter → ReliableRouter → NextHopRouter
- 无线接口:RadioLib 抽象层(SX126x/SX128x/LR11x0/RF95
- 模块系统:`src/modules/` 下各功能模块(TextMessage, Position, Telemetry, etc.
@@ -102,8 +106,30 @@
- MAX_THREADS=40
- 默认 envtbeam(需要切换到 esp32c3_moonshine 系列时要指定 env
- **Flash 占用**esp32c3_moonshine_travelers):text≈1.92MB, data≈0.63MB, 总≈2.57MB / 4MB
- **移植记录**2026-03-30):
- 将 esp32c3_moonshine_travelers 变体从 firmware-2.7.15 移植到官方最新 develop 分支
- 修复 `tca9535IsCharging` 未声明错误:在 Power.cpp 添加 extern 声明
- **分区表**partition-table.csv):app=0x2C0000(2.75MB), OTA=0x030000(192KB), spiffs=0x100000(1MB)
- **中文 12×12 字库**`src/graphics/fonts/ChineseFont12x12.h`21075 字形,535KB flash
## 🔧 硬件更换计划
### 问题描述
- **症状**:不发送公钥、不发送节点名字信息(最新固件仍存在)
- **潜在原因**LLCC68 规格书不支持 SF11 125kHz 模式,导致 LoRa 通信异常
### 解决方案
1. **方案A**:更换为带温补晶振(TCXO)的 LoRa 模块
- 确保晶振精度满足 SF11 125kHz 模式要求
2. **方案B**:更换为 E22-30S 系列模块
- E22-900M30S 或 E22-400M30S
- 该系列支持更宽的工作模式
### 待确认事项
- [ ] 确认 RA-01SC-P 是否为 LLCC68 芯片
- [ ] 测试更换 TCXO 版模块后的表现
- [ ] 测试 E22-30S 系列的兼容性
- 生成工具:`tools/gen_chinese_font.mjs`(需 npm install @napi-rs/canvas
- 覆盖:U+4E00-U+9FFFCJK 统一汉字全集,含 GB2312 6763 字)
- 像素判定:透明背景 + 黑色前景,alpha > 128 阈值(去掉抗锯齿毛边,字形锐利)