JL701X可视化工具问题处理文档
📎 原始文档:https://www.kdocs.cn/l/cmUDJueI2jaW JL701X可视化工具问题处理文档
- 在配置工具添加按键,比如添加上一曲、下一曲按键,按键按下会复位问题 20230519 FSW 如下图添加按键后,会导致复ANC
复位log如下
原因:部分版本SDK没有针对新增按键添加对应的功能特性(也就是没有定义这个按键可以执行的按键操作),需要在代码中添加,例如新增上一曲下一曲按键时,需要在key_ability.c中添加下面的代码,其他按键同理
static const struct scene_event key_next_event_table[MAX_NUM_KEY_MSG] = {
[0] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_CLICK) //click
},
[1] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_LONG) //long
},
[2] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_HOLD) //hold
},
[3] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_UP) //up
},
[4] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_DOUBLE_CLICK) //double click
},
[5] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_TRIPLE_CLICK) //triple click
},
[6] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_FOURTH_CLICK) //fourth click
},
[7] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_FIRTH_CLICK) //firth click
},
[8] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_HOLD_3SEC) //hold 3s
},
[9] = {
.event = APP_KEY_MSG_REMAP(KEY_NEXT, KEY_ACTION_HOLD_5SEC) //hold 5s
},
};
REGISTER_SCENE_ABILITY(key_next_ability) = {
.uuid = UUID_KEY_NEXT,
.event = key_next_event_table,
};
static const struct scene_event key_prev_event_table[MAX_NUM_KEY_MSG] = {
[0] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_CLICK) //click
},
[1] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_LONG) //long
},
[2] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_HOLD) //hold
},
[3] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_UP) //up
},
[4] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_DOUBLE_CLICK) //double click
},
[5] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_TRIPLE_CLICK) //triple click
},
[6] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_FOURTH_CLICK) //fourth click
},
[7] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_FIRTH_CLICK) //firth click
},
[8] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_HOLD_3SEC) //hold 3s
},
[9] = {
.event = APP_KEY_MSG_REMAP(KEY_PREV, KEY_ACTION_HOLD_5SEC) //hold 5s
},
};
REGISTER_SCENE_ABILITY(key_prev_ability) = {
.uuid = UUID_KEY_PREV,
.event = key_prev_event_table,
};
- JL701可视化配置工具,软件版本V1.0.0,芯片烧录了KEY,但是编译下载时提示芯片没有烧录KEY 20230519 FSW 需要将ac701n_earphone_release_v1.4.0的br28loader.bin替换到可视化工具的SDK中
- AC701N-demo 1.0.0(patch_01),使能这个智能仓就会出现报错,编译不过 LJW 报错信息:
修改方式:在apps\earphone\mode\bt\bt_tws.c下加上这段代码
bool get_tws_phone_connect_state(void)
{
if (gtws.state & BT_TWS_PHONE_CONNECTED) {
return TRUE;
}
return FALSE;
}
- AC701N-demo 1.0.0(patch_01),LED配置的IO选项里没有PG、PE口 LJW 如下图,以修改PG5口为LED口作为例子:

- AC701N-demo 1.0.0(patch_01),无连接关机时间,最大只能设置300S LJW 如下图中修改,可以修改自己想要的时间,文件路径:apps\earphone\include\sdk_config.h

- AC701N-demo 1.0.0(patch_01),使能ANC,会报错提示文件不存在以及文件长度等问题 LJW (1)在目录:SDK\cpu\br28\tools,添加anc_coeff.bin和anc_gains.bin文件;
(2)添加效果文件后,编译可能会报超过文件长度的问题,修改如下:
- AC701N-demo 1.0.0(patch_01),按键去切换ANC模式无效果,打印显示“audio_anc open Failed: -1” LJW 如下图所示,可能的原因为(1)非差分MIC,(2)混合馈使用4Mbit的flash
(1)MIC配置的地方:
(2)FLASH大小配置的地方:
- 按键执行TWS同步关机时,没有关机灯效问题 20230601 FSW

- 可视化工具多个EQ效果切换 20230612 FSW 先添加EQ效果


使用如下接口切换添加好的多个EQ
#define CFG_FILE_MAX_EQ_NUM 3//有多少个EQ效果这里就填多少
static u8 curr_eq_index = 0;
void eq_effect_switch(u8 index)
{
if(index == 0xff){
curr_eq_index++;
}
else{
curr_eq_index = index;
}
if(curr_eq_index >= CFG_FILE_MAX_EQ_NUM){
curr_eq_index = 0;
}
eq_file_cfg_switch("MusicEqBt", curr_eq_index);
}
给低延时模式配置一个独立的EQ效果 20230614 FSW

AC701N-demo 1.0.0(patch_05)灯效时长与配置效果不符 20230619 JWK 原因:时钟分频代码没有同步完全
修改如下:


AC701N-demo 1.0.0(patch_05)PG8口做按键不起作用 20230703 LJW

AC701N-demo 1.0.0(patch_04)配置AD按键无作用 20231020 JWK 原因:发布版本的时候改了工具布局,代码没有对应修改,导致格式不对应
修改方法:

dongle接PS4声音小的问题 20231120 FSW

AC701N-demo 1.0.0(patch_05.11)以后,改蓝牙通话类型报错 20231227 CKS usb audio的节点改成跟蓝牙通话一样

AC701N-demo 1.0.0(patch_05.18)使能透传,软关机异常死机 20240122 LJW 替换库文件:
btctrler-TWS耳机_AC701N-demo_1.0.0(patch_05.18)_-修复使能ble关机死机.7z可视化SDK关机后DAC没有设置高阻问题 20240126 FSW 仅对以下版本以及更旧版本有效,其他版本需测试
定义下面的函数,底层会自行调用
void hw_close_dac(void)
{
memset(JL_ADDA, 0x0, sizeof(JL_ADDA_TypeDef));
SFR(JL_ADDA->DAA_CON2, 15, 1, 1);
SFR(JL_ADDA->DAA_CON2, 5, 1, 1);
}
- 可视化实现多带WDRC 20240202 FSW

