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歌音响-调音标准流程
  • 无线话筒产测流程

AC706N音箱问题整理

📎 原始文档:https://www.kdocs.cn/l/csczbvOSXxbB AC706N音箱问题整理

  1. 前言:本文档整理将以各个SDK遇到的共性问题做整理汇总,可直接根据所使用的sdk版本及功能快速索引相关问题点

开发注意点

  1. 设备升级功能(主要是TF卡、U盘升级),目前文件格式只支持 FAT32 ,其他FAT格式目前无法升级
  2. AC7066A按照公版原理图配置TF卡会复位/不开机问题(会触发mclr复位) image 问题原因:PC1合邦了短按复位键
    解决方案:需要手动关闭短按复位功能,配置以下宏定义,在程序开始时写入0
    image
#define MCLR_EN(en)    p33_fast_access(P3_PR_PWR, BIT(3), en);

烧录器:勾选关闭复位功能
image 3. 频偏修改(参考蓝牙部分频偏修改)

//* 参数使用说明:如果测试盒测试到未修改频偏前数值是+20 ,那么就填bt_osc_offset_set(20);   如果测试到是-20 那么就填bt_osc_offset_set(-20); 
extern void bt_osc_offset_set(s32 offset);  

image 4. 打开OTA打印以及uboot打印的方法

  1. cpu\br29\tools\isd_config_rule.c 修改对应的打印口
//uboot and ota.bin串口tx
// 如果是USB口 设置为 USBDP/USBDM
#ifndef CONFIG_UBOOT_DEBUG_PIN
#define CONFIG_UBOOT_DEBUG_PIN                  PA01
#endif
  1. 更换对应文件 image
  2. 设置IO状态的方法
    u32 port = PORTA;//指定IO
    u32 pin = PORT_PIN_2;
    gpio_hw_set_direction(port, pin, 1);//0:out, 1:in
    gpio_hw_set_die(port, pin, 0);
    gpio_hw_set_dieh(port, pin, 0);
    gpio_hw_set_pull_up(port, pin, GPIO_PULLUP_10K);
    gpio_hw_set_pull_down(port, pin, GPIO_PULLDOWN_10K);
    gpio_hw_set_output_value(port, pin, 0);
  1. 添加AD通道的接口
#define AD_CH_IO_VBAT_PORT        IO_PORTB_02   //选择一个有ADC功能IO口采集vbat电压,电压不能超过 vddio
adc_add_sampioch(adc_io2ch(AD_CH_IO_VBAT_PORT));
adc_set_sample_period(adc_io2ch(AD_CH_IO_VBAT_PORT), PMU_CH_SAMPLE_PERIOD);
  1. 配置IO_VDD掉电,用于关闭外部LDO芯片等的设计,需要考虑好U盘插入漏电的情况,这个时候IO_VDD不能完全达到0V,大概有1.7V左右电压。 image
  2. 7065E使用PB7应注意与DACR的绑定 feature_DACR高阻态_200_patch_08(使用的是默认VCM电容配置)
  • 7065E没有VCM引脚应配置为VCM不带电容。
    • 如果配置错了,使用PB7做高低输出DAC L会有一个底噪出来 image
  • 开机dac没有完全初始化前,DACR没有真正高阻态
    • 使用PB7做AD输入电压检测时获取到的AD值偏低
      • PB7初始化时把DAC高阻态,该初始化必须在播放提示音前
    //DAC高阻态
    SFR(JL_ADDA->DAA_CON2,    23,  1,   1);            //SDDAC_PA_TRIM_EN_11v
    //PB7初始化
    gpio_set_mode(IO_PORT_SPILT(IO_PORTB_07), PORT_INPUT_FLOATING);
    gpio_set_function(IO_PORT_SPILT(IO_PORTB_07), PORT_FUNC_GPADC); 
   //获取PB7 AD 值
    u32 adc_v = adc_get_value_blocking(ADC_CH_IO_PB7);
    - 临时处理在获取ad值前触发DAC R的高阻态
    //初始化 PB7 ad输入
    gpio_set_mode(IO_PORT_SPILT(IO_PORTB_07), PORT_INPUT_FLOATING);
    gpio_set_function(IO_PORT_SPILT(IO_PORTB_07), PORT_FUNC_GPADC);
    //触发DAC R高阻态
    play_tone_file(get_tone_files()->max_vol);
    tone_player_stop();
    //获取PB7 AD 值
    u32 adc_v = adc_get_value_blocking(ADC_CH_IO_PB7);
  1. U盘与T卡复用
  2. 200P08.07sdk dmeo: feature_DM与SDDATA复用_200_patch_08.07
    imageimage
  3. le_audio_2.0.0_patch05 200P05复用功能建议升级到200P06(包含200P06)以上
  • 获取设备总数 DM和SD卡复用的方式导致dev_manager_get_total该接口获取数量不正确,需要使用以下方式获取(200P06之后的版本会做兼容处理)
u32 dev_cnt = 0;
dev_cnt += dev_online("udisk0");
dev_cnt += dev_online("sd0");
  • 复用设置
    • sdk自带文档(地址粘贴到浏览器中打开) file:///C:/JLStudio/standard/le_audio/AC706N/2.0.0/docs/html/SDK/IO_multiplex/IO_multiplex.html
      image
    • U盘的DM与T卡的data引脚复用需要手动添加到复用列表
    • 如果复用引脚上有绑定其他引脚记得在开机引脚设置那里把它高阻态,这里以PC3与DM绑定为例。 imageimageimage
  1. AC706芯片只有单通道LADC,不能支持数字AUX与有线麦克风共存(需要有一路走硬件通路,无法做音效处理) image
  2. AC706 FM搜台的参数打印 image
  3. AC706N IO_CONTROL 功能介绍可以参考 1、《AC706N硬件设计指南》
    image 2、《AC706N用户手册》
    3、SDK\interface\driver\cpu\br29\asm\io_omap.h
    image
通用输出通道选择
0:uart0_tx
1:uart1_rts 
2:spi0_do
3:spi1_do
4:tmr0_pwm
5:tmr1_pwm
6:tmr2_pwm
7:tmr3_pwm
8:mc_pwm0_h
9:mc_pwm0_l
10:mc_pwm1_h
11:mc_pwm1_l
12:clkout1
13:clkout2
14:gp_ich0
15:gp_ich1

SDK\interface\driver\cpu\br29\asm\io_imap.h
image 13. AC706N IIS ALINK模块使用注意 image 初始化输出输入通道的时候,其余通道的IO会出现IO不受控情况,如不能输出低电平,
该问题是ALINK模块内部硬件设计就是这样,无法修改。
14. AC706N TWS声道切换说明 https://www.kdocs.cn/l/cjGjGFsUlqjp
15. AC706N IIS主机在没有数据输出时需保持CLK 测试sdk版本:le audio 2.0.0Patch_08.07

    if(hw_ch_num !=1 || hdl->cfg.role == ALINK_ROLE_MASTER){//iis 做主机时不关硬件,避免IIS Tx主机播放完提示音关掉IIS
        printf("audio_iis_stop ch_idx = %d, role = %d\n", ch_idx, hdl->cfg.role);
        return 0;//IIS 模块内通道使能 大于等于2个,默认不关闭硬件
    }

image 16. AC706N VPWR(P0) 当普通io使用注意

  1. 该引脚有内部充电电路,相当于下拉1MΩ的电阻

共性问题

OTA问题汇总更新

  1. BR29 ota_修复edr升级数组越界问题(2025年9月1日) 异常信息:
    image 修改方法
    替换以下ota.bin
    br29_ota_修复edr升级数组越界问题_20250901.zip
  2. sounbox_1.0.0_patch04 SD卡、蓝牙测试盒升级无法维持IO(2025年2月26日) 1、蓝牙测试盒升级按如下修改即可维持IO。(le_audio同样适用)
    image 2、SD卡升级维持IO需更新如下ota升级文件。(le_audio版本也适用)
    AC706N_sounbox_1.0.0_patch04_SD卡升级维持IO修改_20250226.rar
  3. AC706音箱SDK使用蓝牙测试盒出现升级失败问题(2024年10月22日) 打开ota_debug打印会发现报错:OTA
    image 解决办法:替换以下bin文件:
    ota_BR29_20241022_关闭蓝牙中断中翻转IO口.rar
    备注:20241022前le_audio和soundbox分支都存在此问题,共性问题,都需要替换
  4. soundbox-AC706N-1.0.0-AC706N-demo-patch_04.02 双备份升级,显示升级成功,但是代码没有更新。 处理方法:
    升级前解除FLASH写保护,替换uboot。
    张凯_706sounboxuboot_双备份带KEY升级不了.7z
    image
void norflash_set_write_protect_en(void)
{
    struct vm_info vm = {0};
    norflash_ioctl(NULL, IOCTL_GET_VM_INFO, (u32)&vm);
    norflash_set_write_protect(1, vm.vm_saddr);
}

