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

软件调试方法

📎 原始文档:https://www.kdocs.cn/l/crfPObuH9i3x 软件调试方法

一. 串口调试信息

打开打印

#define CONFIG_DEBUG_ENABLE//注释掉就是关打印

image

打开断言打印

//打开断言

const int config_asser         = 1;

生成反汇编文件

image 其他内容详见:
五. 死机原因
一. 遇到死机调试方法

开机复位源的打印

//打开复位源

const char log_tag_const_v_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);

const char log_tag_const_i_PMU AT(.LOG_TAG_CONST) = 1;//CONFIG_DEBUG_LIB(TRUE);

const char log_tag_const_d_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);

const char log_tag_const_w_PMU AT(.LOG_TAG_CONST) = 1;//CONFIG_DEBUG_LIB(TRUE);

const char log_tag_const_e_PMU AT(.LOG_TAG_CONST) = 1;//CONFIG_DEBUG_LIB(TRUE);

库打印

//打开整个库打印

#define LIB_DEBUG    1

打开LOG打印

#ifdef CONFIG_RELEASE_ENABLE
#undef __LOG_LEVEL
#define __LOG_LEVEL 0
#endif

打印函数所在位置的打印

printf("%s %s %d \\r\\n" ,__FILE__, __func__ , __LINE__) ;

打印系统时间(一般需要打开库打印)

///打印是否时间打印信息

const int config_printf_time         = 1;

蓝牙协议的打印

image

u8 l2cap_debug_enable = 0xf0;
u8 rfcomm_debug_enable = 0xf;
u8 profile_debug_enable = 0xff;
u8 ble_debug_enable    = 0xff;
u8 btstack_tws_debug_enable = 0xf;

内存的打印

函数 mem_stats(); 需打开库打印(库打印打开参考上面修改)

[HEAP_MEM]Current free heap 124904 bytes, minimum ever free heap 124700 bytes, physics memory size 100480 bytes

physics memory size %d bytes ,这个表示现在剩下可用的物理内存

打印历史剩余的可用RAM最小值

extern void mem_unfree_dynamic_max_dump(void);
    mem_unfree_dynamic_max_dump();    // 调用此句

// SDK\apps\soundbox\log_config\lib_system_config.c, 配置
const u32 CONFIG_HEAP_MEMORY_TRACE = 1;

image

cpu占比的信息,堆栈

config_system_info = 1; //开启,若没有该变量可以不理会
void os_system_info_output(void); //输出信息,可以定时器5秒调用一次
void os_system_info_reset(void); //重置运行时间

// 可视化SDK,周期调用以下函数输出任务信息
// 具体可参考audio_debug.h audio_debug.c文件
void task_info_output(int size);
task_info_output(0);

注意:如果程序使用task_create 函数创建任务里面会默认把任务加进记录,输出能看到对应的任务输出

task_create(app_task_handler, NULL, "app_core");

如果使用 os_task_create 是没有把该任务加进记录的此时需要调用多一条函数 :
void task_info_add(TaskHandle_t task) 把任务加进记录

void task_info_add(TaskHandle_t task)
//demo
task_info_add(os_task_get_handle("my_task")); //my_task 为创建的任务

时钟的打印

函数:clock_dump();需打开库打印(库打印打开参考上面修改)

[00:03:28.408][Debug]: [CLOCK][-------------Clock Dump-----------]

[00:03:28.416][Debug]: [CLOCK]---CHIP Ver. : 0x5e01

[00:03:28.426][Debug]: [CLOCK]--Internal OSC CLK : 24000000

[00:03:28.434][Debug]: [CLOCK]--OSC CLK : 0

[00:03:28.444][Debug]: [CLOCK]--PLL SYS CLK : 96000000

[00:03:28.452][Debug]: [CLOCK]--PLL ALNK CLK : 11294117

[00:03:28.460][Debug]: [CLOCK]---SFC CLK : 96000000

[00:03:28.468][Debug]: [CLOCK]---SPI CLK : 96000000

[00:03:28.478][Debug]: [CLOCK]---HSB CLK : 6000000

[00:03:28.486][Debug]: [CLOCK]---LSB CLK : 6000000