- JL701N可视化AI和在线调试共存修改 20240221 FSW 同时开启AI和在线调试(ANC、EQ等),会导致在线调试失效,相关SDK为
其他可视化SDK版本也可参考
需要按照下面的流程修改
在spp_online_db.c添加函数
void online_spp_state_cbk_api(u8 state)
{
online_spp_state_cbk(state);
}
void online_spp_send_wakeup_api(void)
{
online_spp_send_wakeup();
}
void online_spp_recieve_cbk_api(void *priv, u8 *buf, u16 len)
{
online_spp_recieve_cbk(priv, buf, len);
}
在multi_protocol_common.c添加函数
void online_spp_state_cbk_api(u8 state);
void online_spp_send_wakeup_api(void);
void online_spp_recieve_cbk_api(void *priv, u8 *buf, u16 len);
void app_spp_recieve_callback(void *hdl, void *remote_addr, u8 *buf, u16 len)
{
log_info("%s %x\n", __func__, (u32)hdl);
put_buf(buf, len);
online_spp_recieve_cbk_api(hdl, buf, len);
}
void app_spp_state_callback(void *hdl, void *remote_addr, u8 state)
{
log_info("%s %x state %d\n", __func__, (u32)hdl, state);
online_spp_state_cbk_api(state);
}
void app_spp_send_wakeup_callback(void *hdl)
{
log_info("%s %x\n", __func__, (u32)hdl);
online_spp_send_wakeup_api();
}
在multi_protocol_common_callback_init函数中添加代码
if (multi_protocol_spp_hdl == NULL) {
multi_protocol_spp_hdl = app_spp_hdl_alloc(0);
if (multi_protocol_spp_hdl == NULL) {
log_info("multi_protocol_spp_hdl alloc err !!\n");
return;
}
}
app_spp_recieve_callback_register(multi_protocol_spp_hdl, app_spp_recieve_callback);
app_spp_state_callback_register(multi_protocol_spp_hdl, app_spp_state_callback);
app_spp_wakeup_callback_register(multi_protocol_spp_hdl, app_spp_send_wakeup_callback);
20. 可视化使用默认音量表(需求自定义音量等级时使用)20240221 FSW 见:自定义数字音量的方法
21. 通话中允许回连和可连接 20240221 FSW JL700N可视化工具问题处理文档.otl
22. 可视化SDK添加高低音接口 20240222 FSW 见:AUDIO相关应用.otl
23. 双BLE做两路RCSP,修改profile以及处理自定义数据的方法 20240229 FSW 以下修改在旧版本(patch05以及部分内测版本)有效,新版本SDK请参考项目帮助文档
1、添加数据接收函数,底层收到数据会调用
void bt_rcsp_custom_recieve_callback(u16 ble_con_hdl, void *remote_addr, u8 *buf, u16 len, uint16_t att_handle)
{
printf("%s %d\n", __func__, att_handle);
put_buf(buf, len);
}
2、修改profile
extern void *rcsp_server_ble_hdl;
extern void *rcsp_server_ble_hdl1;
extern int app_ble_profile_set(void *_hdl, const uint8_t *db);
app_ble_profile_set(NULL, NULL);
app_ble_profile_set(rcsp_server_ble_hdl, multi_profile_data);
app_ble_profile_set(rcsp_server_ble_hdl1, multi_profile_data);
放在下图的位置
24. TWS耳机AC701N-demo1.0.0(patch_05.26)USB扬声器设成24bit,连接Windows电脑播歌,会出现内存泄漏LJW
下面箭头指向处,要选择24BIT
如果使用24BIT,播歌时出现卡顿,需要改一下缓存时间
25. TWS耳机_DONGLE AC701N-demo1.0.0(patch_08)混合馈ANC,连接蓝牙后切ANC,会出现杂音。LTY 原因:连接蓝牙未播放歌曲的情况下会进入低功耗模式,内核电压不对。
修改方法:换CPU库
【金山文档】 cpu(修改701TWS耳机DONGLE混合馈连接蓝牙后ANC杂声问题)
https://kdocs.cn/l/cqi8nX59zs7b
26. TWS耳机_AC701N-demo_1.0.0(patch_05.26)获取已连接手机的a2dp音频编码格式 LJW 修改方法:
第一步,替换btstack.a,rebuild工程。
【金山文档】 btstack_TWS耳机_AC701N-demo_1.0.0(patch_05.26)__获取手机的音频解码格式
btstack_TWS耳机_AC701N-demo_1.0.0(patch_05.26)__获取手机的音频解码格式.7z
第二步,在应用层定义一个函数,该函数底层弱定义。
void user_a2dp_set_configure_code_type(u8 *addr, u32 code_type, u32 priv)
{
printf("%s ,code_type = 0x%x\n",__func__,code_type);
put_buf(addr, 6);
}
27. TWS耳机_AC701N-demo_1.0.0(patch_05.26)单声道自定义音频流使用ThreeD模块无声处理 ThreeD模块只支持立体声输出,如果要用需要使用Channel Merge模块进行声道提取
Channel Merge模块的声道获取需要进行应用层补充,jlstream_event_handler.c如下修改:
static int tws_get_output_channel()
{
int channel = AUDIO_CH_MIX;
if (tws_api_is_connect()) {
channel = tws_api_get_local_channel() == 'L' ? AUDIO_CH_L : AUDIO_CH_R;
}
return channel;
}
static int get_merge_node_callback(const char *arg)
{
return (int)tws_get_output_channel;
}
int jlstream_event_notify(enum stream_event event, int arg)
{
//...原代码
//补充以下代码
case STREAM_EVENT_GET_MERGER_CALLBACK:
ret = get_merge_node_callback((const char *)arg);
break;
//...原代码
}
- 耳机进入sniff待机有概率断开蓝牙修复
osc_change_mode改成1 - BLE属性的Tx Add从public改成random 开adv广播包之前设置ble地址属性
u8 tmp_ble_addr[6];
memcpy(tmp_ble_addr, (void *)bt_get_mac_addr(), 6);
put_buf(tmp_ble_addr, 6);
ble_op_set_own_address_type(1);
le_controller_set_random_mac((void *)tmp_ble_addr);
30. AC701N-demo 1.0.0(patch_05.30)PC audio接苹果15手机通话近端无声 20240426 FSW 按下图修改
31. 可视化SDK使用测试盒配对,会有概率配对不上 20240426 FSW' 按照下图修改