void norflash_set_write_protect_remove(void)
{
    norflash_set_write_protect(0, 0);
}
  1. le_audio_1.0.0_patch02 关机功耗高问题 替换以下库文件:
    【金山文档 | WPS云文档】 cpu(2024年4月26日_le_audio_1.0.0_patch02处理关机功耗高问题)
    https://kdocs.cn/l/ck7u8UyeOhQE
  2. le_audio_1.0.0_patch02 AUX打断播放提示音死机问题 【金山文档 | WPS云文档】 media((2024年4月26日_le_audio_1.0.0_patch02处理AUX播放提示音死机问题)
    https://kdocs.cn/l/cc5YcXzXzV69
  3. le_audio_1.0.0_patch02 手机远距离出现音箱杂音问题 处理方法:蓝牙A2DP添加一个丢包修复节点
    image
  4. le_audio_1.0.0_patch02 关闭打印后,编译失败
void cpu_assert_debug()
{
    asm("[--sp] = {rets}");
#if CONFIG_DEBUG_ENABLE
    log_flush();
    local_irq_disable();
    while (1);
#else
    p33_tx_1byte(P3_SFLAG0, 0xac);
    cpu_reset();
    // P3_PCNT_SET0 = 0xac;
    // cpu_reset();
#endif
}
  1. le_audio_1.0.0_patch04 以及之前的版本重新上电FM电台变成沙沙声
    u8 reset_if = 1;
    if (freq == 106000 || freq == 98000 || freq == 90000 || freq == 82000) {
        reset_if = 0;
    }
    if(reset_if){
        u32 fmrx_clk = clk_get("fmrx") / 1000;
        u8 if_step = (float)(1500 * 160 / (fmrx_clk / 2));
        SFR(JL_FM->FMRX_CON9, 5, 7, if_step);
    }

image 6. le_audio_2.0.0_patch04 & le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改 原因:驱动部分没有实现好
修改办法:le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改.otl
leaudio 200P0808:https://gitlab.zh-jieli.com/JL-Studio/Leaudio/706N/AC706_le_audio_2.0.0/-/tree/feature_irkey
7. le_audio_1.0.0_patch05 连接无线mic之后不能写VM AC706 le_audio patch05 连接过程中VM直接写flash 补丁.zip
8. 新旧box1.0.0_PX(三合一音箱)与新旧wmic1.0.0_PX(无线麦)互连喊话末尾有杂音 修改编解码参数
在box与wmic 两sdk中修改jlalw_offset8_tab参数(有该变量声明改其参数,没有声明不改)
image 9. box与wmic码率不一致导致连接之后声音异常 box 码率设置:
image wmic码率设置
image 10. 7068M在线调音 注意VPWR脚中间不能连接电容,否则会导致通信失败
image

imageimage 11. soundbox_1.0.0_patch_00.02 蓝牙单mic通话声音小 可视化工具中在下图位置配置单mic通话增益
image 到代码中会在下图位置读取增益mic_gain后通过audio_adc_mic_set_gain配置增益,实际读取到的对应关系为:
0db:mic_gain = 0
3db:mic_gain = 1
9db:mic_gain = 2
15db:mic_gain = 3
21db:mic_gain = 4
而audio_adc_mic_set_gain实际配置MIC增益范围:0(-8dB)~19(30dB),step:2dB,level(4)=0dB
导致虽然在可视化中配置了最高21db增益,实际是mic_gain=4,即level(4)=0dB,因此通话声音依然很小,故需要直接修改代码,在下图位置设置mic增益等级。
image 12. 3In1_wireless_mic_tx 2.0.0_patch_01 开启在线调音后死机问题 USB调音(会上电一直死机复位):
修改办法:增加宏判断
image 串口连接调音:(会在通信后死机)
修改办法:更换发送接口
image 13. le_audio_2.0.0_patch01与AW32N 1.0.0_patch01连接box发送不了自定义数据到mic BOX端如下修改

err = wireless_trans_transmit("big_rx", data, length, &param);
    case WIRELESS_DEV_OP_SEND_PACKET:
        res = big_rx_ops.send_packet((const uint8_t *)va_arg(argptr, int), va_arg(argptr, int), (big_stream_param_t *)va_arg(argptr, int));
        break;

image 14. le_audio_2.0.0_patch01与AW32N 1.0.0_patch01自定义数据收发 例子 image

注意:不管是mic发给box还是box发给mic,发送端接口(box:wireless_custom_data_send_to_sibling mic:custom_data_send_data_to_sibling)填的uuid,要在接收端uuid对应的handler中去接收数据。

例如box给mic发送数据时填的uuid为'M':
imageimage 例如mic给box发送数据时填的uuid为'M':
imageimage 15. le_audio_2.0.0_patch01 usb(dm)与sd(data)复用U盘兼容性差 imageimageimage 16. le_audio_2.0.0_patch01 开启有线/无线mic_单声道没有声音。 原因:可视化蓝牙音频同步模块默认配置错误。
image 修改:
底层同步不支持 LOCAL,其他三个选项对于无线麦场景代码内部写死的,选啥都是BLE。
imageimage 17. le_audio_2.0.0_patch01 开启有线/无线mic_单声道,有线mic模式下从 fm 模式进入 Linein 模式死机。 原因:无线mic在线,soundbar 切换至有线mic模式,从 fm 模式进入 linein 模式时与无线mic回连造成无线mic与有线mic同时工作。
回连点日志:
image 死机日志:
image 解决:
image 18. 3in1_wireless_mic_tx 200P2 7068M 板级编译报错 7068编译问题.zip
19. le_audio_2.0.0_patch02 蓝牙通话会死机问题且无声问题。 报错:编码器断言错误
image 修改办法:
imageimage 20. le_audio_2.0.0_patch02 使能PA功能异常问题 替换库文件处理
【金山文档 | WPS云文档】 btctrler(AC706N_le_audio_2.0.0_patch02修复PA异常死机问题)
https://kdocs.cn/l/cbNPgTNNFPN0
21. 706n_le_audio_200-P2,U盘解码MP3歌曲,两个无线话筒连接成功,将其中一个话筒关闭再打开连接成功,拔出U盘,sounbox.c中执行btstack_int_edr();出现CPU0 misalign_err错误死机,该补丁必须替换 替换蓝牙库
解决异常死机问题.rar

  1. le_audio_2.0.0_patch02 时钟rtc软关机之后闹钟不响

  2. 换cpu库

  3. 这句话调到前面 image

  4. sounbox_1.0.0_patch01 TWS配对死机问题 异常打印:ASSERT-FAILD:(g_tlsp.channel_id BIT(id))==00,1
    测试方法:
    TWS 音箱没有配对前分别都连接手机后,去按配对。另一个会触发断言异常
    修改方法:
    替换btctrler.a库文件,重新编译
    库链接如下:
    【金山文档 | WPS云文档】 btctrler(sounbox_AC706N_1.0.0_patch01_2024年11月5日修复两个手机连接后TWS配对死机问题)
    https://kdocs.cn/l/cbcrl00wryPR

  5. sounbox_1.0.0_patch01 开机第一次设置默认闹钟不起作用 现象:rtc_dev_init初始值里面有默认闹钟的值但是到时间后没有响铃
    imageimage 原因:开机第一次设置默认闹钟初始化时会关掉闹钟使能
    image 处理方法:
    注释掉关闹钟操作
    image

  6. sounbox_1.0.0_patch01 使用alarm_add设置闹钟时间,单位秒被归零

  7. 添加秒的赋值 image

  8. 注释秒归零操作 image

  9. sounbox_1.0.0_patch01 蓝牙音量同步在音乐暂停的时候不起作用 image 修改方法:
    image

  10. le_audio_2.0.0系列SDK使用AD按键开机过程中按键事件异常,非阻塞式AD按键值获取不准 修改方法:
    image

  11. AC706N外挂32.768K时钟后软关机功耗偏高,在10uA左右 按照下图修改,测试功耗在5.7uA
    image

  12. sounbox_1.0.0_patch01.1 设置VCOM直推,第一次关机功耗高问题处理

dac_hdl.state = 0;
audio_dac_close(&dac_hdl);

image 30. le_audio_2.0.0P5 使能仅保留电量显示,tws配对上以及蓝牙连接后,打完电话回来蓝牙播放音乐声音变卡顿 软件修改:
image 31. le_audio_2.0.0_patch05 开启有线/无线mic_单声道异常死机/栈溢出死机 如果出现 [0-CPU] emu err msg : CPU0 stack overflow err 异常信息
image 原因
超出栈的容量,从而导致栈溢出。
解决方法

  1. 检查局部变量
    1. 避免在函数内部创建过大的局部变量,尤其是大型数组或结构体。如果需要存储大量数据,可以使用动态申请的方式
    2. 减少函数内局部变量的数量和大小
  2. 检查函数,
    1. 例如有没有使用一些递归函数,递归太深。
  3. 加大任务栈的大小:如下 image
  4. le_audio_v2.0.0_patch07/08 开启 TWS 和 按键配对功能,多设备分别连接后断开,再次回连失败 配置:
    image 现象 step:
  5. 单台音响打开,TWS没有连接的情况下;
  6. 用手机A连接音响,然后断开A手机蓝牙;
  7. B手机去手动连接音响,然后断开B手机
  8. 这个时候再去手机A手动点击回连,就连接不上音响了 解决:
    修改 tws_dual_conn_state_handler() :
    image
  9. le_audio_v2.0.0_patch07 连接无线 mic 后,使用消人声功能异常 配置:可视化配置打开 1T3 使能,可连接无线 mic
    现象:
  10. 连接无线麦后,媒体音乐播放时,使用消人声 image
  11. 人声消除后,播放提示音,人声恢复 image 解决:
    image
  12. sounbox_1.0.0_patch04 部分SD杂牌卡无法读取 解决方法:需更换底层驱动。
    AC706_patch_04_send_SDcmd_no_8clk_20250305_cpu.rar
  13. le_audio_1.0.0_patch04 蓝牙通话AGC模块不起作用 解决方法:
  14. 在JLStudio可视化工具(非SDK路径)路径下修改替换 .cvp_sms_ans配置.json 文件。(附件) cvp_sms_ans配置.rar
    image 出现以下模块即为修改成功。
    image 2.手动在代码中开启通话回音消除使能。
    image 3.修改以下两个段的位置。
    imageimage
  15. 3In1_wireless_mic_tx 2.0.0_patch_01 变音模块在线调音时,模式参数不起效 image 解决方法:
  16. 在lib_media_config.c中将vc_pitchshift_only置为1即可,需注意ram会变大。 image
  17. le_audio_v200p08相对le_audio 2.0.0P04版本T卡兼容性变差
  18. 替换cpu.a库文件
  19. le audio/soundbox 2025.1.2之后到le_audio2.0.0P08/soundbox 1.0.0P04的sdk 可以使用 AC706_patch_08_SD_read_data_before_cmd_20250508_cpu
//log特征
[00:00:00.290]tone_callback: 8, 0
[00:00:00.662][SD]sd status = 1
[00:00:00.663]sd dev msg 53443000, 0, 7e5aff0
[00:00:00.663]DEVICE_EVENT_FROM_SD0
[00:00:00.663]DEVICE_EVENT_IN
[00:00:00.663]sd0 add start
[00:00:00.664][SD]sd0 open !
[00:00:00.730][SD]sd is 2.0 SDHC !
[00:00:00.732][SD]sd init step 1 is success !

[00:00:00.741]<error> [SD]sdc receive data crc error !


[00:00:00.742]<error> [SD]sdmmc send acmd51 error ! >>> DAT0 line has poor contact , and DAT0 is always at high level !

[00:00:00.770][SD]sd is 2.0 SDHC !
[00:00:00.772][SD]sd init step 1 is success !

[00:00:00.781]<error> [SD]sdc receive data crc error !


[00:00:00.782]<error> [SD]sdmmc send acmd51 error ! >>> DAT0 line has poor contact , and DAT0 is always at high level !

[00:00:00.810][SD]sd is 2.0 SDHC !
[00:00:00.812][SD]sd init step 1 is success !

[00:00:00.821]<error> [SD]sdc receive data crc error !


[00:00:00.822]<error> [SD]sdmmc send acmd51 error ! >>> DAT0 line has poor contact , and DAT0 is always at high level !

[00:00:00.823]__dev_manager_add, sd0 add ok, dev->fmnt = 0,  0
[00:00:01.041][STREAM]dec_err: 40
[00:00:01.065][STREAM]dec_end: 0
[00:00:01.070][AUDIO-DAC]DAV VOL0 : 0x40004000
[00:00:01.101][fade]state:idle,max_volume:100,cur:0,0
[00:00:01.101]set_vol[idle]:=0
[00:00:01.101][SW_DVOL]Gain:0,AVOL:14,DVOL:16384

  1. ac706n_le_audio_v200p08关闭打印无法连接 tws 替换库 rebuild:
    btctrler_706_le_audio_v2p8_修复_tws_无法连接.zip
    (该补丁已经包含:bugfix_02_240MHz_rf)
    补充修改:
    imageimage
  2. ac706n_le_audio_v200p08开led7显示在music播放音乐显示音量时立马被音乐时间覆盖显示界面 原因:
    image 如下修改(非唯一修改方案,其他方案可以自己分析让后去修复该问题)
    方法一:
    删掉如下代码
    image 方法二:
    修改如下代码
static void ui_strick_loop()
{
    int msg[1];
    if (__ui_display->init) {

        if(__ui_display->tmp_menu_ret_cnt){
            if(--__ui_display->tmp_menu_ret_cnt==0){
                msg[0] = UI_MSG_STRICK;
                g_printf("------msg----");
                post_ui_msg(msg, 1);
            }else{
                return;
            }
        }
        if (__ui_display->auto_reflash_time && ((++__ui_display->time_count) >= __ui_display->auto_reflash_time)) {
            ui_menu_reflash(0);//自动刷新主页
            __ui_display->time_count = 0;
        }

        // if (__ui_display->tmp_menu_ret_cnt && ((--__ui_display->tmp_menu_ret_cnt) == 0)) {
        //     msg[0] = UI_MSG_STRICK;
        //     post_ui_msg(msg, 1);
        // }
    }
}
  1. soundbox_1.0.0_patch04 开1T2一拖二后,使用bt_cmd_prepare接口控制的部分命令控制对象错乱异常(如PP功能),不是播歌的那一台手机 如下图修改:
        // bt_cmd_prepare(USER_CTRL_AVCTP_OPID_PLAY, 0, NULL);
            u8 *bt_addr = NULL;
            u8 addr[6];
        if (a2dp_player_get_btaddr(addr)) {
                bt_addr = addr;
        }
        bt_cmd_prepare_for_addr(bt_addr, USER_CTRL_AVCTP_OPID_PLAY, 0, NULL);
  1. 无线麦706N_wireless_mic_tx_2.0.0_P01版本 开启充电配置后,多次开关机会卡住 问题原因:关机的过程有个临界区,按键唤醒,充电唤醒,都可能导致这样的情况
    处理方法:当前版本暂无解决方法,但可添加下列补丁,使异常触发时能够自动复位。
    706N无线麦开关机卡住自动复位补丁.rar
    注:如果断言打印没有关掉,该补丁将不会起作用
///异常中断,asser打印开启
#ifdef CONFIG_RELEASE_ENABLE
const int config_asser         = 0;
#else
const int config_asser         = 0;
#endif

复位源如下:
image 42. ac706n_le_audio_v200p0803不停的开关广播导致内存泄漏问题 现象:ll_buf_malloc申请的内存一直没释放。
image 原因:动态内存下ext adv buffer未释放
处理办法:
btctrle_AC706_LEAUDIO_2.0.0_P0803_修改不断开关广播导致内存泄漏问题.7z
43. ac706n_le_audio_v200p08 配置DAC立体声输出后,蓝牙通话异常死机或无声 处理方法:参考单声道模式时的通话流程,重新配置通话上行的节点配置,主要修改以下两个节点。
imageimage Gitlab地址:Files · bugfix_200_P08_配置立体声模式蓝牙通话异常死机 · 自由品牌 / 客户支持 / 可视化SDK / le_audio / JL706Nle_audio_2.0.0 · GitLab
44. ac706n_le_audio_V100-P5 部分特殊的U盘 和SD卡复用后,在开机插入后SD已插入情况下再插入挂载失败的问题处理 修改优化方法如下
imageimageimage 45. ac706n_aoundbox_100P04优化快速插拔sd卡概率出现不读卡 检测方式:clk
原因:在检测接口的空闲时间插拔卡导致卡回复命令/数据异常
现象:拔插之后播放不了卡需要重新插拔一下卡才能读取
相关log:

  1. 在解码前插拔 image
  2. 在解码时插拔 image 处理方案(以时间换准确和兼容性):
    用到的接口:
static int  sd_scan_cn=0;
void u_sd_dev_offline(void){
    sd_scan_cn=-10/*让检测接口保持多少次检测返回0*/;
}

int u_sd_io_detect(void *pdata)
{
    struct sdmmc_card_dect_platform_data *data = (struct sdmmc_card_dect_platform_data *)pdata;
    u32 det_io = data->detect_io[2];
    u32 val, res = 0;
    u32 *det_io_outreg = gpio2crossbar_outreg(det_io);
    u32 data_dir_ctl = (*det_io_outreg) & 0b11;
    if (data_dir_ctl) {
        (*det_io_outreg) &= ~(0b11);
        res = 1;
    }
    if ((data->detect_mode == SD_IO_ADC_DECT) || (data->detect_mode == SD_PG_ADC_DECT)) {
        gpio_set_mode(IO_PORT_SPILT(det_io), PORT_INPUT_PULLUP_10K);
        gpio_set_function(IO_PORT_SPILT(det_io), PORT_FUNC_GPADC);
        udelay(5);
        u32 ad_ch = adc_io2ch(det_io);
        u32 ad_value = adc_get_value_blocking(ad_ch);
        sd_io_detect_dump_result(ad_value);
        gpio_set_mode(IO_PORT_SPILT(det_io), PORT_HIGHZ);//INPUT_PULLUP_10K);
        if (res) {
            (*det_io_outreg) |= data_dir_ctl;
        }
        if (ad_value < data->detect_less_ad) {
            return 1;
        }
        if ((ad_value > data->detect_ad_limit_l) && (ad_value < data->detect_ad_limit_h)) {
            return 1;
        }
    } else {
        gpio_set_mode(IO_PORT_SPILT(det_io), data->detect_io_level?PORT_INPUT_PULLDOWN_10K:PORT_INPUT_PULLUP_10K);
        udelay(5);
        val = gpio_read(det_io);

        sd_io_detect_dump_result(val);
        if (res) {
            (*det_io_outreg) |= data_dir_ctl;
        }
        
        printf("--------------val[%d] level[%d] [%d]",val,data->detect_io_level,val==data->detect_io_level);
        if (val == data->detect_io_level) {
            if(sd_scan_cn<0xf0)sd_scan_cn++;
        }else{
            sd_scan_cn=0;
        }
        return sd_scan_cn>10/*滤波次数*/?1:0;
    }
    return 0;
}
  1. 在解码前插拔(初始化、挂载阶段拔出)
    1. 使用自定义检测接口替换默认sdk库里面的接口 image
    2. 自定义接口里面添加上限检测滤波 image
    3. 减小检测扫描时间 image
  2. 在解码时插拔
    1. 解码器读取失败之后在MUSIC_PLAYER_ERR_DEV_OFFLINE消息处理中添加:自定义接口检测保持一段时间返回为0 image

46.ac706n_soundbox-100-patch4-sdk,使能UI-LED7和红外按键后,配合的IO按键或AD按键软关机唤醒失效的问题

优化方法:

extern void unmask_enter_critical(void);//调用关闭不可屏蔽中断

void user_led7_timer_close()
{
    y_printf("user_led7_timer_close:%d\n", user_led7_timer);
    if (user_led7_timer) {
        gptimer_pause(user_led7_timer);
    }
}

在软关机前关闭所有的定时器中断。
image

  1. ac706n_soundbox-100-patch4-sdk-RTC时钟音箱设置闹钟demo和处理开机前设置的闹钟关机开机后不生效的问题 imageimageimageimage

  2. 706N-LE_AUDIO-100-patch5在添加各项补丁程序后,处理SD卡和U盘复用挂载失败 添加修改方法:706N-LE_AUDIO-100-patch5在添加各项补丁程序后,处理SD卡和U盘复用挂载失败.otl

  3. le_audio_2.0.0_patch08.05 / patch08.06两个话筒连上后,关掉其中一个,这时另一个话筒声音不正常 异常现象

  • 两个话筒连上后,关掉其中一个,这时另一个话筒声音不正常,有咔咔声,看打印一直打印 dac will empty !! 原因·
  • 数据流节点端口的状态不对导致输入数据被丢弃 解决
    08.05版本:
  • 替换media.a
  • media(ac706n_le_audio_2.0.0_patch_08.05修复断开第一路mic打印dac will empty).rar 08.06版本:
  • 替换media.a
  • media(ac706n_le_audio_2.0.0_patch_08.06修复断开第一路mic打印dac will empty).zip
  1. le_audio_2.0.0_patch08.05 音箱搭配AW32_3ln1_tx_1.0.0_P05无线麦,会出现丢包现象 修改方法:
    设置config_default_big_chmap为0。
    image

  2. 706N-le_audio_1.0.0_patch05-sdk快速拔插SD卡概率出现死机情况 image 快速拔插SD卡,概率出现host_dev->sem变量在已经被删除的情况下再此被操作。

  3. AC706N_soundbox_1.0.0patch04 开省电容mic开机是PA4的状态被改掉 修改的文件:audio_setup.c
    测试程序:AC706N_soundbox_1.0.0patch04-开省电容mic开机是PA4的状态被改掉.7z

52.706N-soundbox-100-patch4使用闹钟RTC功能,设置重复响起的闹钟后,关机闹钟唤醒,闹钟第二天不会再重复响起。

修改方法:
imageimage 52. ac706soundbox_1.0.0patch04.02 linein模拟输入切到其他模式有linein声音 测试程序:ac706n_soundbox_1.0.0p04.02-模拟输入切到其他模式有linein声音.7z
同时期 706 le_audio 2.0.0patch08.06也存在该问题
修改linein_stop接口:

void linein_stop(void)
{
    if (__this->onoff == 0) {
        log_info("linein is aleady stop\n");
        return;
    }

#if TCFG_AUDIO_AUX_ANALOG_PATH_ENABLE
    audio_analog_aux_close(&(__this->analog_aux));
    SFR(JL_ADDA->DAA_CON3,  4,  1,  0);                        // SDDAC_AMUX_A0_EN_11v
    SFR(JL_ADDA->DAA_CON3,  6,  1,  0);                        // SDDAC_AMUX_A1_EN_11v
    SFR(JL_ADDA->DAA_CON3,  8,  1,  0);                        // SDDAC_AMUX_A2_EN_11v
    SFR(JL_ADDA->DAA_CON3, 10,  1,  0);                        // SDDAC_AMUX_A3_EN_11v
    SFR(JL_ADDA->DAA_CON3, 12,  1,  0);                        // SDDAC_AMUX_A4_EN_11v
    SFR(JL_ADDA->DAA_CON3, 15,  1,  0);                        // SDDAC_AMUX_B0_EN_11v
    SFR(JL_ADDA->DAA_CON3, 17,  1,  0);                        // SDDAC_AMUX_B1_EN_11v
    SFR(JL_ADDA->DAA_CON3, 19,  1,  0);                        // SDDAC_AMUX_B2_EN_11v
    SFR(JL_ADDA->DAA_CON3, 21,  1,  0);                        // SDDAC_AMUX_B3_EN_11v
    SFR(JL_ADDA->DAA_CON3, 23,  1,  0);                        // SDDAC_AMUX_B4_EN_11v
#else
    /* set_dac_start_delay_time(0, 0); //把dac的延时设置回默认的配置 */
    linein_player_close();
#endif
    app_audio_set_volume(APP_AUDIO_STATE_MUSIC, __this->volume, 1);
    __this->onoff = 0;
}
  1. le_audio_2.0.0_patch08.06 配置TWS加立体声时,单箱时输出左右声道,TWS连接时双箱分别输出左声道和右声道。 修改方法:
    1.添加channel merge节点,并设置为tws_auto配置。
    image

2.配置为立体声输出时,若未连接TWS,需将channel修改为AUDIO_CH_LR,才能输出立体声。

static int tws_get_output_channel()
{
    int channel = (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_LR) ? AUDIO_CH_LR : AUDIO_CH_MIX;
    if (tws_api_is_connect()) {
        channel = tws_api_get_local_channel() == 'L' ? AUDIO_CH_L : AUDIO_CH_R;
    }
    return channel;
}

image 54. le_audio_2.0.0_patch08.06 关闭串口打印后,其他串口与MCU的数据通讯不正常 修改方法:如果使用代码里面给的串口demo,需要做以下修改
image

55.706N-soundbox-100-patch4 部分特殊U盘,SD卡和USB复用后,出现无法挂载的问题

usb_multiplex.c 插入U盘或者模式切到播U盘,需要把DPDM拉低一段时间,让U盘自己认为插入了主机
image

56.706N-系列使用PB0有驱动LED7数码管时,部分LED灯珠亮度不一致的问题

706N-PB0 IO的驱动电流能力只有固定的输出,与其他IO口输出电流配置容易出现差别,导致LED7亮度不一致。如果一定需要使用PB0驱动LED7数码管,可以按照下图修改电流配置。
imageimage 55. le_audio_2.0.0_patch08.06 增加llns 到 混响数据流中 编译报错问题。 解决办法:拷贝一个其他芯片的 libllns.a 即可
使用时候需要注意修改ADC 的中断点数 ,不然会导致爆RAM死机 的问题
image 56. 706N-soundbox-100-patch04.02 低功耗无法连接ble 解决办法:修改btctrler.a,添加低功耗流程
btctrler_706_soundbox_100_patch0402_ble支持低功耗.zip
57. le_audio_2.0.0_patch08.07 开机不播提示音,设置一个频点108Mhz,再播提示音会卡死 根本原因:dac的oe时钟被关掉了
解决方法:修改cpu.a,添加ass_pll_oe
cpu_706_le_audio_200_0807_修复开机不播提示音设置频点后播提示音异常.zip
58. le_audio_2.0.0_patch08.07 开1T3后测试盒获取蓝牙版本号异常 解决方法:修改btctrler.a
btctrler_灵永改_开1T3改蓝牙版本号异常_706_200patch0807.zip
59. 706_soundbox_1.0.0_SDK 不同提示音分别调节音量的功能需求,实时调节特殊提示音音量需求-可移植到其他706NSDK image

#if U_SCENE_MODE_EN
    // 根据文件名判断是否为特殊场景提示音并设置音量
    if (player->file) {  // 改为检查文件句柄是否存在
        char filename[64] = {0};
        // 获取实际文件名
        resfile_get_name(player->file, filename, sizeof(filename));
        y_printf("filename: %s\n", filename);
        printf("user_scene_vol:%d, wtone_volume:%d, music_to_tone_vol:%d\n", 
                 app_var.user_scene_vol, app_var.wtone_volume, app_var.music_to_tone_vol);
        
        if (strstr(filename, "scene_00")) {
            // 设置特殊场景提示音音量(例如降低音量)
            app_var.u_tone_state = 1;
            if (app_audio_get_volume(APP_AUDIO_STATE_WTONE) != app_var.user_scene_vol) {
                app_audio_set_volume(APP_AUDIO_STATE_WTONE, app_var.user_scene_vol, 1);
            }
        } else {
            app_var.u_tone_state = 0;
            if (app_audio_get_volume(APP_AUDIO_STATE_WTONE) != app_var.music_to_tone_vol) {
                app_audio_set_volume(APP_AUDIO_STATE_WTONE, app_var.music_to_tone_vol, 1);
            }
        }
    }
#endif
// 设置情景音量接口(带边界检查)
void app_scene_volume_set(u8 volume)
{
    if (volume > 30) {
        app_var.music_volume = 30;
    } else {
        app_var.music_volume = volume;
    }
    app_audio_set_volume(APP_AUDIO_STATE_MUSIC, app_var.music_volume, 1);

#if U_SCENE_MODE_EN
    printf("user_scene_vol set: %d\n", app_var.user_scene_vol);
    // 如果当前正在播放情景提示音,则立即更新音量
    if (tone_player_runing() && app_var.u_tone_state) {
        // app_audio_set_volume(APP_AUDIO_STATE_WTONE, app_var.user_scene_vol, 1);
        
        // 添加动态更新正在播放的提示音音量
        struct volume_cfg cfg = {0};
        cfg.bypass = VOLUME_NODE_CMD_SET_VOL;
        cfg.cur_vol = app_var.user_scene_vol;
        jlstream_set_node_param(NODE_UUID_VOLUME_CTRLER, "Vol_SysTone", (void *)&cfg, sizeof(struct volume_cfg));
    }
#endif 
    // 保存音量设置到VM
    // syscfg_write(CFG_SCENE_VOL, &app_var.user_scene_vol, 1);
}
  1. le_audio_2.0.0_patch08.07 PWMLED配置双IO双灯 灯效会两个同时亮 原因:
    SDK在led初始化的时候流程大致如下:
    蓝灯亮-》设置IO1映射输出
    红灯亮-》设置IO2映射输出
    在灯效切换时,缺少关闭映射源的操作。导致两个IO同时输出PWM信号,导致两个灯都亮起来。
    处理方法:
    切换灯效时,void pwm_led_hw_init(void *pdata) 添加关闭IO映射的操作 pwm_led_io_unmount();
    image
  2. le_audio_2.0.0_patch08.07 &soundbox SDK 充电无法触发充电满的消息 修改: 修正adc_close函数里的ADC时钟使能配置
    void adc_close() //adc close
    {​
    JL_ADC->CON = BIT(17) | BIT(3);//clock_en
    JL_ADC->CON = BIT(17) | BIT(6) | BIT(3);
    JL_ADC->CON = BIT(6) | BIT(3);
    ​}
    分支:bugfix_200_patch_08.07_充电无法充满问题
    gitlab: Files · bugfix_200_patch_08.07_充电无法充满问题 · JL-Studio / Leaudio / 706N / AC706_le_audio_2.0.0 · GitLab
  3. 修复 soundbox_1.0.0_patch04 添加 VOTP 区域无法开机 在isd_config.ini的EXTRA_CFG_PARAM配置段中增加OTP_CFG_SIZE配置
[EXTRA_CFG_PARAM]
OTP_CFG_SIZE=256;

706n_soundbox_1.0.0_patch_04_cpu_修复添加 VOTP 区域无法开机.zip

  1. 修复 le audio 2.0.0 patch08.07 在 IDLE与 BT 直接快速切换的死机 死机原因固定:btencry_task 线程还没执行完,被btctler线程执行的时候释放free_simple,导致异常
    image 解决:
    ac706n_le_audio_2.0.0_patch08.07_btctrler_修复IDLE与BT进出来回连接的死机.zip

问题处理

  1. le_audio_1.0.0_patch04 手动增加linein检测复用adkey 通道做法的实现。 SDK_706_le_audio_patch04_增加复用linein检测和adkey检测_修改说明.rar
  2. le_audio_1.0.0_patch05 U盘复用sd卡data 脚,编译出错,且无法读取U盘问题处理。 按照下面截图修改:
    image
  3. le_audio_1.0.0_patch05 省电容麦自动校准配置方式。 代码:需要打开校准,并且最好是always
    image adc节点:要使用PA0 做mic_bias 供电(这个是必须项),这个是需要PA0 作为供电,而使用AC7065E芯片由于PA1和PA0双绑,默认使用PA1 作为mic脚,需要打开PA0作为mic_bias 给麦供电。
    相同道理,若是别的芯片做706的省电容麦形式,则需要将配置的mic_bias 脚短接到mic脚 上面,给麦供电
    image
  4. 三合一SDK无线mic静音功能 实现方式:
    a.box端把对应的mic链路的音量设置为0
    b.mic端把mic音量设置为0
    c.mic端把mic的数据清除
    测试sdk为 三合一 无线mic 1.0.0_p03 SDK 其他SDK仅供参考
    imageimage
  5. 三和一SDK无线麦reverb切换接口 测试sdk为 三合一 无线mic 1.0.0_p03 SDK 其他SDK仅供参考
  • 切换接口
//模式切换时 参数更新接口
void set_mic_reverb_mode_by_id(u8 mode)
  • 模式枚举EFFECT_REVERB_PARM_MAX要与外部配置工具情景数量对应上不然读写数据越界死机 image

  • 模式切换相关参数的对应关系 image

  1. 三合一SDK无线mic更新reverb wet参数 测试sdk为 三合一 无线mic 1.0.0_p03 SDK 其他SDK仅供参考
/**
*接口会更新reverb中的wet
*max_leve:最大等级值
*level:当前等级值
*如果当前情景配置工具里面reverb wet 为120 那么更新下去值为  120*level/max_level
**/
void mic_effect_reverb_wet_set(int max_level,int level){
    if (g_mic_effect == NULL || g_mic_effect->sub_0_plate_reverb_hdl == NULL) {
        return ;
    }
    
    int wet;
    static int max=-1;
    if(max<0){
        max=g_mic_effect->sub_0_plate_reverb_hdl->reverb_parm_obj.wet;        
    }
    
    printf("reverb max_level=%d level=%d\r\n",max_level,level);

    wet=level*max/max_level;
    if(wet>max)wet=max;
    if(wet<0)wet=0;

    Plate_reverb_parm parm;
    memcpy(&parm, & g_mic_effect->sub_0_plate_reverb_hdl->reverb_parm_obj, sizeof(Plate_reverb_parm));
    parm.wet = wet;
    update_plate_reverb_parm(g_mic_effect->sub_0_plate_reverb_hdl, &parm);
    //reverb_wet_level=level;
    printf("reverb wet=%d max=%d",g_mic_effect->sub_0_plate_reverb_hdl->reverb_parm_obj.wet,max);
}
  1. le_audio_1.0.0_patch05 使用硬件定时器影响音频流程,双麦连接的时候,关闭断开一个麦,主机音乐有1S左右的杂音。 image 只改动红框部分,翻转IO的不改
    image 这里是修改减少麦克风断连判断时间
  2. le_audio_2.0.0_patch01 7066A使用DM口做复用SD卡DATA脚复用 imagecpu(240808 706V200DM做SD卡DATA脚无作用问题).7z
  3. le_audio_1.0.0_patch05 7065E sd CMD 脚 复用 linein检测 ,但是 SD 卡供电 使用sdpg 脚控制,导致 插卡时linein 检测异常问题 原因:使用sdpg供电,在卡没有工作的时候,sdpg 是不会供电的,而有一些卡在没有供电的情况下会导致 cmd 脚会漏电扯电,从而导致cmd 的AD值检测不准确,从而影响到linein 的识别
    解决办法:
  4. 要么是不要使用sdpg 供电,使用IOVDD供电。
  5. 软件修改只能让sdpg 一直持续供电,修改办法为: 在 devices_init 前调用 sdpg_config(4);
    image 在关机引脚保护的位置 sdpg_config(0);
    image
  6. le_audio_1.0.0_patch05 三合一SDK创建任务数过多复位 image 目前当创建的任务数大于15的时候会出现复位。
    system(20240826 706_le_audio_100_patch05 修改同时允运行任务数为16).7z
  7. soundbox_sdk调试过程中出现ram不足问题处理汇总
复现方法如何解决?
sound_box_patch007以下版本,出现ram不足异常
例如情况:开启话筒叠加蓝牙SBC解码会出现爆RAM死机,如果删音效后,再次加上TWS的连接会出现死机情况。
使用patch007以上版本
701N_soundbox_007,话筒和蓝牙一起叠加播放,这个过程打断方式播放提示音(为了解决爆ram问题,播放提示音前后会开关话筒),在提示音结束后,重新打开话筒解码时候会出现大PO声杂音。
image
EQ模块申请不到足够的ram,导致杂音出现,需要尽可能节省ram的使用
1、DRC改limiter,limiter保持限幅功能
image
2、话筒EQ1段数减少
image
3、a2dp启动解码的数据丢弃
image
706n_soundbox_007,公版测试,切换话筒音效会出现heap_mmu_erro异常或提示ram空间不足切换话筒音效需要开关一次话筒数据流,然后再切换一次对应的场景scene
1、修改scene_switch.c
void set_mic_current_scene(u8 index) 
{
    mic_scene = index;
    printf("---- mic_scene = %d",mic_scene);
}

```c-like void mic_effect_set_cur_scene() { mic_effect_scene_set(mic_scene); } ```
```c-like void mic_effect_scene_set_release(u8 scene) { u8 scene_num = get_mic_effect_scene_num(); if (scene >= scene_num) { printf("err : without this scene %d\n", scene); return; } mic_scene = scene; char tar_name[16]; printf("set scene = %d",scene);
if(mic_effect_player_runing()) {
    mic_effect_player_close();
}

os_time_dly(1);

if(!mic_effect_player_runing()) {
    mic_effect_player_open();
}

}

<br>
```c-like
修改该函数
/* mic混响:根据参数组序号进行场景切换 */
void mic_effect_scene_set(u8 scene)
{
    u8 scene_num = get_mic_effect_scene_num();
    if (scene >= scene_num) {
        printf("err : without this scene %d\n", scene);
        return;
    }
    mic_scene = scene;
    char tar_name[16];
    printf("set scene = %d",scene);
#ifdef TCFG_NOISEGATE_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_noisegate_name); i++) {
        sprintf(tar_name, "%s%s", mic_noisegate_name[i], mic_name);
        noisegate_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_CROSSOVER_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_crossover_name); i++) {
        sprintf(tar_name, "%s%s", mic_crossover_name[i], mic_name);
        crossover_update_parm(scene, tar_name, 0);
    }
