c81bd93205
- 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个任务
192 lines
5.0 KiB
Markdown
192 lines
5.0 KiB
Markdown
# TCP2UART 项目需求说明
|
||
|
||
## 一、项目目标
|
||
|
||
本项目基于 `STM32F103RCT6` 与 `CH390D` 实现一台多实例 TCP 与双串口数据透传设备。
|
||
|
||
最终对外协议模型固定为:
|
||
|
||
1. `MUX`:控制串口侧是否采用 MUX 承载
|
||
2. `NET`:全局静态网络配置
|
||
3. `LINK[idx]`:按实例索引组织的链路配置
|
||
|
||
系统必须支持:
|
||
|
||
- `2` 路 TCP Server 实例
|
||
- `2` 路 TCP Client 实例
|
||
- `UART1` 作为 AT 配置口
|
||
- `UART2 / UART3` 作为业务数据口
|
||
|
||
## 二、硬件与软件边界
|
||
|
||
### 2.1 硬件边界
|
||
|
||
- 主控:`STM32F103RCT6`(256KB Flash / 48KB SRAM)
|
||
- 备选主控:`STM32F103RDT6`(384KB Flash / 64KB SRAM),pin-to-pin 兼容,当 RAM 不够时直接替换
|
||
- 以太网芯片:`CH390D`
|
||
- 网卡数量:`1`
|
||
- 配置口:`UART1`
|
||
- 数据口:`UART2`、`UART3`
|
||
|
||
### 2.2 软件边界
|
||
|
||
- 执行模型:`FreeRTOS`
|
||
- 网络协议栈:`lwIP NO_SYS=0 + netconn API`(线程安全,每连接独立任务)
|
||
- 调试输出:`SEGGER RTT`
|
||
- 采用 `FreeRTOS` 任务调度
|
||
- TCP 连接使用 `netconn` 阻塞 API(`netconn_accept` / `netconn_recv` / `netconn_write`)
|
||
- 每条 TCP 连路(S1/S2/C1/C2)独立一个任务
|
||
- 不包含 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` 后按保存配置启动
|
||
- 支持恢复默认配置
|
||
|
||
## 六、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. 满足 `STM32F103RCT6` 的 `256KB Flash / 48KB SRAM` 约束,若 RAM 不足可切换 `STM32F103RDT6`(pin-to-pin,64KB 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 任务无死锁、无栈溢出、无优先级反转
|