Guidelines for the MAX34407/MAX34417 Hardware Design and Support Notes for the Windows 10 Driver for System Designers

Abstract: The MAX34407/MAX34417 are Maxim’s system monitoring ICs that are used to determine the power consumption of portable systems. This application note provides guidelines to developing the suitable reference hardware based on the Maxim® power meter IC and to updating the BIOS configuration tables in the system before loading the Windows® 10 power meter driver. It also provides the steps to install the driver in the system.


The MAX34407/MAX34417 system monitoring ICs determine the power consumption of portable systems. The devices are configured and monitored with a standard I2C/SMBus (System Management Bus) serial interface. The devices automatically collect current and voltage samples and compute the accumulated power values. Upon a command from the host, the devices transfer the accumulated power samples and the accumulation count to a set of on-chip registers accessible by the host.

Hardware Integration

This section provides the following:

  • Design guidelines for hardware design and PCB layout for MAX34407/MAX34417-based power monitoring applications (for example, a notebook with a power meter IC).
  • Design guidelines using the MAX34407/MAX34417 evaluation kits as reference.

MAX34407/MAX34417-based Windows notebook system
Figure 1. MAX34407/MAX34417-based Windows notebook system.

Hardware Design Guidelines

Power Supply Lines (VDD and VIO)
The MAX34407/MAX34417 devices require VDD supply voltage (+2.7V to +3.6V) for current sense amplifiers and VIO supply voltage for digital interfaces (+1.6V to +3.6V). Each pin must be decoupled to GND with a 0.1µF capacitor. Voltage can be applied to VDD either before or after or in the absence of VIO. It is recommended to have the same VIO supply voltage as that of the system controller to support the I2C interface.

The MAX34407/MAX34417 can monitor multiple power rails including the system’s main power rail. In applications such as tablet systems, the system’s main power supply is off in standby/shutdown mode. To measure the system’s power consumption in this mode, it is recommended to connect the VDD and VIO pins to the power rails that are not shut down by the system standby or power down sequence. This allows the MAX34407/MAX34417 to accumulate power consumption data in the system’s standby/shutdown mode.

Configure the MAX34407/MAX34417 in slow sampling mode to reduce the power consumption of the system. The typical current consumption of the device in slow sampling mode is 2.4µA for MAX34407 and 10µA for MAX34417. The system controller can drive the SLOW pin and reduce the sampling rate to 8 samples per second. This setting facilitates a longer period in the standby/shutdown mode, reducing the chances for accumulator register overflow.

The MAX34407/MAX34417 enter power down mode when the PDNB pin is pulled down to GND. In power down mode, all the circuits in the device, including the I2C pins, are inactive, the device stays in a state of minimum power dissipation, and no data is retained in the IC. The typical current consumption of the device in power down mode is 0.7µA for MAX34407 and 2µA for MAX34417. In normal operation, this pin is connected to the VIO supply.

The MAX34407/MAX34417 support the I2C/SMBus interface, whereas the Maxim® power meter Windows driver only supports the I2C interface. Thus, system designers must connect the MAX34407/MAX34417 ICs to the system controller (host), which supports I2C communication, as shown in Figure 1. This system controller (host) supports the standard Windows Simple Peripheral Bus Framework Extension (SPBCx). Recommended values for the I2C pull-up resistors are 2.2KΩ.

A resistor tied to GND from the ADDR pin selects the I2C slave address. Refer to the Slave Address Setting section in the MAX34407/MAX34417 datasheet for further details. Note that the table in the datasheet indicates a 7-bit I2C slave address.

System designers must update the MAX34407/MAX34417 device configuration tables with this slave address. For example, if the ADDR pin is directly connected to GND, then a 7-bit I2C slave address in the device configuration table is 0x10.

Sense Resistor (RSENSE) The MAX34407/MAX34417 support RSENSE values from 100mΩ to 1Ω. The recommended value for sense resistor tolerance is 1%. The MAX34407 uses a 10mΩ, 1% tolerance sense resistor. For low power monitoring, a higher value of RSENSE is recommended to improve power measurement accuracy. The sense resistor value is expressed in milliohms and must be reflected in the MAX34407/MAX34417 device configuration tables for BIOS. This parameter setting is explained in Table 4.

