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/cvPJzeJTq3Zu 耳机充电与通信调试指南

一、内置充电基本原理

  1. 充电基本流程 下图只是充电流程的抽象流程,不是完全流程,按照下图流程去看代码,基本可以覆盖充电检测的绝大部分情况,各个SDK也是写法上大同小异
    image ldo5v_in后,如果是在idle模式下,就会直接进入充电,如果不在idle,就会复位进idle再充电
    ldo5v_off后,先关充电,如果支持拔出开机,就会切蓝牙,不支持就会走关机
    ldo5v_keep后,先关充电,如果是智能仓或者测试盒连接,会return掉;如果拔出开机会走复位,不支持就会走关机
    charge_start后,才会正式进入充电模式抽取电流
    charge_full后,会关充电,然后分情况进关机
    charge_close后,才会正式停止充电(注意,如果此时5V还在,有些SDK做法是会继续从5V端取电流给系统工作,主要看有没有以下判断)
    image

1.1 智能仓充电流程

①入仓-开盖通信(返回电量)-关盖升压通信(充电&返回电量)-收到充满指令-延时-关机
注意:通信时高电平为3.3V左右,带通信的耳机关机是通信决定的,耳机返回电量100%后,由仓发关机命令,耳机收到指令后,延时指定时间,然后关机,耳机关机后,仓不能再发指令或者充电脚有电平变化,不然耳机会唤醒开机

1.2 非智能仓充电流程

①入仓-升压充电-耳机判满关充电-充电仓关升压(掉保持电压)-耳机关机
②入仓-升压充电-耳机判满关充电-充电仓不关升压(常5V)-耳机关机
注意:掉保持电压的仓,关机是在ldo5v_keep_delay_deal里面关的,而常5V的仓,关机是在eSystemConfirmStopStatus里面关的,如果关机的地方不对,容易造成充满开机等问题,具体见下面经典案例
另外,耳机充满后,要注意看charge_close里面有没有条件限制跑CHGBG_EN(0)和CHARGE_EN(0),如果没跑这两个寄存器,系统会从5V取电,对一些充满后会进行电流检测的仓,可能会有影响
2. 充电关键配置

2.1 电流与电压

//是否支持芯片内置充电
#define TCFG_CHARGE_ENABLE                    ENABLE_THIS_MOUDLE
//是否支持开机充电
#define TCFG_CHARGE_POWERON_ENABLE            DISABLE
//是否支持拔出充电自动开机功能
#define TCFG_CHARGE_OFF_POWERON_NE            ENABLE
/*充电截止电压可选配置*/
#define TCFG_CHARGE_FULL_V                    CHARGE_FULL_V_4199
/*充电截止电流可选配置*/
#define TCFG_CHARGE_FULL_MA                   CHARGE_FULL_mA_10
/*充电电流可选配置*/
#define TCFG_CHARGE_MA                        CHARGE_mA_50

TCFG_CHARGE_ENABLE:内置充电开关使能,默认开,不要关,如果使用外挂充电,则参考示例............;
TCFG_CHARGE_POWERON_ENABLE:开机充电,可以边充电边用耳机,默认不开;
TCFG_CHARGE_OFF_POWERON_NE:拔掉充电后,开机还是关机,看需求选择;
TCFG_CHARGE_FULL_V:截止电压,这个实质上是影响5V端和VBAT端的压差,从而影响电流,实际停止充电判断条件是截止电流,一般值的设置比电池的充满电压高一点,具体视电池规格和SDK的CHARGE_FULL_V_X这个宏的档位配置;
TCFG_CHARGE_FULL_MA:截止电流,实际停止充电的判断条件,具体视客户需求以及充电仓特性配置,一般不低于5ma;
TCFG_CHARGE_MA:充电电流,一般是1C,如50mah电池的1C就是配置50ma,如果支持超过1C按电池规格和需求配置。

2.2 充电仓相关配置

#define TCFG_CHARGESTORE_ENABLE             DISABLE_THIS_MOUDLE       //是否支持智能充点仓
#define TCFG_TEST_BOX_ENABLE                1
#define TCFG_CHARGE_CALIBRATION_ENABLE      DISABLE_THIS_MOUDLE       //是否支持充电电流校准功能
#if TCFG_AUDIO_ANC_ENABLE
#define TCFG_ANC_BOX_ENABLE                 1                         //是否支持ANC测试盒
#else
#define TCFG_ANC_BOX_ENABLE                 0                         //是否支持ANC测试盒
#endif/*TCFG_AUDIO_ANC_ENABLE*/
#define TCFG_CHARGESTORE_PORT               IO_PORTP_00               //耳机和充点仓通讯的IO口
#define TCFG_CHARGESTORE_UART_ID            IRQ_UART1_IDX             //通讯使用的串口号

