彩屏仓AC982 入门指导及FAQ
📎 原始文档:https://www.kdocs.cn/l/cluLGgmi3Jwf 彩屏仓AC982 入门指导及FAQ
SDK及补丁下载:
ac98n_sdk_release2.0.2_colorscreen_V201.7z
重点补丁提醒:在FAQ(在此文档后半部分获取)
开发环境
- IDE :keil4(V202版本后可以是keil5)
- SDK : 有flash和OTP的芯片,有两个工程,flash和otp,使用对应的工程。V200后版本新增了普通充电仓工程,以区别智能充电仓。
- 下载方式:串口下载(需要安装杰理虚拟串口驱动) 下载器彩屏仓开发板下载接法:对应特殊制作的type-c线(线分正反,不能正反插)。
TYPE线 下载器
VCC ----------------- 5V
GND ----------------- GND
P17/CC1 --------------- TX - 加key的位置:对应工程路径下的download_flash.bat / download_otp.bat 如:ac98n_sdk_release_2.0.0\sdk\apps\SmartBox\tools\download_flash.bat
- 总结下载失败或者下载前需要检查的项目:
- sdk是否加key(没加也不会提示没有加key) 2. 是否接对下载口P17 3. 是否只用强升工具供电,供电是否正常(如外接电源,将导致无法5v拉低) 4. 虚拟串口是否在线(虚拟串口工具上看离线还是在线,离线需要绑定) 5. 串口是否被其他串口调试工具占用 6. 运行下载批处理的时候,对一下批处理上显示的com口是不是和强升工具绑定的虚拟串口com口一致,并且是离线与在线,若不是则需要重新绑定到批处理使用的com口
7. 如果烧写失败,先检查接线问题和串口占用问题。以上问题无误后,确认方案使用的升 级口是否为 CC1/CC2 且加了 5.1K 的下拉,如果是,则处理烧写失败的解决办法是在强
制升级工具 TX 处加个上拉电阻 22k 到 5V,如下图所示:
- sdk是否加key(没加也不会提示没有加key) 2. 是否接对下载口P17 3. 是否只用强升工具供电,供电是否正常(如外接电源,将导致无法5v拉低) 4. 虚拟串口是否在线(虚拟串口工具上看离线还是在线,离线需要绑定) 5. 串口是否被其他串口调试工具占用 6. 运行下载批处理的时候,对一下批处理上显示的com口是不是和强升工具绑定的虚拟串口com口一致,并且是离线与在线,若不是则需要重新绑定到批处理使用的com口
SDK入门指导
(v200之后的sdk,用vscode打开注意要分辨文件是smartbox还是normalbox的工程文件,还有的是编译的是flash工程还是otp工程)
整体功能配置 app_config.h
充电部分
charge_ctrl(!charge_sw_check());

- 放电部分
boost_ctrl(!discharge_sw_check());
智能充电仓:耳机入仓默认会进入通信,通信不成功会进入强充阶段,成功则跳过。
v200版本后,强充后未能正常通讯则一直强充-检测-强充-检测。
当充放电同时存在的时候,充电的5V会经过滤波直通放电vout,此时不是按照sdk配置的4.7v或者其他。
样机接电池时或者接电池时无线充电就BOOST升压,样机接电池时有线充电就VPWR直通。
耳机负载检测 在线状态分为物理在线和通信在线。
检测耳机负载的方式是恒流源输出,看负载消耗了多少电流,来判断耳机是否物理在线。

打印调试部分 98N有两个串口,都可以用作串口打印

