KDocs 研发资料库
  • 音频技术应用文档入口汇总
  • 杰理WINDOWS环境安装及其他事项
  • LINUX安装和编译
  • Linux环境编译SDK教程(ubuntu18.04)
  • 音频类补丁汇总表
  • 认证资料获取汇总(最新资料后台会更新)
  • 《Hi-Res申请指南v1.0》
  • FreeRTOS 开源协议版本
  • uCOS 开源协议版本信息
  • 各个模块关键资料汇总
  • 软件调试方法
  • Makefile编译
  • 提bug的规范
  • 常规设备使用指导
  • 对外特别发布开发注意点信息汇总
  • AD697X软件问题整理
  • AC700N软件问题整理
  • AC701X耳机软件问题整理
  • 951&961软件问题整理
  • AC104X软件问题整理
  • AC128N问题整理文档
  • 可视化工具调试问题整理
  • 耳机资料汇总
  • AC704N、 AC705N相关应用
  • AC695N&AC696N&AC608N音箱问题整理
  • JL701N音箱问题整理
  • AC692X软件问题整理
  • AC706N音箱问题整理
  • JL701N音箱问题整理(可视化工具SDK)
  • JL703N音箱问题整理
  • JL709N(JL689N)音箱问题整理
  • JL7094系列-入门到进阶开发指导
  • AC210N音箱问题整理
  • 无线麦系列版本支持指南
  • AW32N无线麦问题整理
  • lAD697X&JL701X 无线麦软件共性问题整理
  • AC706N无线麦问题整理
  • AW36N无线麦问题整理
  • AC710X无线麦问题整理
  • 唤醒源获取及唤醒IO设置
  • 电源
  • LVD
  • 长按复位配置方法
  • 低功耗应用
  • TIMER
  • UART
  • SPI
  • 内部FLASH空间添加用户自定义区域
  • IIC
  • GPIO
  • MCPWM
  • SD&U盘
  • 时钟&晶振
  • GPCNT
  • IO口crossbar映射功能
  • 文件系统使用总结
  • 复用应用
  • LINEIN_AUX相关应用
  • IIS音频接口应用
  • SPDIF模式相关(HDMI_ARC、光纤、同轴)
  • PDM LINK
  • 外设相关应用
  • 蓝牙相关
  • 杰理蓝牙距离调试文档
  • TWS耳机配对方式使用及生产把控指南
  • GFP谷歌快连及其认证流程指引
  • 蓝牙发射器(bt_emitter)相关
  • BLE应用
  • 关于提升BLE传输速率说明
  • BLE测试数据
  • MUSIC 模式相关应用
  • MIDI音乐实现
  • PC相关应用
  • FM相关应用
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20250107
  • fm应用详细设计说明书
  • 杰理FM硬件指南-20230315
  • ADC模块
  • AUDIO相关应用
  • 新Tools的音效调试使用
  • 混响应用使用说明
  • 音效调式
  • 音箱耳机低音小音量增强实现方法
  • DAC输出功率调试
  • DAC性能测试指南
  • 针对各类底噪、电流声分析流程
  • 录音相关应用
  • OPUS编解码相关
  • RTC相关应用
  • 升级相关
  • UI相关应用
  • 通话调试流程指南
  • 通话相关应用
  • 省电容mic使用手册
  • 如何测试验证手表通话系统的语音失真 V1.0
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 通话调试问题确定步骤
  • 内置触摸调试指南
  • 低功耗内置触摸介绍V2.2
  • 触摸相关文档
  • AC697X、AC698X内置触摸调试及整改方法V1.0
  • 产测相关应用
  • AC63X BLE DUT测试介绍
  • 兆华序列使用简易说明
  • JL_1T2蓝牙测试盒音频文件更换说明
  • ENC相关应用入口汇总
  • ANC相关应用入口汇总
  • JL DMS通话调试手册-V3.9.4
  • ANC-ENC结构设计要点-20240407
  • 半入耳式ANC耳机器件选型与结构设计指南V1.0
  • JL 耳道自适应调试指南
  • ANC相关问题处理
  • ANC调试文档
  • 评估蓝牙耳机通话上行降噪性能的方法 V1.0 (2)
  • FCC 或者 BQB 认证相关应用
  • BQB profile 测试中常遇到的问题点汇总
  • 蓝牙参数整理20210811
  • 杰理科技认证问题参考
  • 无线音频产品开发指南
  • 无线麦系列从入门到进阶开发指导
  • 量产烧录相关说明
  • 一拖八烧录器远程过程调用说明
  • 量产相关建议
  • EffectTool(eq)调试工具说明文档
  • AC897AD697系列的EQ调试方法-V3
  • 杰理调音指南-20220622
  • 音效模块总结
  • 简要调音步骤指引(可视化)
  • 耳机充电与通信调试指南
  • 充电仓硬件调试指南
  • 充电仓软件问题整理
  • AC951常用说明
  • AC951_AC961_开发板使用说明V1.0
  • 彩屏仓AC982 入门指导及FAQ
  • 蓝牙音频APP相关应用
  • 手机APP的简介和开发流程
  • 蓝牙音频系列-硬件设计指南
  • 静电测试及整改方法-20220706
  • TWS耳机底噪整改指南V1.2
  • 杰理蓝牙距离调试文档
  • 蓝牙RF硬件设计与调试V1.1-20250219
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20241228
  • 音效调试指南
  • 无线话筒K歌音箱标准开发流程
  • 杰理科技 700N TWS耳机产品标准-202303
  • 杰理科技 701N 广播产品标准-202303
  • JL-HAT ANC高效产测自适应
  • 无线话筒测试板使用介绍
  • 一拖八频偏校准使用说明
  • 领夹麦产测工具使用介绍
  • Dongle量产测试说明
  • Dongle+Tws或头戴式 SDK通过工具绑定配对功能说明文档
  • 双麦ENC产测宏配置验证方法 V1.0
  • JL耳机方案麦克风声学测试指令_V1.0
  • JL耳机方案麦克风声学测试指令_V2.0
  • JL_ENC自动测试命令_V0.0.1
  • JL蓝牙测试盒用例说明
  • LDAC自测环境搭建_ubuntu
  • 延迟小板使用手册
  • 杰理库文件的制作及添加实现过程
  • 关于 AC635N&AC636N系列免晶振兼容性补丁 说明
  • 关于 AC63系列VM兼容性修复补丁_20250224 说明
  • 关于 AC632N &AE632N_ 蓝牙& 低功耗兼容性修复补丁 说明
  • AD698N和AC638N电压优化补丁V3说明
  • 关于 AC635N&AC636N漏电和E&G版兼容联合补丁 说明
  • AD698N和AC638N电压优化补丁V2说明
  • 702相关应用
  • 2024-4-30 发布歌词显示SDK开发注意事项
  • BQB RF & FCC 认证测试固件问题汇总及源码
  • BQB profile 测试中常遇到的问题点汇总
  • 进dut测试模式方法及固件
  • 704-频偏修改bin文件合集
  • 701手表BQB PROFILE认证注意事项
  • 认证的干扰规避整改
  • 海外CRA认证报告生成说明
  • JL700N可视化工具问题处理文档
  • JL701X可视化工具问题处理文档
  • JL701N_earphone_release_v1.6.0_ANC 低功耗问题补丁
  • JL708X可视化工具问题处理文档
  • JL709N可视化工具问题处理文档
  • JLstudio可视化工具使用说明
  • 一拖二-串口_蓝牙_app在线EQ、通话参数及调试方式和内置触摸调试
  • 可视化JL701M_DONGLE_SDK添加MIC为发射源
  • 可视化JL701M_DONGLE_SDK添加按键切换usb audio与MIC发射源
  • JL701M_DONGLE_SDK_1.0.0_dongle输入linein输出dac
  • 701可视化_a2dp_to_le_demo说明
  • 耳机系列demo汇总
  • JL7018F&JL7006F_7003F AUX IIS
  • 一键连接应用
  • 普通SDK动态开关一拖二功能
  • 蓝牙分析仪(EllisysBluetoothAnalyzer)抓包例程
  • TWS配对常见应用
  • APP自定义按键的demo
  • AC700N 播歌双EQ DEMO示例及说明
  • AC698V164 MIC与蓝牙音乐共同输出DAC demo
  • 添加第三方算法以及多算法授权流程
  • 空间音频配置方法
  • 普通高低电平TWS耳机控制通讯
  • 入耳检测状态更新demo解析
  • 资源优化(非可视化的SDK)
  • 资源优化(可视化SDK)
  • 翻译耳机、语音识别应用demo
  • 耳机抗干扰问题排查和优化
  • AC698D2 抗干扰优化
  • AC696X软件问题整理
  • AC695X软件问题整理
  • AC695X软件问题整理_1722249702
  • AC608X软件问题整理
  • JL701N_2T1_DUPLEX 应用软件问题汇总
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • AC706N-le_audio-200SDK有线_无线麦录音demo
  • jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
  • 底噪调试
  • AW328A烧录说明
  • 文档合集
  • AC706N_wireless_mic_release_PATCH_20240712 补丁 说明
  • AC706N_wireless_mic_release_PATCH_20240726 补丁 说明
  • AC706N_wireless_mic_release_V1.0.0、1.0.1、1.0.2 补丁 说明
  • AC706N_wireless_mic_release_V1.1.2 中的2T1应用 RX端不绑定配对,TX端实现绑定配对的修改方法
  • 各系列省晶振实现方法
  • iis tx rx说明文档
  • spdif信号
  • 蓝牙电话本
  • 安卓手机同步时间补丁
  • CDC配置
  • PC模式下增加Teams唤起功能
  • 杰理HDMIARC开发实现过程
  • AC701N patch06之前的版本用第三方算法节点实现新版本的pcm delay节点功能
  • (K歌音箱)各SDK音效配置相关说明
  • 长文件录音
  • 点阵屏歌词字库相关(蓝牙歌词,普通歌词)
  • 字模提取工具说明
  • 音箱可视化彩屏-入门到进阶开发指导
  • 彩屏LVGL UI设计及工具使用
  • 使用内部UI框架进行UI调试的系列步骤
  • AD101C使用强制升级工具spi 烧录不了问题处理(测试版本)
  • AD161扩展灯板说明文档
  • 歌词显示器开发注意项
  • 使用硬件数字增益控制通话下行音量(可视化)
  • 杰理小牛产测资料
  • ENC配置说明
  • 通话调试流程指引
  • ANC相关功能demo
  • 无线麦硬件资料汇总
  • 无线麦相关应用
  • 无线麦复杂功能补丁包汇总
  • 无线话筒形态SDK程序&开发经验&问题点分享
  • 双模式结合应用问题汇总
  • 无线麦距离优化案例
  • 无线麦系列中的双工形态(duplex)演变开发对讲机方案开发资料
  • 音箱入门到进阶指导文档(编写中)
  • 蓝牙耳机品控和生产技巧
  • 982过_欠压标志获取异常
  • 如何获取最新涂鸦SDK及库文件
  • 无线话筒K歌音响-调音标准流程
  • 无线话筒产测流程

