基于JL700N可视化SDK的MAC地址应用

下面是当前开发基于的版本

名称 说明
SDK Visual_jl700n 3.0.0(patch_02)

杰理JL700N系列为蓝牙5.3双模,支持TWS耳机,官方提供可视化开发平台,用户在该平台开发较为简单,只需要配置相关参数就可以了,但功能仅限于系统常用的功能,如按键配置、LED闪烁配置、充电配置、电量曲线配置、蓝牙配置和提示音配置等等基本配置。对于系统以外扩展功能,需要用户自行在代码里面添加,如系统增加霍尔器件、增加双耳互传、修改BLE服务列表、修改BLE广播、系统低功耗运行等等,都需要用户自行修改代码来实现。
针对以上问题,作者以实际开发经验分享,以某种应用的实例,介绍底层基本原理,和实现逻辑提供参考,旨在让读者工程师快速上手,减少摸索时间,提高软件质量。


读者对象

本文档主要适用以下工程师:

嵌入式系统工程师

单片机软件工程师

IOT 固件工程师

BLE 固件工程师

文章目录

1、TWS耳机MAC说明

TWS耳机内部有许多MAC地址,分别都有不同的作用,他们的来源分别做了说明:

MAC地址标识 中文
CFG_TWS_LOCAL_ADDR 蓝牙本地地址,SDK内部第一次上电时随机生成
CFG_TWS_REMOTE_ADDR 蓝牙远端地址,双耳组队时交互对端本地生成
CFG_TWS_COMMON_ADDR 蓝牙公共地址,当未配对时为BT地址,配对后为生成的公共地址
CFG_BT_MAC_ADDR 蓝牙连接地址,工厂烧录时,生成的BT地址
app_ble_set_mac_addr或le_controller_set_mac 设置BLE地址的函数
le_controller_get_mac 获取BLE地址的函数

生成MAC地址代码说明
CFG_TWS_LOCAL_ADDR生成方式:

get_random_number(bt_cfg.tws_local_addr, 6);

syscfg_write(CFG_TWS_LOCAL_ADDR, bt_cfg.tws_local_addr, 6);

CFG_TWS_REMOTE_ADDR生成方式:

充电仓配对、智能盒子配对,交互本地地址时,被设置

if (sizeof(remote_addr) != syscfg_write(CFG_TWS_REMOTE_ADDR, charge_store_info->tws_local_addr, sizeof(remote_addr))) {

w_ret = -1;

}
CFG_TWS_COMMON_ADDR生成方式:

TWS耳机未配对时,这个地址跟随BT蓝牙MAC地址。当TWS耳机配对时,若与左耳的MAC地址,或重新计算出新的MAC地址
CFG_BT_MAC_ADDR的生成方式:

设工具配置区的数据cfg_tool.bin,工厂烧录时烧录的BT MAC地址。
BLE_MAC地址

1)BLE地址和BT地址有关联,通过BT地址计算产生BLE地址。2)通过其他方式设置BLE地址。

2、TWS耳机配对后地址分布

一对TWS耳机配对后,MAC地址分配分析如下:

左耳 右耳
[00:02:55.263]ble_mac:B3 0E 2A 40 03 85 [00:02:55.264]peer_ble_mac:23 76 09 2E 5D 1D
[00:02:55.264]BT_LOCAL_ADDR:02 FF B2 14 F9 C7 [00:02:55.265]BT_MAC_ADDR:B3 0E 29 40 03 85
[00:02:55.266]COMMON_ADDR:B3 0E 29 40 03 85 [00:02:55.267]REMOTE_ADDR:35 DF B4 51 B1 04
[00:02:52.810]ble_mac:23 76 09 2E 5D 1D [00:02:52.811]peer_ble_mac:B3 0E 2A 40 03 85
[00:02:52.812]BT_LOCAL_ADDR:35 DF B4 51 B1 04 [00:02:52.813]BT_MAC_ADDR:23 76 08 2E 5D 1D
[00:02:52.814]COMMON_ADDR:B3 0E 29 40 03 85 [00:02:52.814]REMOTE_ADDR:02 FF B2 14 F9 C7

3、总结说明:

如果TWS耳机为配对,BT的MAC地址 COMMON_ADDR 等于 BT_MAC_ADDR,COMMON_ADDR 不等于 COMMON_ADDR,远程地址REMOTE_ADDR为空

如果TWS耳机已配对,BT的MAC地址 COMMON_ADDR 为左耳地址BT_MAC_ADDR,不一定等于本身的BT_MAC_ADDR,COMMON_ADDR 不等于COMMON_ADDR,远程地址REMOTE_ADDR为对端的本地地址

相关推荐
Book思议-1 小时前
【数据结构实战】线性表的应用
c语言·数据结构·算法·链表
计算机安禾5 小时前
【C语言程序设计】第35篇:文件的打开、关闭与读写操作
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
CODE_RabbitV5 小时前
【3min 解决】keil5 编译stm32 出现一堆 core_cm3.c 报错问题
c语言·stm32·嵌入式硬件
weixin_537590455 小时前
《C程序语言设计》练习答案(练习1-3)
c语言·开发语言
爱编码的小八嘎6 小时前
C语言完美演绎4-10
c语言
智者知已应修善业8 小时前
【51单片机用两个定时计数器级联实现定时】2023-04-12
c语言·经验分享·笔记·算法·51单片机
vx-程序开发8 小时前
springboot在线装修管理系统-计算机毕业设计源码56278
java·c语言·spring boot·python·spring·django·php
_饭团9 小时前
字符串函数全解析:12 种核心函数的使用与底层模拟实现
c语言·开发语言·学习·考研·面试·蓝桥杯
呆瑜nuage9 小时前
【复习系列】高频C/C++库函数手写实现指南与自定义类型的理解指南
c语言·c++·面试
AI+程序员在路上9 小时前
CAN 总线与 Linux SocketCAN C 语言测试程序
linux·c语言·网络