TCFG_CHARGESTORE_ENABLE:大部分情况下,有通信功能的就打开,没有就关闭;
TCFG_TEST_BOX_ENABLE:测试盒功能,连接测试盒会有用,默认不要关;
TCFG_CHARGE_CALIBRATION_ENABLE:充电校准功能,如果产线上没有这个测试项,以及客户没有对充电电流提出严格的控制范围,这个就默认关闭不要开;
TCFG_ANC_BOX_ENABLE:开了ANC会开这个,默认不用改
TCFG_CHARGESTORE_PORT:耳机与充电仓通信的IO口,不能改;
TCFG_CHARGESTORE_UART_ID:与仓通信用的UART1,智能仓用到,如果有其他外设使用UART,注意不要冲突。

2.3 充电检测参数

//过滤时间 = (filter*2 + 20)ms,    
    .ldo5v_off_filter       = 100,
    .ldo5v_on_filter        = 50,
    .ldo5v_keep_filter      = 220,
    .ldo5v_pulldown_lvl     = CHARGE_PULLDOWN_200K,            //下拉电阻档位选择
    .ldo5v_pulldown_keep    = 0,                               //在仓软关机是否要保持下拉(ldo5v_pulldown_en使能时有效)
    .ldo5v_pulldown_en      = 1,

ldo5v_off_filter:5V拔出的滤波时间,默认220ms;
ldo5v_on_filter:5V插入的滤波时间,默认120ms;
ldo5v_keep_filte:判断维持电压的滤波时间,默认460ms;
ldo5v_pulldown_lvl:充电脚下拉电阻档位,有200K、150K、100K和50K四个档位,一般默认200K就行,具体要向充电仓设计那边了解充电仓对负载的要求;
ldo5v_pulldown_keep:软关机时是否保持下拉,具体看充电仓那边对负载的要求和检测逻辑,(注意:复位如cpu reset时不会保持);
ldo5v_pulldown_en:下拉电阻总使能。
注意:上述以AC700v136版本为例,有些参数旧系列或者旧版本SDK没写出来,或者写法有些许差异,没有的按照AC700v136对应地方添加或者修改即可

struct port_wakeup ldoin_port = {
    .edge               = BOTH_EDGE,                      //唤醒方式选择,可选:上升沿\下降沿\双边沿
    .both_edge          = 1,
    .filter             = PORT_FLT_16ms,
    .iomap              = IO_LDOIN_DET,                   //唤醒口选择
};

edge:边沿唤醒的方式;
both_edge:是否需要双边沿唤醒;
filter:唤醒的滤波时间,硬件模块,只能配置对应enum中的可选项
iomap:对应的唤醒脚
各滤波参数关系如下图所示
image 注意点:

  1. PORT_FLT为硬件模块唤醒时间,是根据配置固定的,滤波时间过后会起中断ldoin_wakeup_isr,进入ldo5v_detect,关机唤醒情况下才有这个时间,开机状态下没有这个时间;
  2. ldo5v_XXX_filter是软件滤波时间,可以改,滤波时间过后才会发对应的IN、OFF或KEEP事件,要挂示波器看,充电仓出来的5V、维持电压和0V电压和电压值和持续时间是多少;
  3. 充电仓提供的维持电压一般上限取电池电压内都行,下限建议要1.2V以上。

2.4 充电常用寄存器

//充电模块使能    
    CHARGE_EN();
    CHGGO_EN();
//下拉电阻档位和使能
    L5V_RES_DET_S_SEL();
    L5V_LOAD_EN();

注意:非特殊情况不直接操作寄存器

二、耳机通信基本原理

  1. 通信方式

1.1 UART方式通信

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信和并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
耳机一般做的都是单线串口,TX和RX共用一根线,通信由充电仓发起,耳机接收回复

1.2 高低电平方式通信

这种仓通过高低电平通信,各家对电平的定义又不同,一般是高电平占多少ms,低电平占多少ms,多个高低电平组合为一个码,具体需要看充电仓的设计,通信实例见demo
【金山文档】 普通高低电平TWS耳机控制通讯
普通高低电平TWS耳机控制通讯.otl

2. 串口通信流程

image chargebox_send:充电仓通过串口发送数据
uart_isr:串口中断,串口收到的数据先到这里(切记不要在中断里,做读写VM或者其他耗时较多的操作,这些在下面event_handle处理)
data_deal:数据分析接口,注意如果不是走杰理标准协议,是不会进这里的
event_to_user:事件发送接口,由于中断里不能占用太长时间,耗时多的操作发事件去handle处理
event_handle:消息处理函数,收到的指令实现、组包和回复等,具体在这里处理
earphone_reply:耳机消息发送接口

3. 串口相关接口

//串口中断
static void uart_isr(void)

//数据分析接口
void app_chargestore_data_deal(u8 *buf, u8 len)