32. GFPS开启相关打印 u8 gfp_debug_enable = 0x03; // BIT(0):printf BIT(1):put_buf
应用层定义该变量后rebuild
33. 701N V100 patch_05_30,本地mic to dac兼容三mic处理 附上Demo链接:3mic产测Demo.rar
修改思路及步骤说明:
由于adc检测的fmt只支持单声道或者LR,因此三麦的数据这里无法直接处理,需要做成双麦处理,adc获取声道数量需要限制到2声道

adc设置fmt的地方也需要做双声道的限制

adc采集输出部分,三麦的数据采集后,抽取其中两通道的数据输出


由于流程输出只有双通道,因此如果要测第三个麦,需要把其中一路数据替换然后输出

产测里面流程图ADC节点的名字需要改成如下

虚拟低音保留低频成分 20240507 FSW 先检查工具是否有配置,有配置就直接改配置即可
没有就改代码
701 patch0531空间音频(不带陀螺仪)数据流控制demo FZF 701N可视化patch0531空间音频流节点控制demo.otl
701 旧版本开机跑初始化如果不播开机提示音且播放其他提示音,会导致tws初始部分不跑 FZF

701N V1.0.0 patch_05.31开启带陀螺仪空间音频,声音异常问题 20240517 FSW 数据流要添加如下节点

701可视化ANC打开风噪检测\智能免摘\ANC自适应,如果左声道的FF或者FB麦配置了通话没有用到的mic通道,默认流程会由于初始化esco adc采集的buffer的大小没算上这个mic的大小,会导致通话复位 FZF ANC类似如此配置:
修改方法如下:
替换adc_file.c
【金山文档 | WPS云文档】 adc_file_fix开ANC风噪检测
https://kdocs.cn/l/cjlPEHqF3ofj701可视化0531 ANC耳道自适应播歌打开后自适应提示音播报结束后播歌无声 FZF 按照如下修改


可视化SDK单左耳或者单右耳使用都是只播了左声道 20240524 FSW 见JL700N可视化工具问题处理文档.otl第42点
可视化0531版本ANC风噪检测立体声配置FFmic顺序不是依次的情况下风噪检测异常修复及立体声头戴支持LR风噪检测都有效 FZF 替换.c
【金山文档 | WPS云文档】 icsd_adt_app_优化ANC风噪检测mic顺序问题
https://kdocs.cn/l/cmpbrcC6i4Gu电脑通话时,手机来电会出现电脑的esco链路被断开 FZF 蓝牙一拖二场景按照这个修改

ANC mic增益进入通话后被改动导致的ANC问题处理 FZF

patch_0531同时开来电报号和按键提示音通话变调问题处理 GFH 来电时,按键接听采样率不对导致声音异常,下版本更新
patch_05_31替换 madia.a处理:
701patch0531来电拨号_按键接听提示音采样率问题处理_20240528.zipANC风噪检测大风下不修改ANC gain导致无效


一拖二状态下,两台手机都在播抖音,耳机音频会频繁切换 20240618 FSW 原理:发现产生了抢播切换行为,就必须等后台静音之后才可以再次抢播


/**
* 0:当前没有发生抢断,允许后台抢断
* 1:已经发生了抢断,需要等后台出现足够长时间的静音后,后台才可以再次抢断
* 2:当前播放检测到长时间静音,允许非静音的后台抢断
* 3:因为2产生了抢断,允许非静音的后台抢断
*/
u8 is_a2dp_switch = 0;
void reset_is_a2dp_switch(u8 flag)
{
is_a2dp_switch = flag;
}
u8 get_is_a2dp_switch(void)
{
return is_a2dp_switch;
}
发现前面执行了抢播行为,先检测后台媒体(被抢的媒体)的静音时间,确认被抢媒体静音后,才允许被抢媒体进行非静音检测(进而允许再次抢播)
printf("%d %d %d\n", energy, detect->mute_packet_cnt, is_a2dp_switch);
if (is_a2dp_switch && is_a2dp_switch != 3){
if(energy < 10){
if(detect->unmute_packet_cnt){
detect->unmute_packet_cnt--;
}
detect->mute_packet_cnt++;
}
else {
if(detect->unmute_packet_cnt < unmute_packet_num){
detect->unmute_packet_cnt++;
}
if (is_a2dp_switch == 2 && detect->unmute_packet_cnt >= unmute_packet_num){
is_a2dp_switch = 3;//当前播放出现长时间静音,且后台不是静音,就允许后台抢回去
}
if(detect->mute_packet_cnt){
detect->mute_packet_cnt--;
}
}
if(detect->mute_packet_cnt < unmute_packet_num){
a2dp_media_free_packet(detect->file, packet);
continue;
}
is_a2dp_switch = 0;//允许后台抢播
}
能量检测完毕,执行抢播时,确认当前有媒体播放,标记为抢播切换行为
int a2dp_player_runing();
if(a2dp_player_runing() && is_a2dp_switch != 3){
is_a2dp_switch = 1;//后台抢断
}
else{
is_a2dp_switch = 0;//非后台抢断,或者因为当前音频静音被抢断,就允许再次抢断
}
后台媒体暂停后,清除标志
部分手机,抖音暂停后数据流一直不停,导致暂停后不能切回被抢设备,需要增加播放中的能量检测,发现当前播放是静音,就允许后台抢回去。



