AC695N&AC696N&AC608N音箱问题整理
📎 原始文档:https://www.kdocs.cn/l/cb7ilYoBPohC AC695N&AC696N&AC608N音箱问题整理
前言:本文档整理将以各个SDK遇到的共性问题做整理汇总,可直接根据所使用的sdk版本及功能快速索引相关问题点
问题处理文档:
AC696X软件问题整理.docAC696X软件问题整理.pdf
AC695X软件问题整理.docAC695X软件问题整理_1722249702.pdf
AC608X软件问题整理.doc
入门
- 打印开关
- 总打印
//app_config.h
#ifndef CONFIG_DEBUG_ENABLE
2. lib
//app_config.h
#ifdef CONFIG_RELEASE_ENABLE
#define LIB_DEBUG 1
#else
#define LIB_DEBUG 1
#endif
3. log
//log.h
//等级宏定义0~6
#define __LOG_VERB 0
#define __LOG_DEBUG 1
#define __LOG_INFO 2
#define __LOG_WARN 3
#define __LOG_ERROR 4
#define __LOG_CHAR 5
//等级开关
#ifdef CONFIG_RELEASE_ENABLE
#undef __LOG_LEVEL
#define __LOG_LEVEL 0//xff//有效值0~6 例如设置为0 log等级大于等于0都有打印输出
#endif
//对应接口 与printf接口使用方法一致
//log_v
//log_d
//log_i
//log_w
//log_e
//log_c
模块打印等级开关
4. 带颜色
//log.h
//以下为带颜色的打印接口,注意需要打印等级设置为0
#define r_printf(x, ...) log_i("\e[31m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define g_printf(x, ...) log_i("\e[32m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define y_printf(x, ...) log_i("\e[33m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define r_f_printf(x, ...) log_i("\e[31m\e[5m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define g_f_printf(x, ...) log_i("\e[32m\e[5m\e[1m" x "\e[0m", ## __VA_ARGS__)
#define y_f_printf(x, ...) log_i("\e[33m\e[5m\e[1m" x "\e[0m", ## __VA_ARGS__)
5. 上电时间
//lib_system_config.c
///打印是否时间打印信息
const int config_printf_time = 1;
6. 断言
//lib_system_config.c
///异常中断,asser打印开启
#ifdef CONFIG_RELEASE_ENABLE
const int config_asser = 1;
#else
const int config_asser = 1;
#endif
1. 断言打印相关输出可以参考[串口调试](https://doc.zh-jieli.com/AC63/zh-cn/master/getting_started/code_debug/printf_debug.html)里面的案例判断是什么原因导致断言
2. 断言打印与skd.lst配合查找断言地址与程序api地址
1. sdk.lst生成

//download.c
%OBDUMP% -D -address-mask=0x1ffffff -print-dbg %ELFFILE% > sdk.lst
- 使用USB DP/DM做打印
- 打印引脚设置问DP/DM
#define TCFG_UART0_TX_PORT IO_PORT_DP//IO_PORT_DM //串口发送脚配置
2. 其他与DP/DM有关的功能关掉
//1.关闭pc模式
#define TCFG_APP_PC_EN 0
//2.关闭USB功能
#define TCFG_UDISK_ENABLE DISABLE_THIS_MOUDLE//U盘模块使能
//3.关掉usb 复用
#define TCFG_USB_DM_MULTIPLEX_WITH_SD_DAT0 DISABLE
//4.如果在线调音使用了usb的DP/DM就要关掉在线调音功能
#define TCFG_TOOL_TX_PORT IO_PORT_DP //UART模式调试TX口选择
#define TCFG_TOOL_RX_PORT IO_PORT_DM //UART模式调试RX口选择
//关掉在线调音功能
#define TCFG_SOUNDBOX_TOOL_ENABLE DISABLE //是否支持音箱在线配置工具
#define TCFG_EFFECT_TOOL_ENABLE DISABLE //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL,
- 编译之后升级文件存放路径
- 生成并运行tools下的download.bat

- 确认固件生成的文件位置
- 使用编辑的方式打开tools下的download.bat
- 确认相对位置

- 升级文件

开发注意点
- 各系列升级相关最新版-OTA-bin文件
AC695X (参考):
【金山文档】 20230519-695x最新版ota升级文件
https://kdocs.cn/l/ctZVymYjHLS7
AC696X (参考):
【金山文档】 20230526-696x最新版的ota升级文件
https://kdocs.cn/l/ch453NuDJ0xg
AC696X改去掉判断校验强制蓝牙测试盒部分升级蓝牙名:
福勇改ota.bin 696蓝牙测试盒忽略VM大小限制强制升级蓝牙名.7z
2. 各系列相关的最新库文件
- system.a
| SDK | 日期、修改问题 | 链接 |
|---|---|---|
| AC695N_soundbox_sdk_release_3.1.0 | 2023年10月10日:支持多级目录 | 695_V310_支持多级目录_20231010.zip |
| AC696N_soundbox_sdk_V1.7.0 | 2025-1-15:fget_free_space()函数对FAT12系统返回NULL | 696V170_解决fget_free_space函数.rar 编译不过在lib_system_config.c添加以下定义 |
const int FATFS_WRITE = 0; // 控制fatfs写功能开关。
const int FILT_0SIZE_ENABLE = 1; //是否过滤0大小文件
const int FATFS_LONG_NAME_ENABLE = 1;
const int FATFS_RENAME_ENABLE = 0;
const int FATFS_FGET_PATH_ENABLE = 0;
const int FATFS_SAVE_FAT_TABLE_ENABLE = 1;
|
- btstack.a
| SDK | 日期、修改问题 | 链接 |
|---|---|---|
| AC695N_soundbox_sdk_release_3.1.0 | 2023年9月15日:修改蓝牙音量同步问题 | 【金山文档】 btstack_AC695N_3.1.0_2023年9月15日修改蓝牙音量同步问题 https://kdocs.cn/l/cgo3TXY1x8zi |
AC695N 开发带RTC功能 RTCVDD只能用外部电源如纽扣电池或IOVDD供电

芯片相关寄存器打印
AC695N
- ADDA 寄存器打印值
void audio_adda_dump(void) //打印所有的dac,adc寄存器
{
printf("DAC_VL0:%x", JL_AUDIO->DAC_VL0);
printf("DAC_TM0:%x", JL_AUDIO->DAC_TM0);
printf("DAC_DTB:%x", JL_AUDIO->DAC_DTB);
printf("DAC_CON:%x", JL_AUDIO->DAC_CON);
printf("ADC_CON:%x", JL_AUDIO->ADC_CON);
printf("DAC RES: DA0:0x%x DA1:0x%x DA2:0x%x DA3:0x%x ,ADC RES:ADA0:0X%x ADA1:0X%x ADA2:0X%x ADA3:0X%x\n", \
JL_ANA->DAA_CON0, JL_ANA->DAA_CON1, JL_ANA->DAA_CON2, JL_ANA->DAA_CON3, \
JL_ANA->ADA_CON0, JL_ANA->ADA_CON1, JL_ANA->ADA_CON2, JL_ANA->ADA_CON3);
}
void audio_adda_gain_dump(void)//打印所有adc,dac的增益
{
u8 dac_again_fl = JL_ANA->DAA_CON1 & 0x1F;
u8 dac_again_fr = (JL_ANA->DAA_CON1 >> 5) & 0x1F;
u8 dac_again_rl = (JL_ANA->DAA_CON1 >> 10) & 0x1F;
u8 dac_again_rr = (JL_ANA->DAA_CON1 >> 15) & 0x1F;
u32 dac_dgain_fl = JL_AUDIO->DAC_VL0 & 0xFFFF;
u32 dac_dgain_fr = (JL_AUDIO->DAC_VL0 >> 16) & 0xFFFF;
u32 dac_dgain_rl = JL_AUDIO->DAC_VL1 & 0xFFFF;
u32 dac_dgain_rr = (JL_AUDIO->DAC_VL1 >> 16) & 0xFFFF;
u8 mic0_gain = (JL_ANA->ADA_CON0 >> 8) & 0x1F;
u8 mic0_db = (JL_ANA->ADA_CON4 >> 29) & 0x1; //0db还是6db
u8 linein_r_gain = (JL_ANA->ADA_CON0 >> 4) & 0xF;
u8 linein_l_gain = JL_ANA->ADA_CON0 & 0xF;
printf("MIC_G:%d,MIC_0_6:%d, linein_gain:%d,%d,DAC_AG:%d,%d,%d,%d,DAC_DG:%d,%d,%d,%d\n", mic0_gain, mic0_db, linein_l_gain, linein_r_gain, dac_again_fl, dac_again_fr, dac_again_rl, dac_again_rr, dac_dgain_fl, dac_dgain_fr, dac_dgain_rl, dac_dgain_rr);
}
- 开启AAC格式支持 打开下面的宏定义
#define TCFG_BT_SUPPORT_AAC 1 //AAC格式支持
注意点:
- AC696音箱版本SDK还需要打开(1.5.0SDK及以上才支持AAC) SDK\apps\soundbox\log_config\lib_media_config.c
const int config_aac_dec_use_malloc = 1;
- 695/696 关掉dac的淡入功能 原理:dac stop 的时候不要把音量降到0,这样设置之后可能听感上底噪会变大
//播放音频之前调用
audio_dac_vol_mute_lock(1);
开关之前的dac输出对比(硬件设计原因dac 淡出没法关闭)

共性问题
- AC696N V1.7.0 开启TWS后,连接测试盒无法显示SDK版本号 修改方法:
//重新注册一个回调函数进去
bt_testbox_ex_info_get_handle_register(TESTBOX_INFO_SDK_VERSION,user_bt_get_sdk_ver_info);
//回调函数例子:
u8 *user_bt_get_sdk_ver_info(u8 *len)
{
y_printf("获取版本号\n");
const char *p = sdk_version_info_get();
if (len) {
*len = strlen(p);
}
log_info("sdk_ver:%s %x\n", p, *len);
return (u8 *)p;
}
修改后显示
2. AC696N V1.7.0 开启PINCODE连接后,部分手机无法连接 修改如下:
- AC695N V3.1.0 音箱模式下本地转发概率不同步 问题原因:暂停再播放,数据流程位宽转换节点缺少data_clear处理,导致再播放时缓存未清空。导致不同步
解决:位宽转换节点增加data_clear处理
修改方法:
【金山文档】 AC695N_310_tws对箱播歌暂停在播放不同步问题处理
https://kdocs.cn/l/cqIAFYTMtrbg - AC696N V1.7.0 &AC695N V3.1.0 在线调音出现频率偏移问题 场景1:客户使能了混响并把采样率从44.1K 改成 32K .需要按以下修改修复问题

- AC696 修改方法: 替换库文件,重新编译
【金山文档】 AC696N_1.7.0_eq采样率更新无效导致的频偏问题修正
AC696N_1.7.0_eq采样率更新无效导致的频偏问题修正.zip
(如果打开WAV格式编译失败添加以下代码)
apps\soundbox\log_config\lib_media_config.c
//解码一次输出点数,驻议范围32到900,例如128代表128对点
//超过128时,解码需要使用nalloc,如config_wav_dec_use_malloc=1
const int WAV_DECODER_PCM_POINTS = 128;
// outputi超过128时,如果不使用nalloc,需要增大对应buf
// 可以看打印中解码器希要的大小,一般输出每增加1长度增加4个字节
int wav_mem_ext[(1336+3)/4] SEC(.wav_mem);//超过128要增加这个数组的大小
以上修改后,U盘解码WAV歌曲会出现断言死机,则开启config_wav_dec_use_malloc = 1;

- AC695 修改方法: 打以下补丁:
AC695N_soundbox_sdk_release_3.1.0_无声问题处理.zip
同时将linein点数修改为根据MIC_EFFECT_SAMPLERATE计算后得出,如下图:
- AC608N 部分出现播放U盘音乐文件速度变慢的情况 添加以下修改:
AC608n soundbox sdkv1.2.1、v1.2.2修正部分无晶振芯片频率偏低的问题.rar - AC696N 外挂flash录音TCFG_NOR_REC 范围溢出问题 处理方法:
长度减少8K的长度
- 695 soundbox 3.1.2 文件系统frename 异常 【金山文档 | WPS云文档】 system_BR23_312_优化rename跨簇处理和长文件名处理
https://www.kdocs.cn/l/copHGbehTjEh - 695 soundbox 3.1.2 蓝牙iis从机48K输出偶尔打印iis end
注意:
- 出现 iis end 表示iis tx读空,有断音的情况。加变采样功能、加大缓存可以优化
- 从机模式clk容易收到外界干扰、主机提供的clk不准,这种杂音情况 解决不了
- 建议使用主机模式
代码:
Files · feature_蓝牙iis从48K输出偶尔杂音 · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab
主要修改:
- 加大缓存

- 开变采样

问题处理
USB预读功能开启
总宏开关:
// 如 AC695/696有以下配置
/* u盘预读功能配置, 二选一
* 当两种方式都不使能,则表示不开启预读 */
#define UDISK_READ_BIGBLOCK_ASYNC_ENABLE 0
#define UDISK_READ_512_ASYNC_ENABLE 1
默认SDK会根据解码的格式去选择是否打开预读如下
- AC696N 供电选择(LDO IN & VBAT)
P33_CON_SET(P3_ANA_CON0, 6, 1, 0);// 1: LDO IN 0: VBAT
- AC696N V1.7.0 SD卡电源使用SDPG供电在非音乐模式下,电源会掉问题
- SD卡电源会掉有可能引发AUX检测复用SD卡 IO/AD复用SD卡 IO 等复用SD的应用出现异常 解决方法:不使用SD默认流程的 SD电源控制流程,通过APP层自行控制SD的电源

void sdpg_config(int enable); // SDPG的电源控制函数
注意:新版SDK使能是有挡位设置的。最高4档
3. AC696N V1.7.0 双备份编译报错空间不足
修改方法:
修改ini文件中的FLASH_SIZE 参数
4. AC696N V1.7.0 &AC695 V3.1.0关闭SD低功耗的功能 已经打最新补丁(截止2023年11月8日)
extern void set_sdx_enter_lowpower_disable(u8 dis);
传1, 就会关
cpu_AC696N_170_sd_driver_can_close_lowpower_mode_20231108.zip
AC695_310SDK_update_sd_driver_20231127_cpu(1).zip
AC695N 外挂fm通道 AUX选择修改 原因:SDK默认打开AUX通道,所以会导致FM模式下也会打开AUX通道。原本配置的FM AUX通道没有作用如下
修改方法:
添加判断进行区分AC695N V3.0.6 优化pincode连接问题(使用最新即可) 2024年10月21日-处理部分主机第一次连接卡顿问题
替换蓝牙库
btctrler--695-v306测试发MAX slot C.zip
2024年9月26日- 优化部分主机连接问题AC695N V3.1.0 Linein 采样延时优化 优化后
修改方法:(该修改已经包含《AC695N_3.1.0_tws对箱播歌暂停在播放不同步问题处理》)
【金山文档】 AC695N 3.1.0 Linein 采样延时优化问题处理
https://kdocs.cn/l/cbSrIHKQrzSB
打上该补丁后需要再增加修改如下图:
原因:切换到linein模式后再开麦跑到audio_mic_open时adc中断点数会被修改为32,与mic中断点数不一致,导致通话时死机
AC695N V3.1.0 添加IMA ADPCM编码 添加补丁的内容:
【金山文档】 AC695_3.1.0_加ima adpcm编码补丁
https://kdocs.cn/l/cgbh3cidCir2
- 其中有个变量控制WAV的编码格式
const int const_sel_adpcm_type = 0;//1:使用imaen_adpcm, 0:msen_adpcm
- AC695N EXFAT文件系统 设置文件创建时间失败补丁
| SDK | 下载链接 |
|---|---|
| 3.0.1 | 【金山文档】 system_AC695N_301_2023_6_25_支持exfat创建时间 https://kdocs.cn/l/chYlJ55sQf3h |
| 3.0.4 | 【金山文档】 system_AC695N_304_2023_2_25_支持exfat创建时间 https://kdocs.cn/l/cicOGoy1yhzy |
| 3.0.6 | 【金山文档】 system_AC695N_306_2023_7_26_支持exfat创建时间 https://kdocs.cn/l/cn8fQod8MNMU |
| 3.1.0 | 【金山文档】 system_AC695N_310_2023_4_13_支持exfat创建时间 https://kdocs.cn/l/cgX7ThkllKJS |
如果出现编译报错:
10. 696 文件系统
| SDK版本 | 时间 | 更新信息 | 下载连接 |
|---|---|---|---|
| 170 | 20260618 | fat文件系统,文件写入数据之后立即读取 | system.a |
- AC695N V3.1.0 U盘播放WAV/FLAC/APE等歌曲,进行扫盘操作导致音频卡顿处理 处理方法:按照如下图配置



如果以上还没有解决问题,可能还需要使用到fseek加速。
参数一下SDK:
AC695N_soundbox_sdk_release_3.1.0_U盘播放过程浏览文件卡顿.rar
更新版本的(更换system.a 增加多扇区读写):
AC695N_soundbox_sdk_release_3.1.0_U盘播放过程浏览文件卡顿_(system_a增加多扇区读取)1226.rar
如果编译报错缺少以下变量,需要在外面定义下:
const int FILT_0SIZE_ENABLE = 1; //是否过滤0大小文件
12. AC695N V3.1.0 开启杰理之家功能 参考以下SDK的修改:
AC695N_soundbox_sdk_release_3.1.0_杰理之家.zip
当前分支:
Files · feature_3.1.0_rcsp_smartbox · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab
- AC695N V3.1.0 打开一拖二连上打开一拖二,连上两台手机 A手机播歌,B手机断开蓝牙(没有断开提示音)。会导致A手机播歌的音乐会卡顿一下

修改方法:
btctrler-br23-v310修改断开卡顿.zip
12. AC695N V3.1.0 内置flash录音修复打断播放无法播放问题
- 实现内置flash录音播放
修复:
a.结束录音,后再播放无法播放问题。
(录音文件长度信息被修改导致无法播放)
相关代码
int user_rec_is_read_only; //内置录音读标志
//判断如果只读关闭文件时,不更新文件信息。
if (user_rec_is_read_only) {
//file_h->crc;
// pfile->len = pfile->w_len;
pfile->rw_p = 0;//sizeof(PHONE_RECFILEHEAD);
pfile->pfs->index.index = pfile->index.index;
pfile->pfs->index.sector = pfile->index.sector;
user_rec_is_read_only = 0;
return pfile->w_len;
}
- AC695N V3.1.2 开启歌词显示功能后蓝牙测试盒子升级失败问题 参考以下修改:
2024-05-27_312版本加支持多芯片升级补丁.rar - AC695N V3.1.2 iphone手机首次连接小度APP成功,关闭手机蓝牙再打开连接小度APP,会连接不成功问题 问题原因:
加GFP的代码影响,MTU设置小了。两种方法修改,可以关闭GFP功能去掉 google_fps.a ,不编译。另一个是替换新的google_fps.a。GFP那里重新重新配置了MTU,然后手机拆包发过来,就出现了那个解析error。但是我重新拼包正确解析之后应答了一两次,手机又不发数据过来了。就只能还原原来的MTU处理了,发语音识别的时候对这个MTU也有要求不能太小
修改:
替换以下库文件,然后rebuild
google_fps-修复关闭GFP后还有一些初始化.zip - AC696N 170 SDK 添加music lrc歌词获取工能时有概率会出现获取到的歌词会带有歌词时间信息 原因:歌曲标签保存到flash时地址非4k对齐导致数据被修改,程序运行过程中的擦除是4k对齐擦除。
现象:
demo(库有开打印,如需关闭库打印使用该库):
下载包、gitlab(注意切换为feature_lrc分支并更新子模块)
- ui_dot-歌词获取加写入标签到flash打印库
- 获取歌词时看写入flash的起始地址是否为4K对齐(能被4096整除)
- 如果出现如下截图非4k对齐(不能被4096整除)地址519936(十进制)
在ini文件添加4k强制对齐
FORCE_4K_ALIGN=YES;//flash强制4k对齐
![]() | ![]() | ![]() |
|---|
- 主控里面的程序是256对齐,如果此时需要使用SD卡升级为4k强制对齐的程序还需要在ini文件中添加 注:目前发现有些SDK使用了此方法升级插SD卡一直复位,升不了级不推荐。
SPECIAL_OPT = 0;// only generate one flash.bin
如果是c文件生成ini在对应的c文件中添加
#if CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE//有该宏定义建议使用宏包住,没有直接添加
SPECIAL_OPT = 0;// only generate one flash.bin
#endif
17. AC696 170 SDK 开启消人声之后提示音没声音 程序包下载地址:
AC696 170 SDK进BLE DUT 只用来调天线测试,不在正常模式下进BLE DUT如下修改

AC695 312 SDK 提示音变速变调 PA10 ADKEY(不接外部上拉),接0欧电阻为测试按键
单击测试变调,双击测试变速
ac695n_soundbox_sdk_release_3.1.2-提示音变速变调.7zAC695N V3.1.0 、AC695N V3.1.2设置低功耗,进sniff状态,耗电大,没进入powerdown mode 原因:在线调试模块,一直返回busy导致无法进入powerdown模式
解决:交换返回值,修改如下:
fget_free_space()函数获取外挂flash剩余容量时候出现异常为0 主要原因是外挂flash的容量较小,FAT系统会自动烧录成FAT12。旧版本的system.a没有支持这个FAT12系统。
解决方法:需要替换system.a库
696V170_解决fget_free_space函数.rarAC695N V3.1.0 &AC696N 1.7.0快速获取蓝牙歌曲播放状态 PS:AC695N_soundbox_sdk_release_3.1.2 SDK 已经有 void user_avrcp_status_callback(u8 *addr,u8 flag) 直接定义就可以。
替换一下库文件
AC695N V3.1.0
br23_btlib.rar
AC696N 1.7.0
696-v170- 加点接口202600306.zip
apps\soundbox\log_config\lib_btstack_config.c 中补充以下常量
const int config_btstask_use_malloc = 1;
const int config_le_sm_sub_sc_bridge_edr_enable = 0;
void user_avrcp_status_callback(u8 *addr,u8 flag)
{
//flag = 0 是暂停,1是播放
put_buf(addr,6);
printf("user_avrcp_status_callback flag = %d\n",flag);
}
- AC695N、AC696N关dac淡入 由于硬件设计原因dac淡出没法设置
关dac淡入设置:audio_dac_vol_mute_lock(1);
关dac对以下情景有优化: - 系统最大与最新音量时以同一个音量等级播放提示音,未关之前dac刚出提示音时的声音大小有差异
- 时长较小的提示音播放,未关之前dac还没完全淡入已经播放完导致dac没有声音输出
- AC695N 开启 PIN_CODE 配对后,手机配对连接困难
减小传入参数,如 set_idle_period_slot(100); (功耗会增加) - 软件开启音量同步连接华为、荣耀手机没有自动开启音量同步 在蓝牙初始化完之后添加set_bt_manufacturer_info(0x004c,0x7100);
case BT_STATUS_INIT_OK:
log_info("BT_STATUS_INIT_OK\n");
bt_status_init_ok(bt);
set_bt_manufacturer_info(0x004c,0x7100);
696、695需要打相关补丁才有该接口
696:
170 SDK
695:
310 SDK
312 SDK
22.AC696N170skd在BT模式下播放高码率wav、mp3提示音,之后蓝牙异常

23.AC695X多路WAV混音, 每个通道独立声音播放, 单独控制音量大小, 各个通道混音在一起输出
24. AC695X TWS本地转发 单声道配置,在打断提示音后,声音变调变慢的问题

25. AC6956C PB2 PB3与PR0和PR1双绑,如果没有使用外挂晶振需要关闭PR0和PR1使能,不然对于PB2 PB3做普通IO和AD检测有影响

p33_tx_1byte(R3_OSL_CON,0); //关闭外挂晶振使能
rtc_port_die(0,0);
rtc_port_pu(0,0);
rtc_port_pd(0,0);
rtc_port_in(0,0);
26. 播放内置录音问题,途中停止后再次播放录音文件的总时长会缩小到停止时候的总时长,或出现异常死机。 查看以下修改点。
【金山文档】 0001-1.-flash
0001-1.-flash.rar
26. AC695_310,对于直接在T卡内解压的文件夹会被UI的文件系统识别为文件,复制进去或者创建的不会。
根本原因:winhex识别也是错误的,系统原因。
修改办法:修改库,在库里面增加对目录项的判断。
福勇修改_695310_文件夹识别为文件问题.7z
27. AC696_170修改tws配对之后的声道
if(tws_api_get_role() == TWS_ROLE_SLAVE){
channel = 'L';//从机L
}else{
channel = 'R';//主机R
}
tws_api_set_local_channel(channel);
28. AC696 断网情况下点击小度,会出现小度提示音前面部分被吞字情况。 点击小度会播放“请检查下网络后再试试吧”,DAC出来听起来变成了“查下网络后再试试吧”,前面的字被吞了,用蓝牙分析仪抓包空中包是可以听得清楚的。
https://pms.jieliapp.com/user/#/workflow/problem/sub?id=1976202961125240833
问题原因:数据流suspend时创建丢数据timer,将所有数据清空。唤醒重播前删除timer,但存在不能及时删除timer的问题。清数据处理改成只清除部分数据
处理方案:
static void abandon_a2dp_data(void *p)
{
u8 *packet;
while ((a2dp_media_get_packet_num() > 10) && (a2dp_media_try_get_packet(&packet) > 0)) {
a2dp_media_free_packet(packet);
}
}
- AC695 310 修改超距后回连,获取不到MAP时间补丁 btstack-695-v310 map 补丁(修改手机超距后回连获取不到时间).zip
- AC696 170 USB DM与SD DATA复用之后 有些U盘插入打印超时 原因:部分U盘在复用时出现没有应答数据给到主控,导致主控超时退出
修改:在出现没有应答的时候发送reset给从机、加大等待延时
测试程序:ac696x_soundbox_sdk-170-USB的DP与SD的DATA复用-部分U盘播放不了.7z
usb没应答导致pend超时返回11:
- AC696 170 特殊m4a文件无法解码 修改方法:
1、更新m4a_tws_lib.a库
m4a库更新补丁.rar
2、按如下截图使能对应三个宏。
3、增加如下三个变量的定义。
const u8 config_m4a_id3_enable = 0;
const int JL_HW_FFT_V = 3;
const int const_audio_m4a_dec16_fifo_precision = 24;

- 696 V170 有TWS情况下 连接谷歌 pixel8、华为P60手机,较大概率连接不上 复现步骤:
音箱上有TWS状态信息,一直在switch状态轮转的时候连接。
问题原因:
谷歌手机连接第一次必定失败+音箱重开可发现可连接失败。
这个谷歌手机第一次连接必定失败,需重新开启可发现可连接,让手机那边回连。但是音箱上状态没有及时更新,导致没有打开可发现可连接,手机回连失败。
解决办法:
更换判断条件
32. 696 V170 AUX打开ADC通道 跟 模拟通道 分时复用后,调音量出现PO 声
AD转 模拟的时候 清空下这个几寄存器。
处理方法:
JL_AUDIO->ADC_CON = 0;
JL_ANA->ADA_CON0 = 0;
JL_ANA->ADA_CON1 = 0;
JL_ANA->ADA_CON2 = 0;
JL_ANA->ADA_CON3 = 0;
- 696 V170 仅选择IIS 输出,通话mic 无声,但是IIS输出是正常的 配置:
解决办法:在mic 打开的时候,供电同步打开
SFR(JL_ANA->DAA_CON2, 19, 1, 1); // VCM_EN_11v
JL_ANA->DAA_CON0 |= (BIT(6) | BIT(5)); //audio vbias dis audio ibias dis vcm dis
SFR(JL_ANA->DAA_CON0, 13, 1, 1); // CHOPPER_CLK_EN_11v
mic 关闭的时候,供电同步关闭
SFR(JL_ANA->DAA_CON2, 19, 1, 0); // VCM_EN_11v
JL_ANA->DAA_CON0 &= ~(BIT(6) | BIT(5)); //audio vbias dis audio ibias dis vcm dis
SFR(JL_ANA->DAA_CON0, 13, 1, 0); // CHOPPER_CLK_EN_11v
在此基础上:通话回音消不掉,且配置成单工模式 近端说话无声
原因: 获取参考数据异常,而单工通话是根据远端声音(参考数据)触发判断阈值是进入单端模式还是双端模式,参考数据异常,误判为远端一直在说话,所以近端mic 无声。
修改办法:增加将IIS 输出数据作为参考数据。
注意若使用AGC 实现单工模式,需要将aec和nlp 使能关闭,不然近端说话会有卡顿,且出现异常打印: (error): <Error>: [AEC_USER]aec inbuf full
公版sdk对比具体文件见gitlab外网链接:
gitlab外网:Files · bugfix_1.7.0_仅IIS输出蓝牙通话mic无声 · SOUNDBOX / 非可视化 / ac696x_soundbox_sdk · GitLab
34. ac696n_earphone_v0.2.0无法回连iPhone16 ac696n_earphone_v0.2.0无法回连iPhone16.rar
资料下载
最新公版SDK(已打补丁):
AC696N
添加以下补丁修改:
1、AC696N SDK FM不停台和漏电联合补丁修改V2
2、关于AC696N SDK对E版、G版和之后的版本芯片兼容说明
3、关于修复AC696N蓝牙地址生成错误(固定地址)的修改说明
git链接:GitLab
【金山文档】 soundbox_696_sdk1.7.0_patch
测试案例:
TWS音箱: git链接:GitLab
【金山文档】 soundbox_696_tws音箱_1.7.0
添加TWS+蓝牙HID独立模式的参考例子
ac696x_soundbox_sdk(feature_1.7.0_TWS音箱加HID).zip
soundbox_695_tws音箱_3.1.0.zip(GitLab)USB IF 认证 #define USB_DEVICE_CLASS_CONFIG (SPEAKER_CLASS|MIC_CLASS)
demo:ac695n_soundbox_sdk-3.1.0-SPEAKER_CLASS&MIC_CLASS-USBIF.7z
耳机参考代码:AC700N_earphone_release_V1.3.0-USBIF-参考代码.zip虚拟RTC时钟 RTC相关应用.otl
高低音调节代码
主要是两个case
#if TCFG_EQ_ENABLE && TCFG_MIC_TUNNING_EQ_ENABLE
case KEY_MIC_EQ_TEST:
printf("KEY_MIC_EQ_TEST\n");
{
static s8 low_gain = 0;
// low_gain++;
// if(low_gain>0)low_gain = -12;
if(low_gain == 0)
{
low_gain = -12;
}else{
low_gain = 0;
}
extern void mic_tunning_eq_update(u8 index, float gain);
mic_tunning_eq_update(0,low_gain);
printf("gain %d\n",low_gain);
}
break;
#endif
case KEY_MUSIC_EQ_TEST:
printf("KEY_MUSIC_EQ_TEST\n");
//************ 高低音测试
// {
// static int low_vol = 0;
// static int high_vol = 0;
// struct high_bass param = {0};
// low_vol++;
// if(low_vol>0)low_vol = -12;
// {
// param.freq = 125;
// param.gain = low_vol;
// mix_out_high_bass(AUDIO_EQ_BASS, ¶m);
// }
// printf("gain %d\n",low_vol);
// }
//*********** EQ文件切换测试
extern void user_eq_change(void);
user_eq_change();
break;
soundbox_695(高低音测试代码).zip
4. AUX当USB mic 立体声输入
关键点:
a.具体修改LINEIN_PC_ENABLE宏定义的内容
b.需要卸载驱动重新安装驱动
soundbox_695(AUX当USB mic 立体声输入).zip
AC696N-2M包SDK(BT box) ac696n_soundbox_sdk_v1.7.0_2M包.zip
AC695N-加llns降噪 AC695N_soundbox_sdk_v310_llns.rar
695 BT模式叠加linein,并且linein的左右声道单独控制音量
AC695N_soundbox_sdk_release_3.1.2-linein叠加到bt模式上并且左右声道单独控制音量.7z
内部:git地址AC695N/AC696N ad io与led7复用 代码:
695:featrue_AD与LED7复用
696:Files · featrue_AD与LED7复用(相对695 添加lienin检测与sd cmd复用)

695 3.1.2SDK串口在线调音 Files · feature_串口在线调音 · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab
695 3.1.2SDK UART0保留调试功能的同时用RX接收数据 Files · feature_sdk_310_UART0_RX · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab
696 170 SDK pc模式下电脑管理自内部flash定义区域 原理:
把内部flash自定义区挂载为fat文件系统,通过fat文件系统进行读写
代码:Files · feature_pc管理内置flash自定义区域 · SOUNDBOX / 非可视化 / ac696x_soundbox_sdk · GitLab
工具:FAT镜像文件生成工具_1.0.11.exe
注意事项:








捕获外部io上升沿、下降沿 中断 相关资料:TIMER.otl
696:Files · case_外部io上下沿捕获(中断) · SOUNDBOX / 非可视化 / ac696x_soundbox_sdk · GitLab
695:Files · case_外部io上下沿捕获(中断) · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab695 310 MUSIC下获取当前播放音频文件名以及所在文件夹名称 Files · feature_music下获取当前歌曲名以及所在文件夹名 · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab
测试接口 music_player_get_cur_name_or_path_test
void music_player_get_cur_name_or_path_test(void){
// 检查是否有正在播放的文件, 没有则跳过
FILE *file = music_player_get_file_hdl();
if (file == NULL) {
return;
}
// fscan_test();
char dir_name[128] = {0};
char file_name[128] = {0};
string_info get[2] = {
{dir_name, sizeof(dir_name)},
{file_name, sizeof(file_name)}
};
memset(dir_name, 0, sizeof(dir_name));
memset(file_name, 0, sizeof(file_name));
music_player_get_cur_name_or_path_utf8(get, GET_STRING_FILE, true);
y_printf(">>>>>>>>1>>>>>>>:file_name = %s\n", get[0].string);
memset(dir_name, 0, sizeof(dir_name));
memset(file_name, 0, sizeof(file_name));
music_player_get_cur_name_or_path_utf8(get, GET_STRING_DIR, true);
g_printf(">>>>>>>>2>>>>>>>:dir_name = %s\n", get[0].string);
memset(dir_name, 0, sizeof(dir_name));
memset(file_name, 0, sizeof(file_name));
// 获取文件名和目录名
// 0: 文件名
// 1: 目录名
music_player_get_cur_name_or_path_utf8(get, GET_STRING_FILE_AND_DIR, true);
r_printf(">>>>>>>>3>>>>>>>:file_name = %s\n", get[0].string);
r_printf(">>>>>>>>4>>>>>>>:dir_name = %s\n", get[1].string);
}
新增文件:


