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:
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""RemoDispBus(7003) 拉帧压力客户端:批 4 的 4-1「双通道并发回归」的网络侧激励。
|
||||
"""RemoDispBus(7003) 拉帧压力客户端:「双通道并发回归」的网络侧激励。
|
||||
|
||||
做什么:
|
||||
连 192.168.1.100:7003,先发 INIT 查询屏幕参数(应得 8 B:宽u16/高u16/帧字节数u32,
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
退出码:0 = 全程无超时且 CRC 全对;1 = 出现超时/CRC 错/断连;2 = 用法错误。
|
||||
|
||||
设计依据:docs/任务规划/屏板链路.md §3 批 4 的 4-1。
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §9.1(双通道并发)。
|
||||
创建日期:2026-10-30
|
||||
"""
|
||||
import argparse
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误。
|
||||
|
||||
设计依据:docs/任务规划/屏板链路.md §3 批 3 的 3-1。
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §6(状态灯映射表)。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
import os
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/任务规划/屏板链路.md §3 批 1(1-3 的判据)、§1.3(接收只要 16 B);
|
||||
设计依据:docs/子系统设计/屏板链路设计说明.md §2(收中断与错误处理判据、接收只要 16 B);
|
||||
docs/产品需求/产品需求设计文档.md §5.16.2(帧 A 结构)。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* 3. 坏帧分支(长度不对 / 地址不对 / 功能码不对 / CRC 错)在台架上要造噪声才出现,
|
||||
* 一出现就被复位冲掉;主机侧是几行断言。
|
||||
*
|
||||
* 覆盖点(对应 docs/任务规划/屏板链路.md §3 批 1 的 1-3 判据):
|
||||
* 覆盖点(对应 docs/子系统设计/屏板链路设计说明.md §2 的收中断与错误处理判据):
|
||||
* TC-SBLINK-001 init 参数守卫:空句柄 / 波特率不是 SB_LINK_BAUD(后者必须不挂接收)
|
||||
* TC-SBLINK-002 init 正常:挂接收一次、缓冲 = SB_LINK_RX_BUF_SIZE(16 B,不是 4208)
|
||||
* TC-SBLINK-003 未初始化就重挂接收:BSP_ERR_STATE,且不碰外设
|
||||
@@ -34,17 +34,17 @@
|
||||
* TC-SBLINK-013 统计上报的时基回绕:now_ms 跨 0xFFFFFFFF 仍按差值法工作
|
||||
* TC-SBLINK-014 统计快照:空指针守卫、字段逐项对得上
|
||||
*
|
||||
* 覆盖点(对应 docs/任务规划/屏板链路.md §3 批 2 的五项):
|
||||
* 覆盖点(对应 docs/子系统设计/屏板链路设计说明.md §4 的组帧与时序判据):
|
||||
* TC-SBLINK-016 组帧入口守卫:未初始化 / 空显存指针
|
||||
* TC-SBLINK-017 帧 B 内容:点阵逐字节、info[0..3] 小端掩码、info[4..7] 非 LOGO、
|
||||
* 998 B 填充全 0、CRC 覆盖 [0, 4205](2-1 判据)
|
||||
* 998 B 填充全 0、CRC 覆盖 [0, 4205]
|
||||
* TC-SBLINK-018 变化检测:内容不变不重组;点阵改一字节要重组;只改掩码也要重组
|
||||
* TC-SBLINK-019 中断起发:未组帧不发;一召唤一帧 4208 B;TX 期间不叠发(2-2 判据)
|
||||
* TC-SBLINK-020 TX 占用期间帧缓冲逐字节冻结,TxCplt 后补组(2-4 的"无脏帧")
|
||||
* TC-SBLINK-019 中断起发:未组帧不发;一召唤一帧 4208 B;TX 期间不叠发
|
||||
* TC-SBLINK-020 TX 占用期间帧缓冲逐字节冻结,TxCplt 后补组(防"脏帧")
|
||||
* TC-SBLINK-021 起发失败要清 busy,否则链路此后永不发送
|
||||
* TC-SBLINK-022 错误中断里清残留 busy;但 TX 真的还在发时不得判死(2-4 的"无残留 busy")
|
||||
* TC-SBLINK-023 按键队列:单次交付、周期帧不带键、溢出丢新并计数、FIFO 顺序(2-3)
|
||||
* TC-SBLINK-024 离线判定:9.999 s 不判、10 s 判、不重复刷屏、一帧即恢复(2-5 判据)
|
||||
* TC-SBLINK-022 错误中断里清残留 busy;但 TX 真的还在发时不得判死(防残留 busy)
|
||||
* TC-SBLINK-023 按键队列:单次交付、周期帧不带键、溢出丢新并计数、FIFO 顺序
|
||||
* TC-SBLINK-024 离线判定:9.999 s 不判、10 s 判、不重复刷屏、一帧即恢复
|
||||
* TC-SBLINK-025 组帧耗时换算:周期数 → µs 的除数(SystemCoreClock/1e6)
|
||||
* TC-SBLINK-026 上报行:fb/tx 列可见;离线行排在周期行之前且不重复
|
||||
*
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
退出码:0=PASS / 1=测试失败 / 2=环境错误(找不到编译器 / 编译失败 / 无汇总行)。
|
||||
|
||||
设计依据:docs/产品需求/产品需求设计文档.md §5.16.2(帧结构);
|
||||
docs/任务规划/屏板链路.md §3 批 1(1-1 的判据);
|
||||
docs/子系统设计/屏板链路设计说明.md §4(CRC 口径);
|
||||
协议事实源 = 屏板固件工程 D:\\Code\\DTU Code\\DTU-LCD 的 CRC16.c / MODBUS.c。
|
||||
创建日期:2026-10-29
|
||||
"""
|
||||
|
||||
@@ -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