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个任务
5.0 KiB
5.0 KiB
TCP2UART 项目需求说明
一、项目目标
本项目基于 STM32F103RCT6 与 CH390D 实现一台多实例 TCP 与双串口数据透传设备。
最终对外协议模型固定为:
MUX:控制串口侧是否采用 MUX 承载NET:全局静态网络配置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 数据承载必须使用如下格式:
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 协议必须收敛为以下三类命令:
AT+MUXAT+NETAT+LINK
不再保留历史展开式实例字段命令。
4.2 MUX 命令需求
AT+MUX=0/1:设置全局 MUX 模式AT+MUX?:查询当前 MUX 模式
4.3 NET 命令需求
NET 必须统一表达以下静态网络参数:
IP,MASK,GW,MAC
说明:
- 设备只有一张网卡,因此本地 IP 不按实例拆分
- DHCP 不属于协议需求范围
4.4 LINK 命令需求
LINK[idx] 必须统一表达如下字段:
EN,LPORT,RIP,RPORT,UART
要求:
idx固定映射四个实例:0=S1、1=S2、2=C1、3=C2Server与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 事件 - 预分配静态缓冲池,避免动态分配
七、非功能需求
- 满足
STM32F103RCT6的256KB Flash / 48KB SRAM约束,若 RAM 不足可切换STM32F103RDT6(pin-to-pin,64KB SRAM) - 工程可在
MDK-ARM下构建 - 调试输出统一使用
SEGGER RTT - 不引入 DHCP、DNS、UDP 等当前非目标协议
- FreeRTOS 堆使用
heap_4.c,总堆大小建议10KB - 所有任务栈通过
uxTaskGetStackHighWaterMark监控
八、验收口径
验收时以下几点必须同时成立:
- 文档只使用
MUX / NET / LINK作为最终协议模型 - 文档不再出现历史
S1... / C1...外部字段 - 串口控制文本统一规定为
\r\n结束 - MUX 帧格式与端点编码在需求、手册、技术实现三份文档中表述一致
- FreeRTOS 任务无死锁、无栈溢出、无优先级反转