//消息处理函数
int app_chargestore_event_handler(struct chargestore_event *chargestore_dev)

//事件发送接口
void chargestore_event_to_user(u8 *packet, u32 type, u8 event, u8 size)

//耳机消息发送接口
extern int chargestore_api_write(u8 *buf, u8 len);

...

4. 自定义串口通信

自定义串口通信的处理方式,完全可以参考默认的串口通信流程,核心思想是
①在uart_isr拦截数据,判断数据是否是自定义的,若不是则返回0执行原流程(避免影响测试盒等默认通信)
②如果数据是自定义的,就进入自己的处理流程,可以借助SDK默认的handle
自定义串口通信简单demo如下,demo借助默认的uart接口,波特率9600
【金山文档】 AC700v135_ldoin自定义串口通信demo_20230419
https://kdocs.cn/l/clL7r0Gq7iIb
充电仓发送:0xaa,0xbb,0xcc,0x01
耳机返回:0xee,0xdd,0xff,0x01,0x00,0x00
可用串口先模拟发送下

三、通信问题通用调试步骤

此步骤适用于debug耳机与充电仓的串口通信

  1. 调试前准备工作 ①一个可以有串口工具和改代码的电脑
    ②一套接好打印线的机子
    ③一个逻辑分析仪

2. 搭好测试环境

①先用公版SDK,开启智能充电仓的宏
②在uart_isr打印接收到的数据
image ③在自定义data_deal或者默认data_deal里打印数据
image ④在自定义event_handle或者默认event_handle里打印数据
image

3. 调试步骤

①先确认uart_isr有没有收到数据,如果没有收到数据,确认下有没有充电仓发或者接触好不好(有条件用逻辑分析仪看看数据)
②如果收到,确认下数据跟发送的对不对的上,对不上检查一下接触和波特率,波特率9600
③如果走默认充电仓指令,需要满足杰理通信协议,才会进入data_deal,否则需要走自定义
④确认data_deal里面数据接收对不对,一般参数传递没问题不会有错
⑤在data_deal里面发送事件给event_handle处理,默认协议用chargestore_api_write()发,自定义的参考上述demo
⑥如果event_handle收不到数,说明接口使用错误,或者程序其他地方有东西把线程占满了(先用公版对比看看改了哪里导致)

四、充电问题通用调试步骤

  1. 调试前准备工作 准备以下可能用到的东西
    ①一个可以有串口工具和改代码的电脑
    ②一套接好打印线的机子
    ③一个在pogopin正负端接好杜邦线的充电仓
    ④一个示波器
    ⑤一个直流稳压源
    ⑥一个或多个万用表(最好用福禄克大表)
    ⑦一个公版SDK
    ⑧与充电仓方面支持的沟通渠道

2. 搭好测试环境

①耳机端接好打印线,确保能正常打印
②先用公版SDK测试,若公版SDK有问题,直接下一步,若公版SDK没问题,先找改了哪里导致的,再进行下一步
③示波器挂在充电仓pogopin正负端
④打开与充电相关的打印

const char log_tag_const_v_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
const char log_tag_const_i_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
const char log_tag_const_d_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
const char log_tag_const_w_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
const char log_tag_const_e_APP_CHARGE AT(.LOG_TAG_CONST) = TRUE;
int __attribute__((weak)) eSystemConfirmStopStatus(void)
{
    /* 系统进入在未来时间里,无任务超时唤醒,可根据用户选择系统停止,或者系统定时唤醒(100ms),或自己指定唤醒时间 */
    //1:Endless Sleep
    //0:100 ms wakeup
    //other: x ms wakeup
    if (get_charge_full_flag()) {
        printf("Endless Sleep");    //打开这个
        power_set_soft_poweroff();
        return 1;
    } else {
        /* log_i("100 ms wakeup"); */
        return 0;
    }
}
static void ldo5v_detect(void *priv)
{
    ...
    if (LVCMP_DET_GET()) {
        putchar('X');        //打开这个
        if (ldo5v_on_cnt < __this->data->ldo5v_on_filter) {
            ...
        } else {
            printf("ldo5V_IN\n");        //打开这个
            ...
        }
    } else if (LDO5V_DET_GET() == 0) { 
        putchar('Q');        //打开这个
        if (ldo5v_off_cnt < (__this->data->ldo5v_off_filter + 20)) {
            ...
        } else {
            printf("ldo5V_OFF\n");        //打开这个
            ...
        }
    } else {
        putchar('E');        //打开这个
        if (ldo5v_keep_cnt < __this->data->ldo5v_keep_filter) {
            ...
        } else {
            printf("ldo5V_ERR\n");        //打开这个
            ...
        }
    }
}
static void charge_err_delay_deal(void *priv)
                or