#endif

#if ((defined TCFG_3BAND_MERGE_ENABLE) || ((defined TCFG_2BAND_MERGE_ENABLE)))
    for (int i = 0; i < ARRAY_SIZE(mic_band_merge_name); i++) {
        sprintf(tar_name, "%s%s", mic_band_merge_name[i], mic_name);
        band_merge_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_FREQUENCY_SHIFT_HOWLING_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_howling_fs_name); i++) {
        sprintf(tar_name, "%s%s", mic_howling_fs_name[i], mic_name);
        howling_frequency_shift_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_NOTCH_HOWLING_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_howling_supress_name); i++) {
        sprintf(tar_name, "%s%s", mic_howling_supress_name[i], mic_name);
        howling_suppress_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_VOICE_CHANGER_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_voice_changer_name); i++) {
        sprintf(tar_name, "%s%s", mic_voice_changer_name[i], mic_name);
        voice_changer_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_AUTOTUNE_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_autotune_name); i++) {
        sprintf(tar_name, "%s%s", mic_autotune_name[i], mic_name);
        autotune_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_PLATE_REVERB_ADVANCE_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_plate_reverb_advance_name); i++) {
        sprintf(tar_name, "%s%s", mic_plate_reverb_advance_name[i], mic_name);
        reverb_advance_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_ECHO_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_echo_name); i++) {
        sprintf(tar_name, "%s%s", mic_echo_name[i], mic_name);
        echo_update_parm(scene, tar_name, 0);
    }