Layout Guidelines
This section provides layout guidelines for MAX34407/MAX34417-based system designs. Figure 2 shows the PCB stack-up for the MAX34407/MAX34417 EV kits.

PCB stack-up for the MAX34407/MAX34417 EV kit
Figure 2. PCB stack-up for the MAX34407/MAX34417 EV kit.

Recommendations for routing differential sense signals, I2C signals, and power supply are provided as follows:

Differential Lines

  • Route the differential sense signals (IN1_P, IN1_N, IN2_N, IN2_P, …, IN4_P, IN4_N) along the same path and keep the paths short to improve system performance. Refer to the Kelvin Sense section in the MAX34407/MAX34417 datasheet for further details.
  • Differential sense signals should have the same length.
  • Power measurement error is minimized when a sense resistor is placed close to the MAX34407/MAX34417. In the MAX34407/MAX34417 EV kits, three options for RSENSE resistors are available:
    • 2512 size for high power.
    • 0805 size for medium power.
    • 0603 size for low power.

    Smaller sized resistors allow placement to be closer to the IC.
  • The path length for differential signals should be short, and paths should be as close to the IC pins as possible. A longer trace results in the degradation in power measurement accuracy. Every 1Ω of PCB trace resistance in the IN+/- path adds approximately 25μV of offset error. The longest trace length of differential signals in the MAX34417 EV kit is 1721 mils.
  • The typical trace width and clearance for these differential sense signals are 10 mils and 6 mils respectively.


  • VDD traces are thick with filtering capacitors for VDD and VIO pins.
  • Typical trace width for VDD and VIO is 30 mils (based on PCB stack up).

System Integration

This section provides guidance to integrate the MAX34407/MAX34417 into the system with the Maxim power meter driver and Windows 10 operating system.

Maxim power-meter-based system architecture
Figure 3. Maxim power-meter-based system architecture.

In Windows 7 and prior versions of Windows, the power meter interface is available through the Advanced Configuration and Power Interface driver, ACPIPMI.sys. The ACPI power meter interface (PMI) exposes the power metering and budgeting capabilities of the hardware platform to the drivers that provide the Windows driver model (WDM) PMI.

Starting with Windows 10, WDM drivers implement the energy metering interface. This interface consists of a set of standardized I/O controls (IOCTLs) for clients to get energy data as well as data about the metering hardware and the hardware being metered.

The PMI provides support for various IOCTL request packets that are issued by user-mode services or applications. This IOCTL interface provides information about different configuration parameters such as sampling intervals and power thresholds, similar to the energy metering interface.

More information on the energy meter interface can be found at the following MSDN link:

The ACPI namespace is a hierarchical representation of ACPI devices in the system, and a valid ACPI BIOS reflects all integrated power management features supported by the Windows Operating Systems. Windows 10 OS BIOS supports EMI_VERSION_V1. Future operating system releases may introduce later versions. To support power management functionality through the MAX34407/MAX34417 in the system, designers must update the ACPI BIOS with the MAX34407/MAX34417 ACPI device definition table, as shown in Figure 3.

Enumerating Power Accumulators Through the ACPI

This section describes the ACPI device definition, which is written in the ACPI Source Language (ASL).

Dynamic Enumeration
Each device is matched with a device node in the ACPI namespace regardless of the presence of the device in system. The _STA method, as mentioned in the ACPI specification, is a control method that returns the presence or status of the device (on/off). This method is used to detect the power meter devices so that the OS does not enumerate missing devices and only enumerates devices that are physically added. This allows the devices to be added/removed from the device pads (either in production or in a lab setting) to add/remove metering functionality without updating the system firmware.

Channel Information in the Power Meter Driver
Use a _DSM method for channel information. This method object returns packages with channel count and channel meta data. The channel names are strings (ordered to match channel 0 to channel 3) alternated with integer values that correspond to the resistor values. The power meter driver evaluates the _DSM method for each device on load to get this information. The strings are piped through to the user mode apps for diagnostic/informational purposes. The resistor values are used to calculate the scaled power numbers.

Table 1 translates the resistor values into ASL code. Table 2 and Table 3 provide 7-bit I2C slave addresses for both the MAX34407 and MAX34417 respectively.

Table 1. Transition of Sense Resistor Values in ASL Code