int energy = ((int *)arg)[0];
static int prev_energy = 0;
printf("curr %d\n", energy);
void reset_is_a2dp_switch(u8 flag);
u8 get_is_a2dp_switch(void);
if(prev_energy != energy && energy == 0){//从非静音变成静音
silence_cnt = jiffies + msecs_to_jiffies(TCFG_BT_BACKGROUND_DETECT_TIME);
}
else if(energy){
silence_cnt = 0;
}
prev_energy = energy;
if(silence_cnt && time_after(jiffies, silence_cnt)){//静音了足够长的时间
if(get_is_a2dp_switch() == 1){//已经发生了抢断
reset_is_a2dp_switch(2);//允许后台抢走
}
silence_cnt = 0;
}
701N dongle单次加音量步进大问题 20240620 FSW

701N patch05.33 测试盒OTA升级卡住99%升级失败 20240625 CKS 替换OTA.bin,如果有下面配置项则需要去掉
br28_ota_file.zip部分补丁版本出现SPP在线调试用不了的问题 20240708 FSW 目前发现的版本有701N TWS 一拖二 V1.0.0 patch_05.30/31/32、708N TWS 一拖二 V1.0.0 patch_00.10

tws状态下anc切换提示音不同步问题 20240605 FSW 见:JL700N可视化工具问题处理文档.otl第43点
无法连接在线调试工具 20240713 ZJC 问题原因:
部分patch缺少了spp_wakeup的回调注册,导致设备一直处于SPP send busy,无法发送数据。
解决方案:
将online_spp_send_wakeup()注册到spp_wakeup的回调中执行。
可视化SDK无法连接录音等在线工具,可以连接可视化工具 20240713 ZJC 问题原因:
部分patch开启可视化在线调试,默认只能进行可视工具的在线调试,无法进行外部拓展工具在线调试。
解决方案:
将可视化工具在线调试的功能注释,执行外部拓展工具在线调试。

可视化SDK使用在线录音工具,录音文件为空文件 20240713 ZJC
问题原因:
部分patch在SPP发送数据时出现错误,无法发送数据。
解决方案:
将发送数据的定时器usr定时器改成sys定时器。
ac700N(Patch08)音频流程设置为自定义,连接笔记本电脑后,用windows自带播放器,修改音量后随机出现爆音现象 20240715 CGP 将\SDK\audio\common\audio_dvol.h 的 DIGITAL_VOLUME_LEVEL_MAX 宏改为 对应的音量等级 途中为16


数组可改可不改
55. AC700N/701音乐暂停的时候耳机调不手机音量 
手机调耳机音量
- TWS耳机 AC701N-demo 1.0.0(patch_06),使能ANC_EAR_ADAPTIVE_EVERY_TIME后,不使能通透,切ANC会异常的问题 LJW 修改如下:

- TWS耳机 AC701N-demo 1.0.0(patch_06),导入自适应文件,解析anc_ext.bin,会死机的修改 LJW

//解析anc_ext.bin
static int anc_ext_rsfile_analysis(u8 *file_data, int flen)
{
int ret = 0;
struct anc_ext_subfile_head *head = NULL;
//解析文件长度 = anc_ext.bin 长度 - ANC_EXT_HEAD_LEN
file_data += ANC_EXT_HEAD_LEN;
flen -= ANC_EXT_HEAD_LEN;
while (flen) {
head = (struct anc_ext_subfile_head *)file_data;
anc_file_log("id:%x , subfile_len:%d\n", head->file_id, head->file_len);
if (flen < head->file_len) {
anc_file_log("flen:%d != subfile_len:%d\n", flen, head->file_len);
ret = ANC_EXT_FILE_DATA_FORMAT_ERR;
goto __err;
}
//根据subfile ID循环解析
ret = anc_ext_subfile_analysis_each(head->file_id, file_data, head->file_len, 0);
if (ret) {
goto __err;
}
file_data += head->file_len;
flen -= head->file_len;
}
anc_file_log("%s, suss", __func__);
return 0;
__err:
anc_file_log("%s, error! ret = %d", __func__, ret);
return -EINVAL;
}
TWS耳机 AC701N-demo 1.0.0(patch_06),AI协议tuya打开后不能开机 CGP log显示sm.c死机
修改如下
#if (BT_AI_SEL_PROTOCOL & (GFPS_EN | REALME_EN | TME_EN | DMA_EN | GMA_EN | MMA_EN | FMNA_EN | CUSTOM_DEMO_EN))

AC701 1.0.0 bugfix_06_01,空间音效卡顿变调 CKS 空间音效问题,首先得先升级到bugfix_06_01,基于bugfix_06_01提供一个demo,请与公版bugfix_06_01对比修改
空间音效demo.rar
带陀螺仪的记得根据项目传感器配置和脚位修改,配置方位参数以及测试盒校准
空间音频配置方法.otlTWS耳机 AC701N-demo 1.0.0(patch_06),IO按键和AD按键同时打开的时候,无法用AD按键开机 CGP 原因:这里的代码有逻辑漏洞,IO按键没被按下就直接提前return了,并不会去检测AD按键
解决方法:
将上面的代码段改成下面这样,
限制最大记忆设备数量 void bt_set_max_remote_device_number(u8 number);
AC701 100 P06 DRC不生效 CKS