#endif

#ifdef TCFG_PLATE_REVERB_LITE_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_plate_reverb_advance_name); i++) {
        sprintf(tar_name, "%s%s", mic_plate_reverb_advance_name[i], mic_name);
        reverb_update_parm(scene, tar_name, 0);
    }
#endif

    for (int i = 0; i < ARRAY_SIZE(mic_eq_name); i++) {
        sprintf(tar_name, "%s%s", mic_eq_name[i], mic_name);
        eq_update_parm(scene, tar_name, 0);
    }
    for (int i = 0; i < ARRAY_SIZE(mic_drc_name); i++) {
        sprintf(tar_name, "%s%s", mic_drc_name[i], mic_name);   
        drc_update_parm(scene, tar_name, 0);
    }

#ifdef TCFG_BASS_TREBLE_NODE_ENABLE
    for (int i = 0; i < ARRAY_SIZE(mic_bass_treble_name); i++) {
        sprintf(tar_name, "%s%s", mic_bass_treble_name[i], mic_name);
        bass_treble_update_parm(scene, tar_name, 0);
    }
#endif
}

```c-like /* mic混响:根据参数组个数顺序切换场景 */ void mic_effect_scene_switch() { int scene_num = get_mic_effect_scene_num(); if (!scene_num) { puts("scene switch err\n"); return; } mic_scene++; if (mic_scene >= scene_num) { mic_scene = 0; } printf("mic_scene!!! =%d",mic_scene); // mic_effect_scene_set_bypass_all(mic_scene); mic_effect_scene_set_release(mic_scene); // mic_effect_scene_set(mic_scene);

}

<br>修改 effects_default_param.c<br>
```c-like
#if 1
    char *mic_node_name[] = {"Eq1Eff","Limiter1", "FshiftEff", "VchangerEff", "EchoEff", "PReverbEff", "Eq2Eff"};
    for(int i=0; i<ARRAY_SIZE(mic_node_name); i++) {
        if(!strcmp(name->name, mic_node_name[i])) {
            printf("-------%s",mic_node_name[i]);
            struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;    
            get_parm->mode_index = get_mic_current_scene();
            get_parm->cfg_index = 0;        //目标配置项
            ret = 1;
            break;
        }
    
    }