Resistor Value (mΩ) Translation in ASL Code (h) Resistor Value (mΩ) Translation in ASL Code (h)
100 0x64 15 0x0F
50 0x32 10 0x0A
40 0x28 5 0x05
25 0x19 4 0x04
20 0x14 2 0x02
18 0x12 1 0x01

Table 2. Translation of 7-bit I2C Slave Address in ASL Code for MAX34407

RADDR (Ω) 7-bit Slave Address Translation in ASL Code (h) RADDR (Ω) 7-bit Slave Address Translation in ASL Code (h)
Tie to GND 001 0000 0x10 3160 001 1000 0x18
442 001 0010 0x12 5900 001 1010 0x1A
931 001 0100 0x14 11000 001 1100 0x1C
1740 001 0110 0x16 20500 001 1110 0x1E

Table 3. Translation of 7-bit I2C Slave Address in ASL Code for MAX34417

RADDR (Ω) 7-bit Slave Address Translation in ASL Code (h) RADDR (Ω) 7-bit Slave Address Translation in ASL Code (h)
Tie to GND 001 0000 0x10 3160 001 1000 0x18
499 001 0010 0x12 5900 001 1010 0x1A
931 001 0100 0x14 11000 001 1100 0x1C
1740 001 0110 0x16 20500 001 1110 0x1E

MAX34407/MAX34417 ACPI Integration Parameters
Table 4 lists the MAX34407/MAX34417 ACPI integration parameters. These parameters are used in sample ASL code for the MAX34407/MAX34417.

Table 4. MAX34407/MAX34417 ACPI Device Configuration Table

Parameter Type Value Value in ASL Comments
_UID Integer ≥1 1 Each power monitor device must have a unique ID
I2C 7-bit Slave Address Integer The value selected by the ADDRSEL pin 0x001C Refer to the slave address setting section in datasheet.
I2C Connection Speed Integer Typical: 400000Hz
Maximum: 100000Hz
0x000186A0 (Hex)
1000000Hz (Dec)
This specification is based on the NXP® I2C spec.
I2C Controller Name String ACPI name of I2C bus controller _SB.PCI0.I2C1 I2C bus controller driver based on SPBCx spec
Channel Name String “” or non-empty string “Channel Name 1” Microsoft Power Railing taxonomy
RSENSE Integer 0 or non-zero 0x02 (2mΩ for channel 1) Expressed in milliohms

Sample ASL
Note: System integrators need to follow power rail names that E3 understands.

