 zhou yang和Claude Opus 5.5
|
7bf30e3c38
|
固件 0.1.0-c3:计划内重启不断电(OTA / 回滚锁住 EFUSE_EN,新固件接管;SR-6 改写)
- warm_esp.{h,c}:warm_restart() 记下开着的路(RTC_NOINIT,魔数 + 掩码 + 反码)→ gpio_hold 锁五根 EN → 重启;
目标镜像没有能力标记(第 288 字节 PRCAPS1,.rodata_custom_desc)就不锁 —— 老固件写不动锁住的 EN。
warm_take():软件复位 + 标记对得上才接管,一次性;再读 EN 真电平核对
- bringup:adopt 掩码;rail_en_init_keep() 接管的路写高、五根一律放开 hold(崩溃时旧锁可能还在);
刀片不在 / mux 失联的接管路立刻关(SLOT_EMPTY arg 1);第二段已开着的路不重开、不等 PG
- pca9555_init_keep():方向寄存器是本固件写的才留 VBUS(掉过电的片子锁存器是 0xFF),键 / EDL 清零
- HAL:hal_gpio_hold();ESP 输出脚配 INPUT_OUTPUT(读得到真电平);sim 给 hold 建模
- 事件 LOG_EV_OTA arg 7 = 接管;兜底定时器回滚故意不走接管
- 顶层 CMake:phonerail.h 进 CMAKE_CONFIGURE_DEPENDS(否则镜像头版本停在旧值);-u g_phonerail_caps 防 gc
- test_bringup 加 6 例(接管 / 非计划复位全关 / 空槽 / mux 失联 / PCA 掉过电 / hold 冻结),全工程 448 例全绿
- rack:固件库识别能力标记,推送对话框按「支持 / 不支持重启不断电」给不同提示(已部署)
- 需求文档:SR-6 改为「非计划复位全关」+ 计划内重启例外;§10.9 新增「重启不断电」
- 板 B:台架镜像(空槽强制 CH1 在位,未提交)开 CH1 → OTA 带重启 → 事件 18/7 mv=1,CH1 一直开着;
现跑 0.1.0-c3。未测:示波器看重启期间 EN / 输出毛刺(要插刀片)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
2026-09-27 14:35:52 +08:00 |
|
 zhou yang和Claude Opus 5.5
|
ae1aad3b7c
|
固件 C2:OTA 双槽 + 失败回滚(已上板实测正常 / 哈希错 / 回滚三条路径)
- 分区重排(16 MB,nvs 0x9000 不动):ota_0 / ota_1 各 3 MB、otadata 0x610000、evlog 挪到 0x612000;
flash 大小改正为 16 MB;开 CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
- ota.{h,c}(宿主机可测):URL / sha256 校验、判定(下载中 busy、待验证拒、同镜像不重下)、健康判据
- ota_esp.{h,c}:t_ota 任务经 HTTP 下载、边下边算 sha256、核 project_name 后切启动分区;
新固件 120 s 内连不上 broker 就回滚(t_link 判 + esp_timer 兜底);重启前等回应发出、事件落盘
- 新命令 ota = 13(两条链路都收,reboot 默认 false:复位 = 五台手机断电一次);status 加 ota 一块;
新事件 LOG_EV_OTA = 18;PROJECT_VER 取 PHONERAIL_FW_VERSION
- test_ota.c 13 例,全工程 442 例全绿;版本 0.1.0-c2
- 服务器:nginx 7765 只放行 /fw/<16 hex>.bin(不过门户,路由器转发已加);tools/ota_push.py 推送;
rack protocol.py 加事件 18 / 命令 13(已部署)
- 板 B:推送到自证健康 19 s;错哈希不切分区;删掉 broker 账号后 120 s 回滚,bad 报出被回滚的版本
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
2026-09-27 14:03:13 +08:00 |
|
 zhou yang和Claude Opus 5.5
|
c37c08aa43
|
固件 A16:风扇闭环接进任务体 + NTC / TACH 真实采样(已上板)
- ntc.{h,c}(宿主机可测):分压端 mV → Ω → NCP18XH103F03RB 的 R-T 表插值;
开路 / 短路 / 表外一律「读不到」(t_thermal 因此满速)
- thermal_esp.{h,c}(仅 IDF):ADC1 oneshot + 曲线校准读两路 NTC;两个 PCNT 单元数 TACH 边沿
- app_main:task_thermal 任务体、t_thermal_init 放在上电恢复之前、status 带热管理快照
- test_ntc.c 4 例;全工程 429 例全绿;版本 0.1.0-a16
- 板 B:两路 NTC 38.2 / 34.0 °C;风扇两路 rpm 0 报停转(拉满电流不涨,疑未插风扇,待确认)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
2026-09-27 13:31:32 +08:00 |
|
 zhou yang和Claude Opus 5.5
