docs(屏板链路): 规划文档收编为设计说明事实源,全仓引用与端口口径同步
- 重写 docs/子系统设计/屏板链路设计说明.md:链路角色、串口与端口配置、 物理接线、协议实现口径、键值与状态灯映射、资源与耗时、对外接口、 已验证/未闭环、坑账本——只写现状事实,演进过程查 git 历史 - 删除 docs/任务规划/屏板链路.md(内容已全部沉淀进上述设计说明, 登记簿「完成即销项」;docs/任务规划/README.md 相应两行一并移除) - 代码与主机侧测试的文档指针改指设计说明对应章节: sb_link.h/.c、sb_proto.h/.c、sb_led_map.h、console_log.c、ui_task.c、 test/host 的 sb_link/sb_proto/sb_led_map 三套与两个台架脚本 - docs/README.md:设计文档索引行与设计说明描述更新,任务规划目录 7→6 文件 - docs/产品需求/产品需求设计文档.md:串口通道现状口径同步——第 11/12/13 条 已交付(4208 B 应答/状态灯掩码/键上行/双出口并发)、LOGO 下发出局不实现、 帧长实测固化、调试日志口 UART5/RS232#1(§4.2/§5.16/§6.6/§9.12/§9.13) - docs/子系统设计/控制台单写者日志设计说明.md v1.8:全文端口口径由 USART1 同步为 UART5/RS232#1(CON_UART* 单点宏),ORE 机理标注跨端口 同因,时间线补端口迁移行;头部修订指针改为实际章节名 说明:本任务经用户显式授权在任务树内编辑 docs/任务规划/ 与产品需求基线 (铁律「单写者」豁免一次);主树合并后统一跑全量 check_doc_links --all。
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
做什么:
|
||||
1. **发**:在一个 TTL 串口上按屏板的节拍(默认 280 ms)发帧 A,模拟屏板的周期召唤;
|
||||
可穿插按键帧(`--key N`)。
|
||||
2. **收**(`--reply`,批 2 起):每发一帧就收主机回的 4208 B 帧 B,校验长度 / CRC /
|
||||
2. **收**(`--reply`):每发一帧就收主机回的 4208 B 帧 B,校验长度 / CRC /
|
||||
998 B 填充,量"召唤末位 → 应答首位"的间隔与整帧耗时,可选把点阵 dump 成 PBM。
|
||||
主机侧的统计由固件自己打(`[SBLINK] rx=... tx=...`),**收侧观测面是串口日志**;
|
||||
本脚本的 `--reply` 是另一路观测(应答本身对不对),两者互补,不能互相替代。
|
||||
@@ -13,14 +13,14 @@
|
||||
为什么不用串口助手 GUI:
|
||||
1-3 的判据含"连续 10 min 无丢帧",手点是做不到的;而且帧内容必须逐字节对
|
||||
(CRC 低字节在前,写错一位就是 100 % CRC 错帧,与"波特率错"同形)。
|
||||
2-2 的判据含"整帧 59.6 ms ±0.5 ms、≤200 ms 内结束",更是只能靠脚本量。
|
||||
发送侧判据含"整帧 59.6 ms ±0.5 ms、≤200 ms 内结束",更是只能靠脚本量。
|
||||
|
||||
⚠ **USB 转 TTL 适配器量不到"帧内无间隙"**:USB 帧是 1 ms 量级,适配器把字节成批交上来,
|
||||
所以 `--reply` 报的 `span` 只能证明"整帧在 60 ms 量级内发完",不能证明"没有 ≥28 µs
|
||||
的间隙"(那是屏板断帧的硬约束,只能上逻辑分析仪或接真屏板时看)。别把 span 通过
|
||||
当成那条判据通过。
|
||||
|
||||
接法(docs/任务规划/屏板链路.md §2 决策一):
|
||||
接法(docs/子系统设计/屏板链路设计说明.md §3.3):
|
||||
适配器 TXD -> U5.B10(网络 ST_RX0,PA10) 适配器 RXD -> U5.A10(网络 ST_TX0,PA9)
|
||||
适配器 GND -> 板地
|
||||
⚠ 必须交叉接(TX 对 RX);USART1 的 TTL 只从 U5 出去,CN1 上没有 USART1 端子。
|
||||
@@ -35,13 +35,13 @@
|
||||
& '.venv\\Scripts\\python.exe' test/host/screenlink_bench.py --port COM6 --seconds 600 # 10 min 判据
|
||||
& '.venv\\Scripts\\python.exe' test/host/screenlink_bench.py --port COM6 --reply --dump lcd.pbm
|
||||
--key N 每 N 个周期把召唤帧换成按键帧(键值在 1/2/3/4/7/8/9 里轮换;0 = 不发按键帧)
|
||||
--reply 每帧收应答并校验(批 2 的 2-2 / 2-4)
|
||||
--reply 每帧收应答并校验(长度 / CRC / 填充一致)
|
||||
--dump P 把最后一帧应答的点阵存成 PBM(P4,160x160,可直接看)
|
||||
|
||||
退出码:0 = 按时发完且(`--reply` 时)所有应答都对;1 = 串口打不开 / 发送失败;
|
||||
2 = 用法错误;3 = 有应答不合格。
|
||||
|
||||
设计依据:docs/任务规划/屏板链路.md §3 批 1 的 1-3 判据、批 2 的 2-2/2-4、§5 台架联调步骤第 2、3 步。
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §2(接收判据)、§4(发送口径)、§3.3(台架接法)。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
import argparse
|
||||
@@ -83,7 +83,7 @@ def build_frame(cmd, key=0):
|
||||
return body + bytes((crc & 0xFF, (crc >> 8) & 0xFF))
|
||||
|
||||
|
||||
# ---- 帧 B(主机 -> 屏板,4208 B):批 2 的应答校验 ----
|
||||
# ---- 帧 B(主机 -> 屏板,4208 B):应答校验 ----
|
||||
FRAME_B_LEN = 4208
|
||||
FRAME_B_BMP = 3200
|
||||
FRAME_B_INFO = 3200
|
||||
@@ -133,7 +133,7 @@ def capture_reply(ser, frame, budget_s=0.6):
|
||||
⚠ **CH340 收不了 700 kbaud 的连续流**(实测 2026-10-29:4208 B 只收到 ~2373 B,
|
||||
等效约 9.5 kB/s)。这不是固件问题——同一次运行里固件侧 `tx=94 done=93` 说明 4208 B
|
||||
每次都发完了;CH340 的 RX FIFO 只有几十字节、USB 每 1 ms 才搬一次,70 kB/s 必然溢出。
|
||||
要真正核对帧 B 的内容,换 FTDI / CP210x 之类的适配器,或等批 4 接真屏板。
|
||||
要真正核对帧 B 的内容,换 FTDI / CP210x 之类的适配器,或接真屏板。
|
||||
"""
|
||||
ser.reset_input_buffer()
|
||||
t_write = time.monotonic()
|
||||
@@ -172,7 +172,7 @@ def main():
|
||||
ap.add_argument("--glitch-bytes", type=int, default=32,
|
||||
help="灌多少字节垃圾(默认 32)")
|
||||
ap.add_argument("--reply", action="store_true",
|
||||
help="每帧收主机回的 4208 B 应答并校验(批 2 的 2-2 / 2-4)")
|
||||
help="每帧收主机回的 4208 B 应答并校验(长度 / CRC / 填充一致)")
|
||||
ap.add_argument("--dump", default="",
|
||||
help="把最后一帧应答的点阵存成 PBM(P4 160x160,可直接看)")
|
||||
args = ap.parse_args()
|
||||
|
||||
Reference in New Issue
Block a user