8.1 KiB
8.1 KiB
TCP2UART AT 固件使用手册
1. 文档范围
本文档定义 TCP2UART 项目的最终 AT 外部协议。
本文档只描述最终协议模型,不保留任何历史展开式实例字段,不包含测试记录,不讨论旧版兼容命令。
适用对象:
- 上位机开发人员
- 联调与测试人员
- 固件接口实现人员
2. 设备与接口
- 主控:
STM32F103RCT6(256KB Flash / 48KB SRAM) - 以太网芯片:
CH390D - 配置口:
USART1 - 数据口:
USART2、USART3
2.1 固件版本线
- FreeRTOS + lwIP 版本线从
V2.0.0开始。 - 裸机版本线从
V1.0.0开始。 - 当前 FreeRTOS 固件基线 release:
TCP2UART RTOS V2.0.0。 - 固件下载:
https://git.furtherverse.com/gaoro-xiao/TCP2UART/releases/tag/V2.0.0
职责划分:
USART1:AT 配置口USART2 / USART3:业务数据口,可工作于普通透传或 MUX 透传模式
3. 最终协议模型
本项目最终控制协议由三部分组成:
MUX:全局数据承载模式开关NET:全局静态网络配置记录LINK[ROLE]:按角色名组织的链路配置记录(S1/S2/C1/C2)
约束如下:
- 设备只有一张网卡,因此本地网络参数只配置一次
- DHCP 不属于最终协议范围
- 所有 AT 文本命令必须以
\r\n结尾 - 当
DSTMASK=0x00时,MUX 数据口中的系统控制帧进入 AT 解析路径,其控制文本同样必须以\r\n结尾
4. MUX 帧格式
当 MUX=1 时,数据口使用如下帧格式:
SYNC | LEN_H | LEN_L | SRCID | DSTMASK | PAYLOAD | TAIL
字段定义:
SYNC:帧起始标记,建议固定为0x7ELEN_H / LEN_L:PAYLOAD长度,高字节在前SRCID:单字节源端点 IDDSTMASK:单字节目标端点位图PAYLOAD:负载数据TAIL:帧结束标记,建议固定为0x7F
规则:
DSTMASK != 0x00:业务数据帧DSTMASK = 0x00:系统控制帧- 系统控制帧的
PAYLOAD为 AT 文本,必须以\r\n结束
5. 统一端点编码
UART 与 TCP 逻辑实例统一进入同一套编码空间:
| 端点 | 编码 |
|---|---|
C1 |
0x01 |
C2 |
0x02 |
U0 |
0x04 |
U1 |
0x08 |
S1 |
0x10 |
S2 |
0x20 |
说明:
SRCID必须为单一端点值DSTMASK可以是一个或多个端点编码按位或的结果DSTMASK=0x00保留给系统控制帧
6. AT 命令总则
6.1 命令结尾
所有 AT 命令均必须以 \r\n 结尾。
例如:
AT\r\n
AT+MUX?\r\n
AT+NET=192.168.31.100,255.255.255.0,192.168.31.1,00:00:00:00:00:00\r\n
6.2 持久化规则
参数设置成功后只写入当前运行配置,不会自动写入 Flash。
若要掉电保持,必须执行:
AT+SAVE\r\nAT+RESET\r\n
6.3 响应风格
- 成功:
OK - 需要保存后生效时,允许追加提示文本
- 失败:
ERROR: <reason>
7. 默认配置
7.1 MUX 默认值
MUX = 0
7.2 NET 默认值
NET = 192.168.31.100,255.255.255.0,192.168.31.1,00:00:00:00:00:00
默认 MAC 为全 0,表示 Flash 中不固化板卡 MAC;运行时使用 CH390D 内部 MAC。AT+? 与 AT+NET? 回显的是当前生效 MAC。
7.3 LINK 默认值
LINK:S1 = 1,8080,0.0.0.0,0,U0
LINK:S2 = 0,8081,0.0.0.0,0,U1
LINK:C1 = 1,9001,192.168.1.200,9000,U1
LINK:C2 = 0,9002,192.168.1.201,9001,U0
说明:
S1/S2/C1/C2为对外可见角色名- 内部索引映射由固件管理,不对外暴露
UART 记号约定:
U0 = USART2U1 = USART3
8. AT 命令定义
8.1 测试设备在线
命令:
AT\r\n
返回:
OK
8.2 查询摘要
命令:
AT+?\r\n
AT+QUERY\r\n
推荐返回格式:
+NET:IP=192.168.31.100,MASK=255.255.255.0,GW=192.168.31.1,MAC=<当前生效MAC>
+LINK:S1,EN=1,LPORT=8080,RIP=0.0.0.0,RPORT=0,UART=U0
+LINK:S2,EN=0,LPORT=8081,RIP=0.0.0.0,RPORT=0,UART=U1
+LINK:C1,EN=1,LPORT=9001,RIP=192.168.1.200,RPORT=9000,UART=U1
+LINK:C2,EN=0,LPORT=9002,RIP=192.168.1.201,RPORT=9001,UART=U0
+MUX:0
+MAP:UART2=0x04,UART3=0x08,C1=0x01,C2=0x02,S1=0x10,S2=0x20
+BAUD:U0=115200,U1=115200
OK
8.3 MUX 类命令
设置 MUX
AT+MUX=1\r\n
参数:
0:普通透传模式1:MUX 透传模式
查询:
AT+MUX?\r\n
返回示例:
+MUX:1
OK
8.4 NET 类命令
设置 NET
AT+NET=192.168.31.100,255.255.255.0,192.168.31.1,00:00:00:00:00:00\r\n
字段顺序:
IP,MASK,GW,MAC
查询:
AT+NET?\r\n
返回示例:
+NET:IP=192.168.31.100,MASK=255.255.255.0,GW=192.168.31.1,MAC=<当前生效MAC>
OK
MAC 设置说明:
当 MAC 设置为全 0 时,固件将使用 CH390D 内部 MAC 地址。此时 Flash 内仍保存全 0,不会把内部 MAC 写回 Flash;AT+? 和 AT+NET? 查询到的 MAC 地址为当前运行时生效的硬件 MAC 地址。
8.5 LINK 类命令
设置单条 LINK 记录
AT+LINK=S1,1,8080,0.0.0.0,0,U0\r\n
AT+LINK=C1,1,9001,192.168.1.200,9000,U1\r\n
字段顺序:
ROLE,EN,LPORT,RIP,RPORT,UART
字段说明:
ROLE:链路角色名,固定为S1/S2/C1/C2EN:0/1LPORT:本地端口RIP:对端 IPRPORT:对端端口UART:U0/U1
说明:
Server与Client共用同一条LINK记录模型Server中RIP/RPORT可作为允许接入的对端约束或预设对端信息Client中RIP/RPORT表示远端目标地址与端口Client侧当前保留固定LPORT语义,用于满足部分上位机或现场网络策略对固定源端口的依赖- 为避免固定
LPORT下频繁重连被 lwIPTIME_WAIT长时间占用阻塞,当前固件对Client主动断开后的释放路径采用 abortive close(RST)而非优雅FIN/ACK关闭 - 因此
Client重连场景下,对端可能观察到RST或“连接被重置”,这属于当前产品约束下的有意设计取舍,不影响AT+LINK对LPORT的配置语义
查询单条 LINK
AT+LINK=S1\r\n
返回示例:
+LINK:S1,EN=1,LPORT=8080,RIP=0.0.0.0,RPORT=0,UART=U0
OK
查询全部 LINK
AT+LINK?\r\n
返回示例:
+LINK:S1,EN=1,LPORT=8080,RIP=0.0.0.0,RPORT=0,UART=U0
+LINK:S2,EN=0,LPORT=8081,RIP=0.0.0.0,RPORT=0,UART=U1
+LINK:C1,EN=1,LPORT=9001,RIP=192.168.1.200,RPORT=9000,UART=U1
+LINK:C2,EN=0,LPORT=9002,RIP=192.168.1.201,RPORT=9001,UART=U0
OK
9. 保存与复位命令
9.1 保存配置
AT+SAVE\r\n
成功返回:
OK: Configuration saved
9.2 软件复位
AT+RESET\r\n
返回:
OK: Resetting...
9.3 恢复默认值
AT+DEFAULT\r\n
返回:
OK: Defaults restored
10. 常见错误返回
| 场景 | 返回 |
|---|---|
| 未知命令 | ERROR: Unknown command |
| 非法端口 | ERROR: Invalid port |
| 非法波特率 | ERROR: Invalid baudrate |
| 非法 IP 地址 | ERROR: Invalid IP format |
| 非法掩码 | ERROR: Invalid mask format |
| 非法网关 | ERROR: Invalid gateway format |
| 非法远端 IP | ERROR: Invalid remote IP format |
| 非法 MAC | ERROR: Invalid MAC format |
非法 SRCID / DSTMASK |
ERROR: Invalid route field |
| Flash 保存失败 | ERROR: Save failed |
11. 推荐配置流程
AT+NET=192.168.31.123,255.255.255.0,192.168.31.1,00:00:00:00:00:00\r\n
AT+LINK=S1,1,10001,0.0.0.0,0,U1\r\n
AT+LINK=S2,1,10003,0.0.0.0,0,U1\r\n
AT+LINK=C1,1,20001,192.168.1.201,10002,U0\r\n
AT+MUX=1\r\n
AT+SAVE\r\n
AT+RESET\r\n
12. 故障排查建议
12.1 发送 AT 没有返回
优先检查:
- 是否连接到
USART1 - 串口参数是否为
115200 8N1 - 是否严格使用
\r\n作为命令结尾 - 接线是否正确
- 设备是否正常上电运行
12.2 设置成功但重启后参数丢失
检查是否漏掉以下步骤:
AT+SAVE\r\nAT+RESET\r\n
13. 相关文件
- AT 命令实现:
App/config.c - 配置结构与默认值:
App/config.h - FreeRTOS 任务定义:
Core/Src/freertos.c - 调试指导:
工程调试指南.md