# 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 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致