#endif


image
更新node_param_update.c

void reverb_update_parm(u8 mode_index, char *node_name, u8 cfg_index)
{
    plate_reverb_param_tool_set cfg = {0};
    int ret = jlstream_read_form_data(mode_index, node_name, cfg_index, &cfg);
    if (!ret) {
        printf("read parm err, %s, %s\n", __func__, node_name);
        return;
    }
    printf("cfg.bypass=%d",cfg.is_bypass);
    jlstream_set_node_param(NODE_UUID_PLATE_REVERB, node_name, &cfg, sizeof(cfg));
    jlstream_set_node_param(NODE_UUID_PLATE_REVERB_LITE, node_name, &cfg, sizeof(cfg));
}


image
| | 706n_soundbox_007,话筒音效叠加其他任一解码音效,期间打断方式播放MP3提示音,会出现ram不足异常死机 | 下载压缩包,对比tone_player.c文件的修改点
提示音开关混响_tone_player.rar | | 706n_soundbox_007,fm模式下播放提示音会出现ram不足异常死机 | 下载压缩包,对比文件的修改点,仅是提供一个参考修改方法。
fm开关处理.rar |

  1. soundbox_sdk_patch007,开启TWS功能,解码U盘过程中拔出退出到蓝牙模式出现死机 下载压缩包,对比进行修改
    soundbox_patch007,开启TWS功能,解码U盘过程中拔出退出到蓝牙模式出现死机.rar
  2. le_audio_200-P2,为节省资源需在播放MP3提示音前后开关一下无线话筒的音效,调用接口会造成话筒断连的,需要做个接口,保持连接
apps\soundbox\wireless_trans\le_audio\big\le_broadcast.c
int broadcast_audio_all_close(u16 big_hdl)
{
    u8 i;
    struct broadcast_hdl *p;
    void *recorder = 0;
    struct broadcast_rx_audio_hdl player;

    player.le_audio = 0;
    player.rx_stream = 0;

    broadcast_mutex_pend(&broadcast_mutex, __LINE__);
    spin_lock(&broadcast_lock);
    list_for_each_entry(p, &broadcast_list_head, entry) {
        if (p->big_hdl == big_hdl) {
            //关闭原来的recorder
            if (broadcast_role == BROADCAST_ROLE_TRANSMITTER) {
                for (i = 0; i < get_bis_num(BROADCAST_ROLE_TRANSMITTER); i++) {
                    if (p->bis_hdl_info[i].recorder) {
                        recorder = p->bis_hdl_info[i].recorder;
                        p->bis_hdl_info[i].recorder = NULL;
                        p->bis_hdl_info[i].init_ok = 0;
                    }
                    spin_unlock(&broadcast_lock);

                    if (recorder) {
                        if (le_audio_switch_ops && le_audio_switch_ops->tx_le_audio_close) {
                            le_audio_switch_ops->tx_le_audio_close(recorder);
                        }
                    }
                    spin_lock(&broadcast_lock);
                }
            } else if (broadcast_role == BROADCAST_ROLE_RECEIVER) {
                for (i = 0; i < get_bis_num(BROADCAST_ROLE_RECEIVER); i++) {
                    if (p->bis_hdl_info[i].rx_player.le_audio) {
                        player.le_audio = p->bis_hdl_info[i].rx_player.le_audio;
                        p->bis_hdl_info[i].rx_player.le_audio = NULL;
                        p->bis_hdl_info[i].init_ok = 0;
                    }

                    if (p->bis_hdl_info[i].rx_player.rx_stream) {
                        player.rx_stream = p->bis_hdl_info[i].rx_player.rx_stream;
                        p->bis_hdl_info[i].rx_player.rx_stream = NULL;
                        p->bis_hdl_info[i].init_ok = 0;
                    }
                    spin_unlock(&broadcast_lock);

                    if (player.le_audio && player.rx_stream) {
                        if (le_audio_switch_ops && le_audio_switch_ops->rx_le_audio_close) {
                            le_audio_switch_ops->rx_le_audio_close(&player);
                            player.le_audio = NULL;
                            player.rx_stream = NULL;
                        }
                    }
                    spin_lock(&broadcast_lock);
                }
            }
        }
    }
    spin_unlock(&broadcast_lock);
    broadcast_mutex_post(&broadcast_mutex, __LINE__);

    return 0;
}