JL709N(JL689N)音箱问题整理

📎 原始文档:https://www.kdocs.cn/l/ckQr8BHF2SBW JL709N(JL689N)音箱问题整理
前言:本文档整理将以各个SDK遇到的共性问题做整理汇总,可直接根据所使用的sdk版本及功能快速索引相关问题点

开发注意点

  1. 使用IIS功能,需要注意时钟配置 IIS只能固定主频使用
    位置:功能配置-固定时钟频率
    image
  2. 蓝牙PA使能配置
void rf_pa_io_set(u8 tx_io, u8 rx_io, u8 en); 

共性问题

  1. JL709N_le_audio_1.0.0_P00.03版本 sdk 通话音频流修改为IIS输出后回音消除算法不生效
    处理方法:DMA 的 len 需要多乘以4,后续版本已同步该修改点。
    image
  2. latch_reset后,IO在上电后又被Deinit,导致没有保持住IO电平 示例如下:
  • 在power_early_flowing内部,设置保护此io,不要让其再次被开机初始化,导致掉电平
  • 并重新设置一次电平 image
  • 未被保护的所有io,会被power_early_init((u32)gpio_config);函数,重新初始化为高阻态 重点:跟gpio_config变量有关,默认是上电后会全部初始化一次
#define PORT_TABLE(arg)        u32 gpio_confi##arg[6] = {IO_PORT_PA_MASK, IO_PORT_PB_MASK,IO_PORT_PC_MASK, IO_PORT_PF_MASK, IO_PORT_PP_MASK, IO_PORT_USB_MASK}

