0

我需要访问风扇速度。

板子是 KGPE-D16 和 Winbond W83667HGA。

我有关于连接器的 SMBIOS 数据,我需要读/写它们

[Port Connector Information] (Type 8) 08 09 17 00 01 FF 00 00 FF 46 52 4E 54 5F 46 41 .........FRNT_FA 4E 31 00 00 N1..
Type 0x08 (8) Length 0x09 (9) Handle 0x0017 (23) Internal Reference Designator String1 - "FRNT_FAN1" Internal Connector Type 0xFF - Other External Reference Designator NULL External Connector Type 0x00 - None Port Type 0xFF - Other

问题是我从不习惯 WDK 和 WMI 的东西。我正在查看 Open-Hardware-Monitor 并且无法理解如何插入其中。我也有 RWEverything,但它的命令/地址系统很难理解。这个问题很简单——我只想读/写一个数字。

添加1。风扇速度已由 BIOS 控制。所以我想先读一下。

添加2。在 RWEverything 中做事应该更容易。但我不明白它的 CLI。

添加3。在 RWEverything 中有 command: I{len} {port}。我还没有让它工作。

添加4。做IO的函数是这样的

private byte ReadByte(byte bank, byte register) {
  Ring0.WriteIoPort(
     (ushort)(address + ADDRESS_REGISTER_OFFSET), BANK_SELECT_REGISTER);
  Ring0.WriteIoPort(
     (ushort)(address + DATA_REGISTER_OFFSET), bank);
  Ring0.WriteIoPort(
     (ushort)(address + ADDRESS_REGISTER_OFFSET), register);
  return Ring0.ReadIoPort(
    (ushort)(address + DATA_REGISTER_OFFSET));
} 

private void WriteByte(byte bank, byte register, byte value) {
  Ring0.WriteIoPort(
     (ushort)(address + ADDRESS_REGISTER_OFFSET), BANK_SELECT_REGISTER);
  Ring0.WriteIoPort(
     (ushort)(address + DATA_REGISTER_OFFSET), bank);
  Ring0.WriteIoPort(
     (ushort)(address + ADDRESS_REGISTER_OFFSET), register);
  Ring0.WriteIoPort(
     (ushort)(address + DATA_REGISTER_OFFSET), value); 
}

读取的函数调用如下所示 ReadByte(0, FAN_BIT_REG[i]); ReadByte(FAN_TACHO_BANK[i], FAN_TACHO_REG[i]);

因为来自 OpenHardwareMonitor 的代码是愚蠢的,我无法理解“地址”到底是什么。

4

0 回答 0