涂鸦、数传和APP_ONLINE_DEBUG共存的修改 20240730 FSW

#if (BT_AI_SEL_PROTOCOL & (GFPS_EN | REALME_EN | TME_EN | DMA_EN | GMA_EN | MMA_EN | FMNA_EN | CUSTOM_DEMO_EN | RCSP_MODE_EN))

AC701N可视化SDK v1.0.0(patch_05.32)版本,OTA升级失败 20240803 ZJC 问题原因:编译配置中的AMONG_FILE_ALIGN配置会生成一个标志位写到uboot区域中,并对app_core区域进行一定的调整,这个调整会导致文件系统遍历第二个以后的文件会因为偏移量的原因,导致遍历失败,从而会影响到升级的校验。
解决方案:去掉isd_config_rule.c文件中的AMONG_FILE_ALIGN配置。
AC701N可视化SDK v1.0.0(patch_06)版本,PC模式,连接MacBook,微信通话时输入设备会显示两个相同的设备名 20240803 LJW 现象:
修改:

AC701N可视化SDK v1.0.0(patch_06)版本,PC模式,连接Windows PC,麦克风属性的增益最大只显示0.9dB,想让其显示-14~+16dB 20240803 LJW 现象:
修改如下:
AC701N可视化SDK v1.0.0(patch_06)版本,PC模式,连接Windows PC,麦克风属性的增益最大只显示0.9dB,想让其显示-14~+16dB.7zAC701N可视化SDK v1.0.0(patch_06)版本,PC模式,连接Windows PC,控制面板显示的设备名与设备管理器不一致 20240803 LJW 现象:
修改:在apps\common\device\usb\device\descriptor.c下修改product_string[]
AC701N可视化SDK v1.0.0(patch_06)版本,加PDMMIC 数字MIC 和ANC的办法 20240806 CGP 在通话流程里这样设置


AC701N可视化SDK v1.0.0(patch_06)版本, 麦克风音效和离线语音识别同时使用时,语音识别不生效 20240807 ZJC 问题原因:语音识别暂时不支持和其他的开mic的流程同时使用
解决方案:关闭麦克风音效后,重新打开语音识别功能
AC701N dongle 1.0.0 08.06 dongle端开机后概率不回连手机, 20240813 陈耿鹏 btctrler_ac701_dongle.zip
换掉这个库AC701N 触摸按键,软关机状态下,功耗比其他系列高 20240815 陈耿鹏 701内置触摸开关机静态功耗比较大,30ua+。如果要用内置触摸做开关机,建议外挂;如果可以接受用出仓开机的方式,可以用内置触摸
701可视化 V100 patch0531 tws主从切换后,从机没开esco导致的通话无声 替换最新的btctrler.a后bt_tws.c里面如图修改

extern u8 *lmp_get_esco_link_addr(void);
extern int bt_phone_esco_play(u8 *bt_addr);
u8 *esco_addr=lmp_get_esco_link_addr();
if(esco_addr){
bt_phone_esco_play(esco_addr);
}
AC701N可视化SDK v1.0.0(patch_06)版本,加EffectDev节点,播放SBC音频,打断的方式播放一个提示音,音乐恢复播放后,概率性出现卡顿的问题 20240902 LJW 修改方法1:
修改方法2:
EffectDev0节点要放在蓝牙音频同步节点后面。AC701N可视化SDK v1.0.0(patch_06)版本,测试打开SIRI的时候系统有回调了置2,但是又很快置0的问题 20240830 LJW 修改方法:换库
btstack-701-tws-1to2-p06-20240830.zipAC701 1.0.0 bugfix0601,JL自研ANC产测写文件失败 20240904 CKS 把判断条件去掉

可视化自定义SPP UUID增加方法 手机APP的简介和开发流程.otl

AC701N V1.0.0(patch 06)在耳机端和手机端同时操作播放/暂停,有概率会到入耳检测异常,佩戴后上层发了播放指令,手机端一直不会播放。--- 泓毅 分析:用按键模拟入耳检模块发的播放/暂停指令也同样能测到,排除跟入耳检测相关。
原因:现在用那两条OPID_PALY和OPID_PAUSE指令, 库里面其实会有一个取反和转换的流程. 刚好跟外面的一起形成一个"一直发暂停"的情况了。
修改方法:播放暂停指令换成如下这两条
701 V100 patch0531 第一次上电电压不足3.5V后导致vddio 没trim后关机IO口输出电压异常修改 新增修改,关机VDDIO类型不使用trim值

AC701N 可视化SDK v1.0.0(patch05.31)版本,使用打断式播放提示音,切换EQ不起作用问题。 ZJC 问题原因:打断式播放提示音会抢断播歌的音频链路,当提示音播放完成后,音频链路会被重置,导致EQ没有切换。
解决方案:使用带提示音回调的播放接口,在播放完提示音后进行EQ切换。
AC701N 可视化SDK v1.0.0版本,开启BLE的情况下,远端下行通话有popo声问题。 ZJC 问题原因:开启BLE后,在通话时BLE的相关通讯会导致通话丢包,造成远端下行有popo声。
解决方案:将lib_btctrler_config.c中的config_le_high_priority参数改为0。
AC701N V1.0.0(patch 06/patch 06_01)ANC自适应过程有pop声 20241021 FSW 改下数据流,跳过mixer

