docs: rewrite mux/net/link protocol manuals
This commit is contained in:
@@ -1,95 +1,161 @@
|
||||
# TCP2UART 项目需求说明
|
||||
|
||||
## 一、项目概述
|
||||
## 一、项目目标
|
||||
|
||||
基于 `STM32F103R8T6` 和 `CH390D` 实现双链路 TCP 串口透传设备。设备提供一条 TCP Server 链路和一条 TCP Client 链路,分别与两路 UART 做双向透明传输,并通过 UART1 进行参数配置。
|
||||
本项目基于 `STM32F103R8T6` 与 `CH390D` 实现一台多实例 TCP 与双串口数据透传设备。
|
||||
|
||||
当前项目实现路线已经固定为:
|
||||
最终对外协议模型固定为:
|
||||
|
||||
1. `STM32CubeMX + HAL`
|
||||
2. `bare-metal`
|
||||
3. `lwIP RAW API + NO_SYS=1`
|
||||
4. `SEGGER RTT` 调试输出
|
||||
1. `MUX`:控制串口侧是否采用 MUX 承载
|
||||
2. `NET`:全局静态网络配置
|
||||
3. `LINK[idx]`:按实例索引组织的链路配置
|
||||
|
||||
不再采用 `FreeRTOS` 作为正式交付架构。
|
||||
系统必须支持:
|
||||
|
||||
## 二、硬件平台
|
||||
- `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 逻辑实例:
|
||||
|
||||
| 端点 | 编码 |
|
||||
|------|------|
|
||||
| 主控芯片 | `STM32F103R8T6` |
|
||||
| 以太网芯片 | `CH390D` |
|
||||
| PCB 设计工具 | 立创 EDA |
|
||||
| 串口通道 | `UART1 + UART2 + UART3` |
|
||||
| `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
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
1. `UART1` 用于配置口
|
||||
2. `UART2` 对应 TCP Server 透传链路
|
||||
3. `UART3` 对应 TCP Client 透传链路
|
||||
- 设备只有一张网卡,因此本地 IP 不按实例拆分
|
||||
- DHCP 不属于协议需求范围
|
||||
|
||||
## 三、软件平台
|
||||
### 4.4 LINK 命令需求
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 开发环境 | `STM32CubeMX + HAL + MDK-ARM` |
|
||||
| 执行模型 | 裸机主循环 + 中断驱动 |
|
||||
| 协议栈 | `lwIP RAW API` |
|
||||
| 调试输出 | `SEGGER RTT` |
|
||||
`LINK[idx]` 必须统一表达如下字段:
|
||||
|
||||
## 四、核心功能需求
|
||||
```text
|
||||
EN,LPORT,RIP,RPORT,UART
|
||||
```
|
||||
|
||||
### 4.1 双链路 TCP 通信
|
||||
要求:
|
||||
|
||||
- `Server` 链路:设备作为 TCP Server,监听指定端口
|
||||
- `Client` 链路:设备作为 TCP Client,主动连接远程服务器
|
||||
- 两条链路共享同一个设备 IP 地址
|
||||
- `idx` 固定映射四个实例:`0=S1`、`1=S2`、`2=C1`、`3=C2`
|
||||
- `Server` 与 `Client` 共用同一条 `LINK` 配置模型
|
||||
- `LPORT` 必须可配置
|
||||
- `RIP / RPORT` 必须可配置
|
||||
- `UART` 必须可配置
|
||||
|
||||
### 4.2 串口透传
|
||||
## 五、功能需求
|
||||
|
||||
- `Server` 链路数据 <=> `UART2` 双向透传
|
||||
- `Client` 链路数据 <=> `UART3` 双向透传
|
||||
- 仅透传 TCP Payload,不解析业务层协议
|
||||
### 5.1 TCP 功能
|
||||
|
||||
### 4.3 参数配置
|
||||
- 支持 `2` 路 Server
|
||||
- 支持 `2` 路 Client
|
||||
- 每个实例通过 `LINK[idx]` 配置其本地端口、对端地址、对端端口和串口路由
|
||||
|
||||
- 通过 `UART1` 配置网络与串口参数
|
||||
- 配置参数掉电保存
|
||||
- 支持设备复位后按保存配置生效
|
||||
### 5.2 串口透传功能
|
||||
|
||||
### 4.4 调试与维护
|
||||
- `UART2 / UART3` 支持普通透传模式与 MUX 透传模式
|
||||
- 当需要多实例共享数据口时,必须启用 MUX 模式
|
||||
- 业务数据流向由 `SRCID / DSTMASK` 决定
|
||||
|
||||
- 调试输出统一走 `SEGGER RTT`
|
||||
- 工程需可在 `MDK-ARM` 下直接构建
|
||||
### 5.3 系统控制功能
|
||||
|
||||
## 五、当前实现边界
|
||||
- 系统控制帧由 `DSTMASK=0x00` 表示
|
||||
- 系统控制帧进入 AT 解析路径
|
||||
- 控制文本必须以 `\r\n` 结束
|
||||
|
||||
基于 `STM32F103R8T6` 的 `64KB Flash / 20KB SRAM` 约束,当前交付版本约束如下:
|
||||
### 5.4 参数保存功能
|
||||
|
||||
1. 使用静态 IP
|
||||
2. 当前构建不支持 DHCP
|
||||
3. 不使用 `lwIP socket/netconn`
|
||||
4. 不使用 `FreeRTOS`
|
||||
- 参数修改后支持 `SAVE`
|
||||
- 支持 `RESET` 后按保存配置启动
|
||||
- 支持恢复默认配置
|
||||
|
||||
这不是降级,而是基于资源约束后的正式实现路线。
|
||||
## 六、非功能需求
|
||||
|
||||
## 六、数据可靠性要求
|
||||
1. 满足 `STM32F103R8T6` 的 `64KB Flash / 20KB SRAM` 约束
|
||||
2. 工程可在 `MDK-ARM` 下构建
|
||||
3. 调试输出统一使用 `SEGGER RTT`
|
||||
4. 不引入 DHCP、DNS、UDP 等当前非目标协议
|
||||
|
||||
- 目标是保证 TCP 数据与串口数据双向透传稳定工作
|
||||
- 需要后续补充上板联调后的丢包率测试方案与结果
|
||||
- 需要验证双链路同时工作时的稳定性
|
||||
## 七、验收口径
|
||||
|
||||
## 七、交付物
|
||||
验收时以下几点必须同时成立:
|
||||
|
||||
1. 原理图及 PCB 设计文件
|
||||
2. STM32 固件源码
|
||||
3. `CubeMX` 工程与 `MDK-ARM` 工程
|
||||
4. 使用说明文档
|
||||
5. 后续补充的透传与丢包测试结果
|
||||
|
||||
## 八、约束条件
|
||||
|
||||
1. 通信协议为标准 TCP/IP
|
||||
2. 串口透传为纯数据透传,不解析上层协议
|
||||
3. 当前正式目标器件为 `STM32F103R8T6`
|
||||
4. 所有正式实现应服从 `64KB Flash / 20KB SRAM` 约束
|
||||
1. 文档只使用 `MUX / NET / LINK` 作为最终协议模型
|
||||
2. 文档不再出现历史 `S1... / C1...` 外部字段
|
||||
3. 串口控制文本统一规定为 `\r\n` 结束
|
||||
4. MUX 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致
|
||||
|
||||
Reference in New Issue
Block a user