智能充电舱通信模块 固定 VOUT0/1 使用的通信 IO 为 P10/P11,固定使用 UART0。
SDK公版已经做好智能仓的基本通信交互了,耳机电量获取,状态获取,耳机配对等
另外,SDK已经做好串口的复用功能
这样可以空闲一个串口用于外接通讯。添加串口1驱动 AC982公版sdk可以根据此文档添加一路自用
AC98N sdk 增加一路串口.otl与701通讯的协议部分 文件:uart_send.c
发送:
u8 app_battery_notice(void)
{
u8 ret = 0xff, err_resend_cnt = 0;
if(box_into_boat_mode){
return 0;
}
memset(¬ice_701_buff[2], 0, 9);
notice_701_buff[2] = UART_CMD_CHARGING;
notice_701_buff[3] = OUT;
notice_701_buff[4] = 0x04;
notice_701_buff[5] = 0xff; //仓本身电池电压,默认不同步
notice_701_buff[8] = (sys_info.localcharge << 2); //仓是否在充电
if(ear_info[0].online_hw){ //L是否在仓
notice_701_buff[6] = ear_info[0].power; //L耳电量
if(ear_info[0].charge){ //L耳是否充电
notice_701_buff[8] += (0x01 << 1);
}
}else{
notice_701_buff[6] = 0xff;
}
if(ear_info[1].online_hw){ //R是否在仓
notice_701_buff[7] = ear_info[1].power; //R耳电量
if(ear_info[1].charge){ //R耳是否充电
notice_701_buff[8] += 0x01;
}
}else{
notice_701_buff[7] = 0xff;
}
log_puts("\nsend_battery_notice:");
put_buf(notice_701_buff,sizeof(notice_701_buff));
while((ret != 0) && (err_resend_cnt < 3)){
uart1_write(notice_701_buff, sizeof(notice_701_buff));
ret = wait_for_ack(UART_CMD_CHARGING);
if(ret != 0){
err_resend_cnt++;
}
}
if(ret != 0){
log_puts("\nnotify_err!!!\n");
} else {
log_puts("\nack_correct");
/* log_puts("ear_info[0].power %d ear_info[1].power%d vbat_v%d\n",notice_701_buff[6],notice_701_buff[7],notice_701_buff[5]); */
}
return ret;
}
- 系统异常处理
- WDT
- 长按复位(公版默认是用在vpwr口上)
总体流程
整个流程以一个状态机来设计,分为三种状态:开盖、盒盖、低电。
每个状态都对应着独自的事件处理,充放电控制等。
app_open.c app_close.c app_lowpower.c app_common.c
流程是以hall状态为判断开合盖的,以判断电量为进入lowpower的
OPEN:开盖后不会升压,会一直检测耳机是否在仓,更新耳机状态,通讯在线的话会与耳机通信,获取耳机状态值
CLOSE:如果耳机有电,一般都会通信在线,进入正常充电流程,充电过程中会进行通讯;如果耳机没电,只能识别物理在线而通讯不在线的话,会进入强充流程,一个强充周期充完后会检测通信是否在线,不在线就继续强充,再检测,通信在线后就转为正常充电流程
LOWPWER:检测低电就会进入lowpower,不会进行放电或者其他流程的检测,8s内会关机,等待5v接入充电,充电到电池有一定电压转会开盖或盒盖流程。
充电仓状态机
├── 开盖状态 (OPEN)
│ ├── 检测耳机存在
│ │ └── 耳机在仓
│ │ ├── 检测通讯状态
│ │ │ ├── 通讯在线
│ │ │ │ ├── 获取耳机状态值
│ │ │ │ └── 准备进入正常充电流程
│ │ │ └── 通讯不在线(物理在线)
│ │ │ ├── 等待耳机通讯恢复
│ │ │ └── (如果耳机没电)进入强充准备流程
│ │ └── 监测电池电压
│ │ ├── 低电量时进入低电模式 (LOWPOWER)
│ │ └── 充电状态管理
│ └── 不进行升压操作
│
├── 关盖状态 (CLOSE)
│ ├── 耳机有电且通信在线
│ │ └── 进入正常充电流程
│ ├── 耳机电量不足,仅识别到物理在线
│ │ └── 进入强充流程
│ │ ├── 强充周期执行(1min)
│ │ ├── 强充周期结束检测通讯
│ │ │ ├── 通讯仍不在线 → 继续强充
│ │ │ └── 通讯已恢复在线 → 转为正常充电流程
│ ├── 检测到耳机低电量
│ │ └── 进入低功耗模式 (LOWPOWER)
│ └── (耳机不在仓)8s检测后休眠
│
└── 低电模式 (LOWPOWER)
├── 自动关机保护机制(8秒后关机)
├── 等待外部电源充电
├── 充电至安全电压阈值后重新评估状态并转换到其余两种状态
│ └── 根据当前hall状态决定下一步动作
└── (充电中)持续监测电池电压确保安全充电
注:低电量流程作为独立的子状态,可能在开盖或关盖状态下触发。
FAQ客诉问题处理案例
AC98N 短路异常无法升压补丁(20241214) ---必须打补丁 AC98N 短路异常无法升压补丁.zip
放电异常后无法退出异常状态(20250707)---必须打补丁 982过_欠压标志获取异常.otl
升压档位选择,需要同步修改过压档位---必须关注 V201彩屏仓版本sdk默认升压档位是4.7V,升压的过压档位配置:
#define TCFG_BOOST_VOUT_S BOOST_VOUT_S_4700_MV
//VOUT OV UV
#define VOUT_OV_VOLT VOUT_OV_VOL_S_5P53V_TO_5P34V
客户想要配置成升压5v,需要同步抬高过压的档位:
#define TCFG_BOOST_VOUT_S BOOST_VOUT_S_5000_MV
//VOUT OV UV
#define VOUT_OV_VOLT VOUT_OV_VOL_S_5P75V_TO_5P54V
否则会出现误判过压的情况。
烧录问题: 先检查接线问题和串口占用问题。以上问题无误后,确认方案使用的升
级口是否为 CC1/CC2 且加了 5.1K 的下拉,如果是,则处理烧写失败的解决办法是在强
制升级工具 TX 处加个上拉电阻 22k 到 5V,如下图所示:
乱码问题: keil打开文件的编码方式不一样,打开过后用vscode打开后会乱码,且打印也会乱码。
具体做法:解压工程后先用vscode打开,然后再用keil编译,再回来vscode打开后可能会出现乱码,CTRL+Z撤回一下可以恢复正常,保存后就不会出现乱码了。升压异常报错: 一般升压异常报错打印:SYS ERR
排查方向:- VOUT滤波电容不匹配,导致放电的时候会过压,最新版原理图为226的电容

- 如需调高升压电压到5v等,过压挡位也需要相应提高一下(VOUT_OV_VOL_S_5P75V_TO_5P54V)(app_config.h)
- 带通信的话,如自己添加了与耳机的自定义通讯交互,需要看是否正常进入与退出串口通信,不然会影响升压输出。(这种状态下打印也不对)
- VOUT滤波电容不匹配,导致放电的时候会过压,最新版原理图为226的电容
识别不到耳机负载的问题
- 耳机ldoin脚需要开下拉(200k)
- 耳机ldoin或者仓vout0/1脚不要接电容
- 可以简化耳机负载,用200K电阻串联接到vout和gnd,看能否识别物理在线
- 修改识别的电流挡位,最小是0.25ua
充电、放电、休眠异常 打印这三个byte看是什么状态导致的异常

VOUT波形分析
- 1.6v左右,982硬件检测负载工作,弱上拉状态(搭配其他方案耳机可能不一定是1.6V左右,具体看情况)
- 3.0v / 0v,逻辑通讯电平
- 4.7v或其他大于3.0v,充电状态(boost或者vin2vout)
- 芯片异常
- trim异常 burn_dump();
- 死机,WDT/长按复位都无法起作用,系统不跑 可怀疑静电打坏。