|
c85eec53e6
|
固件 A15:启动顺序 + 降级矩阵(bringup.{h,c},已上板)
- 启动序列从 app_main.c 拆进 main/bringup.{h,c},宿主机可测:
bringup_devices()(§10.9 第 1~4 步)→ 起 t_safety → bringup_power_restore()(第 5~6 步)
- 六片 INA226 写 Config/Calibration(之前没做,电流恒 0);输入侧 0x43 登记对调接
- 按「意图」逐路上电、错开 100 ms、每路等 PG 500 ms,等不到关回去并记 LOG_EV_PG_TIMEOUT(17)
- 意图只由 power 命令改(cmd_env_t.intent → NVS phonerail/rail_want)
- §10.10 逐行降级:INA/DAC/PCA9555/mux/PRSNT#/CH224A;mux 失联时不碰主干
- BOOT 事件 arg = 复位原因;HUB_RST# 仍只在上电复位时脉冲
- rail_volt_init() 一片失败不再放弃另一片;CH224A 主干 / 通道 5 两处都找
- sim:sim_gpio_rise_us / sim_gpio_set_hook,sim_gpio_drive 可在配置前调
- test_bringup.c 24 例 + test_cmd 意图 1 例,共 425 例全绿;版本 0.1.0-a15
- rack:事件表加 17 PG_TIMEOUT(已部署)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
2026-09-27 13:24:17 +08:00 |
|
 zhou yang和Claude Opus 5.5
|
26c04ce878
|
机架管理前后端(rack/):FastAPI + SQLite + Vue3,经统一门户上线
- 后端 prrack:MQTT(phonerail-backend @ 127.0.0.1:1884)↔ 遥测入库 / 事件增量同步 / WebSocket 推送;
命令白名单 + 重传同 seq;审计记门户 X-Auth-User(只绑 127.0.0.1,main.py 拒绝非回环)。
- 自动恢复:只看电流(平线 / 过低,服务器够不到手机 adb),先长按电源再断电重启,
每小时限次后停手;默认逐台关闭。adb 探活接口 recovery.Prober 预留。
- 前端:总览 / 板子页(五路操作、电流电压曲线)/ 事件 / 操作记录 / 自动恢复;手机宽度可用。
- 部署 deploy/deploy.sh:服务器 Python 3.8 上先跑测试再替换;systemd phonerail-rack,每日备份。
- 门户应用 id 16、key rack(phonerail 已被需求文档站占用),授权 admin + staff。
测试 26 例(本机 3.14 / 服务器 3.8 均过)。线上板 b81f3fc9c8bc 在线,WS 经门户 101 + 1 条/s 遥测。
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
2026-09-27 12:33:28 +08:00 |
|
 zhou yang和Claude Opus 5
|
5a80d8a872
|
写交接:SolidWorks 装配的接手点 + 本会话成果汇总
用户已在 SolidWorks 里手工把两块板载入同一装配体,刀片尚未摆位。
在 PROGRESS 顶部加「新会话从这里开始」作为唯一入口:当前装配体状态、
下一步(刀片绕 X +90° 竖起 + 平移到槽位)、卡点(CreateTransform 封送)、
本会话七项成果与对应提交、四条待办。
装配体状态快照存 .claude/r2/3d/_sw_assembly_state.json:
- 活动文档 D:\DCDC\新建文件夹\3D_BASE-PCB_2026-09-12.SLDASM
- 底板包围盒 x 0.01~97.99,变换为单位阵 ⇒ 原点 = 板左下角(可直接套板坐标)
- 刀片无旋转、平放,引用 PhoneRail_blade.SLDASM(实体文件)
NOTES 两处更正:
- §14 二次更正:坐标系取决于插入方式 —— AddComponent4 插的会重心归零,
用户 GUI 手工插的保留板左下角原点。动手前先 GetBox 看一眼,别假设。
- §19 新增:三个磁盘文件各是什么、底板零部件引用的是临时件(一清理就断链),
并写明新会话第一件事不要 CloseAllDocuments。
新建文件夹/(126 MB STEP/SLDASM)加进 .gitignore。
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-12 14:48:48 +08:00 |
|
 zhou yang和Claude Opus 5