[00:03:28.496][Debug]: [CLOCK]---P33 CLK : 6000000

[00:03:28.504][Debug]: [CLOCK]--USB CLK : 48000000

[00:03:28.512][Debug]: [CLOCK]--AUDIO CLK : 48000000

[00:03:28.518][Debug]: [CLOCK]--UART CLK : 48000000

[00:03:28.528][Debug]: [CLOCK]--BT CLK : 48000000

[00:03:28.536][Debug]: [CLOCK]---SYS DVDD : 7

[00:03:28.544][Debug]: [CLOCK]---VDC13    : 7

[00:03:28.552][Debug]: [CLOCK]---RANGE  : 0

[00:03:28.560][Debug]: [CLOCK]---TRIM SYS DVDD : 3

[00:03:28.566][Debug]: [CLOCK]SFC_CON  : 002802b5

[00:03:28.578][Debug]: [CLOCK]SFC_QCNT  : 0000001f

[00:03:28.584][Debug]: [CLOCK]CACHE_CON  : 7ff23120

二、放ram方法

image AT(.volatile_ram_code)
image

三、低功耗调试方法

打开 以下打印 查看是否有线程卡住不让进低功耗
SDK\apps\soundbox\log_config\lib_driver_config.c

const char log_tag_const_v_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(FALSE);

const char log_tag_const_i_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);

const char log_tag_const_d_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);

const char log_tag_const_w_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);

const char log_tag_const_e_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE);

const char log_tag_const_c_PMU AT(.LOG_TAG_CONST) = CONFIG_DEBUG_LIB(TRUE); 

3四、复位源

VDDIO POR 是首次上电,即芯片从没电到有电,从头跑
VDDIO LVD 是电池电量不够或者VDDIO被扯,导致VDDIO 的电压低于设定的阈值,复位了
WDT 是看门狗超时,复位了
VCM 是芯片vcom引脚,默认的短按就会复位,就是通常板子上的reset键就是用这个脚做的。
PPINR 是设置的长按复位脚,长按引起的复位
SOFT RESET 是P33系统管理的复位,一般是程序里执行了复位函数,如果代码异常了,异常中断里会执行复位函数来复位芯片,比如一些非法操作:除0异常,非法地址访问等等。
DVDD NO OK 是供电方式没有配置对,样机是DCDC供电的,但是配置成了LDO供电方式了
POWER RETURN 软关机唤醒

  • 例子 imageimage
u8 power_reset_source_dump(void)
{
    u8 sfr;
    cpu_soft_reset = 0;
    sfr = p33_rx_1byte(P3_PMU_CON1);
    if((sfr&BIT(7))==0)
    {
        printf("power return\n");
        return sfr;
    }
    p33_or_1byte(P3_PMU_CON1, BIT(6));
    sfr = p33_rx_1byte(P3_RST_SRC);
    prinft("--P3 Reset Source:0x%x\n", sfr);
    if(sfr&BIT(0)){
        printf("VDDIO por\n");
    }
    if(sfr&BIT(1)){
        printf("VDDIO LVD\n");
    }
    if(sfr&BIT(2)){
        printf("WDT\n");
    }
    if(sfr&BIT(3)){
        printf("VCM\n");
    }
    if(sfr&BIT(4)){
        printf("PPINR\n");
    }
    if(sfr&BIT(5)){
        printf("SYS RESET\n");
    }
    if(sfr&BIT(6)){
        printf("soft reset\n");
        cpu_soft_reset = 1;
    }
    return sfr;
}

VCOM复位

当vcom 脚拉高的时候会复位,这是默认的vcom复位功能,一般不想要做8秒长按复位,可以用VCOM复位来做复位功能
当VCOM复位没有作用的时候,可以使用下面的接口来再次开启VCOM复位功能
image

VCM_DET_EN(1);
//P33_CON_SET(P3_ANA_CON2, 3, 1, en);  //VCM detect enable bit 

五. 死机原因

