WITT I2C 测试先决条件

Windows 内部集成电路 (I2C) 测试工具 (WITT) 控制器测试验证 Windows Hardware Lab Kit (Windows HLK) Windows 简单外设总线 (SPB) 合规性和 I2C 控制器及其关联驱动程序的可靠性。 WITT I2C 控制器测试包含硬件(WITT 适配器)和软件(测试可执行文件、测试驱动程序和实用工具)。 有关 WITT I2C 测试的列表,请参阅 Device.BusController 测试

本文内容:

WITT I2C 控制器测试硬件设置

图 1. 典型的 WITT 测试设置 显示测试、测试驱动程序设置以及必须执行用于运行 WITT 测试的 I2C 连接。

witt 连接

图 2. WITT 板 I2C 标头在典型的 WITT 板上显示 LED、I2C 标头、USB 连接器、测试引脚、EEPROM 跳线和电压跳线。

带有 i2c 标头的网络接口卡

必须将串行时钟 (SCL)、串行数据 (SDA) 和接地 (GND) 引脚连接到主机 I2C 控制器。 WITT I2C 控制器测试不需要常规用途输入/输出 (GPIO) 连接。 SCL、SDA 和 GND 引脚显示在图 3 中。 I2C 10 引脚标头:

i2c 标头

USB

将 USB 电缆连接到 USB 连接器(类型 B)。 可以使用 USB 连接来更新 WITT 固件,这需要 Microsoft USB 测试工具 (MUTT) 驱动程序和 Muttutil.exe 实用工具,可从 MUTT 软件包获取该工具。 由于 WITT 已有 I2C 控制器测试固件,因此 USB 连接仅用于电源目的。 如果需要固件升级,请使用以下步骤:

  1. 设置 WITT I2C 目标,如 WITT I<superscript xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">2</superscript>C 控制器测试软件设置中所述。

  2. 从具有管理权限的命令提示符窗口中运行以下命令:

    WITTUpgrade.exe I2C9665.iic /f
    

    其中,I2C9665.iic 是固件文件,/f 强制进行升级。 (固件 .iic 文件与其他测试二进制文件一起发布在 Windows HLK 中。)

测试引脚

测试引脚标头上的 SCL/SDA/GND 连接器可以焊接在一起并用于将 I2C 连接到主机控制器。 I2C 线路的电压必须与主机控制器的电压匹配;它们通常是 1.8v 或 3.3v,可以通过切换 WITT 板上的电压跳线来设置(请参见图 2. WITT 板)。

EEPROM 跳线

EEPROM 跳线控制是否从 EEPROM 启动。 应在图 2. WITT 板中所示的位置处设置跳线。 (只需切换到其他位置即可通过 USB 方法恢复 WITT 固件。)

LED

可以按如下方式解释 LED:

  • 红色 LED:打开电源。

  • 黄色 LED:如果没有 I2C 总线流量(SCL 和 SDA 较高),则持续亮起。

  • 蓝色 LED:当 I2C 数据流量在主机和 WITT 板之间持续流动时闪烁。

I2C 电压跳线

此跳线可用于将 I2C 信号电平位移到 WITT。 设置跳线位置 1-2(针对 3.3v)或跳线位置 2-3(针对 1.8v)。 将电源连接到 pin2 以获取除 1.8v 和 3.3v 之外的其他电压等级。

WITT I2C 控制器测试软件设置