static void ldo5v_keep_delay_deal(void *priv)
{
    ...
    //打开这个
    printf("get_charge_online_flag:%d %d\n", get_charge_online_flag(), get_ldo5v_online_hw());
    if (get_ldo5v_online_hw() && get_charge_online_flag()) {
        power_set_soft_poweroff();
    } else {
        ...
    }
}

⑤按问题测试手法,复现问题,抓取波形和log,具体问题具体分析,见经典案例分析

五、充电问题经典案例

进入这里排查问题前,先把《充电问题通用调试步骤》看了,准备好先

  1. 非智能仓,耳机入仓,充电没反应 非智能仓,充电仓检测入仓一般两种方式,负载检测和电流检测,向充电仓的支持咨询确认

情况1:针对负载检测

①耳机端可选下拉电阻档位为200K、150K、100K和50K,一般配置200K可检测插入,如果不行,充电仓端若可调分压,则调节充电仓端分压;

情况2:针对电流检测

①抓取充电仓pogopin波形,看耳机入仓后,充电仓有没有升5V,如果没有升5V,则要先向充电仓的支持咨询下了
②如果有升5V,向充电仓的支持咨询下,电流检测从什么时间点开始?共检测多长时间?需要持续多长时间,示波器测量下5V持续的时间,充电流程默认5V起来唤醒x ms+5V IN的滤波120ms+复位起来充电耗时100~250ms
③如果入仓抽电流达不到电流检测标准,可以参考下面文档加大电流
【金山文档】 开始充电时加大充电电流方法
开始充电时加大充电电流方法.otl
④如果电流检测窗口很短,则尝试在检测到5V就开始加大电流
image

2. 非智能仓,耳机充满会开机

情况1:耳机先判断充满然后关机,充电仓后再掉保持电压

现象:耳机log出现charge_full,过几秒后出现Endless Sleep,但是此时用示波器看,充电仓充电脚两端5V电压还在,过一段时间后才会掉5V下来,
原因:因为充电仓充满掉电压时间比较长,耳机先关机了,后面充电仓掉电压的时候,就有一个边沿变化,把耳机唤醒了
解决办法:在eSystemConfirmStopStatus里面先不关机,等充电仓掉电压,跑流程在ldo5v_keep_delay_deal里面再关机
imageimage

情况2:耳机关机的时候,充电脚电平被扯低

现象:充电仓充电脚电压从5V掉到维持电压,此时耳机log打印在ldo5v_keep_delay_deal里面关机了,随后波形出现一小段被拉低接近0V的波形,耳机被唤醒,而且延时关机没用,什么时候关机,就什么时候被拉低
原因:非智能仓默认开下拉,默认关机的时候是不操作下拉的,有些仓充电脚可能被拉低,导致耳机被边沿唤醒
解决办法:①ldo5v_pulldown_keep置0(没有这个变量就参考AC700v136修改),在仓关机关掉下拉
②在①的基础上,在charge start就把下拉关掉,视仓的特性而定,比如在5v off的地方把下拉开起来(避免影响出入仓检测)
image 具体还是跟充电仓特性有关,放的位置可能有差异,最好问清楚充电仓那边逻辑

情况3:充电仓判满检测的电流条件较低,判断大于电流阈值又开始充电

现象:耳机打印charge_full,充电仓5V还没掉,过一会儿又重新充电,且SDK上charge_close对关充电做了限制
image 原因:如上图所示,如果5V还在,charge_close没有真关电,芯片还会从ldoin取电,电流可能大于充电仓的检测阈值,如4ma,视充电仓检测机制而定,可能导致充电仓判断又充电
解决办法:注释掉限制,每次都把电关掉
image

3. 非智能仓,耳机关机后,充电仓那边睡眠功耗高

现象:耳机关机后,充电仓那边也进入睡眠,测睡眠功耗会比正常高几十个ua
原因:如果耳机关机保持了下拉,而仓充电脚有保持电压的话,下拉电阻是会耗电的
解决办法:ldo5v_pulldown_keep置0(没有这个变量就参考AC700v136修改),在仓关机关掉下拉
image

4. 智能仓,耳机充满会开机

现象:耳机关机后,又被唤醒开机,示波器看充电脚波形,充电仓发完关机码后,耳机延时后进入关机,随后充电仓又发码或者有电平变化
原因:耳机关机后,发码也相当于是有一个电平变化,就会边沿唤醒耳机
解决办法:尝试调节关机延时,并问清楚充电仓设计逻辑

case CMD_SHUT_DOWN:
    log_info("shut down\n");
    __this->power_status = 0;
    __this->cover_status = 0;
    __this->close_ing = 0;
    chargestore_api_write(send_buf, 1);
    //改下面时间
    __this->shutdown_timer = sys_hi_timer_add(NULL, chargestore_shutdown_do, 1000);
    break;

本文档包含以下子页面

Prev
简要调音步骤指引(可视化)
Next
充电仓硬件调试指南