int broadcast_audio_all_open(u16 big_hdl)
{

    u8 find = 0;
    struct broadcast_hdl *broadcast_hdl = 0;
    struct le_audio_stream_params params = {0};

    u8 i = 0;
    void *recorder = 0;

    broadcast_mutex_pend(&broadcast_mutex, __LINE__);
    list_for_each_entry(broadcast_hdl, &broadcast_list_head, entry) {
        if (broadcast_hdl->big_hdl == big_hdl) {
            find = 1;
            break;
        }
    }
    broadcast_mutex_post(&broadcast_mutex, __LINE__);

    le_audio_switch_ops = get_broadcast_audio_sw_ops();

    //关闭本地音频播放
    if (le_audio_switch_ops && le_audio_switch_ops->local_audio_close) {
        le_audio_switch_ops->local_audio_close();
    }

    params.fmt.nch = get_big_audio_coding_nch();
    params.fmt.bit_rate = get_big_audio_coding_bit_rate();
    params.fmt.coding_type = LE_AUDIO_CODEC_TYPE;
    params.fmt.frame_dms = get_big_audio_coding_frame_duration();
    params.fmt.sdu_period = get_big_sdu_period_us();
    params.fmt.sample_rate = LE_AUDIO_CODEC_SAMPLERATE;
    params.fmt.dec_ch_mode = LEA_RX_DEC_OUTPUT_CHANNEL;
    params.reference_time = broadcast_audio_reference_time;
    params.conn = broadcast_hdl;

    broadcast_mutex_pend(&broadcast_mutex, __LINE__);
    if (find) {
        if (broadcast_role == BROADCAST_ROLE_TRANSMITTER) {
            for (i = 0; i < get_bis_num(BROADCAST_ROLE_TRANSMITTER); i++) {
                if (!broadcast_hdl->bis_hdl_info[i].recorder) {
                    if (le_audio_switch_ops && le_audio_switch_ops->tx_le_audio_open) {
                        recorder = le_audio_switch_ops->tx_le_audio_open(&params);
                        spin_lock(&broadcast_lock);
                        broadcast_hdl->bis_hdl_info[i].recorder = recorder;
                        broadcast_hdl->bis_hdl_info[i].init_ok = 1;
                        spin_unlock(&broadcast_lock);
                    }
                }
            }
        } else if (broadcast_role == BROADCAST_ROLE_RECEIVER) {
            for (i = 0; i < get_bis_num(BROADCAST_ROLE_RECEIVER); i++) {
                if (!broadcast_hdl->bis_hdl_info[i].bis_hdl) {
                    continue;
                }
                if ((!broadcast_hdl->bis_hdl_info[i].rx_player.le_audio) &&
                    (!broadcast_hdl->bis_hdl_info[i].rx_player.rx_stream)) {
                    if (le_audio_switch_ops && le_audio_switch_ops->rx_le_audio_open) {
                        le_audio_switch_ops->rx_le_audio_open(&broadcast_hdl->bis_hdl_info[i].rx_player, &params);
                        spin_lock(&broadcast_lock);
                        broadcast_hdl->bis_hdl_info[i].init_ok = 1;
                        spin_unlock(&broadcast_lock);
                    }
                }
            }
        }
    }
    broadcast_mutex_post(&broadcast_mutex, __LINE__);
    return 0;
}

apps\soundbox\wireless_trans\le_audio\big\app_le_broadcast.c
void user_broadcast_audio_all_close(void)
{
    for (u8 i = 0; i < BIG_MAX_NUMS; i++) {
        if (app_big_hdl_info[i].used && app_big_hdl_info[i].big_hdl) {
            
            line_inf
            broadcast_audio_all_close( app_big_hdl_info[i].big_hdl);//
                       
            // ret = broadcast_close(app_big_hdl_info[i].big_hdl);
            // memset(&app_big_hdl_info[i], 0, sizeof(struct app_big_hdl_t));
            // app_big_hdl_info[i].big_status = status;
        }
    }
}

void user_broadcast_audio_all_open(void)
{
    for (u8 i = 0; i < BIG_MAX_NUMS; i++) {
        if (app_big_hdl_info[i].used && app_big_hdl_info[i].big_hdl) {
            
            line_inf
            broadcast_audio_all_open( app_big_hdl_info[i].big_hdl);//
                    
            // ret = broadcast_close(app_big_hdl_info[i].big_hdl);
            // memset(&app_big_hdl_info[i], 0, sizeof(struct app_big_hdl_t));
            // app_big_hdl_info[i].big_status = status;
        }
    }
}

  1. le_audio_200-P2,706n_wireless_mic_200,tx开启echo,连接成功后音箱端会有PO声 修改文件
    sound_device_driver_增加话筒数据淡入.zip
  2. 706n_le_audio_200,播放提示音前后开关无线话筒解码,如果播放提示音是wtg格式,会出现PO声,如果播放的是MP3提示音则没有PO声出来 测试到有该问题,可以先临时用MP3提示音播放
  3. 706n_le_audio,ram不足死机汇总解决列表
问题描述解决方法
706n_le_audio_200,U盘解码MP3加两个无线话再增加一个AD101N灯板显示功能会ram不足死机
706n_le_audio_200,U盘解码MP3歌曲,两个无线话筒连接成功,将其中一个话筒不停开关,会复现出ram不足死机
706n_le_audio_200,仅仅修改音频配置为双声道,媒体和系统等音频流没有切换成对应立体声音频流程时,连接两个话筒后会出现ram不足死机
706n_le_audio_200,广播主机开关容易死机1.DRC改limiter
image
2.config_jlstream_use_icache_num=2;
3.关闭广播后再播放关闭广播的提示音
  1. le_audio_100-P5,为节省资源需在播放MP3提示音前后开关一下无线话筒的音效,调用接口会造成话筒断连的,需要做个接口,保持连接
apps\soundbox\wireless_trans\le_audio\cig\le_connected.c
int le_connected_audio_all_close(u16 cig_hdl)
{
    u8 i;
    int ret;
    void *recorder = 0;
    int player_status = 0;
    struct connected_rx_audio_hdl player;

    player.le_audio = 0;
    player.rx_stream = 0;
    
    if (!connected_init_flag) {
        return -1;
    }
    log_info("--func=%s", __FUNCTION__);
    //TODO:获取播放状态
    if (le_audio_switch_ops && le_audio_switch_ops->play_status) {
        player_status = le_audio_switch_ops->play_status();
    }
    struct connected_hdl *p, *n;
    connected_mutex_pend(&connected_mutex, __LINE__);
    spin_lock(&connected_lock);
    list_for_each_entry_safe(p, n, &connected_list_head, entry) {
        if (p->cig_hdl != cig_hdl) {
            continue;
        }
        for (i = 0; i < CIS_MAX_CONNECTABLE_NUMS; i++) {
            p->cis_hdl_info[i].init_ok = 0;
            // p->cis_hdl_info[i].cis_hdl = 0;
            if (p->cis_hdl_info[i].recorder) {
                recorder = p->cis_hdl_info[i].recorder;
                p->cis_hdl_info[i].recorder = NULL;
            }
            if (p->cis_hdl_info[i].rx_player.le_audio) {
                player.le_audio = p->cis_hdl_info[i].rx_player.le_audio;
                p->cis_hdl_info[i].rx_player.le_audio = NULL;
            }
            if (p->cis_hdl_info[i].rx_player.rx_stream) {
                player.rx_stream = p->cis_hdl_info[i].rx_player.rx_stream;
                p->cis_hdl_info[i].rx_player.rx_stream = NULL;
            }
            spin_unlock(&connected_lock);
            if (recorder) {
                //TODO:关闭recorder
                if (le_audio_switch_ops && le_audio_switch_ops->tx_le_audio_close) {
                    le_audio_switch_ops->tx_le_audio_close(recorder);
                    recorder = NULL;
                }
            }
            if (player.le_audio && player.rx_stream) {
                //TODO:关闭player
                if (le_audio_switch_ops && le_audio_switch_ops->rx_le_audio_close) {
                    le_audio_switch_ops->rx_le_audio_close(&player);
                    player.le_audio = NULL;
                    player.rx_stream = NULL;
                }
            }
            spin_lock(&connected_lock);
        }
    }
    spin_unlock(&connected_lock);
    connected_mutex_post(&connected_mutex, __LINE__);

    return 0;
}

int le_connected_audio_all_open(u16 cig_hdl)
{

    u8 find = 0;
    u8 index = 0;
    struct connected_hdl *connected_hdl = 0;
    struct le_audio_stream_params params = {0};
    cig_hdl_t * hdl = (cig_hdl_t *)cig_hdl;
    
    u8 i = 0;
    void *recorder = 0;
    
    if (!connected_init_flag) {
        return -1;
    }

    connected_mutex_pend(&connected_mutex, __LINE__);
    list_for_each_entry(connected_hdl, &connected_list_head, entry) {
        if (connected_hdl->cig_hdl == cig_hdl) {
            find = 1;
            break;
        }
    }
    connected_mutex_post(&connected_mutex, __LINE__);


    for (i = 0; i < CIS_MAX_CONNECTABLE_NUMS; i++) {
        if (!connected_hdl->cis_hdl_info[i].cis_hdl) {
            index = i;
            break;
        }
    }

    le_audio_switch_ops = get_connected_audio_sw_ops();

    //关闭本地音频播放
    if (le_audio_switch_ops && le_audio_switch_ops->local_audio_close) {
        le_audio_switch_ops->local_audio_close();
    }

    params.fmt.nch = get_cig_audio_coding_nch();
    params.fmt.bit_rate = get_cig_audio_coding_bit_rate();
    params.fmt.coding_type = LE_AUDIO_CODEC_TYPE;
    params.fmt.frame_dms = get_cig_audio_coding_frame_duration();
    params.fmt.sdu_period = get_cig_sdu_period_us();
    params.fmt.sample_rate = LE_AUDIO_CODEC_SAMPLERATE;
    params.fmt.dec_ch_mode = LEA_TX_DEC_OUTPUT_CHANNEL;
    params.reference_time = connected_audio_reference_time;
    params.conn = connected_hdl;

    params.fmt.dec_ch_mode = LEA_RX_DEC_OUTPUT_CHANNEL;

    connected_mutex_pend(&connected_mutex, __LINE__);
    if (find) {
        for (i = 0; i < CIS_MAX_CONNECTABLE_NUMS; i++) {
            if (!connected_hdl->cis_hdl_info[i].cis_hdl) {
                continue;
            }
            if ((!connected_hdl->cis_hdl_info[i].rx_player.le_audio) &&
                (!connected_hdl->cis_hdl_info[i].rx_player.rx_stream)) {
                if (le_audio_switch_ops && le_audio_switch_ops->rx_le_audio_open) {
                    le_audio_switch_ops->rx_le_audio_open(&connected_hdl->cis_hdl_info[i].rx_player, &params);
                    spin_lock(&connected_lock);
                    connected_hdl->cis_hdl_info[i].init_ok = 1;
                    spin_unlock(&connected_lock);
                }
            }
        }
    }
    connected_mutex_post(&connected_mutex, __LINE__);
    return 0;
}

apps\soundbox\wireless_trans\le_audio\cig\app_le_connected.c
void user_le_connected_audio_all_close(void)
{
    for (u8 i = 0; i < CIS_MAX_CONNECTABLE_NUMS; i++) {
        if (app_cig_conn_info[i].used && app_cig_conn_info[i].cig_hdl) {
            le_connected_audio_all_close(app_cig_conn_info[i].cig_hdl);//
            // ret = broadcast_close(app_big_hdl_info[i].big_hdl);
            // memset(&app_big_hdl_info[i], 0, sizeof(struct app_big_hdl_t));
            // app_big_hdl_info[i].big_status = status;
        }
    }
}