请仔细查看下面链接内容:
707_轻量级打印开启.otl
5.1.2. 系统异常信息

  1. 如何使用mpu来定位非法被修改的地址 问题:
    当某些存在bug的代码产生野指针在合法范围之内,就不会触发 空白地址 或者 MMU非法地址 异常,但是会改掉其他模块的全局变量,就会给令开发者感到疑惑,某些全局变量被不明原因的修改了,当发生这种情况时,可以使用SDK提供的MPU内存保护接口将意外被修改的变量保护起来,保护后被意外修改时将会触发异常,SDK默认会使用相关MPU接口保护系统内部一些内存范围,如果用户流程写到该保护范围,将会触发异常。
    并非所有芯片都支持mpu,查看是否是支持该功能可以查看,include_lib\driver\cpu\brxx\asm\debug.h路径是否包含mpu的接口。
/* ---------------------------------------------------------------------------- */
/**
 * @brief Memory权限保护设置
 *
 * @param idx: 保护框索引, 范围: 0 ~ 7, 目前系统默认使用0和3, 用户可用1, 2, 4, 5, 6, 7
 * @param begin: Memory开始地址
 * @param end: Memory结束地址
 * @param inv: 0: 保护框内, 1: 保护框外
 * @param format: "Cxwr0rw1rw2rw3rw", CPU:外设0:外设1:外设2:外设3,
 * @param ...: 外设ID号索引, 如: DBG_EQ, 见debug.h

 * @example1: 设置内存保护框1, 保护地址为0x200 ~ 0x400 - 1, 令该地址只可以FFT和EQ设备访问:
    mpu_set(1, 0x200, 0x400 - 1, 0, "0rw1rw", get_dev_id("DBG_FFT"), get_dev_id("DBG_EQ"));
 * @example2: 设置内存保护框2, 保护地址为0x200 ~ 0x400 - 1, 令该地址只可以cpu读写和EQ设备访问:
    mpu_set(2, 0x200, 0x400 - 1, 0, "Crw0rw", get_dev_id("DBG_EQ"));
 */
/* ---------------------------------------------------------------------------- */
void mpu_set(int idx, u32 begin, u32 end, u32 inv, const char *format, ...);


/* ---------------------------------------------------------------------------- */
/**
 * @brief 取消指定框的mpu保护
 *
 * @param idx: 保护框索引号
 */
/* ---------------------------------------------------------------------------- */
void mpu_disable_by_index(u8 idx);


/* ---------------------------------------------------------------------------- */
/**
 * @brief :取消所有保护框mpu保护
 */
/* ---------------------------------------------------------------------------- */
void mpu_diasble(void);

使用示例:

struct _TEST_RAM_PROTECT {
    u8 test_buf[10];
    u8 over_data;
}__attribute__((packed)) _test_data;

#include "debug.h"
static void mpu_set_enable()
{
    // 其中"Cr"是表示此地址区域仅允许cpu只读,其它操作会触发断言
    mpu_set(1,&_test_data.over_data,&_test_data.over_data + 1,0,"Cr");
    //这边填写保护的范围就是u8大小的over_data,所以后面是+1,如果是int大小,则是+4
}

static void mpu_set_disable()
{
    mpu_diasble();
}


void timer_test_func(void *arg)
{
    // printf("%x %x %x",&_test_data.test_buf[9],&_test_data.test_buf[10],&_test_data.over_data);

    static u8 cnt = 0;

     if(cnt > 10) {
        mpu_set_enable();//循环10次后开启保护
        cnt = 0;
    } else {
        mpu_set_disable();
    }

    printf("before over data = %d",_test_data.over_data);
    for(int i=0;i<11;i++)//这里写越界
    {
        _test_data.test_buf[i] = i;
    }
    printf("after over data = %d",_test_data.over_data);
    _test_data.over_data = 33;//重新赋值,用于查看下次越界是否会覆写

    cnt++;
}

//以下两行函数放在app_main中调用
    mpu_set_enable();
    sys_timer_add(NULL,timer_test_func,1000);

触发断言结果
image 测试SDK包:
mpu_debug_案例_701NsoundboxV142.zip

六.线程相关

  1. 防止打断线程开关方法
  2. 开关中断
extern void local_irq_disable();
extern void local_irq_enable();
        local_irq_disable();
        local_irq_enable();

image 2. 定义锁

