在实际语音产品开发中,经常遇到一个语音模组需要与多个外部设备通信的场景。例如:语音模组需要同时向两个不同的MCU发送不同格式的控制指令,或者需要连接两个不同通信协议的设备。这时,单个串口就显得捉襟见肘了。

本文基于真实用户问题,详细讲解 CI-73T 模组双串口功能的配置方法、应用场景以及常见问题排查。
某用户在技术交流群中提出问题:
"有没有两个串口输出的?有两种格式指令,对应两个芯片。"
这个问题反映了实际产品开发中的常见需求:
CI-73T 和 CI-03T 系列模组都支持两组独立串口,可以同时与两个不同的MCU进行串口通信:
"可以,是两组串口可以跟不同MCU串口通信"
| 参数 | 规格 |
|---|---|
| UART路数 | 3路 |
| 最高波特率 | 3M |
| 默认波特率 | 9600 |
| 串口电平 | 3.3V |
| 引脚配置 | 可通过平台自由配置GPIO为UART功能 |
CI-73T 支持将多个 GPIO 引脚配置为 UART 功能,常用的配置包括:
注意:日志串口配置为普通串口后,将无法输出调试日志,建议调试完成后再修改。
在配置双串口功能之前,需要先在 Pin脚配置 中启用所需的串口功能:
步骤:
以下是一个典型的应用场景:串口2接收数据后,根据数据内容从串口1发送对应控制指令。
步骤1:添加串口输入触发
1cmd(类型int,测试值1)步骤2:添加串口输出动作
在控制详情中添加控制动作:
步骤3:使用参数进行数据传递
假设需要实现:串口2接收数据后,根据数据内容从串口1发送对应控制指令
串口输入配置:
| 配置项 | 值 |
|---|---|
| 触发方式 | 串口输入 |
| 选择串口 | UART2_RX |
| 消息编号 | 1 |
| 输入参数 | cmd(类型int,测试值1) |
控制详情配置:
| 操作 | 参数/条件 | 动作 |
|---|---|---|
| 参数赋给变量 | cmd → command_var | - |
| 条件判断 | 如果 command_var == 1 | UART1_TX 发送 AA 55 01 55 AA |
| 条件判断 | 如果 command_var == 2 | UART1_TX 发送 AA 55 02 55 AA |
应用描述: 一个语音产品需要同时控制两个独立的MCU,例如主控板和显示板。
实现方案:
数据格式示例:
UART1: AA 55 01 01 55 AA (控制主控执行动作1)
UART2: BB 66 02 05 66 BB (控制显示显示模式5)应用描述: 语音模组作为协议转换器,将一种协议转换为另一种协议。
实现方案:
应用描述: 用户提问的场景:两种格式指令对应两个芯片。
实现方案:
配置示例:
语音命令:"打开所有设备"
→ 动作1:UART1_TX 发送 01 02 03 04
→ 动作2:UART2_TX 发送 AA BB CC DDSmartPi 平台的串口通信采用统一的数据帧格式:
AA 55 [消息ID] [参数值] 55 AA| 字段 | 说明 |
|---|---|
| AA 55 | 帧头(固定) |
| [消息ID] | 对应配置的消息编号(1字节) |
| [参数值] | 要传递的参数数据(可变长度) |
| 55 AA | 帧尾(固定) |
支持在单次通信中传递多个参数:
示例:
AA 55 45 [参数1] [参数2] [参数3] 55 AA问题描述: 在控制详情中找不到配置的串口选项。
解决方案:
问题描述: 串口接收到的数据偶尔出现 0xFF 错误值。
可能原因:
排查步骤:
问题描述: 部分模块串口命令不执行,同一固件在大部分板子上正常,个别板子异常。
解决方案:
如外部设备为5V电平,需要加装电平转换电路:
方案一:电阻分压(仅适用于5V→3.3V)
5V_TX ──┬─── 2.2kΩ ────┬─── 3.3V_RX
│ │
└─── 3.3kΩ ────┴─── GND方案二:专用电平转换芯片(推荐)
在完成双串口配置后,请对照以下清单进行检查:
CI-73T 系列模组支持多路UART串口,可以灵活地实现与多个外部设备的通信。通过平台配置,可以轻松实现:
核心要点:
AA 55 [消息ID] [参数] 55 AA 协议