添加保护相当于,将引脚对应的bit置0,使其不被初始化

  1. 非信令测试通过link_fix_tx_enable接口,设置payload不生效,设置rx mode,接收不到波形文件,收不到包 公版demo如下:
void bt_fix_txrx_api(u8 mode, u8 *mac_addr, u8 fre, u8 packet_type, u16 payload)
{
    bt_dut_api(0);
    local_irq_disable();
    link_fix_txrx_disable();
    if (mode) {
        link_fix_rx_enable(mac_addr, fre, packet_type, 0xffff, 0, 9);
    } else {
        link_fix_tx_enable(mac_addr, fre, packet_type, 0xffff, 0, 9);
    }
    local_irq_enable();
}

修改如下:

  • 设置payload时,需要指定payload_len;后续SDK版本会修改,默认0对应最大len
  • 测试rx mode波形文件时,需要设置lt_addr,范围0-7,一般先设置7进行测试
    void fix_rxtx_lt_addr_set(u8 lt_addr);
    fix_rxtx_lt_addr_set(lt_addr);

image

void bt_bredr_non_signaling_test_rx_mode(u8 *mac_addr,u8 fre,u8 packet_type,u16 payload, u8 lt_addr)
{
    // at_log("edr text rx mode:fre=%d,packet_type=%d,payload=0x%x\n",fre,packet_type,payload);
    bt_dut_api(0);
    local_irq_disable();
    link_fix_txrx_disable();

    u16 payload_len = 0;
    switch (packet_type)
    {
    case DH1_1M:
        payload_len = 27;
        break;
    case DH3_1M:
        payload_len = 183;
        break;
    case DH5_1M:
        payload_len = 339;
        break;
    case DH1_2M:
        payload_len = 54;
        break;
    case DH3_2M:
        payload_len = 367;
        break;
    case DH5_2M:
        payload_len = 679;
        break;
    case DH1_3M:
        payload_len = 83;
        break;
    case DH3_3M:
        payload_len = 552;
        break;
    case DH5_3M:
        payload_len = 1021;
        break;
    }
    void fix_rxtx_lt_addr_set(u8 lt_addr);
    fix_rxtx_lt_addr_set(lt_addr);

    link_fix_rx_enable(mac_addr, fre, packet_type, payload, payload_len, 9); // 最大0xf
    at_log("%s:\n actually_set fre=%d,packet_type=%d,payload=0x%x,payload_len=%d, lt_addr=%d(0~7), Power=9 (0-15)\n",
            __func__, fre, packet_type, payload, payload_len, lt_addr);
    local_irq_enable();
}
  1. JL709N_le_audio_1.0.0_00.07 苹果手机概率首次连接-默认音量不同步问题 - 20250716 CJD 【金山文档 | WPS云文档】 btstack_JL709N_1.0P00.07_修复苹果手机首次连接概率音量不同步问题
    https://www.kdocs.cn/l/cjedFYcFkaCV
  • 替换以上链接的bastack.a库
  • 定义u8 bt_avrcp_sync_music_vol_again_by_timer = 1;变量,用于使能首次连接时,协议栈连接a2dp后,delay再次同步一包音量。 解决苹果手机概率首次连接音量不同步问题
  • u8 need_default_volume = 127/2; 定义首次连接时,同步的全局默认音量值。 可以在任何位置进行全局变量定义。 可以在函数中对此值进行动态修改。 image
