
帧结构调整,长度字段移到命令字之前,长度=命令(1字节)+数据(N字节)。
新帧结构:[帧头][长度高][长度低][命令][数据...][校验]。
详见版本信息章节。
本文档描述了MX8965A设备的串口通信协议,该协议用于主机与设备之间的数据交换和控制命令传输。
· **波特率**:(9600bps)
· **数据位**: 8位
· **停止位**: 1位
· **校验位**: 无校验
· **流控制**: 无
+--------+--------+--------+--------+--------+...+--------+--------+
| 帧头 |数据长度H|数据长度L| 命令字 | 数据0 |...| 数据N | 校验和 |
+--------+--------+--------+--------+--------+...+--------+--------+
| 0xAA |LEN_H | LEN_L | CMD | DATA0 |...| DATAN | XOR |
+--------+--------+--------+--------+--------+...+--------+--------+
· **帧头 (1字节)**: 固定为 `0xAA`,用于标识数据包开始
· **数据长度 (2字节)**: 命令字(1字节) + 数据域的字节数,高字节在前,低字节在后(大端序)
· **命令字 (1字节)**: 指定具体的操作命令
· **数据域 (0-65534字节)**: 命令相关的参数数据
· **校验和 (1字节)**: XOR异或校验,对帧头到数据域所有字节进行异或运算
uint8_t checksum = 0;
/* 长度字段 = 命令字(1) + 数据域(N) */
uint16_t len = (packet[1] << 8) | packet[2];
/* 校验范围: 帧头 + 长度2字节 + 命令 + 数据 = 3 + len */
for (int i = 0; i < (len + 3); i++) {
checksum ^= packet[i];
}
协议中的命令字按功能模块进行了系统化分类,每个功能模块占用一段连续的命令字地址空间:

· 录音控制码:00进入录音等待、01开始录音、02录音/暂停、03继续暂停、04继续录音、05停止录音、06播放录音
· 录音比特率编码:00=16kbs、01=24kbs、02=32kbs、03=48kbs、04=64kbs、05=96kbs、06=128kbs、07=144kbs、08=160kbs
· 录音路径按GBK编码发送,长度字段=命令(1)+路径字节数;建议控制路径长度≤190字节
· MIC增益范围0-63,单位与芯片寄存器一致
表示哪些设备已插入/在线,可以是多个设备的组合。
数据字节0: 在线设备状态位(支持多设备组合)
- 0x00/0xFF: 无设备在线
- 0x01: USB在线
- 0x02: SD卡在线
- 0x03: USB+SD卡在线
- 0x04: FLASH在线
- 0x05: USB+FLASH在线
- 0x06: SD卡+FLASH在线
- 0x07: USB+SD卡+FLASH全部在线
表示当前正在使用哪个设备播放音乐,只能是单个设备。
数据字节0: 当前播放设备(单一设备)
- 0x00/0xFF: 无播放设备
- 0x01: 正在播放USB设备
- 0x02: 正在播放SD卡
- 0x04: 正在播放FLASH
**注意**: 在线设备(0x22)和播放设备(0x23)的区别:
- **在线设备**: 哪些设备已插入,可以是多个(如USB和SD卡都插入→0x03)
- **播放设备**: 当前正在播放哪个,只能是单个(如正在播放USB→0x01)
当前曲目 (0x20): 2字节,高字节+低字节
总曲目数 (0x21): 2字节,高字节+低字节
频率值: 2字节,高字节+低字节
实际频率 = 值 / 100 (MHz)
例如: 0x2710 = 10000 → 100.00 MHz
总播放时间 (0x38响应): 3字节,时(1字节) 分(1字节) 秒(1字节)
例如: 0x01 0x2D 0x1E 表示 01:45:30 (1小时45分30秒)
当前播放时间 (0x39开启后自动发送): 3字节,时(1字节) 分(1字节) 秒(1字节)
当通过0x39命令开启时间发送后,设备会定期自动发送当前播放时间
格式与总播放时间相同
错误:CMD(0xFE):一个字节,所有的错误都由这个错误返回
0x01---校验和错误
0x02---数据包不完整
0x06----没有找到指定设备
0x07---设备不在线错误
0x08---设备读错误
0x09--设备扫描失败
0x0a---没有找到文件
0x0b---录音文件夹操作错误
0x0c----文件读错误
· 接收到校验和不匹配的数据包时,丢弃该数据包
· 发送端重新发送命令
· 缓冲区保存不完整数据,等待后续数据
· 超时机制:超过指定时间未收到完整数据包则清空缓冲区
· 设备收到未定义的命令字时,可能返回错误响应或忽略
· 必须检查帧头0xAA
· 验证数据长度字段的合理性
· 计算并验证校验和
· 处理数据包边界问题
· 使用环形缓冲区或滑动窗口
· 及时清理无效数据
· 防止缓冲区溢出
· 串口读写操作需要线程同步
· 界面更新使用消息机制
· 避免阻塞主线程
· 路径和文件名使用GBK编码发送
· 长文件名响应使用UNICODE编码
· 注意字节序问题
6、芯片封装尺寸图


电话:020-32365760 & 020-32365760
手机:岑生 13143391993 (梁生 13415838086)
地址:广州市天河区东圃镇吉山新路街8号吉邦科技园2栋
