Files
TCP2UART/项目需求说明.md
gaoro-xiao c81bd93205 refactor: 确定路径A架构(NO_SYS=0+netconn+多TCP任务),精确化任务设计与内存预算
- FreeRTOSConfig.h: 堆8->10KB, 优先级56->7, 添加lwIP sys_arch宏和任务优先级/栈大小定义
- lwipopts.h: LWIP_SOCKET=0节省RAM, LWIP_TCPIP_CORE_LOCKING=1, MEM_SIZE 8KB,
  PBUF_POOL 10, MEMP_NUM_NETCONN 8, TCP_SND_BUF/WND 8xMSS, 关闭DHCP/UDP,
  TCPIP_THREAD_STACKSIZE/PRIO明确指定
- 项目技术实现: 9+1任务架构, netconn阻塞模式每连接独立任务, 零拷贝route_msg_t,
  内存精确估算49KB(RCT6超1KB需优化或换RDT6), 模块重写/复用清单
- 项目需求说明: 明确netconn API路线, 添加RDT6备选, 更新任务列表9个任务
2026-04-15 19:23:48 +08:00

5.0 KiB
Raw Permalink Blame History

TCP2UART 项目需求说明

一、项目目标

本项目基于 STM32F103RCT6CH390D 实现一台多实例 TCP 与双串口数据透传设备。

最终对外协议模型固定为:

  1. MUX:控制串口侧是否采用 MUX 承载
  2. NET:全局静态网络配置
  3. LINK[idx]:按实例索引组织的链路配置

系统必须支持:

  • 2 路 TCP Server 实例
  • 2 路 TCP Client 实例
  • UART1 作为 AT 配置口
  • UART2 / UART3 作为业务数据口

二、硬件与软件边界

2.1 硬件边界

  • 主控:STM32F103RCT6256KB Flash / 48KB SRAM
  • 备选主控:STM32F103RDT6384KB Flash / 64KB SRAM),pin-to-pin 兼容,当 RAM 不够时直接替换
  • 以太网芯片:CH390D
  • 网卡数量:1
  • 配置口:UART1
  • 数据口:UART2UART3

2.2 软件边界

  • 执行模型:FreeRTOS
  • 网络协议栈:lwIP NO_SYS=0 + netconn API(线程安全,每连接独立任务)
  • 调试输出:SEGGER RTT
  • 采用 FreeRTOS 任务调度
  • TCP 连接使用 netconn 阻塞 APInetconn_accept / netconn_recv / netconn_write
  • 每条 TCP 连路(S1/S2/C1/C2)独立一个任务
  • 不包含 DHCP 协议支持

三、最终协议需求

3.1 MUX 帧格式

所有 MUX 数据承载必须使用如下格式:

SYNC | LEN_H | LEN_L | SRCID | DSTMASK | PAYLOAD | TAIL

要求:

  • DSTMASK != 0x00:业务数据帧
  • DSTMASK = 0x00:系统控制帧
  • 系统控制帧承载 AT 文本命令
  • AT 文本命令必须以 \r\n 结尾

3.2 统一端点编码

系统必须使用统一端点编码,同时覆盖 UART 与 TCP 逻辑实例:

端点 编码
C1 0x01
C2 0x02
UART2 0x04
UART3 0x08
S1 0x10
S2 0x20

要求:

  • SRCID 为单值
  • DSTMASK 为位图
  • DSTMASK=0x00 仅保留给系统控制帧

四、AT 接口需求

4.1 命令分类

AT 协议必须收敛为以下三类命令:

  1. AT+MUX
  2. AT+NET
  3. AT+LINK

不再保留历史展开式实例字段命令。

4.2 MUX 命令需求

  • AT+MUX=0/1:设置全局 MUX 模式
  • AT+MUX?:查询当前 MUX 模式

4.3 NET 命令需求

NET 必须统一表达以下静态网络参数:

IP,MASK,GW,MAC

说明:

  • 设备只有一张网卡,因此本地 IP 不按实例拆分
  • DHCP 不属于协议需求范围

LINK[idx] 必须统一表达如下字段:

EN,LPORT,RIP,RPORT,UART

要求:

  • idx 固定映射四个实例:0=S11=S22=C13=C2
  • ServerClient 共用同一条 LINK 配置模型
  • LPORT 必须可配置
  • RIP / RPORT 必须可配置
  • UART 必须可配置

五、功能需求

5.1 TCP 功能

  • 支持 2 路 Server
  • 支持 2 路 Client
  • 每个实例通过 LINK[idx] 配置其本地端口、对端地址、对端端口和串口路由

5.2 串口透传功能

  • UART2 / UART3 支持普通透传模式与 MUX 透传模式
  • 当需要多实例共享数据口时,必须启用 MUX 模式
  • 业务数据流向由 SRCID / DSTMASK 决定

5.3 系统控制功能

  • 系统控制帧由 DSTMASK=0x00 表示
  • 系统控制帧进入 AT 解析路径
  • 控制文本必须以 \r\n 结束

5.4 参数保存功能

  • 参数修改后支持 SAVE
  • 支持 RESET 后按保存配置启动
  • 支持恢复默认配置

六、FreeRTOS 任务架构需求

6.1 任务划分

系统至少应包含以下 FreeRTOS 任务:

任务 优先级 职责
tcpip_thread 6 (最高) lwIP 内核线程(自动创建)
NetPollTask 5 CH390 事件轮询 + 链路检测
TcpSrvTask_S1 4 S1 netconn_accept + 收发
TcpSrvTask_S2 4 S2 netconn_accept + 收发
TcpCliTask_C1 4 C1 netconn_connect + 收发
TcpCliTask_C2 4 C2 netconn_connect + 收发
UartRxTask 4 UART DMA/IDLE 接收 + MUX 帧提取 + 路由
ConfigTask 2 AT 命令解析与响应
DefaultTask 1 LED 心跳 + 看门狗

6.2 任务间通信

  • 使用 Queue 传递指针 + 元数据描述符(零拷贝路由消息)
  • 使用 Binary Semaphore 同步 CH390 中断事件
  • 使用 TaskNotification 通知 UART IDLE 事件
  • 预分配静态缓冲池,避免动态分配

七、非功能需求

  1. 满足 STM32F103RCT6256KB Flash / 48KB SRAM 约束,若 RAM 不足可切换 STM32F103RDT6pin-to-pin64KB SRAM
  2. 工程可在 MDK-ARM 下构建
  3. 调试输出统一使用 SEGGER RTT
  4. 不引入 DHCP、DNS、UDP 等当前非目标协议
  5. FreeRTOS 堆使用 heap_4.c,总堆大小建议 10KB
  6. 所有任务栈通过 uxTaskGetStackHighWaterMark 监控

八、验收口径

验收时以下几点必须同时成立:

  1. 文档只使用 MUX / NET / LINK 作为最终协议模型
  2. 文档不再出现历史 S1... / C1... 外部字段
  3. 串口控制文本统一规定为 \r\n 结束
  4. MUX 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致
  5. FreeRTOS 任务无死锁、无栈溢出、无优先级反转