u8 need_default_volume = 127/2;
u8 bt_avrcp_sync_music_vol_again_by_timer = 1;    // 使能音量再次同步开关
  1. JL709N_le_audio_1.0.0_00.07/00.08/00.09,删除设备记忆无效,重启后仍能直接连接上-20250808-CJD
  • 问题:689N-le-audio-SDK打开auracast使能后,调用API-bt_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL); 清除信息,恢复出厂设置后,再次开机仍能直接连接上手机
  • 解决方案:
// 执行以下删除Link_key
delete_link_key(NULL, get_remote_dev_info_index()); 

// 执行以下刷新VM从RAM到存储
        if(get_vm_ram_data_used_size())
        {
            vm_flush2flash(0);
        }

image

  1. 709N_le_audio_00.08_SDK或者其它patch,超距不回连问题 - 20250901-CJD 公版流程原因如下:
  • 超距后,无论是使能或者失能,都会执行对应的句柄函数conn_state_handler,当前如果没有连接,则不会回连。改为了打开可发现可连接 image 修改如下:分别在每个Case增加如下回连操作
    image
                //  为不影响原有流程,判断如果是超距且有回连目标的情况下,执行回连操作
                if (have_page_device) {
                if (page_timeout) {     //回连超时插入2s手机的可发现可连接
                    printf("%s %d\n", __func__, __LINE__);
                    page_timeout = 0;
                    g_dual_conn.timer = sys_timeout_add(NULL, tws_wait_conn_timeout, 2000);
                } else {
                    write_scan_conn_enable(0, 0);
                    dual_conn_page_device();
                    printf("%s %d\n", __func__, __LINE__);
                }
  1. RCSP - TWS配对成功后,音箱与手机APP连接断开(BLE连接断开)2025-09-CJD 原因:rcsp协议代码-在TWS配对成功后,没有判断当前是否有手机连接,直接重新更新BLE-Mac地址,并且主动断开BLE-关开广播,导致了APP断开
    修改方法:
    其中一个修改方案如下所示:(rcsp_bt_manage.c文件)
    在TWS配对成功后,判断如果有手机连接,则不刷新BLE地址。不执行断开BLE,重新关开广播的操作。
    另外方案:可以增加宏,如果是使用的非公共地址且是TWS主机,那么不执行相关的操作。
    image

  2. TWS主从退出组队,手机马上点击连接音箱显示要重新配对,配对记录被清除。(音箱打印Linkkey Lost)2025-09-CJD 根本原因:

  • tws断开后,从机还没刷新为本机地址,还是使用的主机tws地址
  • 从机先于主机打开了可连接,此时用户点击连接,连接上的是从机,导致没有Linkkey,提示忽略设备/重新确认配对 详细原因:
  • TWS断开时,由于HCI层的事件先于TWS_EVENT_CONNECTION_DETACH事件出现,先执行了一次tws_dual_conn_state_handler()函数。导致TWS从机在此处打开了可发现可连接。(但此时从机仍然配置的是 TWS地址,也就是主机的地址)
  • 如下图所示
  • 在收到TWS_EVENT_CONNECTION_DETACH事件后,刷新为本地Mac地址,但并没有关开可发现,导致实际上广播并没有更新 imageimage 解决方案:
int bt_tws_connction_status_event_handler(int *msg)
{
...
    case TWS_EVENT_CONNECTION_DETACH:
...
#if CONFIG_TWS_USE_COMMMON_ADDR == 0
        lmp_hci_write_local_address(bt_get_mac_addr());
#endif
...
// 添加以下
        if (role == TWS_ROLE_SLAVE) {
            // 如果是从机,则先关闭一次可发现可连接,后续再在tws_handler重新打开
            // 避免在write_local_address更新的本机地址没有刷新生效,导致与主机同地址
            bt_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL);
            bt_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL);
        }

image 9. le_audio-JL709N-1.0.0-AC689N-demo-patch_00.12 蓝牙PA接口未定义。 使用以下接口,没有aurcast需要在其他模式广播的,在退出蓝牙模式的时候关闭。
有其他模式广播的情况,需要确保下面的接口只初始化一次。
image 10. OTA重启后,手机音量没有记忆-le_audio_JL709N-20251031-CJD 解决方案:

  • 升级前手动更新一次协议栈保存的音量。开始升级后,会关闭写VM使能,无法写入VM
  • 在升级前调用以下函数,bt_save_vol_before_ota,入参为手机地址
