为什么有高频的风扇PWM设置操作

问题描述

风扇的FanType没有识别成功,定位发现有高频的PWM设置操作,FanType识别过程的正常现象吗?

2026-04-02 10:31:56.987205, Accessor_Fan3_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 03 D9 , write_result: true
2026-04-02 10:31:56.989801, Accessor_Fan3_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 75 92 FF FF FF FF FF FF
2026-04-02 10:31:56.993334, Accessor_Fan2_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 02 DE , write_result: true
2026-04-02 10:31:56.996096, Accessor_Fan2_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 65 E2 FF FF FF FF FF FF
2026-04-02 10:31:56.999363, Accessor_Fan1_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 01 D7 , write_result: true
2026-04-02 10:31:57.001675, Accessor_Fan1_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 79 B6 FF FF FF FF FF FF
2026-04-02 10:31:57.013850, Accessor_Fan3_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 03 D9 , write_result: true
2026-04-02 10:31:57.014699, Accessor_Fan3_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 5D 4A FF FF FF FF FF FF
2026-04-02 10:31:57.020014, Accessor_Fan2_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 02 DE , write_result: true
2026-04-02 10:31:57.023483, Accessor_Fan2_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 65 E2 FF FF FF FF FF FF
2026-04-02 10:31:57.032449, Accessor_Fan1_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 01 D7 , write_result: true
2026-04-02 10:31:57.033263, Accessor_Fan1_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 79 B6 FF FF FF FF FF FF
2026-04-02 10:31:57.036978, Accessor_Fan3_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 03 D9 , write_result: true
2026-04-02 10:31:57.040769, Accessor_Fan3_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 5D 4A FF FF FF FF FF FF
2026-04-02 10:31:57.045602, Accessor_Fan2_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 02 DE , write_result: true
2026-04-02 10:31:57.049435, Accessor_Fan2_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 65 E2 FF FF FF FF FF FF
2026-04-02 10:31:57.056270, Accessor_Fan1_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 01 D7 , write_result: true
2026-04-02 10:31:57.059055, Accessor_Fan1_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 79 B6 FF FF FF FF FF FF
2026-04-02 10:31:57.064952, Accessor_Fan3_PWM_010103, block_write, Smc_ExpBoardSMC_0101, addr: 96, offset: 32, write_data: 04 18 00 10 03 D9 , write_result: true
2026-04-02 10:31:57.067019, Accessor_Fan3_PWM_010103, block_read, Smc_ExpBoardSMC_0101, addr: 96, offset: 33, read_length: 10, read_result: 02 00 5D 4A FF FF FF FF FF FF

答案内容由AI生成,仅供参考:

问题分析结论

高频的风扇PWM设置操作不是FanType识别过程的正常现象。根据提供的日志和系统机制分析,此行为表明系统存在异常,导致FanType识别失败。

点击此处查看详细分析解答

高频风扇PWM设置操作与FanType识别失败问题分析

问题分析结论

高频的风扇PWM设置操作不是FanType识别过程的正常现象。根据提供的日志和系统机制分析,此行为表明系统存在异常,导致FanType识别失败。

FanType识别的正常流程

1. **触发识别**:系统启动或检测到风扇插拔时,触发FanType识别流程。
2. **设置识别PWM**:通过`set_pwm`函数,将PWM设置为`IdentifySpeedLevel`(通常为35%)。
3. **等待稳定**:等待风扇转速稳定。
4. **采集转速**:采集5次风扇转速,舍去最大值和最小值。
5. **计算平均值**:取剩余3次转速的平均值。
6. **匹配型号**:判断平均值是否落在某个FanType的`IdentifyRangeLow`与`IdentifyRangeHigh`之间。
7. **完成识别**:识别成功后,设置对应风扇型号。

提供日志中的异常行为分析

从您提供的日志可以看出异常行为:

  • 高频操作:在约60毫秒内,对三个风扇(Fan1、Fan2、Fan3)进行了多轮的PWM设置操作
  • 重复写入:同一PWM值(如D7DED9)被反复写入,这不是正常的识别流程
  • 正常识别流程应该是单次设置:在识别过程中,只需要一次设置IdentifySpeedLevel对应的PWM值
  • 日志模式block_writeblock_read的模式快速重复,表明系统在不断尝试设置PWM

可能的故障原因

1. 软件逻辑问题(最可能)

- **`thermal_mgmt`软件问题**:系统未能正确拦截其他PWM设置任务
- **识别过程中被覆盖**:识别用的PWM设置被其他任务(如自动调速)覆盖
- **循环设置**:系统识别失败后陷入无限重试循环

2. 硬件或驱动问题

- **Accessor_Fanx_PWM寄存器无法写入**:虽然日志显示写入成功(`write_result: true`),但硬件可能未实际执行
- **SMC通信问题**:SMC命令执行不稳定,需要反复重试
- **硬件反馈异常**:硬件未按预期响应PWM设置

3. 配置问题

- **IdentifySpeedLevel配置异常**:识别速度级别设置不当
- **MaxSupportedPWM不匹配**:计算出的PWM值超出硬件支持范围
- **识别范围配置错误**:`IdentifyRangeLow`和`IdentifyRangeHigh`设置不合理

排查建议

1. 检查关键配置参数

**确认以下参数配置正确:**
- `IdentifySpeedLevel`:通常应为35
- `MaxSupportedPWM`:通常应为255
- 实际识别PWM = MaxSupportedPWM × (IdentifySpeedLevel/100)

2. 验证硬件写入

**检查是否真实写入:**
1. 通过`Accessor_Fanx_PWM`直接读取硬件寄存器值
2. 与资源树上报的值进行对比
3. 确认硬件确实接收到了设置指令

3. 检查软件逻辑

**排查`thermal_mgmt`问题:**
1. 确认在风扇识别过程中,是否正确拦截了其他PWM设置任务
2. 检查是否存在多个组件同时尝试控制风扇PWM
3. 查看是否有无限重试逻辑导致高频操作

4. 特殊场景验证

**测试手动模式下的行为:**
- 在手动模式下插拔风扇,观察识别行为
- 手动模式下,系统应优先使用`IdentifySpeedLevel`而非手动设置的PWM值
- 如果手动模式下也出现此问题,说明是系统级缺陷

解决方案建议

  1. 优先排查thermal_mgmt软件问题,检查是否在风扇识别过程中正确拦截了其余PWM设置任务
  2. 验证Accessor_Fanx_PWM寄存器的写入有效性,确认硬件层通信正常
  3. 检查系统中是否存在冲突的PWM控制逻辑,确保识别过程的排他性
  4. 在识别过程中增加适当的延时和状态检查,避免高频重试

此高频PWM设置行为是系统异常的明显标志,需要立即排查以避免对风扇硬件造成潜在损害。

fan_service:set_fans_pwm(l_pwm)这个函数加点日志看看,是不是调速已经起了,在进行下发