AC701N V1.0.0 patch06 RCSP OTA到99%出现报错 两种可能:1.写本地数据异常 2.CRC校验失败
替换库修复
OTA升级到99CRC校验异常.rar701N TWS dongle V1.0.0 patch_08.06两个兼容性问题 20240829 1、必现问题:手机先打开录音机启动录音,然后插入dongle,dongle连上耳机之后手机录音没声音
a、手机先打开录音机启动录音,然后插入dongle,dongle连上耳机之后手机录音没声音:
b、插dongle,dongle连上耳机之后,启动手机录音,此时录音正常,然后断开耳机,让耳机重新和dongle连接(dongle一直插在手机上),也会出现手机录音无声问题。
解决方法:
2、概率性问题:耳机连上dongle,dongle插入到电脑,电脑端打开网络播放器,网页搜索歌曲播放,进行测试,耳机端触发按键,比如PP,有概率会出现,耳机端指令发出去了,但是dongle端没有收到的情况,导致指令没法执行,所以实现不了控制
解决方案:替换dongle库:
【金山文档 | WPS云文档】 btstack_ac701_dongle
btstack_ac701_dongle.a701N TWS dongle V1.0.0 patch_08.06实现耳机和dongle单向绑定 20241022 实现功能:耳机和dongle连上后,耳机只回连已连过的dongle,不跟其他dongle配对,dongle则可以配对新的耳机
dongle端的修改





耳机端修改


AC701N可视化SDK v1.0.0(patch_05.31)版本,RCSP OTA升级时播放低延时模式提示音 20241025 ZJC 问题原因:如果开启了低延时模式,RCSP OTA升级时会把低延时模式关掉,但是没有对提示音播放进行控制。
解决方案:根据参数tone_play_enable控制提示音的播放。V100 patch06之前版本实现新版本PCM DELAY节点的方法 FZF AUDIO相关应用.otl

tws出现无连接事件或出现通话无声等问题处理 FZF 可视化默认开发现可连接的函数里面没做主从机判断,可能导致从机也开了可连接进而导致手机连接从机导致异常
确认是否入截图所示两边都打印P字符,如果是,则如下判断
if(get_tws_sibling_connect_state()) {
if(tws_api_get_role() == TWS_ROLE_SLAVE) {
scan_enable = 0;
conn_enable = 0;
}
}
- 701N patch06打开tuya APP编译报错 GFH
处理方法:按右边修改

- 杰理之家APP只修改耳机EQ模式,不修改自定义EQ,会导致耳机第二次开机回连后APP显示的EQ模式不对 20241028 FSW

- 通话中开BLE广播导致通话卡顿修改 20241029 FZF 将ble高优先级关闭,防止ble广播挡esco通信

- TWS耳机AC701N V1.0.0 patch06一拖二AB设备反复切换ESCO链路出现卡住爆RAM的修复 新版本SDK有个esco无收包的补包机制,会导致esco事件还没起来之前,esco解码里面一直补包申请内存导致异常
参考该.c文件
【金山文档 | WPS云文档】 esco_file_修复一拖二esco切换卡住
https://kdocs.cn/l/cfeE8n8CA9kv - TWS耳机AC701N V1.0.0 patch06一拖二AB设备反复切换ESCO链路出现异常修复 esco的delay定时器流程只有添加没有删除,需要补充,否则提示音播放过程出现esco关闭后会出现流程误打开

- AC701N-demo 1.0.0(patch_06)客户做第三方通话算法,如何把adc采样点数从256改成512 LJW




如果你的方案使能了ANC,需要修改如下:
- 耳机连接某些设备(例如飞利浦的电视),在设备上调节音量,耳机音量大小没有变化 20241108 FSW

- 带有产测设备二次校准ANC功能的流程,在ANC参数初始化阶段,需要进行各种增益的参数保护和防异常处理,此处举例ANC的trans gain的防异常处理demo 应用背景:
- anc的通透gain大小,美格信设备会根据样机和金机的ff曲线差异,进行对应的ff gain增益补偿
- ff gain增益补偿后,会对trans gain进行相同大小的gain补偿,因此ff的gain与通透的gain差值是固定的 如图位置在anc读完本地参数后,进行校验

#define FF_TRANS_DELTA_GAIN (-1.0f)//dB
#define TRANS_GAIN_CHECK_FAIL_DB (-2.5f)//db
#define TRANS_GAIN_CHECK_MAX_DB (3.0f)//db
#define TRANS_GAIN_CHECK_MIN_DB (-3.0f)//db
extern float ln_float(float x);
extern float eq_db2mag(float x);
static float mag2db(float mag)
{
float delta = 8.68588924f;
float result = ln_float(mag);
// printf("%s->ln float:\n", __func__);
// put_float(result);
result = result * delta;
return result;
}
static float anc_trans_gain_check(float trans_gain, float ff_gain)
{
printf("%s->trans_gain:\n", __func__);
float cur_trans_db = mag2db(trans_gain);
float new_trans_gain = trans_gain;
#if CONFIG_DEBUG_ENABLE
put_float(cur_trans_db);//没开打印的时候不要打印浮点
put_float(ff_gain);
#endif
if(cur_trans_db > TRANS_GAIN_CHECK_MAX_DB || (cur_trans_db < TRANS_GAIN_CHECK_MIN_DB)) {
printf("%s->gain warning, check\n", __func__);
float cur_ff_db = mag2db(ff_gain);
#if CONFIG_DEBUG_ENABLE
put_float(cur_ff_db);
#endif
//计算新的trans gain,由ff gain-固定差值dB
float result_db = cur_ff_db + FF_TRANS_DELTA_GAIN;
#if CONFIG_DEBUG_ENABLE
printf("%s->get result db:\n", __func__);
put_float(result_db);
#endif
if(result_db > TRANS_GAIN_CHECK_MAX_DB || (result_db < TRANS_GAIN_CHECK_MIN_DB)) {
printf("%s->check again fail!!!, set defaul\n", __func__);
result_db = TRANS_GAIN_CHECK_FAIL_DB;
}
new_trans_gain = eq_db2mag(result_db);
#if CONFIG_DEBUG_ENABLE
printf("%s->set new_trans_gain:\n", __func__);
put_float(new_trans_gain);
#endif
}
return new_trans_gain;
}
AC701N V1.0.0 patch08 dongle回连慢,回连不上 1.回连不上问题,更新库:btctrler_br28_dongle.a
btctrler_br28_dongle.a
2.回连慢问题
原因是有两台手机的回连地址时,开机回连上一台手机后若一直在回连另一台手机且连不上,要回连超时后才开始连接dongle导致回连dongle慢,可根据需要修改回连逻辑处理AC701N V1.0.0 bugfix06.01,LSM6DSL带陀螺仪空间音效,采样率不对 20241120 CKS 注释下面这个地方