void bt_save_vol_before_ota(u8 *addr)
{
     u8 dev_vol = bt_get_music_volume(addr);
extern void update_to_save_in_btstack(u8 *dev_addr, u8 info_type, u8 data);
    update_to_save_in_btstack(addr, 4 , dev_vol);

    // 不是必须的,但需要保证在失能写VM前,让btstack成功写入VM
    os_time_dly(10); //延时100ms,等待btstack接收消息写入vm
}

// 一拖一时
u8 *save_addr = get_cur_connect_phone_mac_addr();
bt_save_vol_before_ota(save_addr);

或者可以改为升级前,手动断开A2DP/HFP通道,只保留SPP/BLE

原因:底层协议栈保存的音量,只有当手机蓝牙断开时,才会写一次VM。避免频繁写加大写flash压力
而正常关机时,会先断开蓝牙,再关机,所以可以保存音量。

  1. local_tws音频流,在TWS连接模式下,无法设置立体声 local_tws音频流默认有channel_merge节点,节点的声道分配在jlstream_event_handler.c文件
    注释代码如下图所示,则可以在tws模式下输出立体声。
    自定义声道配置可以通过添加steromix节点进行设置
    image

  2. local_tws,主机在非BT-本地模式,从机在BT模式,进行TWS配对,概率出现模式不同步,从机无声-20251031-CJD 主机在iis模式 与 从机tws配对上后。主机在iis模式,从机还在蓝牙模式,没有相应地切换到sink模式。
    由于从机本地时间戳比主机大,导致没有响应进入SINK模式,从机无声。

        if (__this->cmd_record == CMD_TWS_ENTER_SINK_MODE_REQ || __this->cmd_record == CMD_TWS_BACK_TO_BT_MODE_REQ) {
            if (__this->cmd_timestamp > cmd_timestamp) {        //如果当前发送的命令的时间戳比对方请求的大,则不响应
                log_info("local timestamp > remote timestamp!\n ");
                break;
            }
        }

image 修改:
收到TWS断开事件后,主从两端清零本地保存的local_tws时间戳
image 13. 蓝牙发射器连接不上部分机器,部分机器连接上无声(JBL Go4)。 连接不上:发射器搜到了设备page状态没有取消
image 没有声音:音响那边需要组包发送
image

  1. app_msg.h的消息体超过255,u8变量的限制后。部分按键操作会执行两个事件 image bt_app_msg_handler里面使用了u8变量赋值。导致处理键值消息溢出。 修改为:
    image

  2. PAwR 主机BLE连接时被马上异常断开,打印 [LE-CLIENT]drop adv_report!!!43, 问题现象:
    概率测到一种异常情况:
    1、广播主机刚刚连接上从机BLE,然后底层马上出来一个 att disconn断开事件。由于无线干扰导致的0x3e断开BLE
    2、接着ble_client_work_st状态变为 断开->重新扫描状态 0x40
    3、这时又回调出一个 user_client_multi_report_search_result 搜索服务事件,打印find target_handle
    4、然后直接又变成 0x43连接上。 然后状态就乱了,一直打印drop adv_report!!!43
    [00:00:28.480]att disconn
    [00:00:28.480][LE-CLIENT]HCI_EVENT_DISCONNECTION_COMPLETE_client: 3e
    image 根本原因:
    BLE由于干扰导致的断开后,异步线程仍然会在应用层回调user_client_multi_report_search_result-搜索结束事件,触发状态机从搜索中又变成了BLE链路连接。 状态机管理错误。
    有干扰的话0x3e断开 一次是正常的 但应该会立马重新开scan 如果持续出现0x3e的话就是有问题
    修改方法:

void user_client_multi_report_search_result(search_result_t *result_info)
{
    //  增加以下,应用层做处理,如果已经断开了,则直接返回
    if(!client_con_handle[cur_dev_cid]) {
        // 20251202:修复BLE连接时由于无线环境干扰引起的0x3e断开,导致状态管理错误,主从概率无法组队上问题
        // 此时直接返回,重新开scan连接
        log_info("client_report_search_result: con_handle not found!!!\n");
        return;
    }

image 16. JL709_le_audio_1.2.0 维持io,U盘升级产生断言和升级成功不复位重启 20251211 TP 更换OTA文件,解决不复位问题
OTA_BR52_20251211.rar
注释掉CPU的挂起:
image 根本原因:
在cpu_suspend_other_core(CPU_SUSPEND_TYPE_UPDATE),会将另一个核挂起而latch_reset接口驱动里面也执行了挂起了另一个CPU。
17. JL709_le_audio_1.2.0 & 1.3.0 杰理OTA升级在回连BLE时回连失败导致升级失败 修改方法:更换OTA文件ota_修复杰理ota升级.zip,并在isd_config_rule.c中添加以下代码
image

EXIF_ADR = CONFIG_EXIF_ADDR;
EXIF_LEN = CONFIG_EXIF_LEN;
EXIF_OPT = CONFIG_EXIF_OPT;
  1. JL709_le_audio_1.2.0 使能PAWR后,蓝牙模式切到其他模式大概率死机 根本原因:重复free
    解决方法:
    添加以下代码
    le_multi_client_hdl[i] = 0;
    image
le_multi_client_hdl[i] = 0;
  1. JL709_le_audio_1.2.0 IIS 输出 + PC MIC 加入单 MIC 通话算法上行无声 音频流:
    (注:24 bit 位宽使用,16bit 位宽去掉 BitWidth Conver 节点, 播放同步节点延时 50ms)
    image 解决:
    imageimage
u8 pc_mic_is_open(void)
{
    return (g_pc_mic_state == PC_MIC_STA_OPEN);
}
#if TCFG_AUDIO_CVP_OUTPUT_WAY_IIS_ENABLE && (defined TCFG_IIS_NODE_ENABLE)
    extern u8 pc_mic_is_open(void);
    int iis_sample_rate = audio_iis_get_sample_rate(audio_cvp_ref_iis_hdl_get());
    if (pc_mic_is_open()) {
        audio_cvp_ref_src_open(STREAM_SCENE_PC_SPK, iis_sample_rate, fmt->sample_rate, 2);
    } else {
        audio_cvp_ref_src_open(hdl->scene, iis_sample_rate, fmt->sample_rate, 2);
    }
    printf("%s, hdl->scene %d, fmt->sample_rate %d, iis_sample_rate %d", __func__, hdl->scene, fmt->sample_rate, iis_sample_rate);
#endif
  1. JL709_le_audio_1.2.0 一拖八 烧录器中 提示是 需要选择689的才能导入 image 需要修改为 709芯片的标识,如下图:
    #define CONFIG_CHIP_NAME JL709N
    #define CONFIG_PID JL709N
    image

  2. JL709_le_audio_1.2.0 修复从机数据被覆盖问题 使用接口static void ble_pawr_tx_update_adv_data(const uint8_t *data, uint16_t len) 更新主机发送广播数据,在一定周期后,从机接收的广播数据会被重置成默认的数组数据pawr_tx_vendor_padv_data,没有办法维持设置的数据
    imagebtctrler_709-v120_修复从机数据被覆盖问题.zip

  3. JL709_le_audio_1.2.0 开广播连蓝牙播歌,打断播放提示音异常问题 根本原因:提示音打断本地播放后,时间戳不连续,需要添加补包处理
    解决方法:对比公版修改以下文件
    709-120修复开广播+蓝牙播歌+播打断提示音异常.zip

  4. JL709_le_audio_1.2.0及之前SDK,概率出现VM-id写入数据,重启后没有保存的问题——20260207-CJD 根本原因:vm模块的问题,vm模块会检查数据相同就不写到flash了,而vm_flush2flash接口刷新数据到flash时传入了带偏移的地址,导致对比的数据一直都是不正确的,有概率撞中,特别是1byte数据,撞中概率是1/256
    解决方法:更新vm.a
    已由远钦上传到服务器的manifest_dev/base/le_audio_develop分支,如有需要,可由远钦根据实际的分支重新导出库

以下为vm.a下载链接,适用于709N-le-audio-SDK
【金山文档 | WPS云文档】 vm_修复ram刷新到flash概率失败问题_20260206_yuanqin
https://www.kdocs.cn/l/ckzhRzWRXxby

  1. 公版SDK:Auracast+PAwR模式或者其它BLE模式下压测概率出现死机,报hmem err msg : wl access hmem excption at dev id: 0x000000AB DBG_BT_BLE——20260207-CJD 根本原因:btctrler.a底层部分有互斥点没有锁保护,这个是蓝牙外设访问到非法内存,异常log分析不了太多东西。主要还是得看一下蓝牙的dma寄存器是不是使用了错误的buffer
    修改方法:底层的临界区代码增加锁保护, 叫觉栋或者俊豪根据当前实际分支导出相应的库

  2. JL709_le_audio_1.2.0 PC模式下有些电脑播放会死机 测试程序:709 le1.2.0sdk PC模式下死机、叠加iis(从机模式)卡顿 .7z
    修改uac_sream.c
    image

    if (uac_speaker->spk_double_buf) {
        if (len > uac_speaker->max_len || len < uac_speaker->min_len) {
            log_error("len err %d %d %d\n", len, uac_speaker->max_len, uac_speaker->min_len);
            return;
        }
  1. JL709_le_audio_1.2.0 PC模式下叠加IIS(从机模式)会卡顿 测试程序:https://www.kdocs.cn/l/ckQr8BHF2SBW?linkname=yOJ9v8p8pJ
    注意:PC叠加IIS(从)时需要主机IIS一直保持clk信号
    AC706N IIS主机在没有数据输出时需保持CLK
    JL701N le audio IIS(主)TX 保持CLK
    现象:在PC初始化完之后再调用iis_start()打开IIS输入会出现一直打印U同时有卡顿伴随
    image 处理方法:
    image

  2. 概率出现PAwR主机无法收到PAwR从机的响应数据,从机或者主机重新进入一次广播模式后,能够恢复正常 - 20260305 CJD 原因:

  • 主机开BIS的前几个周期没有及时更新pawr数据,导致从机没扫到。
  • 公版流程为先Create BIS,再执行PAwR-TX-init 修改为:
    app_auracast_source_open -> app_speaker_start_pawr -> auracast_source_create 的流程顺序
    imageimage
  1. JL709_le_audio_1.2.0 Auracast-TX修改加密密钥-从机21分钟后同步不上主机-20260511-CJD

原因:Auracast主机有个计数变量,21分钟就会溢出导致异常,从而从机同步不上。

修改方案:
替换以下btctrler.a库:觉栋提供
https://www.kdocs.cn/l/crVPojCQll4q
并修改代码:规避一个死机问题
image 附上TX修改加密密钥测试代码:

// TX广播模式下-通过事件调用以下,修改密钥
void user_modify_auracast_source_info(void)
{
    printf("last source info:\n");
    printf("last_user_broadcast_code:%s\n", user_config.broadcast_code);
    printf("last_user_broadcast_name:%s\n", user_config.broadcast_name);
    printf("last_user_broadcast_id:%x\n", user_config.broadcast_id);
    printf("last_user_encryption:%d\n", user_config.encryption);

    // 修改code为5678,修改name为"JL_Auracast",修改id为0x12345678,修改加密为1
    sprintf(user_config.broadcast_code, "5678");
    sprintf(user_config.broadcast_name, "JL_Auracast");
    user_config.broadcast_id = 0x123456;
    user_config.encryption = 1;
    printf("new source info:\n");
    printf("new_user_broadcast_code:%s\n", user_config.broadcast_code);
    printf("new_user_broadcast_name:%s\n", user_config.broadcast_name);
    printf("new_user_broadcast_id:%x\n", user_config.broadcast_id);
    printf("new_user_encryption:%d\n", user_config.encryption);
    app_auracast_suspend();
    app_auracast_resume();
}
  1. JL709_le_audio_1.2.0 - SPDIF-OUT输出,开启广播模式后,声音异常,一直打印spdif_master_isr里的putchar('D') - 20260407-CJD
  • 先基于709-120公版移植廷阳的git修改后: image

    • 内部链接:http://192.168.1.245/freebrand/support/visualization/le_audio/jl709nle_audio_1.0.0/-/tree/spdifout-jl709n_le_audio_1.0.0
    • 外部链接:Files · feature_spdif · JL-Studio / Leaudio / 709N / JL709N_le_audio_1.0.0 · GitLab 重点注意:
      1、A2DP-RX需要转本地时钟;
      2、配置SPDIF和DAC同时输出时,DAC必须要在音频分流器节点的最下面的节点,DAC必须要主设备,SPDIF节点配置为从设备(所有模式的配置页都要配置)
  • 基于以上再修改如下所示: image

  1. JL709_le_audio_1.2.0 关闭通话开启仅电量显示宏后,连接蓝牙30S左右断连,部分苹果手机挂断电话后打印不断。 现象:异常打印:
    image 处理办法:
    btctrler_棉鸿_觉栋_修改709120_开仅电量显示宏后异常问题.7z
    修改没有自动跳转给手机通话链路:
    image

  2. JL709_le_audio_1.2.0 部分环境干扰较大时 aruacast sink 扫描状态下连接 ble 导致的 edr 出现 lmp timeout 断开 异常 log:
    image 处理补丁:
    JL709_le_audio_1.2.0_btctrler_20260607.zip

问题处理

  1. JL709N_le_audio_1.0.0_P00.07 蓝牙后台其它模式播放中-唤醒安卓手机语音助手-识别完后播放手机端的语音不完整(苹果手机测试正常) - 20250705 CJD 公版流程以及安卓手机的SIRI流程说明:
  • 在Linein或者本地音乐模式播放中,用户发送启动SIRI命令,手机端启动SCO流程后。 音箱会判断是由于通话启动的原因,返回蓝牙模式。 同时启动定时器,轮询检测如果通话状态结束后,会立即返回本地模式
  • 苹果手机的SIRI是一直处于通话状态。 但是安卓手机的语音助手分为两个阶段:
    • 阶段一是使用sco链路作语音识别
    • 阶段二是:语音识别后播放,这个过程使用A2DP进行播放 问题原因:在安卓语音识别后,音箱就切换回本地模式,导致丢掉了部分播放。接着又因为蓝牙播放能量,抢占回到蓝牙模式,接续播放
      修改如下:判断如果远端是安卓手机,且是语音助手引起的切回蓝牙模式,则不启动通话后台返回检测
      image
if (g_bt_hdl.background.backmode == BACKGROUND_GOBACK_WITH_PHONE && g_bt_hdl.background.goback_mode != APP_MODE_SINK) {
        log_info("bt_background_goback_with_phone\n");
         // 如果是安卓手机,且是语音助手引起的切回蓝牙模式
         // 那么则不启动定时检测 通话状态,避免安卓手机语音助手刚识别完,通话状态结束,就马上切回Linein模式
        if(app_var.siri_stu && app_var.remote_dev_company == 0)   
        {
            // 有个现象注意:
            // 安卓手机如果没有手动关掉助手界面,那么返回Linein模式会较晚,因为手机端没有触发A2DP_STOP
            // 设备需要随时响应,用户可能接着点击 连续说话
            // 如果用户手动关掉了助手界面,那么返回Linein模式会较快,正常
        }
        else
        {
        background_goback_with_phone();
        }
    }
  1. 修改系统模式音频流为IIS+DAC叠加输出时,同时叠加开机有耗时操作时,出现开机播放提示音杂音的优化 image 提示音解码帧长改成20ms
    if (info->scene == STREAM_SCENE_TONE){
        info->frame_time = 20;
        info->task_name = "file_dec";
    }

提示音改双线程堆数

    jlstream_add_thread(player->stream, NULL);
    jlstream_add_thread(player->stream, NULL);

提示音改双线程以及解码帧长改成20ms,测试开机提示音播空可以解决。
弊端是播提示音时会增加ram的消耗。
image

  1. 使能单MIC通话,PC模式开Auracast广播-PC打开语音通话,报RAM不足死机,vmalloc_ 147 一、根本原因:
    PC MIC通话算法占用RAM资源多,与Auracast一起打开会有RAM不足的问题
    二、处理方案:
    基于公版增加流程:
    1、在pc_mic_recoder_open前,挂起广播
    2、在pc_mic_recoder_close后,恢复广播
    imageimage

案例分享:(仅作为功能演示demo使用)

  1. iis输出配置 jl709n_le_audio_1.0.0-p0007-iis-dac输出.7z
    注意:全局采样率需要设置48K不然会报需要把主频设置为192MHz
    imageimage 配置iis io引脚
    imageimageimageimage 添加iis节点
    1.把iis节点加入到音频流框图中,如果是多设备同时输出需要设置设备的主从(一般dac为主、iis为从)
    image 2.设置设备的主从
    如果iis设置为从设备、dac设置为主设备播放时声音异常(卡顿、无声)这个bug需要反馈给原厂,暂时可以把iis、dac设置为Disable进行调试(该方法不能用于生产环境)
    imageimage 声音输出时的异常打印
    image

  2. 添加自定义MODE 效果:按键切换模式可以在BT、linein、music、mytask等模式之间切换
    jl709n_le_audio_1.0.0_patch_01_添加mytask.7z

  3. MULTI CH IIS RX,多通道IIS输入节点使用示例

  • 音频流使能勾选和连接对应的通道 imageimage
  • 代码里修改音频流句柄为通过节点名字获取, 节点名字要对应可视化音频流里面的名字。 image
  1. Auracast Dongle UDisk

功能概述

Auracast Dongle UDisk 是一个控制虚拟U盘功能的宏定义,用于在JL709N LE Audio SDK中实现将音频流实时转换为虚拟U盘文件系统的功能。

硬件:

  • 需要搭配 JL7096M系列芯片使用
  • JL7096M Auracast 收发器方案标准原理图

软件:

公版SDK默认有配置Dongle UDisk 的选项
image 对应代码的宏为:TCFG_VIR_UDISK_ENABLE

功能切换消息:APP_MSG_CHANGE_AURACAST_DONGLE_MODE

//auracast_dongle_mode 模式说明
//0、没开广播
//1、开着广播发射
//2、开着广播接收
void le_audio_dongle_sw_mode()

虚拟磁盘实现

文件: SDK/apps/common/fat_nor/virtual_disk.c

  • 主要功能: 模拟FAT32文件系统,处理文件读写请求
  • 关键设备操作:
const struct device_operations vir_udisk0_ops = {
    .init = usb_vir_init,       // 初始化
    .online = usb_vir_online,   // 设备在线检测
    .open = usb_vir_open,       // 打开设备
    .read = usb_vir_read,       // 读取数据
    .write = usb_vir_write,     // 写入数据(空实现)
    .ioctl = usb_vir_ioctrl,    // IO控制
    .close = usb_vir_close,     // 关闭设备
};

设备注册

文件: SDK/apps/common/dev_manager/dev_reg.c
- 主要功能: 将虚拟U盘注册到系统设备管理器

#if TCFG_VIR_UDISK_ENABLE
    // 虚拟U盘
    {
        /*logo*/         "vir_udisk0",
        /*name*/         "vir_udisk0",
        /*storage_path*/ "storage/vir_udisk0",
        /*root_path*/    "storage/vir_udisk0/C/",
        /*fs_type*/      "fat",
    },
#endif

功能流程

初始化流程

  1. 系统启动时,通过TCFG_VIR_UDISK_ENABLE宏启用虚拟U盘功能
  2. 设备注册: 虚拟U盘设备通过dev_reg.c注册到系统 USB读写流程
  3. 上位机读取请求:
    • 通过virtual_file_read函数处理读取请求
    • 从循环缓冲区enc_cbuffer中读取数据
    • 如果数据不足,填充静音MP3数据
  4. 同步处理(如果启用):
    • 监控上位机读取速度与音频流速度的差异
    • 通过调整采样率(sync_d_sample_rate)进行同步补偿
    • 定期检测缓存状态,调整同步策略

数据流向

音频源 → virtual_udisk_handle_frame → 循环缓存enc_cbuffer → virtual_file_read → USB主机
                                                                      ↑
                                                                      |
                                                               USB读取请求

本文档包含以下子页面

Prev
JL703N音箱问题整理
Next
JL7094系列-入门到进阶开发指导