Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

MeshTracker_X1 shutdown current ~10.8mA — powerOff() skips shutdownPeripherals()

未关闭 适合新手
#3,567 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
74/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
c
领域
embedded-iot

调研方向

从 variants/meshtracker_x1/MeshTrackerX1Board.h 开始,追踪 MeshTrackerX1Board::powerOff(),并结合 NRF52Board::powerOff() 和 shutdownPeripherals() 进行分析。确认 LR2021 和 GPS 现有的关闭顺序,然后构建 MeshTracker_X1_companion_radio_ble 环境,并检查断电是否在执行 peripherals shutdown 后进入 system off 状态。

由索引模型根据 Issue 内容生成。

描述

Summary:
On MeshTracker_X1_companion_radio_ble(companion-v1.17.1), entering powerOff() (long-press user button or CLI poweroff) leaves the board drawing ~10.81 mA

Root cause:
MeshTrackerX1Board::powerOff() overrides the base implementation but never calls NRF52Board::powerOff() / shutdownPeripherals()

Reproduction
Build env:MeshTracker_X1_companion_radio_ble, flash to X1.
Boot, wait >8 s (past the CLI-rescue window).
Long-press USER (P0.6) ≥3 s, release.
Measure system current on the supply rail: observe ~10.8 mA persisting after the LED/sd_power_system_off() sequence.

Suggested fix:
In variants/meshtracker_x1/MeshTrackerX1Board.h, replace the trailing sd_power_system_off(); with: delegate to NRF52Board::powerOff() so shutdownPeripherals() runs (LR2021 reset + sleep(), GPS stop) before SYSTEMOFF.

void powerOff() override {
    #ifdef HAS_GPS
        digitalWrite(GPS_VRTC_EN, LOW);
        digitalWrite(GPS_RESET, LOW);
        digitalWrite(GPS_SLEEP_INT, LOW);
        digitalWrite(GPS_RTC_INT, LOW);
        digitalWrite(GPS_EN, LOW);
    #endif

    #ifdef PIN_DRV_EN
        digitalWrite(PIN_DRV_EN, LOW);
    #endif

    #ifdef PIN_BAT_ADC_EN
        digitalWrite(PIN_BAT_ADC_EN, LOW);
    #endif

    #ifdef PIN_3V3_EN
        digitalWrite(PIN_3V3_EN, LOW);
    #endif

    // set led on and wait for button release before poweroff
    #ifdef LED_PIN
    digitalWrite(LED_PIN, HIGH);
    #endif
    #ifdef BUTTON_PIN
    while(digitalRead(BUTTON_PIN));
    #endif
    #ifdef LED_PIN
    digitalWrite(LED_PIN, LOW);
    #endif

    #ifdef BUTTON_PIN
    nrf_gpio_cfg_sense_input(BUTTON_PIN, NRF_GPIO_PIN_PULLDOWN, NRF_GPIO_PIN_SENSE_HIGH);
    #endif

    NRF52Board::powerOff();
  }
主要语言
C
星标
3.9k
派生
1.5k
平均合并
18 小时 59 分钟
30 天内合并 PR
28

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

meshcore-dev/MeshCore 的其他 Issue

查看 meshcore-dev/MeshCore 的全部 Issue

相似的 Issue

更多 C Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。