GPIO WinRT 功能和压力测试

GPIO 测试通过 WinRT API 对 GPIO 驱动程序进行功能和压力测试。 测试范围包括:

  • 使用环回验证读取、写入和中断是否在所有引脚上有效。 请参阅下面 Board.xml 的说明,以指定环回配置。
  • 验证在引脚的句柄关闭时,引脚是否恢复为默认状态。
  • 通过将枚举的引脚与配置文件进行比较来验证是否暴露预期的引脚(参见下面的 Board.xml 描述)。
  • 验证是否可以使用中断可靠地跟踪引脚的状态。
  • 验证驱动程序在压力条件下是否正常运行。 压力测试以并行方式切换两组环回引脚,并验证 Read() 返回的引脚值是否正确,以及是否在正确的时间触发中断。

测试详细信息

   
规范
  • Device.BusController.Gpio.WinRT.Discretional
平台
    支持的版本
    • Windows 10
    • Windows 10 版本 1511
    • Windows 10 版本 1607
    • Windows 10 版本 1703
    • Windows 10 版本 1709
    • Windows 10 版本 1803
    • Windows 10 版本 1809
    • Windows 10 版本 1903
    • Windows 10 的下一次更新
    预计运行时间(以分钟为单位) 5
    类别 开发
    超时(以分钟为单位) 10000
    需要重启 false
    需要特殊配置
    类型 automatic

     

    其他文档

    此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:

    运行测试

    GPIO 功能和压力测试至少需要 4 个引脚才能运行。 这些引脚编号称为 A1、A2、B1 和 B2。 A1 必须通过 1k 电阻器连接到 A2,B1 必须通过 1k 电阻器连接到 B2,如下面的示意图所示:

    GPIO 环回原理图

    电阻器可在输出争用期间保护硬件不被损坏,而且对于验证驱动模式的测试是必要的。 当你计划测试执行时,系统将提示你提供 A1、A2、B1 和 B2 的引脚编号。 如果从命令行运行测试,必须使用“Pins”运行时参数指定引脚编号,如“故障排除”部分所示。

    在测试的默认配置中,只运行上面指定的 4 个引脚。 虽然这足以覆盖控制器驱动程序,但还需要验证每个暴露的引脚是否都可用于 IO 和中断。 若要在所有引脚上运行环回测试,通过 1k 电阻器将每两个引脚连接在一起,然后修改 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot\Board.xml,如下所示:

    • 在 <Table Id="Pins"> 元素下,为每个暴露的引脚添加一个 <Row>,其中 DefaultDriveMode 指定你希望该引脚在电路板通电时所处的驱动模式。 DefaultDriveMode 必须是 Windows.Devices.Gpio.GpioPinDriveMode 枚举中的一个值。

                <Table Id="Pins">
                  <Row>
                    <Parameter Name="PinNumber">0</Parameter>
                    <Parameter Name="Enabled">True</Parameter>
                    <Parameter Name="DefaultDriveMode">Input</Parameter>
                  </Row>
                  <Row>
                    <Parameter Name="PinNumber">1</Parameter>
                    <Parameter Name="Enabled">True</Parameter>
                    <Parameter Name="DefaultDriveMode">InputPullUp</Parameter>
                  </Row>
                  <!-- By setting Enabled to False, you can also assert that a pin should NOT be accessible -->
                  <Row>
                    <Parameter Name="PinNumber">2</Parameter>
                    <Parameter Name="Enabled">False</Parameter>
                  </Row>
                </Table>
      
      
    • 在 <Table Id="Loopbacks"> 元素下,为在环回配置中连接的每一对引脚添加一个 <Row>。 例如,以下数据指定引脚 0 连接到引脚 2,引脚 1 连接到引脚 3。

                <Table Id="Loopbacks">
                  <Row>
                    <Parameter Name="Pin1">0</Parameter>
                    <Parameter Name="Pin2">2</Parameter>
                  </Row>
                  <Row>
                    <Parameter Name="Pin1">1</Parameter>
                    <Parameter Name="Pin2">3</Parameter>
                  </Row>
                </Table>
      
      

    Board-rpi.xml 和 Board-mbm.xml 在 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 中作为 Raspberry Pi 和 MinnowBoardMax 平台的示例提供。

    当测试运行时,Board.xml 必须与 Windows.Devices.LowLevel.UnitTests.dll 位于同一目录中。 如果你是通过 HLK 管理器运行测试,它会自动将 Board.xml 从 HLK 目录复制到设备上的正确位置。 如果你是在命令行上运行测试,必须自行部署 Board.xml。

    故障排除

    有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题

    建议在命令行上运行测试,以深入了解失败并快速迭代解决方案。 下面介绍如何在命令行上运行测试:

    1. 将 %programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe 复制到 c:\data\minte

    2. 将 %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot 中的所有文件复制到设备上的 c:\data。

    3. 使用 Telnet 或 ssh 登录到设备

    4. 将目录更改为 c:\data

    5. 运行

      minte\te.exe windows.devices.lowlevel.unittests.dll /p:Pins=A1,A2,B1,B2 /name:GpioTests::*
      

    命令行测试用法:

    minte\te.exe windows.devices.lowlevel.unittests.dll [/p:Pins=pin_numbers] [/name:test_name] [/p:Duration=duration]
    
    • pin_numbers - 用于测试的引脚编号,格式为 A1、A2、B1、B2,其中 A1 通过 1k 电阻器连接到 A2,B1 通过 1k 电阻器连接到 B2。 如果未指定,A1 默认为最低可用引脚编号,A2 默认为最高可用引脚编号,B1 默认为第二低可用引脚编号,B2 默认为第二高可用引脚编号。 示例:/p:Pins=4,27,5,26
    • test_name - 要运行的测试的名称,可以包含通配符。 示例:/name:GpioTests::*, /name:GpioTests::VerifySetDriveMode#metadataSet0
    • duration - 运行压力测试的时间。 示例:/p:Duration=10s(10 秒)、/p:Duration=1m(1 分钟)、/p:Duration=2h(2 小时)、/p:Duration=1d(1 天)

    若要在默认配置中运行测试,

    minte\te.exe windows.devices.lowlevel.unittests.dll /p:Pins=0,1,2,3 /name:GpioTests::*
    

    若要运行特定测试,将完整的测试名称传递给 /name 参数:

    minte\te.exe windows.devices.lowlevel.unittests.dll /p:Pins=0,1,2,3 /name:GpioTests::VerifyInterruptStateTracking
    

    若要分别在建议的 2 小时持续时间内运行压力测试,请运行:

    minte\te.exe windows.devices.lowlevel.unittests.dll /p:Pins=0,1,2,3 /name:GpioTests::* /p:Duration=2h
    

    GpioTestTool 是一个可以帮助手动排除故障的工具,它是从命令行与 GPIO 互动的简单工具。

    更多信息

    参数

    参数名称 参数说明
    锁定 格式为 <A1>、<A2>、<B1>、<B2> 的环回引脚,其中 A1 连接到 A2,B1 连接到 B2
    持续时间 指定每个压力测试的运行时间。 例如 30s、1m、1h、1d