AC701N V1.0.0 patch_05.31 RCSP连接IOS APP,主机入仓,从机主从切换后无法与APP通讯 20241121 ZJC
替换最新(bugfix_06.01后修复)的btstack.a和btctrler.a
修改入仓充电判断。

BLE改为非中断方式同步信息到从机。

AC701N V3.0.0 PDM mic 可视化SDK比非可视化SDK测的mic曲线,高频部分会掉下来 20241123 CKS PDM相关寄存器改成和非可视化的一样


AC701N-demo 1.0.0 (patch 08.06),升级后VM被擦除 20241126 JWK 1.选择支持升级后保留VM
2.耳机SDK中替换该cpu.a
【金山文档 | WPS云文档】 cpu_P0806_添加上获取升级信息.a
https://kdocs.cn/l/ch1vouekAH8I可视化工具配置关机IO输出1,关机\开机过程会出现IO口输出掉电平修复
如图修改,例如这里工具配置PC3关机输出高电平,则手动保护新版本SDK处理一拖二时抖音互相抢播的问题,导致抢播概率失效 20241202 FSW 可以把下面红框内容屏蔽掉,但注意屏蔽后会引发抖音互相抢播的问题(抖音互相抢播的问题是抖音的APP问题,跟耳机无关,耳机只是尽量优化),抖音互相抢播的问题可以参考本文第46点优化一拖二状态下,两台手机都在播抖音,耳机音频会频繁切换 20240618 FSW

701N TWS dongle V1.0.0 patch_08.06,dongle概率性无法同步音量给耳机 20241202 LJW 1、先换给dongle的工程换库,库是701的。
【金山文档 | WPS云文档】 btstack_ac701_dongle_201411261714_修复dongle无法同步音量给耳机.zip
btstack_ac701_dongle_201411261714_修复dongle无法同步音量给耳机.zip
2、添加代码修改,下图框起来的3处地方
701N V1.0.0 patch07.01开启回连电流平衡功能后,影响tws组队 FZF 不清楚回连电流平衡功能的,默认不要开,这个功能需要配合相应的硬件
如下修改:关闭高频打印,且保证流程tws组队后才跑这个回连电流平衡流程
701N V1.0.0 patch07.01开启回连电流平衡功能后,影响回连手机 FZF
如图修改,解决重复注册唤醒源导致的异常701N V1.0.0 patch07.01音乐开24bit,ANC有FB麦,音乐开关ANC曲线会减小12db JWK 临时解决方案:关闭防破音,目前不兼容24bit,后续SDK会兼容

701N V1.0.0 头戴共享耳机,TWS设置左右耳双声道配置 20241207 ZJC 问题原因:使能TWS后,开启a2dp时,会根据左右耳配置音频声道。
解决方案:将声道设置改为混合声道

701N V1.0.0 patch_06超距时双耳声音不同步,变调 20241207 ZJC 问题原因:超距时信号强度差,双耳收到的原始数据可能会出现不一致的情况,导致双耳播放不同步。
解决方案:减少CONFIG_SYCN_INTO_SILENC_THRESHOLD变量的值,当数据不一致时静音,不同步会变成卡顿。
一拖八不识别V300版本SDK的问题
将SDK_VERSION = AC701N_V300改为SDK_VERSION = AC701N_V3.0.0修改ble广播间隔 20241210 FSW

701 1.0.0patch7.01多算法授权库 20241212 LZY 20241212_多算法授权补丁与使用说明.rar
701 1.0.0patch05.33 工具里面两个eq参数差异过大的时候,切换eq过程会引入杂音 20241213 FZF 原因:相同序号的两个eq频率如果差异太大,淡入淡出过程由于跨频率过大会导致声音听起来过渡不自然
解决方法:软件切换参数之前进行eq频率的排序,让相同序号的两个频点的频率尽量接近,淡入淡出过程不会出现曲线不合适的情况
static void eq_file_param_order(int seg_num, struct eq_seg_info *seg)
{
// g_printf("%s->eq_file_index = %d\n",__func__, eq_file_index);
struct eq_seg_info tmp;
for (int i = 0; i < seg_num - 1; i++) {
for (int j = 0; j < seg_num -1 -i; j++){
if(seg[j].freq > seg[j + 1].freq) {
tmp.freq = seg[j].freq;
tmp.iir_type = seg[j].iir_type;
tmp.q = seg[j].q;
tmp.gain = seg[j].gain;
seg[j].freq = seg[j + 1].freq;
seg[j].iir_type = seg[j + 1].iir_type;
seg[j].q = seg[j + 1].q;
seg[j].gain = seg[j + 1].gain;
seg[j + 1].freq = tmp.freq;
seg[j + 1].iir_type = tmp.iir_type;
seg[j + 1].q = tmp.q;
seg[j + 1].gain = tmp.gain;
}
}
}
#ifdef CONFIG_DEBUG_ENABLE
if (!get_charge_online_flag()) {
for (int i = 0; i < seg_num; i++) {
// g_printf("%s:%d------->fre:%d-%d\n",__func__, seg[i].index,seg[i].freq, seg[i].iir_type);
#if FLOAT_DEBUG
printf("gain:");
put_float(seg[i].gain);
printf("q:");
put_float(seg[i].q);
#endif
}
}
#endif
}