DEFINE_SPINLOCK(clock_lock);
spin_lock(&clock_lock);
spin_unlock(&clock_lock);
////案例
void  clock_add(u32 type)
{
    u32 cur_clk ;

    spin_lock(&clock_lock);
    u8 resoult = clock_ext_push(type);
    spin_unlock(&clock_lock);
    if (!resoult) {
        return;
    }
}

2. 线程相关设置

文件: task_table.c
关键数组: const struct task_info task_info_table[]
image prio优先级说明: 最低优先级: 0; 最高优先级: 6; 没有特殊要求不建议修改, 避免引起系统崩溃。
stack_size:堆栈大小
qsize:消息池大小

七、字节对齐

4字节对齐

__attribute__((aligned(4)));

八、695nSDK打补丁程序-可复制参考程序

【金山文档】 AC695N_soundbox_sdk_release_0.0.6_p2-未打任何补丁程序的公版SDK
https://kdocs.cn/l/cnuwOZ98olZd
【金山文档】 AC695N_soundbox_sdk_release_0.0.6_p2_打不开机补丁V3V4-打修复LVD失效问题补丁
.在695-006-p2SDK上添加了:
1.AC695N_芯片兼容性及不开机补丁v3_最新20210918
2.AC695N_不开机补丁v4
3.关于AC696N、AC695N软关机后LVD失效问题修改说明
https://kdocs.cn/l/coisojXZn8aq

FAQ

一. 遇到死机调试方法

异常信息打印说明

  1. 5.1. 串口调试 — JL Project Documentation (zh-jieli.com)
  2. 查看死机的原因
  3. 打开断言的打印
///异常中断,asser打印开启
const int config_asser         = 1;
  1. 然后复现死机现象,触发异常会有以下打印,然后可以得到死机的原因 image
  2. 然后根据打印信息,生成汇编代码。 根据死机地址找到死机的地方
    处理步骤参考文档:软件调试方法.otl
  3. (可选)有条件可以打开完整的库打印
//打开整个库打印

#define LIB_DEBUG    1

完成以上步骤后,即可复现问题观察打印。
例子:
异常死机打印分析:
根据异常的打印找到以下地址程序最后运行时对应的
image 打开 前面生成的 sdk.lst 找到上图框住的地址
image 2. 如何观察函数是否放在flash 打开前面生成的sdk.lst找到对应函数的名称。(如果放在在flash的函数,一定能找到一般地址开头是1e开头的为放flash的代码)

  • 文档 异常调试介绍.pdf
    PS:
    如果生成不了sdk.lst ,可以直接把%ELFFILE% 直接改为sdk.elf
    image %OBJDUMP% -D -address-mask=0x1ffffff -print-dbg %ELFFILE% > %ELFFILE%.lst

二、烧录文件加KEY参考。

备注,加KEY后,重新编译或重新运行download.bat文件,重新生成的烧录文件就是加KEY后的文件。

image

三、升级失败调试方法

  1. 打开OTA打印(一定要替换)以及 uboot打印(可选)
  2. 打开isd_config.ini 里面的打印
//uboot and ota.bin串口tx
// *****************************
// 如果是USB口 设置为 USBDP/USBDM
// *****************************
UTTX=PA05;//uboot串口tx
UTBD=1000000;//uboot串口波特率

image 有些SDK是由isd_config_rule.c 去生成isd_config.ini 文件,则需要修改isd_config_rule.c 里面的配置
image 2. 更换对应文件 注意看实际的SDK使用是哪个ota.bin文件
可以看下载工程的download.bat(例如下图:使用的是...\ota.bin ->就是上两层目录下的ota.bin) 一般是tools文件目录下
image 将上面的ota.bin和uboot.bin 替换成带打印的bin
image 2. 提供对应的log

本文档为保密信息,未经授权,请勿转发或告知第三方。非常感谢!
This electronic documentation and any attachments are confidential and may be legally privileged or otherwise protected from disclosure. If you are not the intended recipient, please do not disclose the contents to anyone。
Thank you for your cooperation!
解析权归杰理所有!
The analysis right belongs to JieLi Technology Co., Ltd.

本文档包含以下子页面

  • 707_轻量级打印开启
  • 异常调试介绍
Prev
各个模块关键资料汇总
Next
Makefile编译