void user_le_connected_audio_all_open(void)
{
    for (u8 i = 0; i < CIS_MAX_CONNECTABLE_NUMS; i++) {
        if (app_cig_conn_info[i].used && app_cig_conn_info[i].cig_hdl) {
            le_connected_audio_all_open( app_cig_conn_info[i].cig_hdl);//
            // ret = broadcast_close(app_big_hdl_info[i].big_hdl);
            // memset(&app_big_hdl_info[i], 0, sizeof(struct app_big_hdl_t));
            // app_big_hdl_info[i].big_status = status;
        }
    }
}
  1. le_audio_100-P5,开不可屏蔽中断后,导致写VM死机,无断言打印。 【金山文档 | WPS云文档】 system.a(6d7a790b 添加多核才获取lock条件)0906
    https://kdocs.cn/l/ccenwQVlSkkE

  2. AC706N_le_audio_V2.0.0_patch04开启录音功能失败 开启打印的错误信息如下:
    image 处理方法:
    image

  3. AC706N_3ln1_wireless_mic_tx SDK,开启led7_UI显示闪烁问题 image

  4. 需要增加timer定时器,并且将led7_driver.c放入RAM中,需修改以下文件,对比修改。 file.rar

  5. JL706N-soundbox_1.0.0(patch 01) SDK 实现提示音无缝播放 具体可以参考附件里面:FILE_DEC_DEST_PLAY 宏定义的内容:
    提示音无缝播放修改对比文件.zip
    关键函数如下:
    imageimageimage

  6. JL706N-soundbox_1.0.0(patch 02) SDK FM搜台时间较三合一方案要长很多 LTY 706soundbox方案(300ms)收音确认真假台时间比LEaudio的时间(84ms)长太多了
    image 解决方案:
    换CPU.a库
    cpu(2024年12月23日_sounboxV1.0P2优化收台速度)

  7. AC706N_le_audio_V1.0.0_patch05 旧SDK 按键连击会有串键的情况发生。(最新的SDK已经修复)LTY image

    if (key->event == KEY_ACTION_NO_KEY) {
        if (click_cnt >= 2) {
            u16 multi_click_temp = KEY_ACTION_DOUBLE_CLICK + (click_cnt - 2);
            if (multi_click_temp < KEY_ACTION_MAX) {
                key->event = multi_click_temp;
            }
        } else {
            key->event = KEY_ACTION_CLICK;
        }
  1. AC706N音箱SDK 使用一组SPI切换DO数据脚映射(用于推两条RGB灯光)LTY imageimage
  2. AC706N系列HW_SPI分时复用使用方法 复用应用.otl
  3. le_audio_v200p08配置SDPG为SD卡供电脚,升级时无法维持 适用场景:SDPG做维持io给样机供电
    修改方法:配置SD卡电源为SD_PWR_NULL和SDPG一直打开,然后按截图修改sd0_update的配置。
    这样配置也是以SDPG作为SD卡的供电脚,且一直维持高电平。
    imageimage
  4. AC706N_3ln1_wireless_mic_tx_2.0.0(patch_04)SDK 软关机无法配置VDDIO掉电 修改方法:配置soff_mode为0。
    image
  5. AC706N_le_audio_2.0.0(patch_08.06)SDK 关闭1T3 功能和FM模式使能后,插入U盘后再拔出U盘切换到BT 模式触发死机断言 问题复现:会触发这个创建 btencry 线程错误的断言
[00:00:09.825]le_config:1 0 0 0
[00:00:09.825][LMP]>>>btctrler_task_init<<<
[00:00:09.825]cpu 0 file:/jks/workspace/manifest_dev_soundbox_export/btsdk/lib/system/task/task.c, line:88
[00:00:09.826]ASSERT-FAILD: err == OS_ERR_NONE task_create_faild: btencry, 25

image 问题解决:
增加 mode_try_exit = APP_MODE_NULL;
image 29. AC706N_le_audio_2.0.0(patch_08.06)SDK 增加频谱获取节点后,播放U盘歌曲第一首结束后会触发死机断言 问题表现:触发spec255 info unknow 断言
image 解决办法:替换media.a
leaudi_AC706N_2.0.0(patch_08.06)_br29频谱创建线程失败问题.zip

测试用例

  1. AC7068M话筒省电容麦克风demo程序 以下提供可以直接下载到省电容麦克风的程序,PA1做为MIC脚,PA0是MIC_BIAS脚,由于AC7068M的5脚PA1和PA0刚好邦定一起,5脚既可以做信号采集也可以提供偏置电压。
    image7068M_话筒_省电容_1.0.0_patch03.zip
  2. AC706N 杰理开发平台添加能量检测 具体可以看项目帮助文档——能量检测
    image
  3. 添加对应的音频节点 image
  4. 3in1_wireless_mic_tx 200P2 7068M串口在线调试demo 样机引脚配置:
    TX:P00(VPWR),去掉该引脚上的电阻电容防止信号干扰
    RX:PC4
    200P2-BOX开TWS-7068M-MIC串口在线调试[RX-PC4_TX-P00(VPWR)].7z
  • 如果关打印不能在线调试尝试如下修改
    #if ((defined CONFIG_DEBUG_ENABLE) && (TCFG_UART0_ENABLE))
    __this->udev = uart_init(-1, &config);
    #else
    __this->udev = uart_init(1, &config);
    #endif

image

  1. 3in1_wireless_mic_tx 100P3 7068M串口在线调试demo 样机引脚配置:
    TX:P00(VPWR),去掉该引脚上的电阻电容防止信号干扰
    RX:PC4
    demo(已修复关打印不能在线调试问题):3in1_wireless_mic_tx_100P03_7068M_在线调音.7z
  2. AC7069F蓝牙头戴耳机标准原理图V1.1 程序配置范例 使用SDK:soundbox 0.1.0 版本 或者 sounbox_1.0.0_patch02 以后版本
    对应的工具配置
  • 板级配置(LED灯的IO不能调换,驱动写死,一定是PC4配红灯,PC5配蓝灯!!!!!) imageimageimageimage
  • 按键配置 image
  • 功能配置 image
  1. AC706N-le_audio-200SDK有线/无线麦录音demo DEMO 程序 1
    AC706N-le_audio-200SDK有线_无线麦录音demo.otl
    706n_le_audio_2.0.0_patch_08_无线有线录音demo.rar
    image
  2. 因ram资源问题,有线麦和无线麦不能同时录音,看情况选择是否配置可以连接1个无线话筒或2个无线话筒。如下图的宏定义 RX_USED_BIS_NUM image
  3. 录音过程中,如果录音的是无线话筒,当无线话筒均断开后,录音自动结束,保存录音文件。
  4. 录音过程中,如果录音的是有线话筒,话筒拔出退出音频流程,录音自动结束,保存录音文件。
  5. 录音过程中,如果录音的是无线话筒,插入有线话筒,录音自动结束,保存录音文件。
  6. 录音过程中,如果录音的是有线话筒,无线话筒连接上,录音自动结束,保存录音文件。
  7. 发起录音,录音模式下使用APP_MSG_REC_PP消息。
  8. 编码器的采样率必须配置为44100采样率,demo程序中已经配置好,否则会出现无线话筒连接上/有线话筒打开,没有声音的问题。具体打印信息会出现‘H’,意味着音频流协商出现问题。
  9. SDK包含了无线话筒程序,le_audio程序,以及v6stencil.stencil文件,v6stencil.stencil文件需要替换到对应的patch路径中,如C:\JLStudio.netcache\le_audio_AC706N_2.0.0_patch_08\config\config image 9、如果案子使能 TCFG_DEV_MANAGER_ALONE_DEVICE_LIMIT 使能开关(DM复用SD_CMD)
    需要添加以下代码
    image

DEMO 程序 2
le_audio_200_patch04_录音功能开发.rar

  1. 该SDK开启了0编码,可以支持无线话筒都断开的时候继续保存录音,需要手动关闭录音。
  2. 支持双无线话筒录音 修复的一些异常BUG:
    修复录音时拔出sd卡死机问题:
//*----------------------------------------------------------------------------*/
/**@brief    设备下线预处理
   @param
                event:设备事件
   @return
   @note     根据特殊情景,这里可以处理一些例如io复用处理
*/
/*----------------------------------------------------------------------------*/
static int dev_manager_del_prepare(int *msg)
{
    int ret = 0;
    switch (msg[0]) {
    case DRIVER_EVENT_FROM_SD0:
    case DRIVER_EVENT_FROM_SD1:
    case DRIVER_EVENT_FROM_SD2:
#if (USER_EX_WIRELESS_MIC_RECORD_MODE_EN && TCFG_APP_RECORD_EN)
        extern void ex_record_stream_close(void);
        extern void app_audio_mute(u8 value);
        if (get_rec_stream_state()) {
            ex_record_stream_close();
            app_audio_mute(1);
        }
#endif
        mult_sd_offline_before((char *)msg[2], g_usb_id);
        break;
//#if TCFG_UDISK_ENABLE || TCFG_HOST_AUDIO_ENABLE
//    case DEVICE_EVENT_FROM_OTG:
//        ///host umount
//        usb_host_unmount(g_usb_id);
//        break;
//#endif
    }
    return ret;
}
  1. AC706N-le_audio-200P08 Linein 设置DAC为高阻态 注:
  2. linein/AUX 座子上的R/L与主控DAC R/L 并联之后接入功放/耳机,在插入linein/AUX之后需要把主控DAC设置为高阻态同时关掉DAC偏置 image
  3. Demo ac706_le_audio_2.0.0P08-linein设置dac为高阻态.7z(测试dmeo的flash配置为双线,如果下载到样机上开不了机请还原为4线)
    image
  4. 强定义void audio_dac_power_state(u8 state)接口,并编写实现
    1. 库里面该接口为弱定义 attribute((weak)) void audio_dac_power_state(u8 state);
    2. void audio_dac_power_state(u8 state)该接口主要是控制dac高阻态的开关
    3. 该接口在dac_power_off、dac_power_on中有调用该接口,如果在没有音频流工作时,调用这两个接口会把dac偏置关掉。
void audio_dac_power_state(u8 state){
    g_printf("audio_dac_power_state set state=%d 0x%x\n",state,JL_ADDA->DAA_CON2);
    extern struct audio_dac_hdl dac_hdl;
    switch (state){
    case DAC_ANALOG_CLOSE_FINISH:
        SFR(JL_ADDA->DAA_CON2,    23,  1,   1);            //SDDAC_TRIM_EN_11v
        break;
    case DAC_ANALOG_OPEN_FINISH:
        SFR(JL_ADDA->DAA_CON2,    23,  1,   0);            //SDDAC_TRIM_EN_11v
        break;
    default:
        break;
    }
    g_printf("audio_dac_power_state --- 0x%x\n",JL_ADDA->DAA_CON2);
}
  1. 进linein时调用dac_power_off 退出时调用dac_power_on
//*----------------------------------------------------------------------------*/
/**@brief    linein 入口
  @param    无
  @return
  @note
 */
/*----------------------------------------------------------------------------*/
static int linein_tone_play_end_callback(void *priv, enum stream_event event)
{
    if (false == app_in_mode(APP_MODE_LINEIN)) {
        return 0;
    }
    switch (event) {
    case STREAM_EVENT_NONE:
    case STREAM_EVENT_STOP:
        // 注释掉原来lienin流程
        // app_send_message(APP_MSG_LINEIN_START, 0);

        //关dac偏置 设置dac为高阻态
        dac_power_off();
        break;
    default:
        break;
    }
    return 0;
}


void app_linein_exit()
{
    app_set_current_mode(app_get_mode_by_name(APP_MODE_NULL));        //这里把MODE设置成NULL,防止快速切模式的时候提示音还没播完已经退出当前模式,在提示音回调里还继续开广播
    linein_stop();
    linein_idle_flag = 1;
    app_send_message(APP_MSG_EXIT_MODE, APP_MODE_LINEIN);
    /* tone_player_stop(); */

    //恢复dac设置
    dac_power_on();
}
  1. AC706N-le_audio-200P0803 广播 DEMO:
    jl706nle_audio_2.0.0-feature_200_P0803_JLA_LW48000-广播dmeo.zip(文件夹的名称比较长解压之后重命名一个短一些的名称不然超过windows路径长度编译报找不到文件)
    内部地址
  2. 706 le audio200P0806开BIS广播 测试demo:AC706_le_audio_2.0.0-p0806-music广播.7z
  3. 广播与1T3功能冲突,需要关1T3使能 image
  4. 帧持续时间默认为12.5ms会卡顿,改为10ms image
  5. 编码格式根据项目自行选择 image
    1. JLA 使用48K采样 音质最好,内存使用最大
    2. JLA_LW 使用32K采样 音质中等,内存使用中等
    3. JLA_LL 使用16K采样 音质低,内存使用最少
  6. PKT_V3可开可不开
  7. AC706N IO中断
// 中断回调函数
gpio_irq_callback_p_test1(enum gpio_port port, u32 pin, enum gpio_irq_edge edge)
{
    printf("port%d.%d:%d-cb1\n", port, pin, edge);
}
// 中断初始化
    struct gpio_irq_config_st gpio_irq_config_C = {
        .pin = PORT_PIN_1|PORT_PIN_3|PORT_PIN_4|PORT_PIN_5, //PORT_PIN_
        .irq_edge = PORT_IRQ_EDGE_FALL,//PORT_IRQ_ANYEDGE
        .callback = gpio_irq_callback_p_test1,
        .irq_priority = 2, //中断优先级
    };
    gpio_irq_config(PORTC, &gpio_irq_config_C);

    struct gpio_irq_config_st gpio_irq_config_B = {
        .pin = PORT_PIN_0|PORT_PIN_1|PORT_PIN_3|PORT_PIN_4|PORT_PIN_5|PORT_PIN_6|PORT_PIN_7, //PORT_PIN_
        .irq_edge = PORT_IRQ_EDGE_FALL,//PORT_IRQ_ANYEDGE
        .callback = gpio_irq_callback_p_test1,
        .irq_priority = 2, //中断优先级
    };
    gpio_irq_config(PORTB, &gpio_irq_config_B);

    struct gpio_irq_config_st gpio_irq_config_A = {
        .pin = PORT_PIN_0|PORT_PIN_1|PORT_PIN_3|PORT_PIN_4|PORT_PIN_7, //PORT_PIN_
        .irq_edge = PORT_IRQ_EDGE_FALL,//PORT_IRQ_ANYEDGE
        .callback = gpio_irq_callback_p_test1,
        .irq_priority = 2, //中断优先级
    };
    gpio_irq_config(PORTA, &gpio_irq_config_A);

demo

内部链接

补丁:

AC706N_le_audio_sdk_release_2.0.0_patch_08.03 PC5无法触发需要替换以下的库文件
cpu_修改PC5无法映射中断问题(br29-ac706n_3In1_soundbox_release_200p8)
AC706N-IO中断代码
11. AC706N MCPWM 示范代码:SDK\cpu\br29\periph\mcpwm.c

void mcpwm_test(void) //直接调用即可

补丁:

  • AC706N_le_audio_sdk_release_2.0.0_patch_08 以及相关SDK 设置占空比的函数没有实现完整需要按一下函数进行修改:
    可能会引起设置0/100占空比后pwm没有波形输出的问题
    void mcpwm_set_duty(int mcpwm_cfg_id, u16 duty)
void mcpwm_set_duty(int mcpwm_cfg_id, u16 duty)
{
    ASSERT(mcpwm_info[mcpwm_cfg_id] != NULL, "func:%s(), line:%d\n", __func__, __LINE__);
    int id = mcpwm_cfg_id;
    u32 ch = (u32)mcpwm_info[id]->cfg.ch;
    MCPWM_TIMERx_REG *timer_reg = mcpwm_get_timerx_reg(ch);
    MCPWM_CHx_REG *ch_reg = mcpwm_get_chx_reg(ch);

    u16 ch_cmph = 0;
    u16 ch_cmpl = 0;
    u16 tmr_cnt = 0;
    u16 tmr_con = timer_reg->tmr_con;
    u16 tmr_pr = timer_reg->tmr_pr;
    asm("csync");

    ch_cmpl = tmr_pr * duty / 10000;
    printf("---%d---%d---%d\n", ch_cmpl, tmr_pr, duty);
    ch_cmph = ch_cmpl;
    tmr_cnt = 0;
    /* tmr_con |= 0b01; */
    if (duty == 10000) {
        tmr_cnt = 0;
        tmr_con &= ~(0b11);
    } else if (duty == 0) {
        tmr_cnt = ch_cmpl;
        tmr_con &= ~(0b11);
    } else {
        if (mcpwm_info[id]->cfg.aligned_mode == MCPWM_CENTER_ALIGNED) { //中心对齐
            tmr_con |= 0b10; //递增-递降循环模式,中心对齐
        } else {
            tmr_con |= 0b01; //递增模式,边沿对齐
        }
    }

    spin_lock(&mcpwm_lock);
    ch_reg->ch_cmph = ch_cmph;
    ch_reg->ch_cmpl = ch_cmpl;
    u32 mcpwm_con = JL_MCPWM->MCPWM_CON0;
    JL_MCPWM->MCPWM_CON0 |= BIT(16);
    timer_reg->tmr_cnt = tmr_cnt;
    timer_reg->tmr_con = tmr_con;
    JL_MCPWM->MCPWM_CON0 = mcpwm_con;
    spin_unlock(&mcpwm_lock);
}
  1. AC706N 杰理之家 SDK:AC706N_soundbox_1.0.0_patch_04.02 (开始支持杰理之家,没有权限的客户需要单独申请)
    补丁资料:
    gitlab 最新维护分支:
    Files · feature_1.0.0_patch_04.02_杰理之家 · JL-Studio / SoundBox / 706N / AC706N_SoundBox_1.0.0 · GitLab
    2025年12月03日:
    SDK:AC706N_soundbox_1.0.0_patch_04.02
    使用方法:压缩包解压后,直接覆盖原工程。然后重新打开工程,重新编译
    feature_1.0.0_patch_04.02_杰理之家_f951b308.7z
    image 2025年11月14日:
    SDK:AC706N_soundbox_1.0.0_patch_04.02
    使用方法:压缩包解压后,直接覆盖原工程。然后重新打开工程,重新编译
    imagefeature_1.0.0_patch_04.02_杰理之家_4a5711cc.zip

  2. 小度APP SDK:AC706N_soundbox_1.0.0_patch_08.06
    demo:706_le_audio_2.0.0_P08.06_xiaodu_20260112.rar
    修改点:

  3. 支持小度2.0.0版本

  4. 设置普通io为串口主从升级功能 升级主从设置
    image

  • le_audio-AC706N-2.0.0-patch_08 SDK:le_audio-AC706N-2.0.0-patch_08
    demo:patch08主从机升级验证ok.zip
  • soundbox-AC706N-1.0.0-patch_04.02
  • 单备份: Files · feature_普通io串口单备份升级 · JL-Studio / SoundBox / 706N / AC706N_SoundBox_1.0.0 · GitLab
  • 双备份: Files · feature_普通io串口双备份升级 · JL-Studio / SoundBox / 706N / AC706N_SoundBox_1.0.0 · GitLab
    注意:
    设置的大小与实际的对应不上会升级失败,比如:配置为8M实际为16M 升级显示成功但是实际重新上电还是原来的程序。
    image 优化代码空间:
    image
  1. le_audio-AC706N-2.0.0-patch_08 添加提示音无缝循环播放 demo: 706_200_08提示音循环无缝播放.rar

  2. AC706N_le_audio_V2.0.0_patch08.07 播放提示音时加减提示音音量 Files · feature_调节提示音音量_08.07 · JL-Studio / Leaudio / 706N / AC706_le_audio_2.0.0 · GitLab
    注意:

  3. 音量调节的节点名称程序与音频流必须一 一对应 image

  4. demo里面用的是叠加接口播放提示音的接口,如果是非叠加播放接口需要自己去实现 image

  5. 默认加减提示音的节点是Vol_SysTone如果需要改成其他的可以自行修改相关参数与名称 image

  6. AC706N_le_audio_V2.0.0_patch08.06 外挂FM RDA5807 内部链接:Files · feature_200_patch_08.06_外挂FM5807 · 自由品牌 / 客户支持 / JLStudio / le_audio / JL706Nle_audio_2.0.0 · GitLab
    demo:706_le_audio_2.0.0_08.06_RDA5807.rar
    修改内容:

  7. 添加外挂FM(RDA5807),使用软件IIC通信

  8. 修复收音异常问题

  9. 修复搜台异常死机问题

  10. AC706N_le_audio_V2.0.0_patch08.07 串口传输音频数据 实现功能:
    A样机拿到linein的pcm数据通过串口传给另一个B样机并播放出来
    tx:linein->effect_dev0->uart
    rx:uart->source->dac
    image Files · 两706通过串口把mic数据传给对方并从对方dac输出 · JL-Studio / Leaudio / 706N / AC706_le_audio_2.0.0 · GitLab

  11. ac706soundbox_1.0.0patch04.02 添加测试盒串口升级功能 demo链接:Files · feature_P04.02_添加测试盒串口升级功能 · JL-Studio / SoundBox / 706N / AC706N_SoundBox_1.0.0 · GitLab

  12. AC706N系列HW_SPI分时复用使用方法

AC706N系列HW_SPI分时复用使用方法

本文档包含以下子页面

  • TWS声道切换说明
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • 706N-LE_AUDIO-100-patch5在添加各项补丁程序后,处理SD卡和U盘复用挂载失败
  • AC706N-le_audio-200SDK有线_无线麦录音demo
Prev
AC692X软件问题整理
Next
JL701N音箱问题整理(可视化工具SDK)