fix(battery): detect TP4056 charging and full states on new board
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# 新旧板 GPIO 对比与固件适配位置
|
||||
|
||||
核对日期:2026-10-23。初始对照保留在下文;当前已应用现有功能的新板引脚映射,新增功能仍未接入。验证结果见文末,未烧录或进行实机验收。
|
||||
核对日期:2026-10-23。初始对照保留在下文;当前已应用新板引脚映射及GPIO8满电检测,GPIO10马达仍未接入。验证结果见文末,未烧录或进行实机验收。
|
||||
|
||||
## 对照基线
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
大部分引脚在 `sdkconfig.defaults` 和 `main/Kconfig.projbuild` 中修改即可;已有本地 `sdkconfig` 还须通过 `menuconfig` 同步,因为修改 defaults 不会覆盖已经保存的配置。不要手改 `build/config/sdkconfig.h`,也不要提交本地 `sdkconfig`。
|
||||
|
||||
后续菜单整理:现有 42 个 GPIO/电平/上下拉配置已集中到
|
||||
菜单整理:GPIO/电平/上下拉配置已集中到
|
||||
`TQ Cat Configuration -> Board Hardware Configuration (GPIO)` 单页,按 LCD、音频、
|
||||
输入、步进、电源/电池分区。配置名及依赖保持原样;默认值及本地有效配置已更新为新板映射,
|
||||
未新增 GPIO8 充满检测或 GPIO10 马达配置。旧硬编码 GPIO4/5 功能保留源码,
|
||||
本次充电逻辑重写已新增 GPIO8 充满输入及有效电平配置,GPIO10 马达仍未接入。旧硬编码 GPIO4/5 功能保留源码,
|
||||
平台初始化已移除其启动调用,不再创建这些任务。
|
||||
下文 Kconfig 旧行号属于对照时快照,搬迁后应按配置名定位。
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
| LCD 时钟 CLK / 新板 SCL | 8 | 8 | **16** | `TQ_SCREEN_SPI_CLK_GPIO`;`lcd_direct.c` SPI bus |
|
||||
| LCD MISO | 未接 | -1 | 未接 | `TQ_SCREEN_SPI_MISO_GPIO=-1` 保持 |
|
||||
| 电池电压检测 Power_t / 电量检测 | 9 | 9 | **17** | `TQ_BATTERY_ADC_GPIO`;`platform_battery_driver.c` |
|
||||
| 充电状态 Charge / 充电检测 | 10 | 10 | **18** | `TQ_BATTERY_CHARGE_GPIO`;电池驱动、充电边沿中断及深睡唤醒链路 |
|
||||
| 独立充满检测 | 未接入 MCU | 无 | **8** | 当前无配置项;需新增采样配置和状态映射,见后文 |
|
||||
| 充电状态 Charge / 充电检测 | 10 | 10 | **18** | `TQ_BATTERY_CHARGE_GPIO`;电池驱动、双路轮询及深睡唤醒链路 |
|
||||
| 独立充满检测 | 未接入 MCU | 无 | **8** | `TQ_BATTERY_FULL_GPIO` / `TQ_BATTERY_FULL_ACTIVE_LEVEL`;见后文 |
|
||||
| 功放 PA_CTRL | 11 | 11 | **9** | `MULTIMODAL_AUDIO_PA_GPIO`;音频 codec 初始化及运行时使能 |
|
||||
| 开关1 / 原 SW1 | 12 | 校准输入 12 | **11** | 若保持开关1作校准:`TQ_CALIBRATION_SWITCH_GPIO` |
|
||||
| 开关2 / 原 SW2 | 13 | 抽签输入 13 | **12** | 若保持开关2作抽签:`TQ_SLOT_SWITCH_GPIO` |
|
||||
@@ -92,7 +92,7 @@
|
||||
| [platform_battery_driver.c](../components/platform/src/platform_battery_driver.c) | 约 136 行状态输入;158 行 ADC 映射;296 行采样状态 | 迁移 ADC/充电输入;新增独立充满输入及原始样本处理 |
|
||||
| [platform.h](../components/platform/include/platform.h) | 约 406 行电池硬件样本契约 | 如接入充满检测,扩展平台硬件样本,保留未知/无效状态 |
|
||||
| [domain.h](../components/domain/include/domain.h) / [domain_battery_service.c](../components/domain/src/battery/domain_battery_service.c) | 领域电池语义;样本到领域状态映射;约 363 行深睡调用 | 领域层拥有充电/满电语义,不能由显示层直接读取 GPIO8 判断 |
|
||||
| [control_plane_battery_service.c](../components/control_plane/src/runtime/control_plane_battery_service.c) | 104 行起充电中断;约 400 行后满电推断/提示 | 迁移充电引脚配置自动覆盖现有中断;若新增满电检测,调整确认/提示策略和相应事件来源 |
|
||||
| [control_plane_battery_service.c](../components/control_plane/src/runtime/control_plane_battery_service.c) | 充电轮询、独立ADC定时及提示 | 不注册充电GPIO中断;只有领域确认充电→满电才提示 |
|
||||
| [domain_runtime_adapters.c](../components/domain/src/runtime/domain_runtime_adapters.c) | 807 / 836 / 865 行三路数字输入映射 | 已读取配置,单纯迁脚通常无需改;核对 PTT 有效电平 |
|
||||
| [control_plane_key_input.c](../components/control_plane/src/runtime/control_plane_key_input.c) | 158 行起 `s_key_configs` | 同步核对三路按键及可选 reset,不把两个功能配置到同一 GPIO |
|
||||
| [audio_pipeline_codec_impl.c](../components/platform/src/multimodal/audio_pipeline/audio_pipeline_codec_impl.c) | 148 行 I2C;223 行 I2S;318 行 PA | I2C/I2S 不变,PA 配置迁移到 9 |
|
||||
@@ -122,11 +122,19 @@ GPIO17 的“电量检测”来自下板 Q5/Q6 控制后的电池分压:R6、R
|
||||
|
||||
新下板正式电路使用 TP4056,CHRG#/STDBY# 经 Q7/Q8、3.3V 上拉后送至 GPIO18/GPIO8。按电路作用可预期状态拉低时对应输入低有效,但这属于图纸推断:首次上板应记录“未插电 / 正在充电 / 充满 / 无电池”的两路实际电平,再确定配置和异常组合处理。不能仅凭换了充电芯片就反转电平。
|
||||
|
||||
现有固件只有“未知 / 未充电 / 充电中”硬件充电状态,满电提示依赖电压、百分比、时间确认。`TQ_BATTERY_FULL_MIN_*` 是满电推断阈值,**不是 GPIO8 配置项**。
|
||||
当前固件以两路输入生成“未知 / 未充电 / 充电中 / 满电 / 异常”状态。
|
||||
每100ms轮询,采样电平组合稳定1秒才更新;采样间断超过250ms重新确认,
|
||||
持续2秒未能确认稳定组合时退出旧状态并标记未知,避免旧“充电中”长期屏蔽低压保护。
|
||||
两路同时有效为异常,两路均无效只代表未充电,不证明 USB 或电池是否存在。
|
||||
ADC失败、负载抑制不阻塞数字输入更新。
|
||||
|
||||
最小迁移可以先只使用 GPIO18,保留旧满电推断,并明确 GPIO8 尚未使用。要利用独立充满检测,需增加配置、平台原始采样、领域状态解释及控制层提示策略;不在上层 facade 复制平台类型,也不在 LCD 内读取原始 GPIO。
|
||||
满电提示要求本次运行先确认充电,再直接确认满电;启动已满不播、拔线/异常/读取失败
|
||||
打断本轮、不用电压和百分比推断满电。旧 `TQ_BATTERY_FULL_MIN_*` 和
|
||||
`TQ_BATTERY_FULL_CONFIRM_SEC` 已移除;新增两项仍放在 GPIO 单页。
|
||||
详细触发规则、测试和实机检查见 [新板充电检测](新板充电检测.zh-CN.md)。
|
||||
|
||||
充电 GPIO 同时参与中断和深睡唤醒:`domain_battery_service.c` 将 `CONFIG_TQ_BATTERY_CHARGE_GPIO` 传给 `platform_power_enter_deep_sleep()`,实施时一并检查唤醒驱动对新引脚及有效电平的处理。
|
||||
GPIO18仍为低有效深睡唤醒源,GPIO8不参与唤醒。唤醒保护先轮询两路约1.2秒再读取ADC,
|
||||
避免尚未去抖就再次入睡;深睡接口仍要求板级低有效连接。
|
||||
|
||||
### 4. 两个机械开关与触摸 PTT
|
||||
|
||||
@@ -144,7 +152,7 @@ GPIO17 的“电量检测”来自下板 Q5/Q6 控制后的电池分压:R6、R
|
||||
|
||||
## 已应用的新板配置
|
||||
|
||||
以下已有配置项均已写入 Kconfig 默认值、sdkconfig.defaults 和本地 sdkconfig。PTT 有效电平仍待实测,新增 GPIO8/10 功能未接入。
|
||||
以下已有配置项均已写入 Kconfig 默认值、sdkconfig.defaults 和本地 sdkconfig。PTT 有效电平仍待实测;GPIO8现已接入,GPIO10仍未接入。
|
||||
|
||||
```ini
|
||||
CONFIG_TQ_SCREEN_BACKLIGHT_GPIO=4
|
||||
@@ -171,7 +179,7 @@ CONFIG_TQ_STEPPER_IN3_GPIO=47
|
||||
CONFIG_TQ_STEPPER_IN4_GPIO=48
|
||||
```
|
||||
|
||||
平台初始化已停止调用旧 GPIO4/5 输出模块;GPIO8 满电和 GPIO10 马达没有新增配置项。音频 SDA=1、SCL=2、MCLK=38、BCLK=39、DOUT=40、WS=41、DIN=42 保持。
|
||||
平台初始化已停止调用旧 GPIO4/5 输出模块;GPIO8满电输入已接入,GPIO10马达仍未接入。音频 SDA=1、SCL=2、MCLK=38、BCLK=39、DOUT=40、WS=41、DIN=42 保持。
|
||||
|
||||
## 实施顺序与验证边界
|
||||
|
||||
@@ -184,7 +192,7 @@ CONFIG_TQ_STEPPER_IN4_GPIO=48
|
||||
|
||||
本次证据层级:两份 PDF 文本提取及关键连线视觉核对、工作区配置和源码静态核对。新板配置的构建与回归记录见下方;没有设备验证结果。
|
||||
|
||||
### 2026-10-23 重新切换新板后的验证记录
|
||||
### 2026-10-23 重新切换新板后的验证记录(充电逻辑重写前快照)
|
||||
|
||||
本次在保留 VAD 重复 PTT 修复和 kikivok.com 域名迁移的基础上重新应用;以下主机测试与构建均已重新执行。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user