WITT 测试二进制文件随 Windows HLK 一起提供,位于 \\{$HCKServer}\Tests\{$PROCESSOR_ARCHITECTURE}\spb 文件夹中的 Windows HLK 控制器或服务器上,其中 HCKServer 是 Windows HLK 服务器的名称, $PROCESSOR_ARCHITECTURE 是 AMD64、x86 或 Arm) (设备平台。 WITT I2C 测试需要以下二进制文件:

  • 测试外设驱动程序:WITTTest.inf、WITTTest.sys 和 WITTTest.cat。

  • WITTTest.exe

必须在测试过程中使用内核调试器。 可以从下载和安装 Windows 调试工具下载并安装内核调试器。

典型安装步骤(单个控制器实例)

若要设置使用单个控制器的典型测试配置,请执行以下步骤。

设置典型测试配置

  1. 打开具有管理权限的命令提示符。

  2. 运行以下命令以安装测试外设驱动程序:

    pnputil -a witttest.inf
    

    -a 标志将驱动程序包添加到 Windows 驱动程序存储区中。

  3. 更新高级配置和电源接口 (ACPI) 表以枚举测试设备节点。 这些节点通常在 SSDT(辅助系统描述符表)或 DSDT(差异化系统说明表)中定义。

    • 在命令提示符窗口中,运行以下命令以生成 SSDT:

      asl.exe /tab:ssdt
      
    • 编辑生成的 SSDT.asl 表,如下所示:

      Device(TP1) {
          Name(_ADR,0)
          Name (_HID, "STK0001") 
          Name (_CID, "WITTTest") 
          Method(_CRS, 0x0, NotSerialized)
          {
            Name (RBUF, ResourceTemplate ()
            {
              I2CSerialBus ( 0x7F, ControllerInitiated, 100000,AddressingMode7Bit, "\\_SB_.I2C3",,, , )
            })
            Return(RBUF)
          }
      }
      Device(TP2) {
          Name(_ADR,0)
          Name (_HID, "STK0002") 
          Name (_CID, "WITTTest") 
          Method(_CRS, 0x0, NotSerialized)
          {
            Name (RBUF, ResourceTemplate ()
            {
              I2CSerialBus ( 0x11, ControllerInitiated, 100000,AddressingMode7Bit, "\\_SB_.I2C3",,, , )
            })
            Return(RBUF)
          }
      }
      Device(TP3) {
          Name(_ADR,0)
          Name (_HID, "STK0003") 
          Name (_CID, "WITTTest") 
          Method(_CRS, 0x0, NotSerialized)
          {
            Name (RBUF, ResourceTemplate ()
            {
              I2CSerialBus ( 0x12, ControllerInitiated, 400000,AddressingMode7Bit, "\\_SB_.I2C3",,, , )
            })
            Return(RBUF)
          }
      }
      Device(TP4) {
          Name(_ADR,0)
          Name (_HID, "STK0004") 
          Name (_CID, "WITTTest") 
          Method(_CRS, 0x0, NotSerialized)
          {
            Name (RBUF, ResourceTemplate ()
            {
              I2CSerialBus ( 0x13, ControllerInitiated, 1000000,AddressingMode7Bit, "\\_SB_.I2C3",,, , )
            })
            Return(RBUF)
          }
      }
      

      在此测试中,TP1 用作测试接口 (0x7F),TP2 (0x11) 配置为标准 I2C 目标,TP3 (0x12) 配置为 fast I2C 目标,TP4 (0x13) 配置为 fast plus I2C 目标。

      注意

      将表中列出的 I2C 控制器地址更改为实际 I2C 控制器的地址。

  4. 在命令提示符窗口中,运行以下命令以从修改后的 Ssdt.asl 文件生成 Ssdt.aml 文件:

    asl.exe ssdt.asl
    
  5. 在命令提示符窗口中,运行以下命令以更新修改后的 ACPI 表:

    asl.exe /loadtable ssdt.aml
    
  6. 使用默认设置在 I2C 控制器和 Spbcx.sys 中启用驱动程序验证程序。

  7. 重新启动系统:四个设备实例应显示在 Windows HLK 的设备管理器中的“WITT 测试类”节点下。

  8. 可以通过从命令行运行 Spbcmd.exe 来验证是否正确设置了 WITT 测试环境。 Spbcmd 工具的示例命令输出如下所示,其中 7F 是测试接口的签名,01、02 和 03 是三个测试目标的签名。

    > list
    list
    Available connection ID:
    Target:53, Instance:0x0
    Target:54, Instance:0x0
    Target:55, Instance:0x0
    Target:56, Instance:0x0
    > i2c 0x0 0x21    //this step is not necessary if you are not testing multiple instances
    i2c 0x0 0x21
    Instance requested:0x0
    I2C address requested:0x21
    Found WITT test interface at \\.\RESOURCE_HUB\0000000000000035
    WITT Testing I2C address successfully changed to 0x21 for instance 0x0
    > open 53
    open 53
    Address 53 opened
    > read 53 1
    read 53 1
    1 bytes read
      7f
    > open 54
    open 54
    Address 54 opened
    > read 54 1
    read 54 1
    1 bytes read
      01
    > write 54 {01 02 03}
    write 54 {01 02 03}
    3 bytes written
    > writeread 54 {01 02 03} 2
    writeread 54 {01 02 03} 2
    5 bytes transferred
      01 01 52 00 c0
    

    使用 Open 和 Close 命令打开和关闭目标。 Read、Write 和 WriteRead 是手动 I/O 命令。

    还可以使用 List 命令列出所有可用的 I2C 测试目标 I2C: I2C 0x0 0x21。 切换 WITT 测试地址,使其以 0x21(0x21,0x22,0x23) 开头;例如,如果在 ASL 中配置了非默认 I2C 地址,则为 0。

I2C 控制器验证测试手册说明

除了在 Windows HLK Studio 中运行 I2C 控制器验证测试外,还可以手动运行它。 本部分介绍如何手动运行 WITT I2C 控制器测试。 有关每个测试的特定信息,请参阅各个测试主题。

必须从具有管理权限的命令提示符窗口运行每个测试。

将 wttlog.dll 从 \\${HCKServer}\TaefBinaries 复制到 Witttest.exe 所在的同一目录,其中 HCKServer 是 Windows HLK 服务器的名称。

若要列出所有可用的测试和命令行参数,请在命令提示符处键入 wittest.exe /?。 例如:

Witttest.exe /?
Supported command line arguments are:
/rs:<Seed>
/sm internal use of acpsim load
/fw:firmwareware iic
/i2c:address
/ins:witt instance number
/dip:device instance path
/duration:stress duration in minutes
/test:<test_id>

Example:
WITTTest.exe /test:BasicIORead


Currently the following test id's are supported:
/test:BasicIORead
/test:BasicIOWrite
/test:BasicIOSeq
/test:BasicIOKernel
/test:ClkStretch
/test:DeviceNack
/test:LockUnlock
/test:CancelRead
/test:CancelWrite
/test:CancelSeq
/test:PerfRead
/test:PerfWrite
/test:PerfSeq
/test:MultipleTargets
/test:BusRecovery
/test:Power
/test:Stress
/test:RunAll

若要使用默认值运行单个测试,请键入 Witttest.exe /test:<Testname>,其中 <Testname> 是测试的名称;例如, Witttest.exe /test:BasicIORead。 若要使用不同于默认实例 0 的实例运行此测试,请键入 Witttest.exe /test:BasicIORead /ins:0x1。 若要使用不同的测试 I2C 测试地址(而不是默认测试 I2C 地址 0x11,0x12,0x13)运行此测试,请键入 Witttest.exe /test:BasicIORead /i2c:0x21。

若要运行所有测试,请键入 Witttest.exe /test:RunAll。 此命令将遍历所有测试,并在测试序列结束时打印测试结果;例如:

*****Test run results*****

# Test cases passed:

BasicIORead
BasicIOWrite
BasicIOSeq
BasicIOKernel
ClkStretch
LockUnlock
PerfRead
PerfWrite
PerfSeq
MultipleTargets
Stress

# Test Cases passed with warning:

CancelRead
CancelWrite
CancelSeq

# Test Cases Failed:

DeviceNack

# Total:

Pass:11 Fail:1 Warn:3

JJG Technologies 提供的 WITT(Windows I2C 测试工具)

排查总线控制器测试问题