|
cdb63fd497
|
R2 刀片:台阶的连带影响 —— 金手指 J1 位号挪出被切区
开台阶时只查了铜/过孔/焊盘/器件,漏了丝印。补查 82 条(自由丝印 + 可见位号):
- J1 位号锚在 (26.45, 8.38)、框 x 25.74~27.16,左半截落在切掉的板材上(1.44 mm²)
⇒ 已挪到 (28.50, 8.378),左下对齐与居中两种口径都在舌头 27~63 内;板上已下发并读回核对。
- 丝印层的线 0 段越界。
- 封装自带的 NOT PCIe - PhoneRail blade 读不回来(PCB 文档不列封装内部图元),
按锚点 28.50 + alignMode 默认 3(左下)推算 x 28.50~44.62,截图实测左端 ≈28.7 mm 佐证,安全。
⇒ 以后改板框(尤其切掉板材)时,检查清单必须包含丝印与位号,不能只查铜层。
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-12 12:52:49 +08:00 |
|
 zhou yang和Claude Opus 5
|
22d9f31e9b
|
R2 底板:补 6 条自由丝印(插槽 NOT PCIe 警告 + J1/J23 接口标注)
板上 pcb_PrimitiveString 原本 0 条 —— 方案 §5.2 要求的插槽警告、J1/J23 的接口标注
一直只写在原理图说明文字里,从没落到 PCB。
已补并读回核对 6/6:
- PWR 20V L4 (12.500, 1.800) J1 与 J23 同一颗 USB-C 座,插错要能看出来
- USB L4 (84.250, 1.800) J23 是 Hub 上行口
- NOT PCIe - PhoneRail blade only L3 (49.000, 79.480)
- NOT PCIe ×3 L3 (36.000,18.520) / (62.000,38.840) / (45.000,59.160)
完整句只放得下一条,其余槽间放短标 ⇒ 五个槽每个都邻着一条。
三条坑(已写进 R2 §39.5):
- ⛔ 丝印压铜不算冲突(铜上有阻焊)。第一版把压铜也当冲突,六个候选位全军覆没,
看着像「板上没地方放字」。真正要避的只有 焊盘 / 过孔 / 位号 / 安装孔 / 板框外。
- ⚠ alignMode 要显式传 5(CENTER),不传默认不是居中,字会整体偏出去;
位号 Attribute 用的 3 是另一套口径。
- ⚠ 核对不能拿文案当字典 key:NOT PCIe 有三条,同名互相覆盖 ⇒
「6 条都建上了」却报成「4/6 对上」。按 文案+坐标+层 配对。
新工具 silk_str.py:自带落点搜索(0.25 步长 + 偏移上限)、幂等下发、--verify 只读核对。
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-12 12:48:15 +08:00 |
|
 zhou yang和Claude Opus 5
|
dc4f9b9d1c
|
R2 刀片:金手指两侧开台阶(插不进插槽)+ 铺铜补齐并跟着台阶重画
⛔ 根因:禁布区 ≠ 板材。ZONES['finger'] 早写着「槽体 ~9mm 要让开」,但那只是
「别放件」,板框从来没开台阶 —— outline_pts() 第一段就是 (r,0)→(BW-r,0),
90 mm 宽的板材一直到 y=0。插槽塑料体只有 39 mm 且两端封闭 ⇒ 插不到底。
板框(用户拍板):舌头 36.0 mm(x 27~63)/ 台阶高 12.0 / 内凹角 R1.0,切掉 648 mm²(10.6%)。
放行核算:被切区里铜 0 / 孔 0 / 焊盘 0 / 器件 0(板上读回与缓存两种口径一致);
7 个定位孔最南 y=14.46 全在板材上;铣穿槽 y 56.86 不受影响。
代价:主板投影底边在舌头两侧悬空 1.0 mm,靠 7 个 M1.6 尼龙立柱压住,无害。
铺铜:抓板发现板上只有 11 块(L1/L4 的 GND 底填整层缺失,而记录写的是 25/25)。
补齐后按台阶重画成 31 块(L2 11 + L1 9 + L4 9 + L3 两岛),填充 31/31,DRC 间距 0 条。
+12V 岛改成阶梯形单环:舌头段仍下探 y=9.0 接 12V 三指 launch 孔,东段抬到 12.5,
断面 11.0 → 7.5 mm(1 oz 内层约 5.1 A,需求 1.5 A 峰值)。
两条判据上的坑:
- 阶梯形多边形不能按包围盒判越界(+12V 岛会误报)⇒ 改成逐边 0.25 mm 采样。
- pcb_pour.inner_poly()/outer_poly() 是死函数,plan() 只用 gnd_tiles()。
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-12 12:36:36 +08:00 |
|
 zhou yang和Claude Opus 5