- AC701N V1.0.0 当TWS耳机双耳同时关机且触发主从切换时,从机概率性死机 20241213 ZJC 问题原因:从机触发关机注销RCSP,同时主机也触发关机触发主从切换同步RCSP信息
解决方案:如下图
- 701N v1.0.0(patch_06) 测试盒串口升级概率性出现0%,升级失败 20241218 LJW 替换该函数内容:void chargestore_set_update_ram(void)
void chargestore_set_update_ram(void)
{
#if defined(CONFIG_CPU_BR28)
if (1) {
u8 *p = (u8 *)BOOT_STATUS_ADDR;
memcpy(p, "UART_UPDATE_CUSTOM", sizeof("UART_UPDATE_CUSTOM"));
} else
#endif
{
//需要补充设置ram
int tmp;
__asm__ volatile("%0 =icfg" : "=r"(tmp));
tmp &= ~(3 << 8);
__asm__ volatile("icfg = %0" :: "r"(tmp));//GIE1
local_irq_disable();
nvram_set_boot_state(UPGRADE_UART_SOFT_KEY);
}
}
- 700N TWS dongle V1.1.0 patch_13, 测试盒进DUT,连接仪器测试出错包率很高的问题 20241218 LJW 原因:默认SDK进DUT后,没有关闭dongle快连。
修改如下:



- 701 300 patch01.04,ANC自适应测试曲线与理论不符合 20241220 CKS 替换以下两个库文件
ANC自适应测试曲线与理论不符合问题修改.rar - 可视化701V300,开一拖二连电脑和手机,电脑端打开播放器不播放(暂停状态),手机端播放视频或歌曲,电脑播放器会从暂停变播放状态,声音还是手机端的声音 20241220 FSW USER_CTRL_AVCTP_PAUSE_MUSIC

- 可视化701V100,使能IOS一键连接,ble加密配对成功后,想获取经典蓝牙的mac 地址 20241226 LJW

- 701N TWS 一拖二 V1.0.0 patch_06_01出现BLE概率连接失败,失败原因0x3e 20250102 FSW 失败打印如下
需要换下面这个库
【金山文档 | WPS云文档】 btctrler-701-pach-0601-2024-11-13-修复3e错误流程
https://kdocs.cn/l/ciJx3bYCq4O1 - AC701 TWS一拖二300 patch01.07 开启耳道自适应编译不过 20250108 CKS 把这个库删了

- AC701 TWS一拖二300 patch01.07,加入LLNS节点后,音效异常有哒哒声 -- 泓毅 原因:llns内部有缓冲耗时,一直打印‘U’

修改:再现有播放同步的基础上,把播放同步的延时加上 llns一帧数据对应的ms数,44.1k采样率的话对应6ms
122. 701公版SDK,第一次上电,进入poweroff后有漏电 -- LZY
123. 701公版SDK 1.0.0 patch07.01(或3.0.0 patch01.07),开LHDC后,回连小米14pro失败 -- LZY 开启LHDC,手机编码切换到LHDC后,耳机进仓出仓后,音频链路回连失败,小米14 pro上复现.zip
124. 701公版SDK 1.0.0 patch07.01,一拖二笔记本(三星)+手机,笔记本先播放音乐,手机抢播后,耳机按键关机卡死 -- LJW 改大线程栈大小和消息池大小
125. TWS耳机AC701N3.0.0(patch_01.07),获取rssi的接口 LJW
//phone rssi
extern s8 lmp_get_rssi_for_edr_address(u8 *edr_address);
// tws rssi
extern s8 tws_conn_get_rssi();
- TWS耳机 DONGLE AC701N1.0.0 (patch 08.06)dongle模式底噪偏大 JWK

//quantization noise process
s16 *pcm = (s16 *)obuf;
u8 is_mute_data = 1;
for(int i = 0; i < len / 2; i++)
{
if(pcm[i] == 0 || pcm[i] == 1 || pcm[i] == (s16)(-1))
{
;
}
else
{
is_mute_data = 0;
break;
}
}
if(is_mute_data)
{
memset(obuf,0,len);
//printf("mute\n");
}
TWS耳机AC701N_1.0.0(patch_07.01),替换debug版本的uboot后,无法开机 LJW 一般遇到OTA问题时,会替换debug版本的uboot去debug,但是该版本的debug版本的uboot有问题,会导致无法开机。补丁如下:
20250117_JL701N_TWS_release_1.0.0_patch_07.01_uboot_不开机补丁.rarTWS耳机 AC701N_1.0.0(patch_07.01),使能TWS对耳同时操作后,按键单击无效
应用层逻辑问题,如图处理即可TWS耳机 AC701N_1.0.0 版本SDK回连底噪软件优化——电流平衡 ZJC 701在回连过程中底噪声大,可以通过使能电流平衡功能优化
v1.0.0版本:patch_07.01版本开始SDK支持电流平衡功能,需要在earphone.c文件中使能该功能。patch_07.01之前的版本需要改btctrler.a库
v3.0.0版本:默认支持电流平衡功能,需要在earphone.c文件中使能该功能。
注意:701不支持双绑脚使能电流平衡功能,需要使用两个IO引脚短接
TWS耳机 AC701N_3.0.0 版本,patch02.02,开双备份后,带key芯片,无线升级后程序不变 LZY 701 300 patch02.02 双备份升级异常.zip
TWS耳机 AC701N_3.0.0 版本,patch02.02,开杰理之家,ANC切换一轮后没有效果 LZY
