docs(产品需求): 端口重排——屏板占 USART1,日志迁 RS-232 通道
用户裁定:现在的日志串口让给屏幕,RS-232 通道以后用来输出日志。 这条裁定把原来的头号阻塞直接消掉了:屏板改走 USART1(PA9/PA10), 是唯一一条 MCU 引脚直出 TTL、不经收发器的通道,所以 U15 = TP8485E-SR 只有 250 kbps 这件事对屏板链路不再构成约束,也不用改任何硬件。 顺带纠正一处算错的波特率分频: - 旧文写 42 000 000 / 700 000 = 60 -> USARTDIV = 60.0、BRR = 0x3C0, 漏了 16 倍过采样,照此写实际只有 43 750 baud。 - 正确:USART1(APB2 84 MHz)USARTDIV = 7.5 -> BRR = 0x0078; APB1 实例(42 MHz)USARTDIV = 3.75 -> BRR = 0x003C,误差均 0。 端口归属按 V0.1 网表 §4.2 的三对 UART 轮换核实: RS485#4 = UART4(DE = PA15)、RS232#1 = UART5、RS232#3 = USART2。 所以 rs485_init(&g_rs485, &huart4, ...) 是对的,不动;屏板链路规划 v1 里"网表自相矛盾"那条判断依据错了(拿 V0.0 摘要行对 V0.1 代码),已纠正。 产品需求文档: - 5.16.2 补端口裁定块与分频更正,重写"主机侧端口选型"为"端口重排"。 - DE 口径改为 TTL 直连无 DE;主机 RX 由"吃 4208 B"改为"只需 6 B"。 - 4.2 外设接口表补 USART2 / UART5 两行,USART1 行注明 PA10 未接线。 - 9.13 新增第 16 条"日志口迁移",批次表注明 16 必须排在 10 之前 (两者共用 USART1->DR);第 10 条改 BRR = 0x0078、无 DE。 - 12 变更记录加 v1.8。 屏板链路规划: - 0 章由"三个硬约束"改为"一条已解除 + 四条前置",执行顺序钉死为 接 PA10 -> 挪台架串口线 -> 迁日志口 -> 再写屏板链路。 - 决策一、二 标记已裁定;批 0 换成"腾位置"4 项;批 1 的 DE 项降为 条件项,新增"日志口迁移"的改动点与判据。 - 5 章台架步骤补第 0 步;6 章风险表换成迁移期的新风险;7 章加判据 0。 任务规划 README 的独立轨道行同步为"端口已裁定、剩三条物理前置"。
This commit is contained in:
+65
-31
@@ -7,7 +7,7 @@
|
||||
> 待实现项与路线图、验收判据。
|
||||
> **事实来源**:本文所有数值与结论均取自仓库内**受管事实源**(代码、`.ioc`、`.map`、网表分析报告与
|
||||
> 各模块设计文档),凡与其它文档冲突处,以本文标注的权威来源为准。
|
||||
> **版本**:v1.7 **日期**:2026-10-28 **状态**:现状基线(含已实现项 + 待实现项)
|
||||
> **版本**:v1.8 **日期**:2026-10-28 **状态**:现状基线(含已实现项 + 待实现项)
|
||||
> **阅读前提**:建议先读 [`docs/README.md`](../../docs/README.md)(文档索引)与
|
||||
> [`docs/架构设计/项目架构总览.md`](../../docs/架构设计/项目架构总览.md)(全景架构)。
|
||||
> **范围口径:1:1 复刻**——本产品是参考产品 **CLS100**(`Scatter_P_HV03.01_SV01.01`,OMAP-L138
|
||||
@@ -507,8 +507,10 @@ sequenceDiagram
|
||||
| **GD5F2GQ5UE NAND** | SPI1 | PE0 CS / PB3 SCK / PB4 MISO / PB5 MOSI / PB8 WP / PE1 HOLD | 256 MB SPI NAND(2 Gbit) |
|
||||
| **TPAFE5160 ADC** | 并行 16 位 | PG0~PG15 数据 / **PC6 FRSTDATA** / **PC7 BUSY**(EXTI) / **PC8 RD** / **PC9 CONVST** / **PA8 OS2** / **PA11 OS1** / **PA12 OS0** | 高精度多通道 ADC |
|
||||
| **SD2506 RTC** | I2C1 | PB6 SCL / PB7 SDA | 提供墙钟基准与日志时间戳 |
|
||||
| **USART1(调试串口)** | UART | PA9 TX / PA10 RX | 115200 8N1;printf 日志 + `@test` 采集通道 |
|
||||
| **UART4(RS-485)** | UART | PC10 TX / PC11 RX / **PA15 DE** | 半双工通信 |
|
||||
| **USART1(调试串口 / U5 直连 TTL)** | UART | PA9 TX / PA10 RX | 115200 8N1;现为 printf 日志 + `@test` 采集通道。**端口重排后改作屏板链路**(700 kbaud,§5.16.2)。⚠ PA10 目前**未接线**,作屏板链路前必须接上 |
|
||||
| **UART4(RS-485)** | UART | PC10 TX / PC11 RX / **PA15 DE** | 半双工通信(V0.1 轮换后 RS485#4 = UART4,`docs/硬件平台/V0.1_网表详细分析报告.md` §4.2) |
|
||||
| **USART2(RS-232 #3)** | UART | PD5 TX / PD6 RX | 经 U10 隔离 → U13 TPT3232E → CN1;**端口重排后为日志口** |
|
||||
| **UART5(RS-232 #1)** | UART | PC12 TX / PD2 RX | 经 U9 隔离 → U13 → CN1;备选日志口 |
|
||||
| **状态 LED ×6** | GPIO | PC5 / PB0 / PB1 / PB2 / PF11 / PF12 | **低电平点亮** |
|
||||
| SWD | — | PA13 SWDIO / PA14 SWCLK | V0.1 已修复 V0.0 的 SWCLK 引脚缺陷 |
|
||||
| 调试口 | — | CN2(XH-3A,1=SWDIO/2=SWCLK/3=GND) | V0.1 由 H2 排针改为 XH 端子 |
|
||||
@@ -1057,17 +1059,29 @@ sequenceDiagram
|
||||
| 发送 | `HAL_UART_Transmit(..., 1000)` 阻塞发完,随即切回接收 | `RS485_SendBuff()` |
|
||||
| 缓冲 | RX **4208 B**、TX **8 B** | `UART_RX_LEN` / `UART_TX_LEN` |
|
||||
|
||||
> **700 kbaud 在本产品主控上零误差**:APB1 = 42 MHz(`PLLM=4 / PLLN=168 / PLLP=2 / APB1÷4`,
|
||||
> 见 `Src/main.c` 时钟配置),`42 000 000 / 700 000 = 60` 整除 → `USARTDIV = 60.0`、`BRR = 0x3C0`,
|
||||
> 误差 **0 %**。若改时钟树或改用 HSI,必须重算——700 kbaud 下 2 % 误差已足以丢帧。
|
||||
> 收发器须选 **≥ 1 Mbps** 档(3485 / 自动方向类),700 kbaud 不是普通 485 的常规工况。
|
||||
> **700 kbaud 在两种候选时钟下都零误差**(2026-10-28 更正分频算法):16 倍过采样(`OVER8 = 0`)时
|
||||
> `USARTDIV = fCK / (16 × 波特率)`,写入值 `BRR = (整数部分 << 4) | (小数部分 × 16)`。
|
||||
> - 屏板链路的**默认端口 USART1 挂 APB2 = 84 MHz**:`84 000 000 / (16 × 700 000) = 7.5` →
|
||||
> 整数 7、小数 8 → **`BRR = 0x0078`**,误差 **0 %**。
|
||||
> - 若改用 APB1 上的实例(UART4 / USART2 / USART3,42 MHz):`42 000 000 / (16 × 700 000) = 3.75` →
|
||||
> 整数 3、小数 12 → **`BRR = 0x003C`**,误差 **0 %**。
|
||||
>
|
||||
> ⚠ **700 kbaud 在本板现有 485 通道上物理做不到**(2026-10-28 核查):唯一的板侧收发器
|
||||
> `U15 = TP8485E-SR` 速率上限 **250 kbps**(`docs/芯片手册/TP8485E-SR.md`),差 2.8 倍。
|
||||
> 而 4208 B 在 250 kbps 下需 **168.3 ms**,已占满屏板 200 ms 应答窗口的 84 %,无实用余量。
|
||||
> 出路只有两条:**换 ≥1 Mbps 收发器**,或**屏板降速并同步放大 `RS485_ACK_COUNT_MAX`**。
|
||||
> 这是本项**唯一的硬件阻塞点**,处置方案与代价见 `docs/任务规划/屏板链路.md` §2 决策一。
|
||||
> 软件侧不受影响——可先用 TTL 直连在台架跑通全链路,再等硬件定版。
|
||||
> ⚠ **旧版本本节写的"`42 000 000 / 700 000 = 60` → `USARTDIV = 60.0`、`BRR = 0x3C0`"是错的**——
|
||||
> 漏掉了公式里的 16 倍过采样。照 `0x3C0` 写下去实际波特率是 **43 750**,不是 700 000。
|
||||
> 若改时钟树或改用 HSI,必须重算——700 kbaud 下 2 % 误差已足以丢帧。
|
||||
>
|
||||
> **端口裁定(用户决定,2026-10-28):屏板走 USART1,日志口让位。**
|
||||
> 屏板链路改用 **USART1(PA9/PA10)**——这条通道是 **MCU 引脚直出 TTL,不经过板上任何收发器**,
|
||||
> 因此**收发器速率上限问题不复存在**:本板 485 通道上的 `U15 = TP8485E-SR` 只有 250 kbps
|
||||
> (`docs/芯片手册/TP8485E-SR.md`)这件事,对屏板链路**不再构成约束**。
|
||||
> 作为交换,**调试日志迁到 RS-232 通道**(V0.1 板上 RS232#3 = **USART2 PD5/PD6**,
|
||||
> 备选 RS232#1 = UART5 PC12/PD2,两者都经隔离器 → `U13` TPT3232E → CN1),
|
||||
> 迁移在屏板链路跑通之后做,见下方"主机侧端口重排"。
|
||||
>
|
||||
> ⚠ **USART1 的 RX(PA10)目前没有接线**:`App/log/console_log.c` 的文件头与自愈函数注释都记着
|
||||
> "PA10 未接线"——RX 悬空噪声锁存 ORE/NE/FE/PE,正是控制台历史上反复静默的根源。
|
||||
> 屏板链路是**双向**的(主机必须收 6 B 召唤帧),所以 **PA10 必须物理接上**,
|
||||
> 否则只能发不能收,链路做不成。这是**两条物理前置**之一,另一条是把台架串口线从 USART1 挪到 RS-232 侧(见 §9.13)。
|
||||
|
||||
**帧 A:召唤 / 按键(屏板 → 主机,固定 6 B)**
|
||||
|
||||
@@ -1122,25 +1136,36 @@ CRC-16/MODBUS(多项式 `0xA001` 反转式、初值 `0xFFFF`、查表法 `auch
|
||||
但若主机把整帧拆成多次 `HAL_UART_Transmit` 且中间被高优先级任务抢占,很容易越线——
|
||||
**建议一次性 DMA 发送 + 发送完成中断,不要逐块阻塞发**。
|
||||
|
||||
**主机侧端口选型**
|
||||
**主机侧端口重排(2026-10-28 用户裁定)**
|
||||
|
||||
| 串口 | 引脚 | 当前用途 | 用于屏板 |
|
||||
| 串口 | 引脚 | V0.1 板上通道(`docs/硬件平台/V0.1_网表详细分析报告.md` §4.2) | 重排后用途 |
|
||||
|---|---|---|---|
|
||||
| USART1 | PA9 / PA10 | 调试日志 115200(单写者) | ❌ 占用 |
|
||||
| UART4 | PC10 / PC11 + **PA15(DE)** | RS-485 采集簇(**冻结**) | ⚠ 唯一自带硬件 DE 的实例,但与冻结簇争用 PC10/PC11 |
|
||||
| UART5 | PC12 / PD2 | 已初始化、未接 | ✅ 空闲,需另配 DE GPIO |
|
||||
| USART2 | PD5 / PD6 | 已初始化、未接 | ✅ 空闲,需另配 DE GPIO |
|
||||
| USART3 | PB10 / PB11 | 已初始化、未接 | ✅ 空闲,需另配 DE GPIO |
|
||||
| **USART1** | PA9 / PA10 | 调试口 + **U5 直连 TTL**(ST_TX0/RX0),**MCU 直出、不经任何收发器** | ✅ **屏板链路**(700 kbaud) |
|
||||
| **USART2** | PD5 / PD6 | **RS232#3**(U10 隔离 → U13 TPT3232E → CN1) | ✅ **调试日志**(115200,屏板链路之后迁移) |
|
||||
| UART5 | PC12 / PD2 | **RS232#1**(U9 隔离 → U13 → CN1) | 备选日志口,与 USART2 二选一 |
|
||||
| UART4 | PC10 / PC11,DE = **PA15** | **RS485#4**(U11 隔离 → U15 → A/B → CN1) | 冻结簇,本项不碰 |
|
||||
| USART3 | PB10 / PB11 | U5 直连 TTL(ST_TX2/RX2) | 空闲 |
|
||||
|
||||
**默认选型:USART3(PB10/PB11)+ 一个空闲 GPIO 作 DE**——不与调试口、不与 RS-485 采集簇争用,
|
||||
外设实例独立,且同挂 APB1(42 MHz,分频零误差)。
|
||||
**为什么是 USART1**:它是唯一一条**不经收发器、MCU 引脚直出**的通道,而 700 kbaud 恰好卡在收发器上
|
||||
(`U15 = TP8485E-SR` 只有 250 kbps,`docs/芯片手册/TP8485E-SR.md`)。换到这条线上,速率问题从根上消失,
|
||||
也不用改任何硬件。UART4 保持 RS-485 冻结簇不动——`rs485_init(&g_rs485, &huart4, …)` 与 V0.1 一致,**无需摘除**。
|
||||
|
||||
> ⚠ **DE 极性不可照抄屏板**。屏板的"低=发"是**它自己那套收发器**的接法;主机侧极性由本板收发器决定。
|
||||
> 若用高有效 DE 的器件,软件必须取反,或改用自动方向芯片(免 DE)。**这是最容易接反、且症状最像"协议不对"的一处。**
|
||||
**这次重排带来两件事,必须在任务里体现:**
|
||||
|
||||
> ⚠ 主机 RX 侧要能吃下 **4208 B 整帧**(缓冲 ≥ 4208 B + 空闲中断断帧)。
|
||||
> 且需处理**自发自收**:半双工总线上自己的 4208 B 会回灌 RX(若收发器带 echo 或 DE 时序不对),
|
||||
> 必须丢弃而非当作帧 A 解析。
|
||||
1. **日志口迁移不是一行改动**:`App/log/console_log.c` 里 `huart1` 出现 5 处(含
|
||||
`huart1.Instance == NULL` 的空指针短路判据),自愈函数 `con_uart_reinit()` 还直接写
|
||||
`USART1_IRQn`、`__HAL_RCC_USART1_CLK_*`、`MX_USART1_UART_Init()`。建议收口成**一处可配置端口宏**,
|
||||
而不是逐处散改。
|
||||
2. **新日志口必须设成只发不收**(`UART_MODE_TX`):USART1 控制台之所以要背一整套僵尸通道自愈,
|
||||
根源就是"RX 悬空 + RX 使能 → ORE 锁存 → HAL 轮询 TX 恒快速失败"。日志口不需要收,
|
||||
就别再开 RX,否则等于把同一场病搬到新口上。
|
||||
|
||||
> ⚠ **TTL 直连没有 DE**:主机侧不再有半双工方向控制,DE 极性、建立时间、等 TC 收尾全部不适用。
|
||||
> 只有选"USART1 引脚 → 外部 485 模块 → 屏板 A/B"这种接法时才需要处理外部模块的 DE,
|
||||
> 此时**极性由那个模块决定,不可照抄屏板**(屏板的"低=发"是它自己那套收发器的接法)。
|
||||
|
||||
> ⚠ 主机 RX 只需吃下 **6 B 召唤帧**(不像屏板要吃 4208 B):16 B 缓冲 + 空闲中断断帧就够。
|
||||
> TTL 直连**没有自发自收**问题(TX/RX 是两根独立线);只有走外部 485 模块时才会回灌。
|
||||
|
||||
#### 5.16.3 屏板侧行为:状态灯 / 按键 / 背光 / LOGO
|
||||
|
||||
@@ -1409,7 +1434,7 @@ for (i = 1; i < LED_COUNT; i++) /* LE
|
||||
|
||||
- **角色反转**:屏板是 **Modbus 主站(主动召唤)**,主机是**从站 `0x01`**;与网络通道"客户端召唤"方向相反。
|
||||
- **帧长 4208 B**(有效载荷 3208 B + 998 B 填充 + 2 B CRC),不是 readme 写的 3208 B(§5.16.2)。
|
||||
- **700000 8N1**,软件 DE;主机侧 DE 极性由本板收发器决定,**不可照抄屏板**。
|
||||
- **700000 8N1**,主机侧走 **USART1 TTL 直连**(无 DE);若改走外部 485 模块,DE 极性由该模块决定,**不可照抄屏板**。
|
||||
- **屏板每 ≈5000 s 自复位一次**,约 1 s 空窗;主机链路监视须容忍(建议连续 ≥10 s 无应答才判离线)。
|
||||
- **屏板只有 7 个物理键**,键值 `9`/`10` 是"复位 / 工厂",与参考主机的 `F1` / `F1|ENT` **语义不同**。
|
||||
- **单色**:屏板是 1 bpp 单色面板,参考的 13 B 颜色信息(颜色位 + RGB 三色)**无接收方**,不对齐。
|
||||
@@ -1921,7 +1946,7 @@ pre-commit run --all-files
|
||||
| **SNTP 对时** | 17 | 参考对时走 SNTP | 私有 TCP 8888 + 104 `C_CS` | SNTP 客户端 |
|
||||
| **固有参数** | 1 | `8001H~800AH` 字符串类参数 | 未实现(无法短浮点上送) | 随送检点表设计 |
|
||||
| **遥测增强** | 4、5 | k=1~9 谐波方和根 + 4 点平均 | 仅基波轨 | 谐波 / 等周波调频 / 零序自产外接切换 三条算法轨 |
|
||||
| **屏板链路对齐** | 20 | **串口屏板通道**(**700000 8N1 / 软件 DE**,帧 A 6 B 召唤、帧 B **4208 B** 应答:显存 3200 B + **状态灯 4 B 位掩码** + 4 B info)+ **7003 四命令**(INIT **16 B**,单色口径)+ 续传 / 拒绝握手 / 链路监视 / F1·F2 | 只有 7003 四命令(INIT **8 B**);**串口通道 0**;无状态灯下行;无续传、无 `bNeedFlash` 拒绝、无 1 分钟监视、键值 6 个 | 串口通道整条(协议已定版)+ 7003 报文口径 6 项(明细见 §9.13) |
|
||||
| **屏板链路对齐** | 20 | **串口屏板通道**(**700000 8N1 / USART1 TTL 直连、无 DE**,帧 A 6 B 召唤、帧 B **4208 B** 应答:显存 3200 B + **状态灯 4 B 位掩码** + 4 B info)+ **7003 四命令**(INIT **16 B**,单色口径)+ 续传 / 拒绝握手 / 链路监视 / F1·F2 | 只有 7003 四命令(INIT **8 B**);**串口通道 0**;无状态灯下行;无续传、无 `bNeedFlash` 拒绝、无 1 分钟监视、键值 6 个 | 串口通道整条(协议已定版)+ 7003 报文口径 6 项(明细见 §9.13) |
|
||||
|
||||
> **一句话**:**「标定闭锁」是唯一"再排期也没用"的缺口**(等标准源);「出口与开入」「三相与同期」
|
||||
> 「电度计量」等 V0.2 硬件;「对下采集」等用户决策;其余规模型条目**全部可在现有硬件上推进**,
|
||||
@@ -2528,12 +2553,13 @@ pre-commit run --all-files
|
||||
| 7 | **KEEPLIVE 静默** | 去掉空帧回显,改为仅重置计时 | §5.16.10 第 4 条通过 | **是** |
|
||||
| 8 | **发送重试评估** | 对比参考"BUSY + 200 ms 放弃"与现有 `net_send` 阻塞模型,出结论并回填 §5.16.9 第 7 行 | 结论有实测数据支撑(实现 / 明确不实现) | 否 |
|
||||
| 9 | **客户端一致性回归** | `DTU-RemoteLCD` 按 **16 B** 解析;把 §5.16.10 第 1~7 条做成自动化用例 | 七条判据全 PASS | **是** |
|
||||
| 10 | **串口物理层落地** | 按 §5.16.2 定版:**700000 8N1**、软件 DE(默认 **USART3 PB10/PB11** + 一个空闲 GPIO 作 DE)、RX 缓冲 ≥4208 B + 空闲中断断帧、发送走 **DMA 一次性发完**(禁逐块阻塞) | 环回 + 示波器实测 700 kbaud 分频零误差;屏板能收到帧 A 并回帧 B | 否 |
|
||||
| 10 | **串口物理层落地** | 按 §5.16.2 定版:**700000 8N1、`BRR = 0x0078`**(USART1,APB2 84 MHz)、**无 DE**(TTL 直连,不走收发器)、RX 缓冲 16 B + 空闲中断断帧、发送走 **DMA 一次性发完**(禁逐块阻塞,`DMA2_Stream7` TX / `DMA2_Stream2` RX 已在 `.ioc` 配好但控制台未用) | 环回 + 示波器实测 700 kbaud 分频零误差;屏板能收到帧 A 并回帧 B | 否 |
|
||||
| 11 | **帧 A 解析 / 帧 B 组帧** | 新增屏板通道模块:识别 6 B 请求(`01 03 type key CRC_H CRC_L`)、校验 CRC-16/MODBUS(**高字节在前**);组 **4208 B** 帧 B(3200 显存 + 4 B LED + 4 B info 保留 + 998 B 填充 + 2 B CRC) | 屏板出图与 `g_ui_fbuf` 逐字节一致;`info[0..3]` 与下发的 LED 掩码一致 | 否 |
|
||||
| 12 | **状态灯位映射表** | 定义"**业务状态 → 屏板 LED 位**"映射(参考源码**无此表**,须自定);`info[0..3]` 按 **32 位小端**填,bit0 恒 0、bit20~31 恒 0 | §5.16.10 第 11 条通过 | 否 |
|
||||
| 13 | **串口上行按键** | 帧 A 的 `key` 字节按**屏板 `KEY_TYPE`** 解释——实际可达值只有 **`1/2/3/4/7/8/9`**(`5`/`6`/`10` 无物理入口);映射为逻辑键值后与 7003 注入**同一入口**合并 | §5.16.10 第 10 条通过;`9`/`10` 语义按 §5.16.3 ② 处置 | 否 |
|
||||
| 14 | **双通道并发 + 自复位容忍** | 两出口各自独立发送上下文;串口 4208 B 阻塞不拖 7003;链路监视按"**连续 ≥10 s 无应答**"判离线,**忽略屏板 ≈5000 s 周期自复位** | §5.16.10 第 12、13、14 条通过 | 否 |
|
||||
| 15 | **LOGO 下发流程** | 一次性下发 LOGO 帧(`info[4..5] = 0x89 0x45`,宽高大端);放在出厂 / 联调流程,**不进常规刷新循环** | §5.16.10 第 15 条通过;断电重启后 LOGO 仍在 | 否 |
|
||||
| 16 | **日志口迁移(USART1 → RS-232 通道)** | ① `console_log.c` 的 `huart1`、`USART1_IRQn`、`__HAL_RCC_USART1_CLK_*`、`MX_USART1_UART_Init()` 收口成**一处端口宏**,指向 RS232#3(`huart2` / USART2,默认)或 RS232#1(`huart5` / UART5);② 该实例改 **`UART_MODE_TX`**(只发不收,避免重演 ORE 锁存);③ **不动** UART4 的 `g_rs485` 绑定 | 日志在 RS-232 侧(CN1)可读且内容与迁移前一致;USART1 **完全空出**;连续 10 分钟无 ORE 锁存、无 `[ERR]` | 否 |
|
||||
|
||||
**批次划分**:
|
||||
|
||||
@@ -2541,7 +2567,7 @@ pre-commit run --all-files
|
||||
|---|---|---|
|
||||
| 第一批(无跨端风险,可独立发版) | 3、6、8 | 只动本端,旧客户端不受影响 |
|
||||
| 第二批(跨端,须与客户端同步发版) | 2、4、5、7、9 | 报文口径变更,两端必须同版本 |
|
||||
| 第三批(**独立立项**,不随 RS-485 冻结) | 10、11、12、13、14、15 | 屏板串口通道是**独立需求**,与 §5.10 冻结的"对下采集簇"不是一回事;物理层已按屏板源码定版(**700000 8N1 / 软件 DE**),默认走 USART3 另配 DE GPIO,**不必解冻 UART4** |
|
||||
| 第三批(**独立立项**,不随 RS-485 冻结) | **16**、10、11、12、13、14、15 | 屏板串口通道是**独立需求**,与 §5.10 冻结的"对下采集簇"不是一回事。**第 16 条必须排在 10 之前**:日志不腾出 USART1,屏板链路就没法独占这条通道(两者共用同一个 `USART1->DR`,同时用就是互相插字节) |
|
||||
|
||||
> ⚠ **唯一破坏性变更**:第 2 条把 INIT 应答从 8 B 改成 **16 B**。**旧客户端会把 16 B 的前 8 B 当全部、
|
||||
> 把后 8 B 当作下一帧的 TAG 去找**,解析状态机会被这 8 B 拖住直到超时——表现为"连上了但不出图"。
|
||||
@@ -2559,6 +2585,13 @@ pre-commit run --all-files
|
||||
> 第 11 条的帧长仍有一处待实测复核——代码实参是 **4208 B**,屏板 readme 写 **3208 B**(§5.16.2);
|
||||
> 台架抓到第一帧真实报文后**立即固化**,在此之前以代码实参为准,不得按 readme 实现。
|
||||
>
|
||||
> **两条物理前置(软件做不了,须先落硬件)**:
|
||||
> ① **PA10 接线**——USART1 的 RX 现在是悬空的(`App/log/console_log.c` 文件头有明确记载),
|
||||
> 屏板链路要收 6 B 召唤帧就必须把它接上;顺带这一接也消掉了控制台 ORE 锁存的老病根。
|
||||
> ② **台架串口线挪位**——现在的 CH340/`COM6` 接在 USART1 调试口上,日志迁到 RS-232 侧后
|
||||
> 必须改接到 CN1(或 U14 RJ45),否则 `@test` 与 `serial-assistant` 全部抓不到日志,
|
||||
> 等于把台架弄瞎。**这条要在第 16 条动代码之前完成。**
|
||||
>
|
||||
> **已消解的旧阻塞**:原"屏板协议拿不到、不得按猜测定契约"的告警**不再适用**——物理层、帧格式、
|
||||
> 键值、状态灯、时序均已从 `DTU-LCD` 源码确定。剩下的只是"实物联调确认",不是"协议未知"。
|
||||
|
||||
@@ -2681,3 +2714,4 @@ pre-commit run --all-files
|
||||
| 2026-10-28 | **v1.5 补串口屏板通道(显示信息不只走网络)** | ① **口径再更正**:v1.4 把串口通道写成"链路 A,随 RS-485 簇冻结",等于把它降级成可选——**错**。参考的架构是**一份显存、两个出口**:**串口屏板通道是主通道**(`LCD_LED_Update(显存 3200 B, LED 4 B)` 变化驱动 + `WriteScreenByByte` 500 ms 兜底),**TCP 7003 是镜像**;上行同理(`getRs485Key()` 物理键号 1~10 为主,`g_tRemoteKey` 为镜像,两者在 `Key_Read()` 汇合且**本地优先**)。§5.16 标题改为「**屏板链路:串口主通道 + 网络镜像**」并重写开篇;② **§5.16.1 重写为「一份显存、两个出口」**:显存物理基址 `CN_VIDEO_ADDRESS_BASE = 0xC1F00000`(非 cache 区)、三条下行路径与两条上行路径的归属任务 / 调用 / 载荷 / 节拍对照表;③ 新增 **§5.16.2「本产品的串口通道(待建)」**:V0.1 串口资源盘点(USART1 调试占用 / UART4 被冻结 RS-485 占用 / **UART5、USART2、USART3 空闲**),默认选 **USART3(PB10/PB11)**,若屏板为 RS-485 半双工则改 UART4 并先解冻该簇;④ 新增 **§5.16.3「参考实现的屏板侧接口一览」**,并**明确列出交付源码推不出的四项**(波特率与数据格式 / 帧头与校验 / 半双工方向控制 / 3200 B 是否分片与应答)——在拿到实测前不得声称"按参考协议实现";⑤ **§5.16.9 差异表由 10 行扩到 14 行**,新增「串口屏板通道整条缺失」「双出口并发缺失」「面板指示灯语义不同」「背光对比度」四项,并注明第 11/12 条是**整条链路缺失**而非报文细节;⑥ **§5.16.10 判据由 7 条扩到 12 条**,新增串口侧 5 条(键号注入 / 500 ms 内出帧 / 双通道并发不丢帧不串帧 / 拔插恢复 / 背光);⑦ **§9.13 任务由 10 条扩到 13 条**:原「RS-485 屏板通道」一条拆为「串口通道物理层定版 / 串口下行显存 / 串口上行按键 / 双通道并发回归」四条,批次表第三批改为**独立立项、不随 §5.10 冻结**,并补前置阻塞(需屏板实物验收;拿不到固件或抓包时不得把猜测定成契约);⑧ §5.16.8 `tTimerLCD` 行由"此路不实现"改为"串口通道周期兜底节拍(待建)",§2.5.2 第 20 项、§9.1.2、§9.12、§10.3 同步。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.6 屏板源码到手:串口通道协议定版 + 状态灯下行** | ① **屏板固件已获得**(`D:\Code\DTU Code\DTU-LCD`,STM32F103ZE + UC1698U 160×160 单色 + **20 路状态指示灯** + 7 个物理按键),v1.5 列的"四项未知"**全部消解**;② **§5.16.2 重写为「串口通道:物理层与帧格式(屏板源码实测)」**:**700000 8N1**(APB1 42 MHz 分频零误差、`BRR = 0x3C0`)、软件 DE、**角色反转(屏板是 Modbus 主站、主机是从站 `0x01`)**、帧 A 6 B 召唤(`01 03 type key CRC_H CRC_L`,`KEY_CMD=0` / `RT_CMD=1`,CRC-16/MODBUS 只覆盖前 4 B、**高字节在前**)、帧 B **4208 B** 图像应答(3200 显存 + 4 B 状态灯 + 4 B info + 998 B 填充 + 2 B CRC,覆盖 `[0, 4205]`)、时序 275 ms / 200 ms / 5 次超时、200 ms 预算下 4208 B 约 60.1 ms(占 30 %)、主机端口默认 **USART3 + 另配 DE GPIO**(**不必解冻 UART4**);③ **§5.16.3 重写为「屏板侧行为:状态灯 / 按键 / 背光 / LOGO」**,新增**状态灯下行**:`info[0..3]` 为 **32 位小端位掩码**、**ID 0 = 电源灯硬件常亮、ID 1~19 对应 bit1~19**,给出 20 路 LED 引脚表,并指出"**位 → 业务状态映射表参考源码没有、须由本产品自定**";键值 `KEY_TYPE` 表(`0` 无键 / `1` ENTER / `2` UP / `3` DOWN / `4` ESC / `5` ADD / `6` DEC / `7` LEFT / `8` RIGHT / `9` RESET / `10` FACTORY),并**指出与参考主机 `getRs485Key()` 的 `9` / `10` 语义冲突**(参考是 `F1` 与 `F1+ENT`)、`key_configs[]` 仅 7 项且无 ADD/DEC 入口;背光自管、LOGO(Flash `0x0803F000`、魔数 `0x89 0x45`)、屏板健壮性(CRC 错 ≥3 仅清计数**不自愈**、**≈5000 s 自复位**、DMA 接收问题未解决);④ **§5.16.9 差异表**第 8 / 11 / 12 / 13 / 14 行按屏板实测重写,并新增"来自屏板固件的新增约束"5 条;⑤ **§5.16.10 判据由 12 条扩到 15 条**(275 ms 召唤 / ≤200 ms 回 4208 B、显存逐字节、7 键、**状态灯逐位**、双通道并发、**自复位容忍**、拔插恢复、**LOGO 下发**);⑥ **§9.13 任务由 13 条改为 15 条**:第 10 条由"物理层定版"改为"**串口物理层落地**"(参数已定)、新增第 12 条"**状态灯位映射表**"与第 15 条"**LOGO 下发流程**"、第 14 条并入"自复位容忍",批次表第三批改 10~15 并注明**不必解冻 UART4**,删除"拿不到固件不得定契约"告警(已消解),保留"**4208 vs 3208 待台架复核**";⑦ **§5.8 补屏板 20 路指示灯与主板 6 路 LED 是两套独立输出**;§5.6 FR-UI-1 改为"**双出口推流**";§6.2 口径注改为"串口通道是 Modbus RTU 风格裸帧、**不能共用组帧代码**";§2.4.1 X3、§2.5.2 第 20 项、§5.16.1、§5.16.8 `tTimerLCD` 行、§9.1.2、§9.12、§10.3 第 13 项同步。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.7 单色口径:删除多色协议,INIT 由 29 B 改 16 B** | 用户裁定"屏幕板都是单色的,多色协议可以删除、不必对齐"。**核查后确认这不是让步,而是删死字段**:① **三处源码证据**——`RemoDispBus.h:46` `CN_RDISP_TYPE_MONO = TRUE` → `CN_RDISP_LCD_TYPE = CN_MODE_GREY_MONO`、`CN_RDISP_MEMSIZE = (X>>3)*Y`(链路显存本就是 1 bpp);`RDisp_Form_InitInf` 里 `CN_RGB_RED/GREEN/BLUE` 是**编译期常量**而非逐帧数据;`RDisp_LcdColor_To_Mono()` 对 `CN_MODE_GREY_MONO` **直接 `return TRUE` 不转换**,真正干活的 `RDisp_Lcd16B_To_Mono()`(RGB565→单色)挂在 `CN_MODE_COLOR_16B` 下**本构建永不进入**(死代码);② **§5.16.5 INIT 应答表由 29 B 重写为 16 B**(宽 2 + 高 2 + 显存 4 + 8 键值表),删掉 1 B 颜色位 + 12 B RGB,并补"为什么是 16 B"的证据块;③ **§6.2 命令集 INIT 行**同步改 16 B 并加"单色口径"注(颜色位与 RGB 整段删除、`RDisp_LcdColor_To_Mono()` 不存在);④ **§5.16.6 第 6 条注**改为"该函数在参考单色构建下就是空转",避免误以为本产品漏了一步转换;⑤ **§5.16.9 第 1 行**由"补 21 B"改为"**补 8 B 键值表 → 16 B**,颜色 13 B 不对齐";"新增约束"补"单色"一条;末尾警示改为 **16 B vs 29 B 不可互换**(从偏移 4 起含义即不同,客户端不得复用参考 29 B 解析器截前 16 B);⑥ **§5.16.10 判据第 1 条**改 16 B 且"不得出现颜色位或 RGB";⑦ **§9.13 第 2 条**改"INIT 应答补足 **16** 字节 / 不加颜色位与 RGB"、第 9 条客户端按 16 B 解析、破坏性变更警示改 16 B(后 8 B 而非后 21 B)并补"不可与参考 29 B 互换";⑧ **§2.4.1 补"多色显示不在本表内"**——参考与本产品都是单色链路,删的是死字段,**不属于"决定不做"的能力**;§2.5.2 第 20 项、§9.1.2、§9.12、§10.3 第 13 项同步;⑨ **§8.1 色深行**补"无灰度、无彩色,7003 INIT 颜色字段已删",渲染行改为"串口屏板通道(主)+ TCP 7003(镜像)双出口"。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.8 端口重排:屏板占 USART1,日志迁 RS-232 通道** | 用户裁定"把现在的日志 UART 让给屏幕,RS-232 通道后面用来输出日志"。**这条裁定把 v1.6/v1.7 的头号阻塞直接消掉了**:① **§5.16.2 新增「端口裁定」块**——屏板改走 **USART1(PA9/PA10,MCU 直出 TTL、不经任何收发器)**,因此 `U15 = TP8485E-SR` 只有 250 kbps 这件事**对屏板链路不再构成约束**;日志迁 **RS-232 通道**(V0.1 板上 RS232#3 = USART2 PD5/PD6 为默认,RS232#1 = UART5 PC12/PD2 为备选,两者都经隔离器 → U13 TPT3232E → CN1);② **纠正分频算法**——旧文写"`42 000 000 / 700 000 = 60` → `USARTDIV = 60.0`、`BRR = 0x3C0`"**漏了 16 倍过采样**,照此写实际波特率只有 43 750;正确值:USART1(APB2 84 MHz)`USARTDIV = 7.5` → **`BRR = 0x0078`**,APB1 实例(42 MHz)`USARTDIV = 3.75` → **`BRR = 0x003C`**,两者误差均为 0;③ **§5.16.2「主机侧端口选型」整表重写为「主机侧端口重排」**,按 `docs/硬件平台/V0.1_网表详细分析报告.md` §4.2 的三对 UART 轮换列明 RS485#4 = UART4(DE = PA15)、RS232#1 = UART5、RS232#3 = USART2,并补两条实现约束(`console_log.c` 里 `huart1` 5 处 + 自愈函数直写 `USART1_IRQn` / `MX_USART1_UART_Init()` 需收口成一处端口宏;新日志口必须 `UART_MODE_TX`,否则重演 ORE 锁存);④ **DE 口径改为「TTL 直连无 DE」**,仅"经外部 485 模块接 A/B"时才需处理,且极性由该模块决定;⑤ **主机 RX 口径**由"吃下 4208 B"改为"只需 6 B(16 B 缓冲够)",并说明 TTL 直连无自发自收;⑥ **§4.2 外设接口表**:USART1 行补"端口重排后改作屏板链路 + PA10 目前未接线",新增 USART2(RS-232 #3,日志口)与 UART5(RS-232 #1,备选)两行,UART4 行注明 V0.1 轮换依据;⑦ **§5.16.9「新增约束」**与 **§9.12** 的 700000 行同步为"USART1 TTL 直连、无 DE";⑧ **§9.13 新增第 16 条「日志口迁移」**并置于第三批首位,批次表注明 **16 必须排在 10 之前**(两者共用 `USART1->DR`);第 10 条改为 `BRR = 0x0078`、无 DE、`DMA2_Stream7/2` 现成;**前置阻塞**补两条物理前置(PA10 接线、台架串口线从 USART1 挪到 CN1)。**本次只改本文件** |
|
||||
|
||||
Reference in New Issue
Block a user