docs+log: 撤销"PA10 未接线"结论,ORE 机理改为"RX 使能却不读 DR"

用户反馈:PA10 这个端口是接线的,当年那个分析应该是错的。

核查确认:console_log.c(文件头与 con_uart_reinit() 注释)和
控制台单写者日志设计说明.md 12 节里的"PA10 悬空 / 未接线"是 2026-10-02 的
归因推断,不是实测,且与用户确认的接线状态相反。

ORE 的充分条件本来就不依赖引脚悬空:RX 使能了却从不读 DR,
线上任意一个字节或一个噪声沿使 RXNE 置位后无人读,下一个事件即锁存 ORE
(常伴 NE/FE/PE);而 ORE 只能靠"先读 SR 再读 DR"清除,所以永不自愈。
引脚悬空只影响发生率,不是必要条件。

当年那场风暴的真因仍待定:接线正常时更常见的是对端波特率不匹配
(适配器不是 115200)或适配器 TX 在 USB 掉线时浮空。下次复现先量
适配器 TX 的空闲电平与波特率,不要再默认"引脚悬空"。

改动:
- console_log.c:函数注释改按正确机理表述;修改记录加 2026-10-28 一条
  说明归因更正。纯注释,Code 236456 B 与上版一致,@build 0/0。
- 控制台单写者日志设计说明.md 12 节:机理段后加更正块,写明观察与缓解
  措施仍成立、只有归因需要改写。
- 产品需求文档:4.2 表 USART1 行改为"PA10 双向均已接线";5.16.2 的
  "PA10 没接线"警示块整段重写为"旧结论已撤销 + 真正机理 + 两条硬要求"
  (屏板链路必须消费 DR 并在错误回调清 ORE;新日志口仍设 UART_MODE_TX);
  9.13 前置阻塞由"两条物理前置"改为"一条物理前置 + 一条实现纪律";
  12 节加 v1.9。
- 屏板链路规划:0 章第 2 行标为已撤销、执行顺序去掉"接 PA10";
  批 0 由 4 项减为 3 项;批 1 第 3 项判据补"拔插 TX 线制造噪声后能自动
  恢复";风险表把"PA10 没接"换成"一次噪声后链路永久静默"。
- 任务规划 README 独立轨道行同步为两条前置。

体积凭证随索引刷新(scripts/size_attestation.json),数字未变。
This commit is contained in:
2026-10-28 10:41:32 +08:00
parent eb2c454aed
commit f50e74c63b
6 changed files with 85 additions and 39 deletions
+15 -4
View File
@@ -62,6 +62,13 @@
* 三本账分开(docs §13-O2):新增 dbg_console_tx_timeout(),dropped 只记
* 真丢的,tx_fault 仍只记软复位自愈次数;[ERR] dropped 行改为"发成功才
* 销账",通道不可用期间不再把丢弃证据一起冲掉。
* 2026-10-28 王建锋 **根因归因更正(纯注释,无行为变更)**:原注释把 ORE 锁存
* 写成"PA10 悬空 / 未接线",用户确认 PA10 **一直是接线的**,该归因不成立。
* 真正的充分条件是"**RX 使能了却从不读 DR**"——线上任意一个字节或一个
* 噪声沿使 RXNE 置位后无人读,下一个事件即锁存 ORE(ORE 只能靠"先读 SR
* 再读 DR"清除 ⇒ 永不自愈);引脚悬空只影响发生率,不是必要条件。
* 缓解措施与结论不变,仅改注释;机制详见
* docs/子系统设计/控制台单写者日志设计说明.md §12。
*/
#include "console_log.h"
@@ -467,10 +474,14 @@ uint8_t dbg_console_writer_ready(void) {
/*
* 函数功能:USART1 僵尸通道自愈(清错误锁存 + 整外设重初始化)
* 函数说明:RX 悬空噪声(PA10 未接线)锁存的 ORE/NE/FE/PE 使 HAL 轮询 TX 恒快速失败
* (控制台静默、系统不复位);发送器卡死状态则使 TXE 等待耗满超时(冻结唯一
* 写者 → 看门狗误复位,2026-10-02 台架实证)。外设软复位清锁存与卡死状态后
* 重新初始化,故障时间被单块超时限定
* 函数说明:**RX 使能了却从不读 DR** → 线上任意一个字节或一个噪声沿使 RXNE 置位后无人读,
* 下一个事件即锁存 ORE(常伴 NE/FE/PE);ORE 只能靠"先读 SR 再读 DR"清除 ⇒ 永不自愈。
* 锁存后 HAL 轮询 TX 恒快速失败(控制台静默、系统不复位);发送器卡死状态则使 TXE
* 等待耗满超时(冻结唯一写者 → 看门狗误复位,2026-10-02 台架实证)。外设软复位清锁存与卡死状态后
* 重新初始化,故障时间被单块超时限定。
* ⚠ 2026-10-28 更正:原注释把根因写成"PA10 未接线 / 悬空",用户确认 PA10 一直是接线的;
* 充分条件是"RX 使能却不消费 DR",与引脚是否悬空无关
* (详见 docs/子系统设计/控制台单写者日志设计说明.md §12)。
*/
static void con_uart_reinit(void) {
__NVIC_ClearPendingIRQ(USART1_IRQn);