diag: 加邮箱楔死探针三件套, 移除 _repro_hang.py

_probe_wedge.py   逐环节定位死点: A 写 SM0 的 WKC → B 0x220 bit0 是否置位
                  → C SSC 是否清事件并置 SM1 就绪 → D SM1 是否滞留旧响应,
                  用于区分 ESC 硬件楔死与 SSC 软件死循环。
_probe_wedge2.py  按真实邮箱协议走: 查写邮箱空 → 写满 256B → 验事件/响应。
_probe_stuck.py   验"SM1 响应滞留 → 邮箱死锁"假说: 复现失败 → 手动读走 SM1
                  清 bit3 → 再读是否恢复。若恢复则主站侧可自愈。

_repro_hang.py 的闪退成因已定位(见 a1ec486, config_map 撞楔死邮箱), 且规避
已内建到 op/start 入口, 该复现脚本失去用途, 删除。

README 同步脚本清单, 并记下 SM = 0x0800 + 8n 这个易错点。
.gitignore 排除 _analyze_log.py(硬编码已失效的临时日志路径)。
This commit is contained in:
cbb
2026-09-03 02:36:07 +08:00
parent a1ec486c74
commit fc9e8f34e5
6 changed files with 283 additions and 79 deletions
+3 -1
View File
@@ -25,7 +25,7 @@ venv\Scripts\python.exe -m pip install -r requirements.txt
| `ecat_esc_regs.py` | 从**网络侧**直读 LAN9252 ESC 寄存器,绕开 GD32/PDI,用于判断 EEPROM 加载是否真的失败;支持 `--reload` |
| `ecat_flash_eeprom.py` | 通过网线烧写 `gen_eeprom.py` 生成的 SII 镜像,逐字回读校验(烧完需断电重启让 ESC 重新加载) |
| `ecat_sniff.py` | 旁路抓包,hexdump SOEM 自己发出的帧,用于对照裸帧格式 |
| `_repro_hang.py` | 复现 op/start 卡住→闪退的最小脚本,带 faulthandler 看门狗 |
| `_probe_wedge.py` | 邮箱楔死现场逐环节定位:A 写 SM0 的 WKC → B `0x220` bit0 是否置位 → C SSC 是否清事件并置 SM1 就绪 → D SM1 是否滞留旧响应,用于区分 ESC 硬件楔死与 SSC 软件死循环 |
## 启动方式
@@ -39,5 +39,7 @@ venv\Scripts\python.exe -m pip install -r requirements.txt
## 注意
- ESC 的 SyncManager 寄存器是 `0x0800 + 8n`:邮箱是 SM0=`0x0800`、SM1=`0x0808`,
`0x0810`/`0x0818` 是 SM2/SM3(过程数据)。写诊断代码时别混用,否则抓到的现场会误导判断。
- 前端 CSS/JS 改动后记得 bump `?v=` 缓存版本,否则浏览器会加载旧代码。
- EEPROM 烧写后必须断电冷启动,ESC 才会重新加载配置。