本文介绍 恒玄方案 耳机和充电盒之间的单线 通讯和是实现。
充电仓通讯有很多用途:a.充电盒基于霍尔senor的开关盒/配对等命令;b.获取修改耳机蓝牙地址; c.耳机当前电量获取等。
一:单线通讯协议定义:
双方TTL信号通过一根信号线,一根地线来进行通讯。(半双工)
充电盒 耳机连接 逻辑 示意图
耳机部分原理图设计 。
二 :充电仓通讯
-
单线通讯比特率 :38400 用户可以根据不同充电盒设计修改通讯波特率 (个人建议使用较低的波特率 ,硬件调试相对容易)
-
通讯协议命令: 支持用户自定义通讯协议和命令。(本文采用 帧头+命令 的形式)。
比如 我下文介绍使用的 开盒指令 0xa1 ,0x01;关盒指令 0xa1,0x02.
3.通讯原理以及过程实现:
由于LED2(GPIO_CHARGE)不仅需要承担出入盒检测 ,还需要做单线通讯。
所以在通常状态下需要把LED2设置为GPIO中断模式,等待LED2被拉低 触发中断后,再次 初始化为RX接收模式。
如果这个时候有消息需要发送就初始化为 TX 模式 ,在TX数据发送完成后 默认切回RX模式 RX模式等待时间可以调整(默认150*100ms=15s)调整的时间不能小于一个充电盒发码周期。
三:源代码修改和实例化:
1.初始化 原SDK携带的单线通讯端口。
2.注册回调函数 ,写好对应接口函数(RX message处理)。
3.在apps文件中 app_init 函数里面相应位置初始化启动。
四:常见问题和调试
1.无法接收充电盒数据
这个可以分步骤查询
a, 检查默认初始化是否为RX接受模式;
b,如果配置为IO中断的情况下 是不是充电盒无法将5V拉到底 没有触发中断 ;
c, 充电盒发出波形异常导致。
2.RX接收数据总是为 “UART RX status:0 len:1 00”
这个一般是已经启动了RX数据接收,但是由于充电盒 波形不对 或者不标准导致,需要用示波器抓波形分析。
3.在RX数据接收 状态下 或者RX idle 状态下 无法检测出入盒问题
因为在RX模式下 关闭了IO 中断 ,所以只能使用 轮询模式检测耳机出盒动作。
五 :总结
BES 充电盒的单线通讯其实比较简单,就是IO口基于不同状态的切换 然后在原有的接口函数上加自己的通讯协议 .
后面附件会加上我这边的实例化 代码 供大家参考 指正 ,谢谢!
微盘链接:
https://share.weiyun.com/YHebhaJt