Scope (_SB.PCI0.I2C1)
       // MAX34407/17 ASL
        Device (PA01)
            // The driver loads on this Hardware ID.
            Name (_HID, "MAX34407")
            Name (_CID, "MAX34417")
            Name (_UID, One) // Each device must have unique ID

            Method (_CRS, 0, NotSerialized)  
                Name (RBUF, ResourceTemplate ()
                    I2cSerialBus (0x001C,                 //7 bit slave address
                                  ControllerInitiated,    // I2C master or slave 
                                  0x000186A0,             // I2C CLK Frequency
                                  AddressingMode7Bit,    // 7-bit or 10-bit slave address
                                  "\\_SB.PCI0.I2C1",     // I2C Controller Name
                                  0x00,                  //Index of Resource
                                  ResourceConsumer       //Consumer or Producer
                Return (RBUF) /* \_SB_.PCI0.I2C1.PA01._CRS.RBUF */

            // You may or may not need this section. You may want this section if
            // if the device presence is dynamic. If the device is always present,
            // you don’t need this section.
            Method (_STA)
              // Detect if the power accumulator device is present and:
              //    Return 0x0F if the device is present/responds.
              //    Return 0x00 if the device is not present/failed to respond.
              // TODO: add implementation
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method        
                // The driver uses the DSM referenced by this GUID.
                If (LEqual (Arg0, ToUUID ("4993a436-e1ac-4dc7-b4f8-46a5008fb9e7")))
          // This example exposes 4 channels and provides information for all channels.
                // (The number of channels is below.)
                    If (LEqual (Arg2, One))
                        If (LEqual (Arg1, Zero))
                            Name (PBUF, Package (0x08)
                                "Channel Name 1", 
                                0x02, 		// ResistorMilliohms for Channel 1
                                " Channel Name 2", 
                                0x08, 		// ResistorMilliohms for Channel 2
                                " Channel Name 3", 
                                0x12,		// ResistorMilliohms for Channel 3
                                " Channel Name 4", 
                                0x05		// ResistorMilliohms for Channel 4
                            Return (PBUF) /* \_SB_.PCI0.I2C1.PA01._DSM.PBUF */
                           If(LEqual (Arg2, Zero))    // Arg2: Function number zero is a query function
                            Return (Buffer (One)

                    // This example exposes 4 channels.
                    // This is the number of channels.
                    If (LEqual (Arg2, 0x02))
                        If (LEqual (Arg1, Zero))
                            Name (CBUF, Package (0x01)
                                0x04		// Number of Channels Above
                            Return (CBUF) /* \_SB_.PCI0.I2C1.PA01._DSM.CBUF */
                            Return (Buffer (One)

                    Return (Buffer (One)
                    Return (Buffer (One)

ASL Update Process
This section provides guidelines to integrate, compile, and deploy the MAX34407/MAX34417 ASL on target systems. A target system must have Windows 10 OS installed. This Windows 10 OS system must have administrative privileges to perform ASL code changes. It is recommended to do these changes with great care to avoid any fatal loss of data or crash of the operating system.

ASL Update Procedure

  1. Copy the sample ASL code into a text file. Save the file in the target system as max34417_acpi.
  2. Download ACPIDump tools from the ACPICA website. Save the tools in a folder (e.g., MAX34417). Open a command prompt with administrative privileges. Obtain the current system’s ACPI tables in binary format. Use the following command:
    C:\MAX34417>acpidump -b
  3. Disassemble the binary ACPI code using the following command:
    C:\MAX34417>iasl -d *.dat
  4. In the current working folder, open ssdt.dsl in any text editor and update it with the MAX34407/MAX34417 ASL code (as provided in the ASL code section) to add the Maxim power meter’s device configuration table in the ACPI SSDT.
  5. Compile the modified SSDT using the following command:
    C:\MAX34417> iasl ssdt.dsl
    After the execution of this step, the ssdt.aml file is created in the same folder.
  6. Unload the previous ACPI code, if it already exists, using the following command:
    C:\MAX34417> asl /loadtable -v -d ssdt.aml
  7. Load the new ACPI SSDT in the Windows registry using the following command:
    C:\MAX34417> asl /loadtable -v ssdt.aml
  8. Switch Windows to test mode to enable the ACPI override feature by using the following command:
    C:\MAX34417> bcdedit /set TESTSIGNING ON
  9. Reboot the system.
  10. Check the device manager.

Driver Installation
This section provides driver installation steps for the MAX34407/MAX34417-based Windows 10 system application.

  1. Scan for hardware changes.
    Click the “Scan for hardware changes” option in the toolbar at the top of Device Manager window, as shown in Figure 4. This option lists the “Unknown Devices” under “Other Devices”.
  2. Scan for hardware changes option
    Figure 4. Scan for hardware changes option.

  3. Install Maxim’s driver.
    1. To update the driver, right click on “Unknown Devices” and select “Update Driver Software,” as shown in Figure 5.

      Update driver software
      Figure 5. Update driver software.

    2. The Update Driver Software window pops up. As shown in Figure 6, there are two options available to help the user locate the Maxim driver on the system:
      • Option 1: Search automatically for updated driver software
      • Option 2: Browse my computer for driver software
    3. Select the second option for “Browse my computer for driver software.”

      Update driver software window.
      Figure 6. Update driver software window.

    4. The Update Driver Software window prompts for a location path for the driver file, as shown in Figure 7. Provide the path where you previously saved the driver file and click “Next.”
    5. Provide path for the driver software
      Figure 7. Provide path for the driver software.

    6. The driver software is installed on the tablet.
    7. You should see the Maxim Power Meter driver installed under Sensors, as shown in Figure 8
    8. Maxim power meter
      Figure 8. Maxim power meter.


System integrators can use these schematic and layout guidelines to design an accurate power monitoring system based on the MAX34407/MAX34417. Use the ASL sample code to integrate the power monitoring device, and update and test the ACPI BIOS with the ASL update procedure. This application note also instructs system integrators how to install Windows drivers for a Windows 10 operating system.


Maxim is a registered trademark of Maxim Integrated Products, Inc.
NXP is a registered trademark of NXP B.V.
Windows is a registered trademark and registered service mark of Microsoft Corporation.


 Learn more about our Essential Analog ICs

  Essential Analog ICs