|
312089326e
|
R2 底板:按用户布局重布风扇窗口 + L1 走廊重开 + 位号丝印重排
布线(窗口整体重布,已下发):
- 拆窗口内 43 段(用户手布的那批,用户选「拆掉重来」),补 139 段 / 7 孔,
GND 回流孔 10 个;fan_check 对板上真实快照逐项净距达标(含「新孔 vs 内层线」)。
- ⛔ 根因:pcb_base.PD_L1 里的 L1 走廊是按**旧摆位**开的(注释坐标全是旧的),
用户重摆后与件对不上 ⇒ 四条长途网必然布不通。重开六条走廊后未完成 4 → 2。
走廊必须盖住焊盘正上方,只盖沿途不行。断面:几何 11.80 / 铺铜后实测 9.82(要 8.0)。
- 与拆线前逐网对比:没引入任何新的连通性问题(GND 未接 58→48、+3V3 2→0、
两路 TACH 2/1→0、+12V 一字不差)。
定版:板上铜以**用户自己布好的那版**为准,不再改动。
丝印(silk_base.py,已下发并读回核对 150/150):
- 压焊盘 128→4、压过孔 48→8、越框 8→3、互相重叠 34 对→0;字号不变。
- 三条坑:rotation 是度且不归一化(900=180°);别拿「本体≥5mm」当保留白名单
(会豁免掉 R9A/D3/U13 这些该重排的件);「离本体」必须设硬上限 + 降级策略。
新工具:silk_base.py(丝印重排)、l1_section.py(L1 12V 主块逐 y 断面核算)、
fan_rip.py(按窗口拆线,拆前后比对全板线/孔总数防连带删除)。
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-12 12:02:32 +08:00 |
|
 zhou yang和Claude Opus 5
|
51b570a59f
|
R2 底板:删 J1 通孔地脚里的 12 个过孔、天线缺口东移 0.3,写交接
- 板上与布线缓存同步删掉 J1.2 / J1.3 里误打的 12 个 GND 过孔(TH_KEYS 改名 bug 已在上一提交修)
- 天线缺口西沿 90.5 → 90.8:U20 地脚 1/40 到缺口边 0.155 → 0.454 mm,板框已重画并校验
- PROGRESS 顶部加「下次从这里开始」:填铜、DRC 挖槽区域、37 个网手工补线的顺序
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-10 21:04:07 +08:00 |
|
 zhou yang和Claude Opus 5
|
efcba30a0c
|
R2 底板改 4 层(D15):规则 / 几何 / 背面摆位 / 4 层布线与铺铜,已下发
- 规则:铜层 2→4,差分 0.28/0.18,间距 0.15,过孔 0.3/0.2(rules_base)
- 几何:98×98 板框 + 4×M3,槽阵居中,L1 12V 大铜 + 指头(pcb_base)
- 摆位:五插槽留 L1,其余 133 件翻到 L4;背面镜像规则实测;Hub 放走廊 2、
东移 2.5 mm;扇出圈 / 小件间距 1.5(去耦例外)/ 9 A 过孔阵禁区(place_base)
- 叠层按用户决定改为 L1 槽面 / L2 整层 +3V3 / L3 整层 GND / L4 器件面
- 布线:D± 七对按构造布通(USB3 掉头、USB1/2 北去掉头、USB4/5 东绕、
J23 桥),+3V3 / GND / +12V 平面网每脚一孔,0.125 网格 + PathFinder
开关(route_base、remote_route.ps1);剩 37 个网待手工补
- 铺铜:4 层重写,入口链自南向北切段 + 断面校核(pour_base);
已下发布线 / 缝合孔 / 铜面轮廓,填铜未成功(待查)
- 工具:plot_base / plot_routes / shot_base,board_check 通孔两层都算
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
|
2026-09-10 21:02:10 +08:00 |
|
 zhou yang和Claude Opus 5
|
2bfe308b30
|
初始导入:PhoneRail 五路手机直供电源板
原理图/PCB 已在 EasyEDA 里做到 12 页跨页 0 漏接,固件刚完成骨架包 A1。
这次是把已有的一切一次性纳入版本控制,没有改动任何设计内容。
纳入:
- 设计与需求文档、PROGRESS.md、小米8 参考原理图 PDF 与追脚脚本
- .claude/ 下的 EasyEDA 桥接工具链与几何/网表缓存(eda-parts.json、
pcb-parts.json、pcb-pads.json、p2-ch1.json 等,是重画各页的唯一事实来源)
- 117 张验证截图(本项目所有方向问题都是靠人眼看截图发现的,属于证据不是垃圾)
- firmware/ 的 A1 骨架与 site/ 文档站源码
.gitignore 排除:构建产物(firmware/build、host/build、sdkconfig)、
site/node_modules、__pycache__、桥接日志 _bridge.log、脚本自标的 *.stale。
.gitattributes 默认 `* -text`:现有 .py/.json 大多是 CRLF,原样存,
不让 git 重写行尾。唯一例外是 *.sh 强制 LF —— 带 \r 的 shell 脚本 bash 跑不了。
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
|
2026-09-06 18:18:14 +08:00 |
|