近期在推进基于 RISC-V 架构的 Spacemit MusePaper2 开发板的 OpenHarmony 系统移植工作。在进行设备联调与外设驱动适配时,我遇到了一个阻塞后续开发的底层问题:系统的 USB 模块状态极不稳定,导致开发调试核心工具 HDC (HarmonyOS Device Connector) 频繁掉线。

本文将详细记录该问题的现象特征、逻辑排查过程以及最终通过修改系统层电源策略实现的代码级修复方案。

一、 故障现象与初步定位

在日常开发与应用推送过程中,通过 USB 线缆将 PC 端与开发板进行 HDC 连接。当开发板完成启动并静置极短的一段时间后,PC 端终端会高频报错并输出 [Empty] 提示,随后 HDC 连接完全中断。重新插拔 USB 线缆可以短暂恢复,但静置后问题必定复现。

考虑到这种“静置后断开”的规律性特征,我初步判断这并非通信协议栈或底层 USB 驱动代码本身的错误,而是系统在空闲状态下触发了某种电源管理机制,改变了外设的物理供电状态。

二、 实机指令验证与原因确立

为了验证“电源管理机制导致供电异常”的猜想,我需要通过干预系统的功耗状态来观察现象变化。

在开发板的串口终端中,我手动执行了官方提供的电源模式切换指令:

power-shell setmode 602
  • 指令原理解析: 该指令指示 OpenHarmony 的电源管理子系统将运行模式强制切换至 602(即高性能模式)。在此模式下,系统会主动屏蔽大部分为了省电而设定的休眠逻辑。

验证结果: 强制关闭休眠后,开发板在长达数小时的静置测试中,再未出现任何 HDC 掉线或报 [Empty] 的情况。逻辑验证 100% 通过。

这确立了问题的根本原因:OpenHarmony 系统在当前开发板的默认配置下,开启了过于激进的深度休眠策略,导致设备一旦进入空闲状态,底层 USB PHY 组件就会被直接切断物理供电。

三、 源码级修复实施

在明确故障机理后,修复工作需要从业务测试层下沉至源码配置层。依赖每次开机手动输入 setmode 602 不符合系统工程规范,必须在操作系统的默认电源策略中进行固化修改。

1. 锁定配置文件 OpenHarmony 系统的功耗策略通常由特定厂商目录下的 XML 文件控制。我定位到了影响 MusePaper2 开发板电源行为的核心配置文件:

  • 文件路径: vendor/spacemit/musepaper2/power_config/power_mode_config.xml

2. 执行参数修改 打开该 power_mode_config.xml 文件,需要修改系统在常规启动后的默认模式配置。

  • 定位到 <proxy id="600"> 节点,600 代表系统的 Normal(正常)模式。

  • 在该节点下,找到控制系统自动休眠时间的开关配置,即 <switch id="102" ... />,其中 id="102" 对应 SystemAutoSleepTime

  • 将该项的 value 值由原先的 0 修改为 -1

修改后的代码片段如下:

<switch_proxy version="1">
    <proxy id="600">
        <switch id="101" value="300000" recover_flag="0"/>
        <switch id="102" value="-1" recover_flag="0"/>
        <switch id="103" value="-1" recover_flag="0"/>
        <switch id="107" value="1" recover_flag="0"/>
        <switch id="115" value="76" recover_flag="0"/>
        <switch id="120" value="1" recover_flag="0"/>
    </proxy>
    ...
</switch_proxy>
  • 修改逻辑说明: 将值设定为 -1,意味着在操作系统的底层策略中彻底禁用了默认模式下的自动深度休眠机制,从而保证了 USB PHY 在设备空闲时也能获得持续的电力供应。

四、 总结与工程经验

保存上述修改并重新执行 ./build.sh 全量编译后,将生成的固件烧录进 MusePaper2。开发板开机即处于 Normal 模式,静置状态下 HDC 连接保持稳定,USB 模块断电掉线问题得到终极解决。

在嵌入式操作系统的底层移植过程中,外设模块(如 USB、WiFi、蓝牙)的异常离线,往往不仅是驱动代码的问题,很大程度上受制于全局的电源分配与休眠唤醒策略。通过调整系统级的 .xml 策略文件来适配底层硬件状态,是保障系统通信链路稳定性的关键步骤。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