# TCP2UART 项目需求说明 ## 一、项目目标 本项目基于 `STM32F103R8T6` 与 `CH390D` 实现一台多实例 TCP 与双串口数据透传设备。 最终对外协议模型固定为: 1. `MUX`:控制串口侧是否采用 MUX 承载 2. `NET`:全局静态网络配置 3. `LINK[idx]`:按实例索引组织的链路配置 系统必须支持: - `2` 路 TCP Server 实例 - `2` 路 TCP Client 实例 - `UART1` 作为 AT 配置口 - `UART2 / UART3` 作为业务数据口 ## 二、硬件与软件边界 ### 2.1 硬件边界 - 主控:`STM32F103R8T6` - 以太网芯片:`CH390D` - 网卡数量:`1` - 配置口:`UART1` - 数据口:`UART2`、`UART3` ### 2.2 软件边界 - 执行模型:`bare-metal` - 网络协议栈:`lwIP RAW API + NO_SYS=1` - 调试输出:`SEGGER RTT` - 不采用 `FreeRTOS` - 不采用 `socket/netconn` - 不包含 DHCP 协议支持 ## 三、最终协议需求 ### 3.1 MUX 帧格式 所有 MUX 数据承载必须使用如下格式: ```text 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` 必须统一表达以下静态网络参数: ```text IP,MASK,GW,MAC ``` 说明: - 设备只有一张网卡,因此本地 IP 不按实例拆分 - DHCP 不属于协议需求范围 ### 4.4 LINK 命令需求 `LINK[idx]` 必须统一表达如下字段: ```text EN,LPORT,RIP,RPORT,UART ``` 要求: - `idx` 固定映射四个实例:`0=S1`、`1=S2`、`2=C1`、`3=C2` - `Server` 与 `Client` 共用同一条 `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` 后按保存配置启动 - 支持恢复默认配置 ## 六、非功能需求 1. 满足 `STM32F103R8T6` 的 `64KB Flash / 20KB SRAM` 约束 2. 工程可在 `MDK-ARM` 下构建 3. 调试输出统一使用 `SEGGER RTT` 4. 不引入 DHCP、DNS、UDP 等当前非目标协议 ## 七、验收口径 验收时以下几点必须同时成立: 1. 文档只使用 `MUX / NET / LINK` 作为最终协议模型 2. 文档不再出现历史 `S1... / C1...` 外部字段 3. 串口控制文本统一规定为 `\r\n` 结束 4. MUX 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致